aboutsummaryrefslogtreecommitdiff
path: root/java/dagger/internal/codegen/processingstep/AssistedFactoryProcessingStep.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/dagger/internal/codegen/processingstep/AssistedFactoryProcessingStep.java')
-rw-r--r--java/dagger/internal/codegen/processingstep/AssistedFactoryProcessingStep.java28
1 files changed, 27 insertions, 1 deletions
diff --git a/java/dagger/internal/codegen/processingstep/AssistedFactoryProcessingStep.java b/java/dagger/internal/codegen/processingstep/AssistedFactoryProcessingStep.java
index e95bdf927..ebd5d106d 100644
--- a/java/dagger/internal/codegen/processingstep/AssistedFactoryProcessingStep.java
+++ b/java/dagger/internal/codegen/processingstep/AssistedFactoryProcessingStep.java
@@ -23,6 +23,7 @@ import static dagger.internal.codegen.binding.SourceFiles.generatedClassNameForB
import static dagger.internal.codegen.extension.DaggerStreams.toImmutableList;
import static dagger.internal.codegen.javapoet.CodeBlocks.toParametersCodeBlock;
import static dagger.internal.codegen.javapoet.TypeNames.INSTANCE_FACTORY;
+import static dagger.internal.codegen.javapoet.TypeNames.daggerProviderOf;
import static dagger.internal.codegen.javapoet.TypeNames.providerOf;
import static dagger.internal.codegen.langmodel.Accessibility.accessibleTypeName;
import static dagger.internal.codegen.xprocessing.MethodSpecs.overriding;
@@ -311,9 +312,13 @@ final class AssistedFactoryProcessingStep extends TypeCheckingProcessingStep<XTy
// use the parameter names of the @AssistedFactory method.
metadata.assistedInjectAssistedParameters().stream()
.map(metadata.assistedFactoryAssistedParametersMap()::get)
- .map(param -> CodeBlock.of("$L", getSimpleName(param)))
+ .map(param -> CodeBlock.of("$L", param.getJvmName()))
.collect(toParametersCodeBlock()))
.build())
+ // In a future release, we should delete this javax method. This will still be a breaking
+ // change, but keeping compatibility for a while should reduce the likelihood of breakages
+ // as it would require components built at much older versions using factories built at
+ // newer versions to break.
.addMethod(
MethodSpec.methodBuilder("create")
.addModifiers(PUBLIC, STATIC)
@@ -331,6 +336,27 @@ final class AssistedFactoryProcessingStep extends TypeCheckingProcessingStep<XTy
: CodeBlock.of(""),
name,
delegateFactoryParam)
+ .build())
+ // Normally we would have called this just "create", but because of backwards
+ // compatibility we can't have two methods with the same name/arguments returning
+ // different Provider types.
+ .addMethod(
+ MethodSpec.methodBuilder("createFactoryProvider")
+ .addModifiers(PUBLIC, STATIC)
+ .addParameter(delegateFactoryParam)
+ .addTypeVariables(typeVariableNames(metadata.assistedInjectElement()))
+ .returns(daggerProviderOf(factory.getType().getTypeName()))
+ .addStatement(
+ "return $T.$Lcreate(new $T($N))",
+ INSTANCE_FACTORY,
+ // Java 7 type inference requires the method call provide the exact type here.
+ isPreJava8SourceVersion(processingEnv)
+ ? CodeBlock.of(
+ "<$T>",
+ accessibleTypeName(metadata.factoryType(), name, processingEnv))
+ : CodeBlock.of(""),
+ name,
+ delegateFactoryParam)
.build());
return ImmutableList.of(builder);
}