package knorxx.framework.generator.single;
import com.google.common.base.Predicate;
import com.google.common.collect.Sets;
import java.util.HashSet;
import java.util.Set;
import knorxx.framework.generator.JavaFileWithSource;
import knorxx.framework.generator.single.annotation.NotJavaScriptGeneratable;
/**
*
* @author sj
*/
public abstract class SingleFileGenerator {
public abstract SingleResult generate(JavaFileWithSource<?> javaFile, ClassLoader classLoader,
Set<String> allowedPackages) throws SingleFileGeneratorException;
public boolean isGeneratable(Class<?> javaClass) {
return javaClass.getAnnotation(NotJavaScriptGeneratable.class) == null;
}
public Set<String> removeNotGeneratableJavaClasses(Class javaClass, Set<String> javaClassNames, final ClassLoader classLoader) {
return new HashSet<>(Sets.filter(javaClassNames, new Predicate<String>() {
@Override
public boolean apply(String javaClassName) {
try {
return isGeneratable(classLoader.loadClass(javaClassName));
} catch (ClassNotFoundException ex) {
throw new IllegalStateException("The Java class with the name '" + javaClassName + "' can't be found!", ex);
}
}
}));
}
}