Make DaggerTypes and DaggerElements objects that encapsulate and extend Types and Elements, respectively.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=171020731
diff --git a/java/dagger/internal/codegen/AbstractComponentWriter.java b/java/dagger/internal/codegen/AbstractComponentWriter.java
index 529062f..26ebfdf 100644
--- a/java/dagger/internal/codegen/AbstractComponentWriter.java
+++ b/java/dagger/internal/codegen/AbstractComponentWriter.java
@@ -69,13 +69,12 @@
import javax.lang.model.type.ExecutableType;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Elements;
-import javax.lang.model.util.Types;
/** Creates the implementation class for a component or subcomponent. */
abstract class AbstractComponentWriter implements GeneratedComponentModel {
// TODO(dpb): Make all these fields private after refactoring is complete.
protected final Elements elements;
- protected final Types types;
+ protected final DaggerTypes types;
protected final Key.Factory keyFactory;
protected final CompilerOptions compilerOptions;
protected final ClassName name;
@@ -110,7 +109,7 @@
private ImmutableMap<Scope, MemberSelect> referenceReleasingProviderManagerFields;
AbstractComponentWriter(
- Types types,
+ DaggerTypes types,
Elements elements,
Key.Factory keyFactory,
CompilerOptions compilerOptions,
diff --git a/java/dagger/internal/codegen/BindingExpression.java b/java/dagger/internal/codegen/BindingExpression.java
index 7518ef3..caf649b 100644
--- a/java/dagger/internal/codegen/BindingExpression.java
+++ b/java/dagger/internal/codegen/BindingExpression.java
@@ -26,7 +26,6 @@
import com.squareup.javapoet.FieldSpec;
import java.util.Optional;
import javax.lang.model.util.Elements;
-import javax.lang.model.util.Types;
/** A factory of code expressions used to access a single binding in a component. */
abstract class BindingExpression {
@@ -60,7 +59,7 @@
private final GeneratedComponentModel generatedComponentModel;
private final ImmutableMap<BindingKey, String> subcomponentNames;
private final BindingGraph graph;
- private final Types types;
+ private final DaggerTypes types;
private final Elements elements;
private final OptionalFactories optionalFactories;
@@ -73,7 +72,7 @@
GeneratedComponentModel generatedComponentModel,
ImmutableMap<BindingKey, String> subcomponentNames,
BindingGraph graph,
- Types types,
+ DaggerTypes types,
Elements elements,
OptionalFactories optionalFactories) {
this.compilerOptions = checkNotNull(compilerOptions);
@@ -171,15 +170,14 @@
switch (provisionBinding.bindingKind()) {
case COMPONENT:
return new ComponentInstanceBindingExpression(
- bindingExpression, provisionBinding, componentName, types, elements);
+ bindingExpression, provisionBinding, componentName, types);
case COMPONENT_DEPENDENCY:
return new BoundInstanceBindingExpression(
bindingExpression,
ComponentRequirement.forDependency(provisionBinding.key().type()),
componentRequirementFields,
- types,
- elements);
+ types);
case COMPONENT_PROVISION:
return new ComponentProvisionBindingExpression(
@@ -188,16 +186,14 @@
graph,
componentRequirementFields,
compilerOptions,
- types,
- elements);
+ types);
case SUBCOMPONENT_BUILDER:
return new SubcomponentBuilderBindingExpression(
bindingExpression,
provisionBinding,
subcomponentNames.get(resolvedBindings.bindingKey()),
- types,
- elements);
+ types);
case SYNTHETIC_MULTIBOUND_SET:
return new SetBindingExpression(
@@ -219,15 +215,14 @@
case SYNTHETIC_OPTIONAL_BINDING:
return new OptionalBindingExpression(
- provisionBinding, bindingExpression, componentBindingExpressions, types, elements);
+ provisionBinding, bindingExpression, componentBindingExpressions, types);
case BUILDER_BINDING:
return new BoundInstanceBindingExpression(
bindingExpression,
ComponentRequirement.forBinding(provisionBinding),
componentRequirementFields,
- types,
- elements);
+ types);
case INJECTION:
case PROVISION:
diff --git a/java/dagger/internal/codegen/BoundInstanceBindingExpression.java b/java/dagger/internal/codegen/BoundInstanceBindingExpression.java
index 8b790c7..b6cc12b 100644
--- a/java/dagger/internal/codegen/BoundInstanceBindingExpression.java
+++ b/java/dagger/internal/codegen/BoundInstanceBindingExpression.java
@@ -18,8 +18,6 @@
import com.squareup.javapoet.ClassName;
import dagger.Component;
-import javax.lang.model.util.Elements;
-import javax.lang.model.util.Types;
/**
* A binding expression for instances bound with {@link dagger.BindsInstance} and instances of
@@ -33,9 +31,8 @@
BindingExpression delegate,
ComponentRequirement componentRequirement,
ComponentRequirementFields componentRequirementFields,
- Types types,
- Elements elements) {
- super(delegate, types, elements);
+ DaggerTypes types) {
+ super(delegate, types);
this.componentRequirement = componentRequirement;
this.componentRequirementFields = componentRequirementFields;
}
diff --git a/java/dagger/internal/codegen/BuilderValidator.java b/java/dagger/internal/codegen/BuilderValidator.java
index 72df34e..b1181f2 100644
--- a/java/dagger/internal/codegen/BuilderValidator.java
+++ b/java/dagger/internal/codegen/BuilderValidator.java
@@ -19,7 +19,6 @@
import static com.google.auto.common.MoreElements.isAnnotationPresent;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.collect.Iterables.getOnlyElement;
-import static dagger.internal.codegen.DaggerElements.getUnimplementedMethods;
import static javax.lang.model.element.Modifier.ABSTRACT;
import static javax.lang.model.element.Modifier.PRIVATE;
import static javax.lang.model.element.Modifier.STATIC;
@@ -42,7 +41,6 @@
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.ElementFilter;
-import javax.lang.model.util.Elements;
import javax.lang.model.util.Types;
/**
@@ -52,10 +50,10 @@
*/
class BuilderValidator {
- private final Elements elements;
+ private final DaggerElements elements;
private final Types types;
- BuilderValidator(Elements elements, Types types) {
+ BuilderValidator(DaggerElements elements, Types types) {
this.elements = elements;
this.types = types;
}
@@ -109,7 +107,7 @@
}
ExecutableElement buildMethod = null;
- for (ExecutableElement method : getUnimplementedMethods(subject, types, elements)) {
+ for (ExecutableElement method : elements.getUnimplementedMethods(subject)) {
ExecutableType resolvedMethodType =
MoreTypes.asExecutable(types.asMemberOf(MoreTypes.asDeclared(subject.asType()), method));
TypeMirror returnType = resolvedMethodType.getReturnType();
diff --git a/java/dagger/internal/codegen/ComponentDescriptor.java b/java/dagger/internal/codegen/ComponentDescriptor.java
index 0006c07..aa9310f 100644
--- a/java/dagger/internal/codegen/ComponentDescriptor.java
+++ b/java/dagger/internal/codegen/ComponentDescriptor.java
@@ -25,9 +25,7 @@
import static dagger.internal.codegen.ConfigurationAnnotations.getComponentModules;
import static dagger.internal.codegen.ConfigurationAnnotations.isSubcomponent;
import static dagger.internal.codegen.ConfigurationAnnotations.isSubcomponentBuilder;
-import static dagger.internal.codegen.DaggerElements.checkTypePresent;
import static dagger.internal.codegen.DaggerElements.getAnnotationMirror;
-import static dagger.internal.codegen.DaggerElements.getUnimplementedMethods;
import static dagger.internal.codegen.InjectionAnnotations.getQualifier;
import static dagger.internal.codegen.Util.toImmutableSet;
import static javax.lang.model.type.TypeKind.DECLARED;
@@ -445,13 +443,13 @@
}
static final class Factory {
- private final Elements elements;
+ private final DaggerElements elements;
private final Types types;
private final DependencyRequest.Factory dependencyRequestFactory;
private final ModuleDescriptor.Factory moduleDescriptorFactory;
Factory(
- Elements elements,
+ DaggerElements elements,
Types types,
DependencyRequest.Factory dependencyRequestFactory,
ModuleDescriptor.Factory moduleDescriptorFactory) {
@@ -522,7 +520,7 @@
}
}
ImmutableSet<ExecutableElement> unimplementedMethods =
- getUnimplementedMethods(componentDefinitionType, types, elements);
+ elements.getUnimplementedMethods(componentDefinitionType);
ImmutableSet.Builder<ComponentMethodDescriptor> componentMethodsBuilder =
ImmutableSet.builder();
@@ -668,7 +666,7 @@
return Optional.empty();
}
TypeElement element = MoreTypes.asTypeElement(builderType.get());
- ImmutableSet<ExecutableElement> methods = getUnimplementedMethods(element, types, elements);
+ ImmutableSet<ExecutableElement> methods = elements.getUnimplementedMethods(element);
ImmutableSet.Builder<BuilderRequirementMethod> requirementMethods = ImmutableSet.builder();
ExecutableElement buildMethod = null;
for (ExecutableElement method : methods) {
@@ -719,7 +717,7 @@
private ModuleDescriptor descriptorForMonitoringModule(TypeElement componentDefinitionType) {
ClassName monitoringModuleName =
SourceFiles.generatedMonitoringModuleName(componentDefinitionType);
- TypeElement monitoringModule = checkTypePresent(monitoringModuleName.toString(), elements);
+ TypeElement monitoringModule = elements.checkTypePresent(monitoringModuleName.toString());
return moduleDescriptorFactory.create(monitoringModule);
}
@@ -736,7 +734,7 @@
ClassName productionExecutorModuleName =
SourceFiles.generatedProductionExecutorModuleName(componentDefinitionType);
TypeElement productionExecutorModule =
- checkTypePresent(productionExecutorModuleName.toString(), elements);
+ elements.checkTypePresent(productionExecutorModuleName.toString());
return moduleDescriptorFactory.create(productionExecutorModule);
}
}
diff --git a/java/dagger/internal/codegen/ComponentGenerator.java b/java/dagger/internal/codegen/ComponentGenerator.java
index dadb446..bca63f0 100644
--- a/java/dagger/internal/codegen/ComponentGenerator.java
+++ b/java/dagger/internal/codegen/ComponentGenerator.java
@@ -24,7 +24,6 @@
import javax.annotation.processing.Filer;
import javax.lang.model.element.Element;
import javax.lang.model.util.Elements;
-import javax.lang.model.util.Types;
/**
* Generates the implementation of the abstract types annotated with {@link Component}.
@@ -33,7 +32,7 @@
* @since 2.0
*/
final class ComponentGenerator extends SourceFileGenerator<BindingGraph> {
- private final Types types;
+ private final DaggerTypes types;
private final Elements elements;
private final Key.Factory keyFactory;
private final CompilerOptions compilerOptions;
@@ -41,7 +40,7 @@
ComponentGenerator(
Filer filer,
Elements elements,
- Types types,
+ DaggerTypes types,
Key.Factory keyFactory,
CompilerOptions compilerOptions) {
super(filer, elements);
diff --git a/java/dagger/internal/codegen/ComponentInstanceBindingExpression.java b/java/dagger/internal/codegen/ComponentInstanceBindingExpression.java
index 0c8635e..6e04039 100644
--- a/java/dagger/internal/codegen/ComponentInstanceBindingExpression.java
+++ b/java/dagger/internal/codegen/ComponentInstanceBindingExpression.java
@@ -18,8 +18,6 @@
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.CodeBlock;
-import javax.lang.model.util.Elements;
-import javax.lang.model.util.Types;
/** A binding expression for the instance of the component itself, i.e. {@code this}. */
final class ComponentInstanceBindingExpression extends SimpleInvocationBindingExpression {
@@ -30,9 +28,8 @@
BindingExpression delegate,
ContributionBinding binding,
ClassName componentName,
- Types types,
- Elements elements) {
- super(delegate, types, elements);
+ DaggerTypes types) {
+ super(delegate, types);
this.componentName = componentName;
this.binding = binding;
}
diff --git a/java/dagger/internal/codegen/ComponentProcessor.java b/java/dagger/internal/codegen/ComponentProcessor.java
index cc13efa..d35e30b 100644
--- a/java/dagger/internal/codegen/ComponentProcessor.java
+++ b/java/dagger/internal/codegen/ComponentProcessor.java
@@ -29,8 +29,6 @@
import javax.annotation.processing.Processor;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.SourceVersion;
-import javax.lang.model.util.Elements;
-import javax.lang.model.util.Types;
/**
* The annotation processor responsible for generating the classes that drive the Dagger 2.0
@@ -60,8 +58,8 @@
@Override
protected Iterable<? extends ProcessingStep> initSteps() {
Messager messager = processingEnv.getMessager();
- Types types = processingEnv.getTypeUtils();
- Elements elements = processingEnv.getElementUtils();
+ DaggerTypes types = new DaggerTypes(processingEnv);
+ DaggerElements elements = new DaggerElements(processingEnv);
CompilerOptions compilerOptions = CompilerOptions.create(processingEnv, elements);
Filer filer = new FormattingFiler(processingEnv.getFiler());
diff --git a/java/dagger/internal/codegen/ComponentProvisionBindingExpression.java b/java/dagger/internal/codegen/ComponentProvisionBindingExpression.java
index af8b1f9..afdaf38 100644
--- a/java/dagger/internal/codegen/ComponentProvisionBindingExpression.java
+++ b/java/dagger/internal/codegen/ComponentProvisionBindingExpression.java
@@ -24,8 +24,6 @@
import com.squareup.javapoet.CodeBlock;
import dagger.internal.Preconditions;
import javax.lang.model.element.TypeElement;
-import javax.lang.model.util.Elements;
-import javax.lang.model.util.Types;
/** A binding expression for component provision methods. */
final class ComponentProvisionBindingExpression extends SimpleInvocationBindingExpression {
@@ -40,9 +38,8 @@
BindingGraph bindingGraph,
ComponentRequirementFields componentRequirementFields,
CompilerOptions compilerOptions,
- Types types,
- Elements elements) {
- super(providerBindingExpression, types, elements);
+ DaggerTypes types) {
+ super(providerBindingExpression, types);
this.binding = checkNotNull(binding);
this.bindingGraph = checkNotNull(bindingGraph);
this.componentRequirementFields = checkNotNull(componentRequirementFields);
diff --git a/java/dagger/internal/codegen/ComponentWriter.java b/java/dagger/internal/codegen/ComponentWriter.java
index 1bd1820..e0f8764 100644
--- a/java/dagger/internal/codegen/ComponentWriter.java
+++ b/java/dagger/internal/codegen/ComponentWriter.java
@@ -42,7 +42,6 @@
import javax.lang.model.element.Name;
import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements;
-import javax.lang.model.util.Types;
/**
* Creates the implementation class for a component.
@@ -50,7 +49,7 @@
final class ComponentWriter extends AbstractComponentWriter {
ComponentWriter(
- Types types,
+ DaggerTypes types,
Elements elements,
Key.Factory keyFactory,
CompilerOptions compilerOptions,
diff --git a/java/dagger/internal/codegen/DaggerElements.java b/java/dagger/internal/codegen/DaggerElements.java
index fe19903..afbb6b5 100644
--- a/java/dagger/internal/codegen/DaggerElements.java
+++ b/java/dagger/internal/codegen/DaggerElements.java
@@ -18,6 +18,7 @@
import static com.google.auto.common.MoreElements.getLocalAndInheritedMethods;
import static com.google.auto.common.MoreElements.hasModifiers;
+import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.collect.Lists.asList;
import static dagger.internal.codegen.Util.toImmutableSet;
import static java.util.stream.Collectors.toSet;
@@ -27,29 +28,44 @@
import com.google.auto.common.MoreTypes;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableSet;
+import java.io.Writer;
import java.lang.annotation.Annotation;
import java.util.Collection;
+import java.util.List;
+import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.function.Predicate;
+import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementVisitor;
import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.Name;
+import javax.lang.model.element.PackageElement;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Elements;
import javax.lang.model.util.SimpleElementVisitor6;
import javax.lang.model.util.Types;
-/**
- * Utilities for working with {@link Element} objects. Each is a candidate to move to {@link
- * MoreElements}.
- */
-final class DaggerElements {
+/** Extension of {@link Elements} that adds Dagger-specific methods. */
+final class DaggerElements implements Elements {
- static ImmutableSet<ExecutableElement> getUnimplementedMethods(
- TypeElement type, Types types, Elements elements) {
+ private final Elements elements;
+ private final Types types;
+
+ DaggerElements(Elements elements, Types types) {
+ this.elements = checkNotNull(elements);
+ this.types = checkNotNull(types);
+ }
+
+ DaggerElements(ProcessingEnvironment processingEnv) {
+ this(processingEnv.getElementUtils(), processingEnv.getTypeUtils());
+ }
+
+ ImmutableSet<ExecutableElement> getUnimplementedMethods(TypeElement type) {
return FluentIterable.from(getLocalAndInheritedMethods(type, types, elements))
.filter(hasModifiers(ABSTRACT))
.toSet();
@@ -174,11 +190,88 @@
* Invokes {@link Elements#getTypeElement(CharSequence)}, throwing {@link TypeNotPresentException}
* if it is not accessible in the current compilation.
*/
- static TypeElement checkTypePresent(String typeName, Elements elements) {
+ TypeElement checkTypePresent(String typeName) {
TypeElement type = elements.getTypeElement(typeName);
if (type == null) {
throw new TypeNotPresentException(typeName, null);
}
return type;
}
+
+ @Override
+ public PackageElement getPackageElement(CharSequence name) {
+ return elements.getPackageElement(name);
+ }
+
+ @Override
+ public TypeElement getTypeElement(CharSequence name) {
+ return elements.getTypeElement(name);
+ }
+
+ @Override
+ public Map<? extends ExecutableElement, ? extends AnnotationValue> getElementValuesWithDefaults(
+ AnnotationMirror a) {
+ return elements.getElementValuesWithDefaults(a);
+ }
+
+ @Override
+ public String getDocComment(Element e) {
+ return elements.getDocComment(e);
+ }
+
+ @Override
+ public boolean isDeprecated(Element e) {
+ return elements.isDeprecated(e);
+ }
+
+ @Override
+ public Name getBinaryName(TypeElement type) {
+ return elements.getBinaryName(type);
+ }
+
+ @Override
+ public PackageElement getPackageOf(Element type) {
+ return elements.getPackageOf(type);
+ }
+
+ @Override
+ public List<? extends Element> getAllMembers(TypeElement type) {
+ return elements.getAllMembers(type);
+ }
+
+ @Override
+ public List<? extends AnnotationMirror> getAllAnnotationMirrors(Element e) {
+ return elements.getAllAnnotationMirrors(e);
+ }
+
+ @Override
+ public boolean hides(Element hider, Element hidden) {
+ return elements.hides(hider, hidden);
+ }
+
+ @Override
+ public boolean overrides(
+ ExecutableElement overrider, ExecutableElement overridden, TypeElement type) {
+ return elements.overrides(overrider, overridden, type);
+ }
+
+ @Override
+ public String getConstantExpression(Object value) {
+ return elements.getConstantExpression(value);
+ }
+
+ @Override
+ public void printElements(Writer w, Element... elements) {
+ this.elements.printElements(w, elements);
+ }
+
+ @Override
+ public Name getName(CharSequence cs) {
+ return elements.getName(cs);
+ }
+
+ @Override
+ public boolean isFunctionalInterface(TypeElement type) {
+ return elements.isFunctionalInterface(type);
+ }
}
diff --git a/java/dagger/internal/codegen/DaggerTypes.java b/java/dagger/internal/codegen/DaggerTypes.java
index 3196747..0e8e95f 100644
--- a/java/dagger/internal/codegen/DaggerTypes.java
+++ b/java/dagger/internal/codegen/DaggerTypes.java
@@ -17,30 +17,48 @@
package dagger.internal.codegen;
import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.collect.Iterables.getOnlyElement;
import com.google.auto.common.MoreElements;
import com.google.auto.common.MoreTypes;
import java.util.List;
import java.util.Optional;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.ArrayType;
import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.ExecutableType;
+import javax.lang.model.type.NoType;
+import javax.lang.model.type.NullType;
+import javax.lang.model.type.PrimitiveType;
+import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;
+import javax.lang.model.type.WildcardType;
import javax.lang.model.util.Elements;
import javax.lang.model.util.Types;
-/**
- * Utilities for working with {@link TypeMirror} objects. Each is a candidate to move to {@link
- * MoreTypes}.
- */
-// TODO(dpb): Change this to an object that contains a Types.
-final class DaggerTypes {
+/** Extension of {@link Types} that adds Dagger-specific methods. */
+final class DaggerTypes implements Types {
+
+ private final Types types;
+ private final Elements elements;
+
+ DaggerTypes(Types types, Elements elements) {
+ this.types = checkNotNull(types);
+ this.elements = checkNotNull(elements);
+ }
+
+ DaggerTypes(ProcessingEnvironment processingEnv) {
+ this(processingEnv.getTypeUtils(), processingEnv.getElementUtils());
+ }
+
/**
* Returns the non-{@link Object} superclass of the type with the proper type parameters. An empty
* {@link Optional} is returned if there is no non-{@link Object} superclass.
*/
- static Optional<DeclaredType> nonObjectSuperclass(
- Types types, Elements elements, DeclaredType type) {
+ Optional<DeclaredType> nonObjectSuperclass(DeclaredType type) {
return Optional.ofNullable(MoreTypes.nonObjectSuperclass(types, elements, type).orNull());
}
@@ -52,7 +70,7 @@
* @throws IllegalArgumentException if {@code type} is not a declared type or has more than one
* type argument.
*/
- static TypeMirror unwrapTypeOrObject(TypeMirror type, Elements elements) {
+ TypeMirror unwrapTypeOrObject(TypeMirror type) {
DeclaredType declaredType = MoreTypes.asDeclared(type);
TypeElement typeElement = MoreElements.asType(declaredType.asElement());
checkArgument(
@@ -70,8 +88,7 @@
* <p>For example, if {@code type} is {@code List<Number>} and {@code wrappingClass} is {@code
* Set.class}, this will return {@code Set<List<Number>>}.
*/
- static TypeMirror wrapType(
- TypeMirror type, Class<?> wrappingClass, Types types, Elements elements) {
+ TypeMirror wrapType(TypeMirror type, Class<?> wrappingClass) {
return types.getDeclaredType(elements.getTypeElement(wrappingClass.getCanonicalName()), type);
}
@@ -86,8 +103,7 @@
*
* @throws IllegalArgumentException if {@code} has more than one type argument.
*/
- static DeclaredType rewrapType(
- TypeMirror type, Class<?> wrappingClass, Types types, Elements elements) {
+ DeclaredType rewrapType(TypeMirror type, Class<?> wrappingClass) {
List<? extends TypeMirror> typeArguments = MoreTypes.asDeclared(type).getTypeArguments();
TypeElement wrappingType = elements.getTypeElement(wrappingClass.getCanonicalName());
switch (typeArguments.size()) {
@@ -99,4 +115,100 @@
throw new IllegalArgumentException(type + " has more than 1 type argument");
}
}
+
+ @Override
+ public Element asElement(TypeMirror t) {
+ return types.asElement(t);
+ }
+
+ @Override
+ public boolean isSameType(TypeMirror t1, TypeMirror t2) {
+ return types.isSameType(t1, t2);
+ }
+
+ @Override
+ public boolean isSubtype(TypeMirror t1, TypeMirror t2) {
+ return types.isSubtype(t1, t2);
+ }
+
+ @Override
+ public boolean isAssignable(TypeMirror t1, TypeMirror t2) {
+ return types.isAssignable(t1, t2);
+ }
+
+ @Override
+ public boolean contains(TypeMirror t1, TypeMirror t2) {
+ return types.contains(t1, t2);
+ }
+
+ @Override
+ public boolean isSubsignature(ExecutableType m1, ExecutableType m2) {
+ return types.isSubsignature(m1, m2);
+ }
+
+ @Override
+ public List<? extends TypeMirror> directSupertypes(TypeMirror t) {
+ return types.directSupertypes(t);
+ }
+
+ @Override
+ public TypeMirror erasure(TypeMirror t) {
+ return types.erasure(t);
+ }
+
+ @Override
+ public TypeElement boxedClass(PrimitiveType p) {
+ return types.boxedClass(p);
+ }
+
+ @Override
+ public PrimitiveType unboxedType(TypeMirror t) {
+ return types.unboxedType(t);
+ }
+
+ @Override
+ public TypeMirror capture(TypeMirror t) {
+ return types.capture(t);
+ }
+
+ @Override
+ public PrimitiveType getPrimitiveType(TypeKind kind) {
+ return types.getPrimitiveType(kind);
+ }
+
+ @Override
+ public NullType getNullType() {
+ return types.getNullType();
+ }
+
+ @Override
+ public NoType getNoType(TypeKind kind) {
+ return types.getNoType(kind);
+ }
+
+ @Override
+ public ArrayType getArrayType(TypeMirror componentType) {
+ return types.getArrayType(componentType);
+ }
+
+ @Override
+ public WildcardType getWildcardType(TypeMirror extendsBound, TypeMirror superBound) {
+ return types.getWildcardType(extendsBound, superBound);
+ }
+
+ @Override
+ public DeclaredType getDeclaredType(TypeElement typeElem, TypeMirror... typeArgs) {
+ return types.getDeclaredType(typeElem, typeArgs);
+ }
+
+ @Override
+ public DeclaredType getDeclaredType(
+ DeclaredType containing, TypeElement typeElem, TypeMirror... typeArgs) {
+ return types.getDeclaredType(containing, typeElem, typeArgs);
+ }
+
+ @Override
+ public TypeMirror asMemberOf(DeclaredType containing, Element element) {
+ return types.asMemberOf(containing, element);
+ }
}
diff --git a/java/dagger/internal/codegen/FrameworkInstanceBindingExpression.java b/java/dagger/internal/codegen/FrameworkInstanceBindingExpression.java
index 1e2606c..ac8f3e1 100644
--- a/java/dagger/internal/codegen/FrameworkInstanceBindingExpression.java
+++ b/java/dagger/internal/codegen/FrameworkInstanceBindingExpression.java
@@ -20,7 +20,6 @@
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import static dagger.internal.codegen.Accessibility.isTypeAccessibleFrom;
-import static dagger.internal.codegen.DaggerTypes.wrapType;
import static dagger.internal.codegen.TypeNames.DELEGATE_FACTORY;
import com.squareup.javapoet.ClassName;
@@ -31,7 +30,6 @@
import javax.lang.model.type.DeclaredType;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Elements;
-import javax.lang.model.util.Types;
/** A binding expression that uses an instance of a {@link FrameworkType}. */
final class FrameworkInstanceBindingExpression extends BindingExpression {
@@ -40,7 +38,7 @@
private final MemberSelect memberSelect;
private final FrameworkType frameworkType;
private final FrameworkFieldInitializer fieldInitializer;
- private final Types types;
+ private final DaggerTypes types;
private final Elements elements;
private InitializationState fieldInitializationState = InitializationState.UNINITIALIZED;
@@ -51,7 +49,7 @@
GeneratedComponentModel generatedComponentModel,
MemberSelect memberSelect,
FrameworkFieldInitializer frameworkFieldInitializer,
- Types types,
+ DaggerTypes types,
Elements elements) {
return new FrameworkInstanceBindingExpression(
resolvedBindings,
@@ -71,7 +69,7 @@
MemberSelect memberSelect,
FrameworkType frameworkType,
FrameworkFieldInitializer fieldInitializer,
- Types types,
+ DaggerTypes types,
Elements elements) {
super(resolvedBindings);
this.generatedComponentModel = generatedComponentModel;
@@ -109,14 +107,13 @@
maybeInitializeField();
TypeMirror expressionType =
isTypeAccessibleFrom(instanceType(), requestingClass.packageName())
- ? wrapType(instanceType(), resolvedBindings().frameworkClass(), types, elements)
+ ? types.wrapType(instanceType(), resolvedBindings().frameworkClass())
: rawFrameworkType();
return frameworkType.to(
requestKind,
Expression.create(expressionType, memberSelect.getExpressionFor(requestingClass)),
- types,
- elements);
+ types);
}
/**
diff --git a/java/dagger/internal/codegen/FrameworkType.java b/java/dagger/internal/codegen/FrameworkType.java
index 01ff945..31baa12 100644
--- a/java/dagger/internal/codegen/FrameworkType.java
+++ b/java/dagger/internal/codegen/FrameworkType.java
@@ -18,9 +18,6 @@
import static com.google.common.base.CaseFormat.UPPER_CAMEL;
import static com.google.common.base.CaseFormat.UPPER_UNDERSCORE;
-import static dagger.internal.codegen.DaggerTypes.rewrapType;
-import static dagger.internal.codegen.DaggerTypes.unwrapTypeOrObject;
-import static dagger.internal.codegen.DaggerTypes.wrapType;
import static dagger.internal.codegen.DependencyRequest.Kind.INSTANCE;
import com.google.common.util.concurrent.Futures;
@@ -35,8 +32,6 @@
import dagger.producers.internal.Producers;
import javax.inject.Provider;
import javax.lang.model.type.TypeMirror;
-import javax.lang.model.util.Elements;
-import javax.lang.model.util.Types;
/** One of the core types initialized as fields in a generated component. */
enum FrameworkType {
@@ -73,28 +68,26 @@
}
@Override
- Expression to(
- DependencyRequest.Kind requestKind, Expression from, Types types, Elements elements) {
+ Expression to(DependencyRequest.Kind requestKind, Expression from, DaggerTypes types) {
CodeBlock codeBlock = to(requestKind, from.codeBlock());
switch (requestKind) {
case INSTANCE:
- return Expression.create(unwrapTypeOrObject(from.type(), elements), codeBlock);
+ return Expression.create(types.unwrapTypeOrObject(from.type()), codeBlock);
case PROVIDER:
return from;
case PROVIDER_OF_LAZY:
- TypeMirror lazyType = rewrapType(from.type(), Lazy.class, types, elements);
- return Expression.create(wrapType(lazyType, Provider.class, types, elements), codeBlock);
+ TypeMirror lazyType = types.rewrapType(from.type(), Lazy.class);
+ return Expression.create(types.wrapType(lazyType, Provider.class), codeBlock);
case FUTURE:
return Expression.create(
- rewrapType(from.type(), ListenableFuture.class, types, elements), codeBlock);
+ types.rewrapType(from.type(), ListenableFuture.class), codeBlock);
default:
return Expression.create(
- rewrapType(from.type(), requestKind.frameworkClass.get(), types, elements),
- codeBlock);
+ types.rewrapType(from.type(), requestKind.frameworkClass.get()), codeBlock);
}
}
},
@@ -117,12 +110,11 @@
}
@Override
- Expression to(
- DependencyRequest.Kind requestKind, Expression from, Types types, Elements elements) {
+ Expression to(DependencyRequest.Kind requestKind, Expression from, DaggerTypes types) {
switch (requestKind) {
case FUTURE:
return Expression.create(
- rewrapType(from.type(), ListenableFuture.class, types, elements),
+ types.rewrapType(from.type(), ListenableFuture.class),
to(requestKind, from.codeBlock()));
case PRODUCER:
@@ -150,8 +142,7 @@
}
@Override
- Expression to(
- DependencyRequest.Kind requestKind, Expression from, Types types, Elements elements) {
+ Expression to(DependencyRequest.Kind requestKind, Expression from, DaggerTypes types) {
switch (requestKind) {
case MEMBERS_INJECTOR:
return from;
@@ -186,8 +177,7 @@
* @throws IllegalArgumentException if a valid expression cannot be generated for {@code
* requestKind}
*/
- abstract Expression to(
- DependencyRequest.Kind requestKind, Expression from, Types types, Elements elements);
+ abstract Expression to(DependencyRequest.Kind requestKind, Expression from, DaggerTypes types);
@Override
public String toString() {
diff --git a/java/dagger/internal/codegen/MapBindingExpression.java b/java/dagger/internal/codegen/MapBindingExpression.java
index 165d695..2b42270 100644
--- a/java/dagger/internal/codegen/MapBindingExpression.java
+++ b/java/dagger/internal/codegen/MapBindingExpression.java
@@ -32,7 +32,6 @@
import java.util.Map;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Elements;
-import javax.lang.model.util.Types;
/** A {@link BindingExpression} for multibound maps. */
final class MapBindingExpression extends SimpleInvocationBindingExpression {
@@ -49,9 +48,9 @@
BindingGraph graph,
ComponentBindingExpressions componentBindingExpressions,
BindingExpression delegate,
- Types types,
+ DaggerTypes types,
Elements elements) {
- super(delegate, types, elements);
+ super(delegate, types);
ContributionBinding.Kind bindingKind = binding.bindingKind();
checkArgument(bindingKind.equals(SYNTHETIC_MULTIBOUND_MAP), bindingKind);
this.binding = binding;
diff --git a/java/dagger/internal/codegen/MembersInjectionBinding.java b/java/dagger/internal/codegen/MembersInjectionBinding.java
index 384cd5c..af52580 100644
--- a/java/dagger/internal/codegen/MembersInjectionBinding.java
+++ b/java/dagger/internal/codegen/MembersInjectionBinding.java
@@ -20,7 +20,6 @@
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
-import static dagger.internal.codegen.DaggerTypes.nonObjectSuperclass;
import static java.util.stream.Collectors.toList;
import static javax.lang.model.element.Modifier.PRIVATE;
import static javax.lang.model.element.Modifier.STATIC;
@@ -141,11 +140,14 @@
static final class Factory {
private final Elements elements;
- private final Types types;
+ private final DaggerTypes types;
private final Key.Factory keyFactory;
private final DependencyRequest.Factory dependencyRequestFactory;
- Factory(Elements elements, Types types, Key.Factory keyFactory,
+ Factory(
+ Elements elements,
+ DaggerTypes types,
+ Key.Factory keyFactory,
DependencyRequest.Factory dependencyRequestFactory) {
this.elements = checkNotNull(elements);
this.types = checkNotNull(types);
@@ -209,8 +211,7 @@
.toSet();
Optional<Key> parentKey =
- nonObjectSuperclass(types, elements, declaredType)
- .map(keyFactory::forMembersInjectedType);
+ types.nonObjectSuperclass(declaredType).map(keyFactory::forMembersInjectedType);
Key key = keyFactory.forMembersInjectedType(declaredType);
TypeElement typeElement = MoreElements.asType(declaredType.asElement());
@@ -232,7 +233,7 @@
SetMultimap<String, ExecutableElement> overriddenMethodMap = LinkedHashMultimap.create();
for (Optional<DeclaredType> currentType = Optional.of(declaredType);
currentType.isPresent();
- currentType = nonObjectSuperclass(types, elements, currentType.get())) {
+ currentType = types.nonObjectSuperclass(currentType.get())) {
final DeclaredType type = currentType.get();
ancestors.add(MoreElements.asType(type.asElement()));
for (Element enclosedElement : type.asElement().getEnclosedElements()) {
diff --git a/java/dagger/internal/codegen/ModuleDescriptor.java b/java/dagger/internal/codegen/ModuleDescriptor.java
index ed1f987..49f4d66 100644
--- a/java/dagger/internal/codegen/ModuleDescriptor.java
+++ b/java/dagger/internal/codegen/ModuleDescriptor.java
@@ -24,7 +24,6 @@
import static com.google.common.base.Verify.verify;
import static dagger.internal.codegen.ConfigurationAnnotations.getModuleAnnotation;
import static dagger.internal.codegen.ConfigurationAnnotations.getModuleIncludes;
-import static dagger.internal.codegen.DaggerElements.checkTypePresent;
import static dagger.internal.codegen.DaggerElements.getAnnotationMirror;
import static dagger.internal.codegen.DaggerElements.isAnnotationPresent;
import static dagger.internal.codegen.SourceFiles.classFileName;
@@ -55,7 +54,6 @@
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.TypeMirror;
-import javax.lang.model.util.Elements;
@AutoValue
abstract class ModuleDescriptor {
@@ -138,7 +136,7 @@
}
static final class Factory {
- private final Elements elements;
+ private final DaggerElements elements;
private final ProvisionBinding.Factory provisionBindingFactory;
private final ProductionBinding.Factory productionBindingFactory;
private final MultibindingDeclaration.Factory multibindingDeclarationFactory;
@@ -147,7 +145,7 @@
private final OptionalBindingDeclaration.Factory optionalBindingDeclarationFactory;
Factory(
- Elements elements,
+ DaggerElements elements,
ProvisionBinding.Factory provisionBindingFactory,
ProductionBinding.Factory productionBindingFactory,
MultibindingDeclaration.Factory multibindingDeclarationFactory,
@@ -238,7 +236,7 @@
for (ExecutableElement method : methodsIn(moduleElement.getEnclosedElements())) {
if (isAnnotationPresent(method, contributesAndroidInjector.asType())) {
includedModules.add(
- create(checkTypePresent(implicitlyIncludedModuleName(method), elements)));
+ create(elements.checkTypePresent(implicitlyIncludedModuleName(method))));
}
}
}
diff --git a/java/dagger/internal/codegen/OptionalBindingExpression.java b/java/dagger/internal/codegen/OptionalBindingExpression.java
index 7c565f1..ceb0c90 100644
--- a/java/dagger/internal/codegen/OptionalBindingExpression.java
+++ b/java/dagger/internal/codegen/OptionalBindingExpression.java
@@ -22,7 +22,6 @@
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.CodeBlock;
import dagger.internal.codegen.OptionalType.OptionalKind;
-import javax.lang.model.util.Elements;
import javax.lang.model.util.Types;
/** A binding expression for optional bindings. */
@@ -35,9 +34,8 @@
ProvisionBinding binding,
BindingExpression delegate,
ComponentBindingExpressions componentBindingExpressions,
- Types types,
- Elements elements) {
- super(delegate, types, elements);
+ DaggerTypes types) {
+ super(delegate, types);
this.binding = binding;
this.componentBindingExpressions = componentBindingExpressions;
this.types = types;
diff --git a/java/dagger/internal/codegen/SetBindingExpression.java b/java/dagger/internal/codegen/SetBindingExpression.java
index 1c56509..d97ced0 100644
--- a/java/dagger/internal/codegen/SetBindingExpression.java
+++ b/java/dagger/internal/codegen/SetBindingExpression.java
@@ -28,7 +28,6 @@
import java.util.Set;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Elements;
-import javax.lang.model.util.Types;
/** A binding expression for multibound sets. */
final class SetBindingExpression extends SimpleInvocationBindingExpression {
@@ -42,9 +41,9 @@
BindingGraph graph,
ComponentBindingExpressions componentBindingExpressions,
BindingExpression delegate,
- Types types,
+ DaggerTypes types,
Elements elements) {
- super(delegate, types, elements);
+ super(delegate, types);
this.binding = binding;
this.graph = graph;
this.componentBindingExpressions = componentBindingExpressions;
diff --git a/java/dagger/internal/codegen/SimpleInvocationBindingExpression.java b/java/dagger/internal/codegen/SimpleInvocationBindingExpression.java
index 1582d49..3b4d817 100644
--- a/java/dagger/internal/codegen/SimpleInvocationBindingExpression.java
+++ b/java/dagger/internal/codegen/SimpleInvocationBindingExpression.java
@@ -16,14 +16,10 @@
package dagger.internal.codegen;
-import static dagger.internal.codegen.DaggerTypes.wrapType;
-
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.CodeBlock;
-import javax.lang.model.util.Elements;
-import javax.lang.model.util.Types;
/**
* A binding expression that can use a simple expression for instance requests, and delegates to
@@ -31,14 +27,12 @@
*/
abstract class SimpleInvocationBindingExpression extends BindingExpression {
private final BindingExpression delegate;
- private final Types types;
- private final Elements elements;
+ private final DaggerTypes types;
- SimpleInvocationBindingExpression(BindingExpression delegate, Types types, Elements elements) {
+ SimpleInvocationBindingExpression(BindingExpression delegate, DaggerTypes types) {
super(delegate.resolvedBindings());
this.delegate = delegate;
this.types = types;
- this.elements = elements;
}
/**
@@ -69,7 +63,7 @@
case FUTURE:
Expression expression = getInstanceDependencyExpression(requestKind, requestingClass);
return Expression.create(
- wrapType(expression.type(), ListenableFuture.class, types, elements),
+ types.wrapType(expression.type(), ListenableFuture.class),
CodeBlock.builder()
.add("$T.", Futures.class)
.add(explicitTypeParameter(requestingClass))
diff --git a/java/dagger/internal/codegen/SimpleMethodBindingExpression.java b/java/dagger/internal/codegen/SimpleMethodBindingExpression.java
index 6c3ccec..993c8c5 100644
--- a/java/dagger/internal/codegen/SimpleMethodBindingExpression.java
+++ b/java/dagger/internal/codegen/SimpleMethodBindingExpression.java
@@ -37,7 +37,6 @@
import javax.lang.model.type.DeclaredType;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Elements;
-import javax.lang.model.util.Types;
/**
* A binding expression that invokes methods or constructors directly for a provision binding when
@@ -58,9 +57,9 @@
ComponentBindingExpressions componentBindingExpressions,
GeneratedComponentModel generatedComponentModel,
ComponentRequirementFields componentRequirementFields,
- Types types,
+ DaggerTypes types,
Elements elements) {
- super(delegate, types, elements);
+ super(delegate, types);
checkArgument(
provisionBinding.implicitDependencies().isEmpty(),
"framework deps are not currently supported");
diff --git a/java/dagger/internal/codegen/SubcomponentBuilderBindingExpression.java b/java/dagger/internal/codegen/SubcomponentBuilderBindingExpression.java
index 02b99d5..5215bce 100644
--- a/java/dagger/internal/codegen/SubcomponentBuilderBindingExpression.java
+++ b/java/dagger/internal/codegen/SubcomponentBuilderBindingExpression.java
@@ -18,8 +18,6 @@
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.CodeBlock;
-import javax.lang.model.util.Elements;
-import javax.lang.model.util.Types;
/** A binding expression for a subcomponent builder that just invokes the constructor. */
final class SubcomponentBuilderBindingExpression extends SimpleInvocationBindingExpression {
@@ -30,9 +28,8 @@
BindingExpression delegate,
ContributionBinding binding,
String subcomponentBuilderName,
- Types types,
- Elements elements) {
- super(delegate, types, elements);
+ DaggerTypes types) {
+ super(delegate, types);
this.subcomponentBuilderName = subcomponentBuilderName;
this.binding = binding;
}