package roboguice.roboblender; import com.google.inject.blender.AnnotationDatabaseGenerator; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import javax.annotation.processing.ProcessingEnvironment; import javax.annotation.processing.SupportedAnnotationTypes; import javax.annotation.processing.SupportedOptions; import javax.lang.model.SourceVersion; import com.google.inject.blender.GuiceAnnotationProcessor; /** * An annotation processor that detects classes that need to receive injections. * It is a {@link GuiceAnnotationProcessor} that is triggered for all the annotations * of both Guice and RoboGuice. * @author MikeBurton * @author SNI */ @SupportedAnnotationTypes({"com.google.inject.Inject", "com.google.inject.Provides", "javax.inject.Inject", "roboguice.inject.InjectView", "roboguice.inject.InjectResource", "roboguice.inject.InjectPreference", "roboguice.inject.InjectExtra", "roboguice.inject.InjectFragment", "roboguice.event.Observes", "roboguice.inject.ContentView"}) @SupportedOptions({"guiceAnnotationDatabasePackageName", "guiceUsesFragmentUtil"}) public class RoboGuiceAnnotationProcessor extends GuiceAnnotationProcessor { public static final String TEMPLATE_ANNOTATION_DATABASE_PATH = "templates/RGAnnotationDatabaseImpl.vm"; private boolean isUsingFragmentUtil = true; @Override public synchronized void init(ProcessingEnvironment processingEnv) { super.init(processingEnv); String isUsingFragmentUtilString = processingEnv.getOptions().get("guiceUsesFragmentUtil"); if (isUsingFragmentUtilString!=null) { isUsingFragmentUtil = Boolean.parseBoolean(isUsingFragmentUtilString); } } @Override public SourceVersion getSupportedSourceVersion() { //http://stackoverflow.com/a/8188860/693752 return SourceVersion.latest(); } @Override protected AnnotationDatabaseGenerator createAnnotationDatabaseGenerator() { return new RoboGuiceAnnotationDatabaseGenerator(); } @Override protected void configure(AnnotationDatabaseGenerator annotationDatabaseGenerator) { super.configure(annotationDatabaseGenerator); annotationDatabaseGenerator.setTemplatePath(TEMPLATE_ANNOTATION_DATABASE_PATH); ((RoboGuiceAnnotationDatabaseGenerator)annotationDatabaseGenerator).setUsingFragmentUtil(isUsingFragmentUtil); } }