aboutsummaryrefslogtreecommitdiff
path: root/java/dagger/internal/codegen/writing
diff options
context:
space:
mode:
Diffstat (limited to 'java/dagger/internal/codegen/writing')
-rw-r--r--java/dagger/internal/codegen/writing/AnnotationCreatorGenerator.java12
-rw-r--r--java/dagger/internal/codegen/writing/AssistedFactoryBindingExpression.java2
-rw-r--r--java/dagger/internal/codegen/writing/ComponentBindingExpressions.java76
-rw-r--r--java/dagger/internal/codegen/writing/ComponentImplementation.java5
-rw-r--r--java/dagger/internal/codegen/writing/DependencyMethodProviderCreationExpression.java2
-rw-r--r--java/dagger/internal/codegen/writing/FactoryGenerator.java25
-rw-r--r--java/dagger/internal/codegen/writing/HjarSourceFileGenerator.java14
-rw-r--r--java/dagger/internal/codegen/writing/InaccessibleMapKeyProxyGenerator.java16
-rw-r--r--java/dagger/internal/codegen/writing/MembersInjectorGenerator.java16
-rw-r--r--java/dagger/internal/codegen/writing/ModuleProxies.java14
-rw-r--r--java/dagger/internal/codegen/writing/ProducerFactoryGenerator.java10
11 files changed, 116 insertions, 76 deletions
diff --git a/java/dagger/internal/codegen/writing/AnnotationCreatorGenerator.java b/java/dagger/internal/codegen/writing/AnnotationCreatorGenerator.java
index fa3a16cac..96e6340af 100644
--- a/java/dagger/internal/codegen/writing/AnnotationCreatorGenerator.java
+++ b/java/dagger/internal/codegen/writing/AnnotationCreatorGenerator.java
@@ -39,6 +39,7 @@ import com.squareup.javapoet.TypeSpec;
import dagger.internal.codegen.base.SourceFileGenerator;
import dagger.internal.codegen.langmodel.DaggerElements;
import java.util.LinkedHashSet;
+import java.util.Optional;
import java.util.Set;
import javax.annotation.processing.Filer;
import javax.inject.Inject;
@@ -87,13 +88,18 @@ public class AnnotationCreatorGenerator extends SourceFileGenerator<TypeElement>
}
@Override
+ public ClassName nameGeneratedType(TypeElement annotationType) {
+ return getAnnotationCreatorClassName(annotationType);
+ }
+
+ @Override
public Element originatingElement(TypeElement annotationType) {
return annotationType;
}
@Override
- public ImmutableList<TypeSpec.Builder> topLevelTypes(TypeElement annotationType) {
- ClassName generatedTypeName = getAnnotationCreatorClassName(annotationType);
+ public Optional<TypeSpec.Builder> write(TypeElement annotationType) {
+ ClassName generatedTypeName = nameGeneratedType(annotationType);
TypeSpec.Builder annotationCreatorBuilder =
classBuilder(generatedTypeName)
.addModifiers(PUBLIC, FINAL)
@@ -103,7 +109,7 @@ public class AnnotationCreatorGenerator extends SourceFileGenerator<TypeElement>
annotationCreatorBuilder.addMethod(buildCreateMethod(generatedTypeName, annotationElement));
}
- return ImmutableList.of(annotationCreatorBuilder);
+ return Optional.of(annotationCreatorBuilder);
}
private MethodSpec buildCreateMethod(ClassName generatedTypeName, TypeElement annotationElement) {
diff --git a/java/dagger/internal/codegen/writing/AssistedFactoryBindingExpression.java b/java/dagger/internal/codegen/writing/AssistedFactoryBindingExpression.java
index d90ab71f1..d0c481c7a 100644
--- a/java/dagger/internal/codegen/writing/AssistedFactoryBindingExpression.java
+++ b/java/dagger/internal/codegen/writing/AssistedFactoryBindingExpression.java
@@ -83,7 +83,7 @@ final class AssistedFactoryBindingExpression extends SimpleInvocationBindingExpr
private TypeSpec anonymousfactoryImpl(Expression assistedInjectionExpression) {
TypeElement factory = asType(binding.bindingElement().get());
DeclaredType factoryType = asDeclared(binding.key().type());
- ExecutableElement factoryMethod = assistedFactoryMethod(factory, elements);
+ ExecutableElement factoryMethod = assistedFactoryMethod(factory, elements, types);
// We can't use MethodSpec.overriding directly because we need to control the parameter names.
MethodSpec factoryOverride = MethodSpec.overriding(factoryMethod, factoryType, types).build();
diff --git a/java/dagger/internal/codegen/writing/ComponentBindingExpressions.java b/java/dagger/internal/codegen/writing/ComponentBindingExpressions.java
index dc15c998b..5f1f0bdd8 100644
--- a/java/dagger/internal/codegen/writing/ComponentBindingExpressions.java
+++ b/java/dagger/internal/codegen/writing/ComponentBindingExpressions.java
@@ -212,14 +212,19 @@ public final class ComponentBindingExpressions {
public MethodSpec getComponentMethod(ComponentMethodDescriptor componentMethod) {
checkArgument(componentMethod.dependencyRequest().isPresent());
BindingRequest request = bindingRequest(componentMethod.dependencyRequest().get());
- return MethodSpec.overriding(
+ MethodSpec.Builder method =
+ MethodSpec.overriding(
componentMethod.methodElement(),
MoreTypes.asDeclared(graph.componentTypeElement().asType()),
- types)
- .addCode(
- getBindingExpression(request)
- .getComponentMethodImplementation(componentMethod, componentImplementation))
- .build();
+ types);
+ // Even though this is not used if the method is abstract, we need to invoke the binding
+ // expression in order for the side of effect of the method being added to the
+ // ComponentImplementation
+ CodeBlock methodBody =
+ getBindingExpression(request)
+ .getComponentMethodImplementation(componentMethod, componentImplementation);
+
+ return method.addCode(methodBody).build();
}
/** Returns the {@link BindingExpression} for the given {@link BindingRequest}. */
@@ -455,7 +460,8 @@ public final class ComponentBindingExpressions {
private BindingExpression providerBindingExpression(ContributionBinding binding) {
if (binding.kind().equals(DELEGATE) && !needsCaching(binding)) {
return new DelegateBindingExpression(binding, RequestKind.PROVIDER, this, types, elements);
- } else if (isFastInit()
+ } else if (compilerOptions.fastInit(
+ topLevelComponentImplementation.componentDescriptor().typeElement())
&& frameworkInstanceCreationExpression(binding).useInnerSwitchingProvider()
&& !(instanceBindingExpression(binding)
instanceof DerivedFromFrameworkInstanceBindingExpression)) {
@@ -487,27 +493,24 @@ public final class ComponentBindingExpressions {
/**
* Returns a binding expression for {@link RequestKind#INSTANCE} requests.
+ *
+ * <p>If there is a direct expression (not calling {@link Provider#get()}) we can use for an
+ * instance of this binding, return it, wrapped in a method if the binding {@linkplain
+ * #needsCaching(ContributionBinding) needs to be cached} or the expression has dependencies.
+ *
+ * <p>In fastInit mode, we can use direct expressions unless the binding needs to be cached.
*/
private BindingExpression instanceBindingExpression(ContributionBinding binding) {
Optional<BindingExpression> maybeDirectInstanceExpression =
unscopedDirectInstanceExpression(binding);
- if (maybeDirectInstanceExpression.isPresent()) {
- // If this is the case where we don't need to use Provider#get() because there's no caching
- // and it isn't an assisted factory, or because we're in fastInit mode (since fastInit avoids
- // using Providers), we can try to use the direct expression, possibly wrapped in a method
- // if necessary (e.g. it has dependencies).
- if ((!needsCaching(binding) && binding.kind() != BindingKind.ASSISTED_FACTORY)
- || isFastInit()) {
- BindingExpression directInstanceExpression = maybeDirectInstanceExpression.get();
- // While this can't require caching in default mode, if we're in fastInit mode and we need
- // caching we also need to wrap it in a method.
- return directInstanceExpression.requiresMethodEncapsulation() || needsCaching(binding)
- ? wrapInMethod(
- binding,
- bindingRequest(binding.key(), RequestKind.INSTANCE),
- directInstanceExpression)
- : directInstanceExpression;
- }
+ if (canUseDirectInstanceExpression(binding) && maybeDirectInstanceExpression.isPresent()) {
+ BindingExpression directInstanceExpression = maybeDirectInstanceExpression.get();
+ return directInstanceExpression.requiresMethodEncapsulation() || needsCaching(binding)
+ ? wrapInMethod(
+ binding,
+ bindingRequest(binding.key(), RequestKind.INSTANCE),
+ directInstanceExpression)
+ : directInstanceExpression;
}
return new DerivedFromFrameworkInstanceBindingExpression(
binding.key(), FrameworkType.PROVIDER, RequestKind.INSTANCE, this, types);
@@ -607,12 +610,27 @@ public final class ComponentBindingExpressions {
* MapFactory} or {@code SetFactory}.
*/
private boolean useStaticFactoryCreation(ContributionBinding binding) {
- return !isFastInit()
+ return !compilerOptions.fastInit(
+ topLevelComponentImplementation.componentDescriptor().typeElement())
|| binding.kind().equals(MULTIBOUND_MAP)
|| binding.kind().equals(MULTIBOUND_SET);
}
/**
+ * Returns {@code true} if we can use a direct (not {@code Provider.get()}) expression for this
+ * binding. If the binding doesn't {@linkplain #needsCaching(ContributionBinding) need to be
+ * cached} and the binding is not an {@link BindingKind.ASSISTED_FACTORY}, we can.
+ *
+ * <p>In fastInit mode, we can use a direct expression even if the binding {@linkplain
+ * #needsCaching(ContributionBinding) needs to be cached}.
+ */
+ private boolean canUseDirectInstanceExpression(ContributionBinding binding) {
+ return (!needsCaching(binding) && binding.kind() != BindingKind.ASSISTED_FACTORY)
+ || compilerOptions.fastInit(
+ topLevelComponentImplementation.componentDescriptor().typeElement());
+ }
+
+ /**
* Returns a binding expression that uses a given one as the body of a method that users call. If
* a component provision method matches it, it will be the method implemented. If it does not
* match a component provision method and the binding is modifiable, then a new public modifiable
@@ -672,7 +690,8 @@ public final class ComponentBindingExpressions {
private MethodImplementationStrategy methodImplementationStrategy(
ContributionBinding binding, BindingRequest request) {
- if (isFastInit()) {
+ if (compilerOptions.fastInit(
+ topLevelComponentImplementation.componentDescriptor().typeElement())) {
if (request.isRequestKind(RequestKind.PROVIDER)) {
return MethodImplementationStrategy.SINGLE_CHECK;
} else if (request.isRequestKind(RequestKind.INSTANCE) && needsCaching(binding)) {
@@ -699,9 +718,4 @@ public final class ComponentBindingExpressions {
}
return true;
}
-
- private boolean isFastInit() {
- return compilerOptions.fastInit(
- topLevelComponentImplementation.componentDescriptor().typeElement());
- }
}
diff --git a/java/dagger/internal/codegen/writing/ComponentImplementation.java b/java/dagger/internal/codegen/writing/ComponentImplementation.java
index a09620e87..ef6912460 100644
--- a/java/dagger/internal/codegen/writing/ComponentImplementation.java
+++ b/java/dagger/internal/codegen/writing/ComponentImplementation.java
@@ -276,10 +276,7 @@ public final class ComponentImplementation {
"%s is not a child component of %s",
childDescriptor.typeElement(),
componentDescriptor().typeElement());
- // TODO(erichang): Hacky fix to shorten the suffix if we're too deeply
- // nested to save on file name length. 2 chosen arbitrarily.
- String suffix = name.simpleNames().size() > 2 ? "I" : "Impl";
- return name.nestedClass(subcomponentNames.get(childDescriptor) + suffix);
+ return name.nestedClass(subcomponentNames.get(childDescriptor) + "Impl");
}
/**
diff --git a/java/dagger/internal/codegen/writing/DependencyMethodProviderCreationExpression.java b/java/dagger/internal/codegen/writing/DependencyMethodProviderCreationExpression.java
index af5d45e66..5a40c0206 100644
--- a/java/dagger/internal/codegen/writing/DependencyMethodProviderCreationExpression.java
+++ b/java/dagger/internal/codegen/writing/DependencyMethodProviderCreationExpression.java
@@ -96,7 +96,7 @@ final class DependencyMethodProviderCreationExpression
COMPONENT_PROVISION_FACTORY,
classBuilder(factoryClassName())
.addSuperinterface(providerOf(keyType))
- .addModifiers(PRIVATE, STATIC, FINAL)
+ .addModifiers(PRIVATE, STATIC)
.addField(dependencyClassName, dependency().variableName(), PRIVATE, FINAL)
.addMethod(
constructorBuilder()
diff --git a/java/dagger/internal/codegen/writing/FactoryGenerator.java b/java/dagger/internal/codegen/writing/FactoryGenerator.java
index 03ad27cbb..70edd1a95 100644
--- a/java/dagger/internal/codegen/writing/FactoryGenerator.java
+++ b/java/dagger/internal/codegen/writing/FactoryGenerator.java
@@ -97,27 +97,32 @@ public final class FactoryGenerator extends SourceFileGenerator<ProvisionBinding
}
@Override
+ public ClassName nameGeneratedType(ProvisionBinding binding) {
+ return generatedClassNameForBinding(binding);
+ }
+
+ @Override
public Element originatingElement(ProvisionBinding binding) {
// we only create factories for bindings that have a binding element
return binding.bindingElement().get();
}
@Override
- public ImmutableList<TypeSpec.Builder> topLevelTypes(ProvisionBinding binding) {
+ public Optional<TypeSpec.Builder> write(ProvisionBinding binding) {
// We don't want to write out resolved bindings -- we want to write out the generic version.
checkArgument(!binding.unresolved().isPresent());
checkArgument(binding.bindingElement().isPresent());
if (binding.factoryCreationStrategy().equals(DELEGATE)) {
- return ImmutableList.of();
+ return Optional.empty();
}
- return ImmutableList.of(factoryBuilder(binding));
+ return Optional.of(factoryBuilder(binding));
}
private TypeSpec.Builder factoryBuilder(ProvisionBinding binding) {
TypeSpec.Builder factoryBuilder =
- classBuilder(generatedClassNameForBinding(binding))
+ classBuilder(nameGeneratedType(binding))
.addModifiers(PUBLIC, FINAL)
.addTypeVariables(bindingTypeElementTypeVariableNames(binding));
@@ -189,9 +194,8 @@ public final class FactoryGenerator extends SourceFileGenerator<ProvisionBinding
switch (binding.factoryCreationStrategy()) {
case SINGLETON_INSTANCE:
FieldSpec.Builder instanceFieldBuilder =
- FieldSpec.builder(
- generatedClassNameForBinding(binding), "INSTANCE", PRIVATE, STATIC, FINAL)
- .initializer("new $T()", generatedClassNameForBinding(binding));
+ FieldSpec.builder(nameGeneratedType(binding), "INSTANCE", PRIVATE, STATIC, FINAL)
+ .initializer("new $T()", nameGeneratedType(binding));
if (!bindingTypeElementTypeVariableNames(binding).isEmpty()) {
// If the factory has type parameters, ignore them in the field declaration & initializer
@@ -199,8 +203,7 @@ public final class FactoryGenerator extends SourceFileGenerator<ProvisionBinding
createMethodBuilder.addAnnotation(suppressWarnings(UNCHECKED));
}
- ClassName instanceHolderName =
- generatedClassNameForBinding(binding).nestedClass("InstanceHolder");
+ ClassName instanceHolderName = nameGeneratedType(binding).nestedClass("InstanceHolder");
createMethodBuilder.addStatement("return $T.INSTANCE", instanceHolderName);
factoryBuilder.addType(
TypeSpec.classBuilder(instanceHolderName)
@@ -245,7 +248,7 @@ public final class FactoryGenerator extends SourceFileGenerator<ProvisionBinding
request ->
frameworkTypeUsageStatement(
CodeBlock.of("$N", frameworkFields.get(request)), request.kind()),
- generatedClassNameForBinding(binding),
+ nameGeneratedType(binding),
moduleParameter(binding).map(module -> CodeBlock.of("$N", module)),
compilerOptions,
metadataUtil);
@@ -262,7 +265,7 @@ public final class FactoryGenerator extends SourceFileGenerator<ProvisionBinding
.addCode(
InjectionSiteMethod.invokeAll(
binding.injectionSites(),
- generatedClassNameForBinding(binding),
+ nameGeneratedType(binding),
instance,
binding.key().type(),
frameworkFieldUsages(binding.dependencies(), frameworkFields)::get,
diff --git a/java/dagger/internal/codegen/writing/HjarSourceFileGenerator.java b/java/dagger/internal/codegen/writing/HjarSourceFileGenerator.java
index d4dbde794..5a4b6f132 100644
--- a/java/dagger/internal/codegen/writing/HjarSourceFileGenerator.java
+++ b/java/dagger/internal/codegen/writing/HjarSourceFileGenerator.java
@@ -19,15 +19,14 @@ package dagger.internal.codegen.writing;
import static com.squareup.javapoet.MethodSpec.constructorBuilder;
import static com.squareup.javapoet.MethodSpec.methodBuilder;
import static com.squareup.javapoet.TypeSpec.classBuilder;
-import static dagger.internal.codegen.extension.DaggerStreams.toImmutableList;
import static javax.lang.model.element.Modifier.PRIVATE;
-import com.google.common.collect.ImmutableList;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.FieldSpec;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeSpec;
import dagger.internal.codegen.base.SourceFileGenerator;
+import java.util.Optional;
import javax.lang.model.element.Element;
import javax.lang.model.element.Modifier;
@@ -48,15 +47,18 @@ public final class HjarSourceFileGenerator<T> extends SourceFileGenerator<T> {
}
@Override
+ public ClassName nameGeneratedType(T input) {
+ return delegate.nameGeneratedType(input);
+ }
+
+ @Override
public Element originatingElement(T input) {
return delegate.originatingElement(input);
}
@Override
- public ImmutableList<TypeSpec.Builder> topLevelTypes(T input) {
- return delegate.topLevelTypes(input).stream()
- .map(completeType -> skeletonType(completeType.build()))
- .collect(toImmutableList());
+ public Optional<TypeSpec.Builder> write(T input) {
+ return delegate.write(input).map(completeType -> skeletonType(completeType.build()));
}
private TypeSpec.Builder skeletonType(TypeSpec completeType) {
diff --git a/java/dagger/internal/codegen/writing/InaccessibleMapKeyProxyGenerator.java b/java/dagger/internal/codegen/writing/InaccessibleMapKeyProxyGenerator.java
index 889f8985c..d52735963 100644
--- a/java/dagger/internal/codegen/writing/InaccessibleMapKeyProxyGenerator.java
+++ b/java/dagger/internal/codegen/writing/InaccessibleMapKeyProxyGenerator.java
@@ -22,13 +22,14 @@ import static javax.lang.model.element.Modifier.FINAL;
import static javax.lang.model.element.Modifier.PRIVATE;
import static javax.lang.model.element.Modifier.PUBLIC;
-import com.google.common.collect.ImmutableList;
+import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.TypeSpec;
import dagger.internal.codegen.base.SourceFileGenerator;
import dagger.internal.codegen.binding.ContributionBinding;
import dagger.internal.codegen.binding.MapKeys;
import dagger.internal.codegen.langmodel.DaggerElements;
import dagger.internal.codegen.langmodel.DaggerTypes;
+import java.util.Optional;
import javax.annotation.processing.Filer;
import javax.inject.Inject;
import javax.lang.model.SourceVersion;
@@ -52,21 +53,24 @@ public final class InaccessibleMapKeyProxyGenerator
}
@Override
+ public ClassName nameGeneratedType(ContributionBinding binding) {
+ return MapKeys.mapKeyProxyClassName(binding);
+ }
+
+ @Override
public Element originatingElement(ContributionBinding binding) {
// a map key is only ever present on bindings that have a binding element
return binding.bindingElement().get();
}
@Override
- public ImmutableList<TypeSpec.Builder> topLevelTypes(ContributionBinding binding) {
+ public Optional<TypeSpec.Builder> write(ContributionBinding binding) {
return MapKeys.mapKeyFactoryMethod(binding, types, elements)
.map(
method ->
- classBuilder(MapKeys.mapKeyProxyClassName(binding))
+ classBuilder(nameGeneratedType(binding))
.addModifiers(PUBLIC, FINAL)
.addMethod(constructorBuilder().addModifiers(PRIVATE).build())
- .addMethod(method))
- .map(ImmutableList::of)
- .orElse(ImmutableList.of());
+ .addMethod(method));
}
}
diff --git a/java/dagger/internal/codegen/writing/MembersInjectorGenerator.java b/java/dagger/internal/codegen/writing/MembersInjectorGenerator.java
index 8630ce6ca..df618b070 100644
--- a/java/dagger/internal/codegen/writing/MembersInjectorGenerator.java
+++ b/java/dagger/internal/codegen/writing/MembersInjectorGenerator.java
@@ -61,6 +61,7 @@ import dagger.internal.codegen.langmodel.DaggerTypes;
import dagger.internal.codegen.writing.InjectionMethods.InjectionSiteMethod;
import dagger.model.DependencyRequest;
import java.util.Map.Entry;
+import java.util.Optional;
import javax.annotation.processing.Filer;
import javax.inject.Inject;
import javax.lang.model.SourceVersion;
@@ -86,15 +87,20 @@ public final class MembersInjectorGenerator extends SourceFileGenerator<MembersI
}
@Override
+ public ClassName nameGeneratedType(MembersInjectionBinding binding) {
+ return membersInjectorNameForType(binding.membersInjectedType());
+ }
+
+ @Override
public Element originatingElement(MembersInjectionBinding binding) {
return binding.membersInjectedType();
}
@Override
- public ImmutableList<TypeSpec.Builder> topLevelTypes(MembersInjectionBinding binding) {
+ public Optional<TypeSpec.Builder> write(MembersInjectionBinding binding) {
// Empty members injection bindings are special and don't need source files.
if (binding.injectionSites().isEmpty()) {
- return ImmutableList.of();
+ return Optional.empty();
}
// Members injectors for classes with no local injection sites and no @Inject
@@ -102,7 +108,7 @@ public final class MembersInjectorGenerator extends SourceFileGenerator<MembersI
if (!binding.hasLocalInjectionSites()
&& injectedConstructors(binding.membersInjectedType()).isEmpty()
&& assistedInjectedConstructors(binding.membersInjectedType()).isEmpty()) {
- return ImmutableList.of();
+ return Optional.empty();
}
@@ -112,7 +118,7 @@ public final class MembersInjectorGenerator extends SourceFileGenerator<MembersI
"tried to generate a MembersInjector for a binding of a resolved generic type: %s",
binding);
- ClassName generatedTypeName = membersInjectorNameForType(binding.membersInjectedType());
+ ClassName generatedTypeName = nameGeneratedType(binding);
ImmutableList<TypeVariableName> typeParameters = bindingTypeElementTypeVariableNames(binding);
TypeSpec.Builder injectorTypeBuilder =
classBuilder(generatedTypeName)
@@ -216,6 +222,6 @@ public final class MembersInjectorGenerator extends SourceFileGenerator<MembersI
gwtIncompatibleAnnotation(binding).ifPresent(injectorTypeBuilder::addAnnotation);
- return ImmutableList.of(injectorTypeBuilder);
+ return Optional.of(injectorTypeBuilder);
}
}
diff --git a/java/dagger/internal/codegen/writing/ModuleProxies.java b/java/dagger/internal/codegen/writing/ModuleProxies.java
index 6d174f824..fcd9b56e5 100644
--- a/java/dagger/internal/codegen/writing/ModuleProxies.java
+++ b/java/dagger/internal/codegen/writing/ModuleProxies.java
@@ -27,7 +27,6 @@ import static javax.lang.model.element.Modifier.PUBLIC;
import static javax.lang.model.element.Modifier.STATIC;
import static javax.lang.model.util.ElementFilter.constructorsIn;
-import com.google.common.collect.ImmutableList;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.CodeBlock;
import com.squareup.javapoet.TypeSpec;
@@ -79,20 +78,25 @@ public final class ModuleProxies {
}
@Override
+ public ClassName nameGeneratedType(TypeElement moduleElement) {
+ return moduleProxies.constructorProxyTypeName(moduleElement);
+ }
+
+ @Override
public Element originatingElement(TypeElement moduleElement) {
return moduleElement;
}
@Override
- public ImmutableList<TypeSpec.Builder> topLevelTypes(TypeElement moduleElement) {
+ public Optional<TypeSpec.Builder> write(TypeElement moduleElement) {
ModuleKind.checkIsModule(moduleElement, metadataUtil);
return moduleProxies.nonPublicNullaryConstructor(moduleElement).isPresent()
- ? ImmutableList.of(buildProxy(moduleElement))
- : ImmutableList.of();
+ ? Optional.of(buildProxy(moduleElement))
+ : Optional.empty();
}
private TypeSpec.Builder buildProxy(TypeElement moduleElement) {
- return classBuilder(moduleProxies.constructorProxyTypeName(moduleElement))
+ return classBuilder(nameGeneratedType(moduleElement))
.addModifiers(PUBLIC, FINAL)
.addMethod(constructorBuilder().addModifiers(PRIVATE).build())
.addMethod(
diff --git a/java/dagger/internal/codegen/writing/ProducerFactoryGenerator.java b/java/dagger/internal/codegen/writing/ProducerFactoryGenerator.java
index a013be940..5e5292359 100644
--- a/java/dagger/internal/codegen/writing/ProducerFactoryGenerator.java
+++ b/java/dagger/internal/codegen/writing/ProducerFactoryGenerator.java
@@ -103,6 +103,10 @@ public final class ProducerFactoryGenerator extends SourceFileGenerator<Producti
this.keyFactory = keyFactory;
}
+ @Override
+ public ClassName nameGeneratedType(ProductionBinding binding) {
+ return generatedClassNameForBinding(binding);
+ }
@Override
public Element originatingElement(ProductionBinding binding) {
@@ -111,7 +115,7 @@ public final class ProducerFactoryGenerator extends SourceFileGenerator<Producti
}
@Override
- public ImmutableList<TypeSpec.Builder> topLevelTypes(ProductionBinding binding) {
+ public Optional<TypeSpec.Builder> write(ProductionBinding binding) {
// We don't want to write out resolved bindings -- we want to write out the generic version.
checkArgument(!binding.unresolved().isPresent());
checkArgument(binding.bindingElement().isPresent());
@@ -119,7 +123,7 @@ public final class ProducerFactoryGenerator extends SourceFileGenerator<Producti
TypeName providedTypeName = TypeName.get(binding.contributedType());
TypeName futureTypeName = listenableFutureOf(providedTypeName);
- ClassName generatedTypeName = generatedClassNameForBinding(binding);
+ ClassName generatedTypeName = nameGeneratedType(binding);
TypeSpec.Builder factoryBuilder =
classBuilder(generatedTypeName)
.addModifiers(PUBLIC, FINAL)
@@ -229,7 +233,7 @@ public final class ProducerFactoryGenerator extends SourceFileGenerator<Producti
gwtIncompatibleAnnotation(binding).ifPresent(factoryBuilder::addAnnotation);
// TODO(gak): write a sensible toString
- return ImmutableList.of(factoryBuilder);
+ return Optional.of(factoryBuilder);
}
private MethodSpec staticFactoryMethod(ProductionBinding binding, MethodSpec constructor) {