package fr.lteconsulting.hexa.databinding.gwt.annotation.processor; import fr.lteconsulting.hexa.databinding.annotation.ObservableGwt; import fr.lteconsulting.hexa.databinding.annotation.processor.ObservableAnnotationProcessor; import fr.lteconsulting.hexa.databinding.annotation.processor.Template; import fr.lteconsulting.hexa.databinding.gwt.annotation.Observable; import javax.annotation.processing.SupportedAnnotationTypes; import javax.annotation.processing.SupportedSourceVersion; import javax.lang.model.SourceVersion; import java.lang.annotation.Annotation; @SupportedAnnotationTypes({ "fr.lteconsulting.hexa.databinding.gwt.annotation.Observable", "fr.lteconsulting.hexa.databinding.annotation.ObservableGwt" }) @SupportedSourceVersion(SourceVersion.RELEASE_7) public class GwtObservableAnnotationProcessor extends ObservableAnnotationProcessor { private final static String TEMPLATE_CLASS = "fr/lteconsulting/hexa/databinding/gwt/annotation/processor/TemplateClass.txt"; @Override protected String generateExtraImports(ProcInfo procInfo) { String extraImports = super.generateExtraImports(procInfo); if(!extraImports.contains("fr.lteconsulting.hexa.classinfo.gwt.ClazzBundle")) { extraImports += "import fr.lteconsulting.hexa.classinfo.gwt.ClazzBundle;\n"; } if(!extraImports.contains("fr.lteconsulting.hexa.classinfo.gwt.ReflectedClasses")) { extraImports += "import fr.lteconsulting.hexa.classinfo.gwt.ReflectedClasses;\n"; } return extraImports; } @Override protected StringBuilder generateClassEntry(ProcInfo procInfo) { return super.generateClassEntry(procInfo) .append(Template.fromResource(TEMPLATE_CLASS, BEGIN_INDEX).toString()); } @Override protected int getInheritDepth(Annotation annotation) { if(annotation instanceof Observable) { Observable observable = ((Observable) annotation); int depth = observable.inheritDepth(); return observable.inherit() ? depth : (depth != Observable.INHERIT_MAX ? depth : 0); } // Duplication for legacy annotation else if(annotation instanceof ObservableGwt) { ObservableGwt observable = ((ObservableGwt) annotation); int depth = observable.inheritDepth(); return observable.inherit() ? depth : (depth != ObservableGwt.INHERIT_MAX ? depth : 0); } return -1; } @Override protected boolean canUseCopyConstructor(Annotation annotation) { if(annotation instanceof Observable) { return ((Observable)annotation).copyConstructor(); } // Duplication for legacy annotation else if(annotation instanceof ObservableGwt) { return ((ObservableGwt)annotation).copyConstructor(); } return false; } }