Add a TypeMirror property to ModifiableBindingMethod that records the return type of the modifiable method.
Also add a ComponentMethodDescriptor.resolvedReturnType() convenience and begin using it.
RELNOTES=n/a
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=223857310
diff --git a/java/dagger/internal/codegen/ModifiableBindingMethods.java b/java/dagger/internal/codegen/ModifiableBindingMethods.java
index d83a5fc..6183ae4 100644
--- a/java/dagger/internal/codegen/ModifiableBindingMethods.java
+++ b/java/dagger/internal/codegen/ModifiableBindingMethods.java
@@ -20,7 +20,9 @@
import static com.google.common.base.Preconditions.checkState;
import static dagger.internal.codegen.DaggerStreams.toImmutableList;
+import com.google.auto.common.MoreTypes;
import com.google.auto.value.AutoValue;
+import com.google.common.base.Equivalence;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
@@ -28,6 +30,7 @@
import java.util.Map;
import java.util.Optional;
import java.util.Set;
+import javax.lang.model.type.TypeMirror;
/**
* A registry for those methods which each wrap a binding whose definition may be modified across
@@ -44,12 +47,17 @@
/** Register a method encapsulating a modifiable binding. */
void addMethod(
- ModifiableBindingType type, BindingRequest request, MethodSpec method, boolean finalized) {
+ ModifiableBindingType type,
+ BindingRequest request,
+ TypeMirror returnType,
+ MethodSpec method,
+ boolean finalized) {
checkArgument(type.isModifiable());
if (finalized) {
finalizedMethods.add(request);
}
- methods.put(request, ModifiableBindingMethod.create(type, request, method, finalized));
+ methods.put(
+ request, ModifiableBindingMethod.create(type, request, returnType, method, finalized));
}
/** Returns all {@link ModifiableBindingMethod}s that have not been marked as finalized. */
@@ -88,23 +96,34 @@
private static ModifiableBindingMethod create(
ModifiableBindingType type,
BindingRequest request,
+ TypeMirror returnType,
MethodSpec methodSpec,
boolean finalized) {
return new AutoValue_ModifiableBindingMethods_ModifiableBindingMethod(
- type, request, methodSpec, finalized);
+ type, request, MoreTypes.equivalence().wrap(returnType), methodSpec, finalized);
}
/** Create a {@ModifiableBindingMethod} representing an implementation of an existing method. */
static ModifiableBindingMethod implement(
ModifiableBindingMethod unimplementedMethod, MethodSpec methodSpec, boolean finalized) {
return new AutoValue_ModifiableBindingMethods_ModifiableBindingMethod(
- unimplementedMethod.type(), unimplementedMethod.request(), methodSpec, finalized);
+ unimplementedMethod.type(),
+ unimplementedMethod.request(),
+ unimplementedMethod.returnTypeWrapper(),
+ methodSpec,
+ finalized);
}
abstract ModifiableBindingType type();
abstract BindingRequest request();
+ final TypeMirror returnType() {
+ return returnTypeWrapper().get();
+ }
+
+ abstract Equivalence.Wrapper<TypeMirror> returnTypeWrapper();
+
abstract MethodSpec methodSpec();
abstract boolean finalized();