package com.brightgenerous.injection; import com.brightgenerous.lang.Args; public class PackageGenerateImplResolver extends GenerateImplResolver { private static final long serialVersionUID = -6631275058658970787L; private final Class<?> clazz; private volatile boolean loaded; private volatile String pkgName; // // ( ',_>`).oO( it is recommended that to use this, instead of #PackageGenerateImplResolver(Package). // public PackageGenerateImplResolver(Class<?> clazz) { Args.notNull(clazz, "clazz"); this.clazz = clazz; } // // ( ',_>`).oO( it would be troublesome that should prepare the Package instance..., Surely not ? // @Deprecated public PackageGenerateImplResolver(Package pkg) { Args.notNull(pkg, "pkg"); clazz = null; pkgName = getPackageName(pkg); loaded = true; } @Override protected String getImplName(Class<?> clazz) { if (clazz == null) { return null; } String pkgName = getPackageName(); if (pkgName == null) { return null; } String pName = getPackageName(clazz); if (pName == null) { return null; } return clazz.getName().replace(pName, pkgName); } protected String getPackageName() { if (!loaded) { synchronized (this) { if (!loaded) { pkgName = getPackageName(clazz); loaded = true; } } } return pkgName; } protected String getPackageName(Class<?> clazz) { if (clazz == null) { return null; } return getPackageName(clazz.getPackage()); } protected String getPackageName(Package pkg) { if (pkg == null) { return null; } return pkg.getName(); } }