diff --git a/java/dagger/internal/codegen/base/ComponentAnnotation.java b/java/dagger/internal/codegen/base/ComponentAnnotation.java index 34550c93529..c9b3580c1c9 100644 --- a/java/dagger/internal/codegen/base/ComponentAnnotation.java +++ b/java/dagger/internal/codegen/base/ComponentAnnotation.java @@ -17,19 +17,21 @@ package dagger.internal.codegen.base; import static com.google.auto.common.AnnotationMirrors.getAnnotationValue; +import static com.google.auto.common.MoreElements.asType; import static com.google.auto.common.MoreTypes.asTypeElements; import static com.google.auto.common.MoreTypes.isTypeOf; import static dagger.internal.codegen.base.MoreAnnotationValues.asAnnotationValues; import static dagger.internal.codegen.extension.DaggerStreams.toImmutableList; +import static dagger.internal.codegen.javapoet.TypeNames.PRODUCER_MODULE; import static dagger.internal.codegen.langmodel.DaggerElements.getAnyAnnotation; import com.google.auto.value.AutoValue; import com.google.auto.value.extension.memoized.Memoized; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; +import com.squareup.javapoet.ClassName; import dagger.Component; import dagger.Subcomponent; -import dagger.producers.ProducerModule; import dagger.producers.ProductionComponent; import dagger.producers.ProductionSubcomponent; import java.lang.annotation.Annotation; @@ -288,7 +290,8 @@ public boolean isSubcomponent() { @Override public boolean isProduction() { - return moduleAnnotation().annotationClass().equals(ProducerModule.class); + return ClassName.get(asType(moduleAnnotation().annotation().getAnnotationType().asElement())) + .equals(PRODUCER_MODULE); } @Override diff --git a/java/dagger/internal/codegen/base/ModuleAnnotation.java b/java/dagger/internal/codegen/base/ModuleAnnotation.java index e6071dd73bd..16887368238 100644 --- a/java/dagger/internal/codegen/base/ModuleAnnotation.java +++ b/java/dagger/internal/codegen/base/ModuleAnnotation.java @@ -47,17 +47,9 @@ public abstract class ModuleAnnotation { // instance. public abstract AnnotationMirror annotation(); - /** The type of the annotation. */ - @Memoized - public Class annotationClass() { - try { - return Class.forName( - asTypeElement(annotation().getAnnotationType()).getQualifiedName().toString()); - } catch (ClassNotFoundException e) { - AssertionError assertionError = new AssertionError(); - assertionError.initCause(e); - throw assertionError; - } + /** The simple name of the annotation. */ + public String annotationName() { + return annotation().getAnnotationType().asElement().getSimpleName().toString(); } /** diff --git a/java/dagger/internal/codegen/binding/BindingDeclarationFormatter.java b/java/dagger/internal/codegen/binding/BindingDeclarationFormatter.java index d88dd4b7b42..84764973b7b 100644 --- a/java/dagger/internal/codegen/binding/BindingDeclarationFormatter.java +++ b/java/dagger/internal/codegen/binding/BindingDeclarationFormatter.java @@ -118,7 +118,7 @@ private String formatSubcomponentDeclaration(SubcomponentDeclaration subcomponen return String.format( "@%s(subcomponents = %s) for %s", - subcomponentDeclaration.moduleAnnotation().annotationClass().getSimpleName(), + subcomponentDeclaration.moduleAnnotation().annotationName(), annotationValue, subcomponentDeclaration.contributingModule().get()); } diff --git a/java/dagger/internal/codegen/javapoet/TypeNames.java b/java/dagger/internal/codegen/javapoet/TypeNames.java index 9301dbc844c..3a3d5c9b326 100644 --- a/java/dagger/internal/codegen/javapoet/TypeNames.java +++ b/java/dagger/internal/codegen/javapoet/TypeNames.java @@ -34,6 +34,7 @@ import dagger.internal.SingleCheck; import dagger.producers.Produced; import dagger.producers.Producer; +import dagger.producers.ProducerModule; import dagger.producers.internal.AbstractProducer; import dagger.producers.internal.DependencyMethodProducer; import dagger.producers.internal.MapOfProducedProducer; @@ -74,6 +75,7 @@ public final class TypeNames { public static final ClassName PRODUCED = ClassName.get(Produced.class); public static final ClassName PRODUCER = ClassName.get(Producer.class); public static final ClassName PRODUCERS = ClassName.get(Producers.class); + public static final ClassName PRODUCER_MODULE = ClassName.get(ProducerModule.class); public static final ClassName PRODUCTION_COMPONENT_MONITOR_FACTORY = ClassName.get(ProductionComponentMonitor.Factory.class); public static final ClassName PROVIDER = ClassName.get(Provider.class); diff --git a/java/dagger/internal/codegen/validation/BindsInstanceMethodValidator.java b/java/dagger/internal/codegen/validation/BindsInstanceMethodValidator.java index 937bc02447a..6d144bd2853 100644 --- a/java/dagger/internal/codegen/validation/BindsInstanceMethodValidator.java +++ b/java/dagger/internal/codegen/validation/BindsInstanceMethodValidator.java @@ -83,6 +83,6 @@ protected Optional bindingElementType() { private static String didYouMeanBinds(ModuleAnnotation moduleAnnotation) { return String.format( "@BindsInstance methods should not be included in @%ss. Did you mean @Binds?", - moduleAnnotation.annotationClass().getSimpleName()); + moduleAnnotation.annotationName()); } } diff --git a/java/dagger/internal/codegen/validation/ModuleValidator.java b/java/dagger/internal/codegen/validation/ModuleValidator.java index 6dd46f9e869..0427859b004 100644 --- a/java/dagger/internal/codegen/validation/ModuleValidator.java +++ b/java/dagger/internal/codegen/validation/ModuleValidator.java @@ -620,7 +620,7 @@ private void validateSelfCycles( @Override public Void visitType(TypeMirror includedModule, Void aVoid) { if (MoreTypes.equivalence().equivalent(module.asType(), includedModule)) { - String moduleKind = moduleAnnotation.annotationClass().getSimpleName(); + String moduleKind = moduleAnnotation.annotationName(); builder.addError( String.format("@%s cannot include themselves.", moduleKind), module,