Add a convenience function for creating anonymous Providers in JavaPoet
RELNOTES=n/a
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=180601409
diff --git a/java/dagger/internal/codegen/CodeBlocks.java b/java/dagger/internal/codegen/CodeBlocks.java
index 8b6b4a0..ea3058e 100644
--- a/java/dagger/internal/codegen/CodeBlocks.java
+++ b/java/dagger/internal/codegen/CodeBlocks.java
@@ -16,8 +16,12 @@
package dagger.internal.codegen;
+import static com.squareup.javapoet.MethodSpec.methodBuilder;
+import static com.squareup.javapoet.TypeSpec.anonymousClassBuilder;
+import static dagger.internal.codegen.TypeNames.providerOf;
import static dagger.internal.codegen.TypeNames.rawTypeName;
import static java.util.stream.StreamSupport.stream;
+import static javax.lang.model.element.Modifier.PUBLIC;
import com.google.auto.common.MoreElements;
import com.google.auto.common.MoreTypes;
@@ -84,6 +88,24 @@
method.addAnnotation(ClassName.get(MoreTypes.asTypeElement(nullableType)));
}
+ /**
+ * Returns an anonymous {@link javax.inject.Provider} class with the single {@link
+ * javax.inject.Provider#get()} method implemented by {@code body}.
+ */
+ static CodeBlock anonymousProvider(TypeName providedType, CodeBlock body) {
+ return CodeBlock.of("$L",
+ anonymousClassBuilder("")
+ .superclass(providerOf(providedType))
+ .addMethod(
+ methodBuilder("get")
+ .addAnnotation(Override.class)
+ .addModifiers(PUBLIC)
+ .returns(providedType)
+ .addCode(body)
+ .build())
+ .build());
+ }
+
private static final class CodeBlockJoiner {
private final String delimiter;
private final CodeBlock.Builder builder;