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;