@Override protected Iterable<? extends ProcessingStep> initSteps() { Filer filer = new FormattingFiler(processingEnv.getFiler()); Messager messager = processingEnv.getMessager(); Elements elements = processingEnv.getElementUtils(); Types types = processingEnv.getTypeUtils(); AndroidInjectKeyFinder keyFinder = new AndroidInjectKeyFinder(elements, messager); return ImmutableList.of( keyFinder, new AndroidMapKeyValidator(elements, types, messager), new ContributesAndroidInjectorGenerator( filer, new AndroidInjectorDescriptor.Validator(types, messager, keyFinder))); }
private MethodSpec bindAndroidInjectorFactory( AndroidInjectorDescriptor descriptor, ClassName subcomponentBuilderName) { return methodBuilder("bindAndroidInjectorFactory") .addAnnotation(Binds.class) .addAnnotation(IntoMap.class) .addAnnotation(androidInjectorMapKey(descriptor)) .addModifiers(ABSTRACT) .returns( parameterizedTypeName( AndroidInjector.Factory.class, WildcardTypeName.subtypeOf(TypeName.OBJECT))) .addParameter(subcomponentBuilderName, "builder") .build(); }
private TypeSpec subcomponent( AndroidInjectorDescriptor descriptor, ClassName subcomponentName, ClassName subcomponentBuilderName) { AnnotationSpec.Builder subcomponentAnnotation = AnnotationSpec.builder(Subcomponent.class); for (ClassName module : descriptor.modules()) { subcomponentAnnotation.addMember("modules", CodeBlock.of("$T.class", module)); } return interfaceBuilder(subcomponentName) .addModifiers(PUBLIC) .addAnnotation(subcomponentAnnotation.build()) .addAnnotations(descriptor.scopes()) .addSuperinterface(parameterizedTypeName(AndroidInjector.class, descriptor.injectedType())) .addType(subcomponentBuilder(descriptor, subcomponentBuilderName)) .build(); }
.addMember("subcomponents", "$T.class", subcomponentName) .build()) .addMethod(bindAndroidInjectorFactory(descriptor, subcomponentBuilderName)) .addType(subcomponent(descriptor, subcomponentName, subcomponentBuilderName)) .addMethod(constructorBuilder().addModifiers(PRIVATE).build()) .build();
private MethodSpec bindAndroidInjectorFactory( AndroidInjectorDescriptor descriptor, ClassName subcomponentBuilderName) { return methodBuilder("bindAndroidInjectorFactory") .addAnnotation(Binds.class) .addAnnotation(IntoMap.class) .addAnnotation(descriptor.mapKeyAnnotation()) .addModifiers(ABSTRACT) .returns( parameterizedTypeName( AndroidInjector.Factory.class, WildcardTypeName.subtypeOf(descriptor.frameworkType()))) .addParameter(subcomponentBuilderName, "builder") .build(); }
private TypeSpec subcomponent( AndroidInjectorDescriptor descriptor, ClassName subcomponentName, ClassName subcomponentBuilderName) { AnnotationSpec.Builder subcomponentAnnotation = AnnotationSpec.builder(Subcomponent.class); for (ClassName module : descriptor.modules()) { subcomponentAnnotation.addMember("modules", CodeBlock.of("$T.class", module)); } return interfaceBuilder(subcomponentName) .addModifiers(PUBLIC) .addAnnotation(subcomponentAnnotation.build()) .addAnnotations(descriptor.scopes()) .addSuperinterface(parameterizedTypeName(AndroidInjector.class, descriptor.injectedType())) .addType(subcomponentBuilder(descriptor, subcomponentBuilderName)) .build(); }
.build()) .addModifiers(PUBLIC, ABSTRACT) .addMethod(bindAndroidInjectorFactory(descriptor, subcomponentBuilderName)) .addType(subcomponent(descriptor, subcomponentName, subcomponentBuilderName)) .addMethod(constructorBuilder().addModifiers(PRIVATE).build()); generatedAnnotationSpec(elements, sourceVersion, AndroidProcessor.class)
private TypeSpec subcomponentBuilder( AndroidInjectorDescriptor descriptor, ClassName subcomponentBuilderName) { return classBuilder(subcomponentBuilderName) .addAnnotation(Builder.class) .addModifiers(PUBLIC, ABSTRACT, STATIC) .superclass(parameterizedTypeName(AndroidInjector.Builder.class, descriptor.injectedType())) .build(); }
private TypeSpec subcomponentBuilder( AndroidInjectorDescriptor descriptor, ClassName subcomponentBuilderName) { return classBuilder(subcomponentBuilderName) .addAnnotation(Builder.class) .addModifiers(PUBLIC, ABSTRACT, STATIC) .superclass(parameterizedTypeName(AndroidInjector.Builder.class, descriptor.injectedType())) .build(); }
@Override protected Iterable<? extends ProcessingStep> initSteps() { Filer filer = new FormattingFiler(processingEnv.getFiler()); Messager messager = processingEnv.getMessager(); Elements elements = processingEnv.getElementUtils(); Types types = processingEnv.getTypeUtils(); return ImmutableList.of( new AndroidMapKeyValidator(elements, types, messager), new ContributesAndroidInjectorGenerator( new AndroidInjectorDescriptor.Validator(types, elements, messager), useStringKeys(), filer, elements, processingEnv.getSourceVersion())); }