package knorxx.framework.generator;
import com.google.common.base.Optional;
import java.util.ArrayList;
import knorxx.framework.generator.reloading.ReloadPredicate;
import knorxx.framework.generator.reloading.ReloadingClassLoader;
/**
*
* @author sj
*/
public abstract class BaseGeneratorTest {
/* package */ ClassLoader getTestClassLoader() {
return Thread.currentThread().getContextClassLoader();
}
/* package */ ClassLoader getReloadingTestClassLoader() {
return new ReloadingClassLoader(getTestGenerationRoots(), getTestClassLoader(), new ArrayList(),
Optional.of(new ReloadPredicate.AllowedPackage(getClass().getPackage().getName())));
}
protected ClassLoader getCurrentClassLoader() {
return getTestClassLoader();
}
protected GenerationRoots getTestGenerationRoots() {
return GenerationRoots.Simple.createTestJava();
}
protected Class defineClass(final String name, final byte[] data) throws ClassNotFoundException {
ClassLoader classLoader = new ClassLoader(this.getClass().getClassLoader()) {
@Override
public Class<?> loadClass(String otherName) throws ClassNotFoundException {
if (otherName.equals(name)) {
return defineClass(name, data, 0, data.length);
} else {
return super.loadClass(otherName);
}
}
};
return classLoader.loadClass(name);
}
}