com.massfords.jaxb.CreateBaseVisitorClass Maven / Gradle / Ivy
package com.massfords.jaxb;
import com.sun.codemodel.JClass;
import com.sun.codemodel.JDefinedClass;
import com.sun.codemodel.JExpr;
import com.sun.codemodel.JMethod;
import com.sun.codemodel.JMod;
import com.sun.codemodel.JPackage;
import com.sun.codemodel.JTypeVar;
import com.sun.tools.xjc.outline.ClassOutline;
import com.sun.tools.xjc.outline.Outline;
import java.util.Set;
import java.util.function.Function;
import static com.massfords.jaxb.ClassDiscoverer.allConcreteClasses;
/**
* Creates a no-op implementation of the Visitor interface. After creating the class
* a visit method is added for each of the beans that were generated.
*
* @author markford
*/
class CreateBaseVisitorClass extends CodeCreator {
private final JDefinedClass visitor;
private final Function visitMethodNamer;
CreateBaseVisitorClass(JDefinedClass visitor, Outline outline,
JPackage jPackage,
Function visitMethodNamer) {
super(outline, jPackage);
this.visitor = visitor;
this.visitMethodNamer = visitMethodNamer;
}
@Override
protected void run(Set classes, Set directClasses) {
JDefinedClass _class = getOutline().getClassFactory().createClass(getPackage(), "BaseVisitor", null);
setOutput(_class);
final JTypeVar returnType = _class.generify("R");
final JTypeVar exceptionType = _class.generify("E", Throwable.class);
final JClass narrowedVisitor = visitor.narrow(returnType, exceptionType);
getOutput()._implements(narrowedVisitor);
for(JClass jc : allConcreteClasses(classes, directClasses)) {
implementVisitMethod(returnType, exceptionType, jc);
}
}
private void implementVisitMethod(JTypeVar returnType, JTypeVar exceptionType, JClass implClass) {
JMethod _method;
String methodName = visitMethodNamer.apply(implClass.name());
_method = getOutput().method(JMod.PUBLIC, returnType, methodName);
_method._throws(exceptionType);
_method.param(implClass, "aBean");
_method.body()._return(JExpr._null());
_method.annotate(Override.class);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy