Compile Dagger with Dagger.
This imports the opensource dagger compiler from the dagger-2.14.1 tag and all of its dependencies as a fat jar. Note that this is only used to build the dagger-compiler jar, and as such has no implications for downstream users whatsoever.
This change is mostly just adding some @Inject constructors and some qualifiers. A follow up will add DI for the ComponentWriters, which is itself a large change so I wanted to keep this reasonably sized.
RELNOTES=n/a
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=180827435
diff --git a/java/dagger/internal/codegen/AnnotationCreatorGenerator.java b/java/dagger/internal/codegen/AnnotationCreatorGenerator.java
index 8f457ee..37b8fb7 100644
--- a/java/dagger/internal/codegen/AnnotationCreatorGenerator.java
+++ b/java/dagger/internal/codegen/AnnotationCreatorGenerator.java
@@ -41,6 +41,7 @@
import java.util.Optional;
import java.util.Set;
import javax.annotation.processing.Filer;
+import javax.inject.Inject;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.ExecutableElement;
@@ -78,6 +79,7 @@
*/
class AnnotationCreatorGenerator extends SourceFileGenerator<TypeElement> {
+ @Inject
AnnotationCreatorGenerator(Filer filer, Elements elements) {
super(filer, elements);
}
diff --git a/java/dagger/internal/codegen/AnyBindingMethodValidator.java b/java/dagger/internal/codegen/AnyBindingMethodValidator.java
index e9a3843..354a4f8 100644
--- a/java/dagger/internal/codegen/AnyBindingMethodValidator.java
+++ b/java/dagger/internal/codegen/AnyBindingMethodValidator.java
@@ -18,18 +18,17 @@
import static com.google.auto.common.MoreElements.isAnnotationPresent;
import static com.google.common.collect.Iterables.getOnlyElement;
-import static com.google.common.collect.Maps.uniqueIndex;
import static dagger.internal.codegen.DaggerElements.isAnyAnnotationPresent;
import static dagger.internal.codegen.DaggerStreams.toImmutableSet;
import static dagger.internal.codegen.ErrorMessages.tooManyBindingMethodAnnotations;
import static dagger.internal.codegen.Util.reentrantComputeIfAbsent;
-import static java.util.Arrays.asList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import java.lang.annotation.Annotation;
import java.util.HashMap;
import java.util.Map;
+import javax.inject.Inject;
import javax.lang.model.element.ExecutableElement;
/** Validates any binding method. */
@@ -39,8 +38,10 @@
private final Map<ExecutableElement, ValidationReport<ExecutableElement>> reports =
new HashMap<>();
- AnyBindingMethodValidator(BindingMethodValidator... validators) {
- this.validators = uniqueIndex(asList(validators), BindingMethodValidator::methodAnnotation);
+ @Inject
+ AnyBindingMethodValidator(
+ ImmutableMap<Class<? extends Annotation>, BindingMethodValidator> validators) {
+ this.validators = validators;
}
/** Returns the binding method annotations considered by this validator. */
diff --git a/java/dagger/internal/codegen/BUILD b/java/dagger/internal/codegen/BUILD
index f10ee5e..66d6117 100644
--- a/java/dagger/internal/codegen/BUILD
+++ b/java/dagger/internal/codegen/BUILD
@@ -34,6 +34,7 @@
)
CODEGEN_PLUGINS = [
+ ":bootstrap_compiler_plugin",
# TODO(cgruber): Enable Beta checker.
]
@@ -254,6 +255,8 @@
java_library(
name = "processor",
srcs = [
+ "BindingGraphPluginsModule.java",
+ "BindingMethodValidatorsModule.java",
"CanReleaseReferencesProcessingStep.java",
"ComponentHjarProcessingStep.java",
"ComponentProcessingStep.java",
@@ -262,6 +265,7 @@
"InjectProcessingStep.java",
"MapKeyProcessingStep.java",
"ModuleProcessingStep.java",
+ "ProcessingOptions.java",
"ProductionExecutorModuleProcessingStep.java",
],
plugins = CODEGEN_PLUGINS,
@@ -293,6 +297,20 @@
],
)
+java_import(
+ name = "bootstrap_compiler",
+ jars = ["bootstrap_compiler_deploy.jar"],
+ visibility = ["//visibility:private"],
+)
+
+java_plugin(
+ name = "bootstrap_compiler_plugin",
+ generates_api = 1,
+ processor_class = "dagger.internal.codegen.ComponentProcessor",
+ visibility = ["//visibility:private"],
+ deps = [":bootstrap_compiler"],
+)
+
load("//tools:javadoc.bzl", "javadoc_library")
javadoc_library(
@@ -307,6 +325,7 @@
testonly = 1,
srcs = CODEGEN_SRCS,
javacopts = DOCLINT_HTML_AND_SYNTAX + DOCLINT_REFERENCES,
+ plugins = CODEGEN_PLUGINS,
deps = CODEGEN_DEPS,
)
diff --git a/java/dagger/internal/codegen/BindingDeclarationFormatter.java b/java/dagger/internal/codegen/BindingDeclarationFormatter.java
index b17ce14..b97cec3 100644
--- a/java/dagger/internal/codegen/BindingDeclarationFormatter.java
+++ b/java/dagger/internal/codegen/BindingDeclarationFormatter.java
@@ -31,6 +31,7 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
+import javax.inject.Inject;
import javax.lang.model.element.Element;
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;
@@ -49,6 +50,7 @@
private final MethodSignatureFormatter methodSignatureFormatter;
+ @Inject
BindingDeclarationFormatter(MethodSignatureFormatter methodSignatureFormatter) {
this.methodSignatureFormatter = methodSignatureFormatter;
}
diff --git a/java/dagger/internal/codegen/BindingGraph.java b/java/dagger/internal/codegen/BindingGraph.java
index c66ec82..c81cb39 100644
--- a/java/dagger/internal/codegen/BindingGraph.java
+++ b/java/dagger/internal/codegen/BindingGraph.java
@@ -262,6 +262,7 @@
private final ProvisionBinding.Factory provisionBindingFactory;
private final ProductionBinding.Factory productionBindingFactory;
+ @Inject
Factory(
Elements elements,
InjectBindingRegistry injectBindingRegistry,
diff --git a/java/dagger/internal/codegen/BindingGraphPluginsModule.java b/java/dagger/internal/codegen/BindingGraphPluginsModule.java
new file mode 100644
index 0000000..d646433
--- /dev/null
+++ b/java/dagger/internal/codegen/BindingGraphPluginsModule.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2018 The Dagger Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dagger.internal.codegen;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Maps;
+import dagger.Module;
+import dagger.Provides;
+import java.util.Map;
+import java.util.ServiceLoader;
+import java.util.Set;
+import javax.annotation.processing.Filer;
+import javax.inject.Singleton;
+
+/**
+ * Provides and configures the {@link BindingGraphPlugin}s available on the annotation processing
+ * path.
+ */
+@Module
+interface BindingGraphPluginsModule {
+ @Provides
+ @Singleton
+ static ImmutableList<BindingGraphPlugin> bindingGraphPlugins(
+ Filer filer, @ProcessingOptions Map<String, String> processingOptions) {
+ ClassLoader classLoader = BindingGraphPluginsModule.class.getClassLoader();
+ ImmutableList<BindingGraphPlugin> bindingGraphPlugins =
+ ImmutableList.copyOf(ServiceLoader.load(BindingGraphPlugin.class, classLoader));
+ for (BindingGraphPlugin plugin : bindingGraphPlugins) {
+ plugin.setFiler(filer);
+ Set<String> supportedOptions = plugin.getSupportedOptions();
+ if (!supportedOptions.isEmpty()) {
+ plugin.setOptions(Maps.filterKeys(processingOptions, supportedOptions::contains));
+ }
+ }
+ return bindingGraphPlugins;
+ }
+}
diff --git a/java/dagger/internal/codegen/BindingGraphValidator.java b/java/dagger/internal/codegen/BindingGraphValidator.java
index 525f5b8..b126f29 100644
--- a/java/dagger/internal/codegen/BindingGraphValidator.java
+++ b/java/dagger/internal/codegen/BindingGraphValidator.java
@@ -120,6 +120,7 @@
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
+import javax.inject.Inject;
import javax.inject.Provider;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.ExecutableElement;
@@ -148,6 +149,7 @@
private final DependencyRequestFormatter dependencyRequestFormatter;
private final KeyFactory keyFactory;
+ @Inject
BindingGraphValidator(
Elements elements,
DaggerTypes types,
@@ -161,7 +163,7 @@
this.elements = elements;
this.types = types;
this.compilerOptions = compilerOptions;
- this.injectValidator = injectValidator;
+ this.injectValidator = injectValidator.whenGeneratingCode();
this.injectBindingRegistry = injectBindingRegistry;
this.bindingDeclarationFormatter = bindingDeclarationFormatter;
this.methodSignatureFormatter = methodSignatureFormatter;
diff --git a/java/dagger/internal/codegen/BindingMethodProcessingStep.java b/java/dagger/internal/codegen/BindingMethodProcessingStep.java
index cc1e164..50c2081 100644
--- a/java/dagger/internal/codegen/BindingMethodProcessingStep.java
+++ b/java/dagger/internal/codegen/BindingMethodProcessingStep.java
@@ -25,6 +25,7 @@
import java.lang.annotation.Annotation;
import java.util.Set;
import javax.annotation.processing.Messager;
+import javax.inject.Inject;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
@@ -34,6 +35,7 @@
private final Messager messager;
private final AnyBindingMethodValidator anyBindingMethodValidator;
+ @Inject
BindingMethodProcessingStep(
Messager messager, AnyBindingMethodValidator anyBindingMethodValidator) {
this.messager = messager;
diff --git a/java/dagger/internal/codegen/BindingMethodValidatorsModule.java b/java/dagger/internal/codegen/BindingMethodValidatorsModule.java
new file mode 100644
index 0000000..28a272d
--- /dev/null
+++ b/java/dagger/internal/codegen/BindingMethodValidatorsModule.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2018 The Dagger Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dagger.internal.codegen;
+
+import static com.google.common.collect.Maps.uniqueIndex;
+
+import com.google.common.collect.ImmutableMap;
+import dagger.Binds;
+import dagger.Module;
+import dagger.Provides;
+import dagger.multibindings.IntoSet;
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
+/**
+ * Binds each {@link BindingMethodValidator} into a map, keyed by {@link
+ * BindingMethodValidator#methodAnnotation()}.
+ */
+@Module
+interface BindingMethodValidatorsModule {
+ @Provides
+ static ImmutableMap<Class<? extends Annotation>, BindingMethodValidator> indexValidators(
+ Set<BindingMethodValidator> validators) {
+ return uniqueIndex(validators, BindingMethodValidator::methodAnnotation);
+ }
+
+ @Binds
+ @IntoSet
+ BindingMethodValidator provides(ProvidesMethodValidator validator);
+
+ @Binds
+ @IntoSet
+ BindingMethodValidator produces(ProducesMethodValidator validator);
+
+ @Binds
+ @IntoSet
+ BindingMethodValidator binds(BindsMethodValidator validator);
+
+ @Binds
+ @IntoSet
+ BindingMethodValidator multibinds(MultibindsMethodValidator validator);
+
+ @Binds
+ @IntoSet
+ BindingMethodValidator bindsOptionalOf(BindsOptionalOfMethodValidator validator);
+}
diff --git a/java/dagger/internal/codegen/BindsInstanceProcessingStep.java b/java/dagger/internal/codegen/BindsInstanceProcessingStep.java
index a86fcf8..a500eb8 100644
--- a/java/dagger/internal/codegen/BindsInstanceProcessingStep.java
+++ b/java/dagger/internal/codegen/BindsInstanceProcessingStep.java
@@ -36,6 +36,7 @@
import java.util.Set;
import java.util.stream.Stream;
import javax.annotation.processing.Messager;
+import javax.inject.Inject;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
@@ -59,6 +60,7 @@
private final Messager messager;
+ @Inject
BindsInstanceProcessingStep(Messager messager) {
this.messager = messager;
}
diff --git a/java/dagger/internal/codegen/BindsMethodValidator.java b/java/dagger/internal/codegen/BindsMethodValidator.java
index 34e0df1..0d63a15 100644
--- a/java/dagger/internal/codegen/BindsMethodValidator.java
+++ b/java/dagger/internal/codegen/BindsMethodValidator.java
@@ -29,6 +29,7 @@
import dagger.Module;
import dagger.producers.ProducerModule;
import java.util.List;
+import javax.inject.Inject;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.TypeMirror;
@@ -42,6 +43,7 @@
private final Types types;
private final BindsTypeChecker bindsTypeChecker;
+ @Inject
BindsMethodValidator(Elements elements, Types types) {
super(
elements,
diff --git a/java/dagger/internal/codegen/BindsOptionalOfMethodValidator.java b/java/dagger/internal/codegen/BindsOptionalOfMethodValidator.java
index 7497ed5..e7a6501 100644
--- a/java/dagger/internal/codegen/BindsOptionalOfMethodValidator.java
+++ b/java/dagger/internal/codegen/BindsOptionalOfMethodValidator.java
@@ -31,6 +31,7 @@
import dagger.BindsOptionalOf;
import dagger.Module;
import dagger.producers.ProducerModule;
+import javax.inject.Inject;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Elements;
@@ -41,6 +42,7 @@
private final Types types;
+ @Inject
BindsOptionalOfMethodValidator(Elements elements, Types types) {
super(
elements,
diff --git a/java/dagger/internal/codegen/BindsTypeChecker.java b/java/dagger/internal/codegen/BindsTypeChecker.java
index 1685534..9ddff45 100644
--- a/java/dagger/internal/codegen/BindsTypeChecker.java
+++ b/java/dagger/internal/codegen/BindsTypeChecker.java
@@ -24,6 +24,7 @@
import com.google.common.collect.ImmutableList;
import java.util.Map;
import java.util.Set;
+import javax.inject.Inject;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.DeclaredType;
@@ -41,6 +42,7 @@
private final Types types;
private final Elements elements;
+ @Inject
BindsTypeChecker(Types types, Elements elements) {
this.types = types;
this.elements = elements;
diff --git a/java/dagger/internal/codegen/BuilderValidator.java b/java/dagger/internal/codegen/BuilderValidator.java
index 7b80356..40ac148 100644
--- a/java/dagger/internal/codegen/BuilderValidator.java
+++ b/java/dagger/internal/codegen/BuilderValidator.java
@@ -32,6 +32,7 @@
import java.util.Arrays;
import java.util.List;
import java.util.Set;
+import javax.inject.Inject;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier;
@@ -52,6 +53,7 @@
private final DaggerElements elements;
private final Types types;
+ @Inject
BuilderValidator(DaggerElements elements, Types types) {
this.elements = elements;
this.types = types;
diff --git a/java/dagger/internal/codegen/CanReleaseReferencesProcessingStep.java b/java/dagger/internal/codegen/CanReleaseReferencesProcessingStep.java
index 52a31c1..f3333da 100644
--- a/java/dagger/internal/codegen/CanReleaseReferencesProcessingStep.java
+++ b/java/dagger/internal/codegen/CanReleaseReferencesProcessingStep.java
@@ -26,6 +26,7 @@
import java.lang.annotation.Annotation;
import java.util.Set;
import javax.annotation.processing.Messager;
+import javax.inject.Inject;
import javax.inject.Scope;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
@@ -40,6 +41,7 @@
private final CanReleaseReferencesValidator canReleaseReferencesValidator;
private final AnnotationCreatorGenerator annotationCreatorGenerator;
+ @Inject
CanReleaseReferencesProcessingStep(
Messager messager,
CanReleaseReferencesValidator canReleaseReferencesValidator,
diff --git a/java/dagger/internal/codegen/CanReleaseReferencesValidator.java b/java/dagger/internal/codegen/CanReleaseReferencesValidator.java
index 7c97cb4..85b8bac 100644
--- a/java/dagger/internal/codegen/CanReleaseReferencesValidator.java
+++ b/java/dagger/internal/codegen/CanReleaseReferencesValidator.java
@@ -24,6 +24,7 @@
import dagger.releasablereferences.CanReleaseReferences;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import javax.inject.Inject;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
@@ -36,6 +37,8 @@
*/
final class CanReleaseReferencesValidator {
+ @Inject CanReleaseReferencesValidator() {}
+
ValidationReport<TypeElement> validate(TypeElement annotatedElement) {
ValidationReport.Builder<TypeElement> report = ValidationReport.about(annotatedElement);
checkNoSourceRetention(annotatedElement, report);
diff --git a/java/dagger/internal/codegen/ComponentDescriptor.java b/java/dagger/internal/codegen/ComponentDescriptor.java
index 5aa0b3b..ba2b0fb 100644
--- a/java/dagger/internal/codegen/ComponentDescriptor.java
+++ b/java/dagger/internal/codegen/ComponentDescriptor.java
@@ -63,6 +63,7 @@
import java.util.List;
import java.util.Optional;
import java.util.Set;
+import javax.inject.Inject;
import javax.inject.Provider;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
@@ -449,6 +450,7 @@
private final DependencyRequestFactory dependencyRequestFactory;
private final ModuleDescriptor.Factory moduleDescriptorFactory;
+ @Inject
Factory(
DaggerElements elements,
Types types,
diff --git a/java/dagger/internal/codegen/ComponentGenerator.java b/java/dagger/internal/codegen/ComponentGenerator.java
index 2f1885a..53aa68f 100644
--- a/java/dagger/internal/codegen/ComponentGenerator.java
+++ b/java/dagger/internal/codegen/ComponentGenerator.java
@@ -23,6 +23,7 @@
import dagger.Component;
import java.util.Optional;
import javax.annotation.processing.Filer;
+import javax.inject.Inject;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements;
@@ -39,6 +40,7 @@
private final KeyFactory keyFactory;
private final CompilerOptions compilerOptions;
+ @Inject
ComponentGenerator(
Filer filer,
Elements elements,
diff --git a/java/dagger/internal/codegen/ComponentHierarchyValidator.java b/java/dagger/internal/codegen/ComponentHierarchyValidator.java
index 5cf7ce7..a921825 100644
--- a/java/dagger/internal/codegen/ComponentHierarchyValidator.java
+++ b/java/dagger/internal/codegen/ComponentHierarchyValidator.java
@@ -33,6 +33,7 @@
import dagger.internal.codegen.ComponentDescriptor.ComponentMethodDescriptor;
import dagger.model.Scope;
import java.util.Map;
+import javax.inject.Inject;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
@@ -40,6 +41,7 @@
final class ComponentHierarchyValidator {
private final CompilerOptions compilerOptions;
+ @Inject
ComponentHierarchyValidator(CompilerOptions compilerOptions) {
this.compilerOptions = compilerOptions;
}
diff --git a/java/dagger/internal/codegen/ComponentHjarProcessingStep.java b/java/dagger/internal/codegen/ComponentHjarProcessingStep.java
index 3f726f8..4d98516 100644
--- a/java/dagger/internal/codegen/ComponentHjarProcessingStep.java
+++ b/java/dagger/internal/codegen/ComponentHjarProcessingStep.java
@@ -53,6 +53,7 @@
import java.util.stream.Stream;
import javax.annotation.processing.Filer;
import javax.annotation.processing.Messager;
+import javax.inject.Inject;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
@@ -83,6 +84,7 @@
private final ComponentValidator componentValidator;
private final ComponentDescriptor.Factory componentDescriptorFactory;
+ @Inject
ComponentHjarProcessingStep(
Elements elements,
Types types,
diff --git a/java/dagger/internal/codegen/ComponentProcessingStep.java b/java/dagger/internal/codegen/ComponentProcessingStep.java
index 589fafa..8a93ce0 100644
--- a/java/dagger/internal/codegen/ComponentProcessingStep.java
+++ b/java/dagger/internal/codegen/ComponentProcessingStep.java
@@ -35,6 +35,7 @@
import java.util.Map;
import java.util.Set;
import javax.annotation.processing.Messager;
+import javax.inject.Inject;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
@@ -55,6 +56,7 @@
private final ComponentGenerator componentGenerator;
private final ImmutableList<BindingGraphPlugin> bindingGraphPlugins;
+ @Inject
ComponentProcessingStep(
Messager messager,
ComponentValidator componentValidator,
@@ -64,7 +66,7 @@
ComponentDescriptor.Factory componentDescriptorFactory,
BindingGraph.Factory bindingGraphFactory,
ComponentGenerator componentGenerator,
- Iterable<BindingGraphPlugin> bindingGraphPlugins) {
+ ImmutableList<BindingGraphPlugin> bindingGraphPlugins) {
this.messager = messager;
this.componentValidator = componentValidator;
this.builderValidator = builderValidator;
@@ -73,7 +75,7 @@
this.componentDescriptorFactory = componentDescriptorFactory;
this.bindingGraphFactory = bindingGraphFactory;
this.componentGenerator = componentGenerator;
- this.bindingGraphPlugins = ImmutableList.copyOf(bindingGraphPlugins);
+ this.bindingGraphPlugins = bindingGraphPlugins;
}
@Override
diff --git a/java/dagger/internal/codegen/ComponentProcessor.java b/java/dagger/internal/codegen/ComponentProcessor.java
index 3196400..a7b072e 100644
--- a/java/dagger/internal/codegen/ComponentProcessor.java
+++ b/java/dagger/internal/codegen/ComponentProcessor.java
@@ -20,15 +20,25 @@
import com.google.auto.service.AutoService;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Maps;
+import com.google.errorprone.annotations.CanIgnoreReturnValue;
+import com.google.errorprone.annotations.CheckReturnValue;
import com.google.googlejavaformat.java.filer.FormattingFiler;
-import java.util.ServiceLoader;
+import dagger.Binds;
+import dagger.BindsInstance;
+import dagger.Component;
+import dagger.Module;
+import dagger.Provides;
+import java.util.Map;
import java.util.Set;
import javax.annotation.processing.Filer;
import javax.annotation.processing.Messager;
import javax.annotation.processing.Processor;
import javax.annotation.processing.RoundEnvironment;
+import javax.inject.Inject;
+import javax.inject.Singleton;
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
@@ -41,10 +51,10 @@
*/
@AutoService(Processor.class)
public final class ComponentProcessor extends BasicAnnotationProcessor {
- private InjectBindingRegistry injectBindingRegistry;
- private FactoryGenerator factoryGenerator;
- private MembersInjectorGenerator membersInjectorGenerator;
- private ImmutableList<BindingGraphPlugin> bindingGraphPlugins;
+ @Inject InjectBindingRegistry injectBindingRegistry;
+ @Inject FactoryGenerator factoryGenerator;
+ @Inject MembersInjectorGenerator membersInjectorGenerator;
+ @Inject ImmutableList<BindingGraphPlugin> bindingGraphPlugins;
@Override
public SourceVersion getSupportedSourceVersion() {
@@ -64,178 +74,88 @@
@Override
protected Iterable<? extends ProcessingStep> initSteps() {
Messager messager = processingEnv.getMessager();
- DaggerTypes types = new DaggerTypes(processingEnv);
DaggerElements elements = new DaggerElements(processingEnv);
CompilerOptions compilerOptions = CompilerOptions.create(processingEnv, elements);
+ ProcessorComponent.Builder builder =
+ DaggerComponentProcessor_ProcessorComponent.builder()
+ .types(processingEnv.getTypeUtils())
+ .elements(elements)
+ .messager(messager)
+ .processingOptions(processingEnv.getOptions())
+ .compilerOptions(compilerOptions);
Filer filer;
if (compilerOptions.headerCompilation()) {
- filer = processingEnv.getFiler();
+ builder.filer(processingEnv.getFiler());
} else {
- filer = new FormattingFiler(processingEnv.getFiler());
+ builder.filer(new FormattingFiler(processingEnv.getFiler()));
}
- this.bindingGraphPlugins =
- ImmutableList.copyOf(
- ServiceLoader.load(BindingGraphPlugin.class, getClass().getClassLoader()));
- for (BindingGraphPlugin plugin : bindingGraphPlugins) {
- plugin.setFiler(filer);
- Set<String> supportedOptions = plugin.getSupportedOptions();
- if (!supportedOptions.isEmpty()) {
- plugin.setOptions(Maps.filterKeys(processingEnv.getOptions(), supportedOptions::contains));
+ ProcessorComponent component = builder.build();
+ component.inject(this);
+ return component.processingSteps();
+ }
+
+ @Singleton
+ @Component(
+ modules = {
+ BindingMethodValidatorsModule.class,
+ BindingGraphPluginsModule.class,
+ ProcessingStepsModule.class,
}
+ )
+ interface ProcessorComponent {
+ void inject(ComponentProcessor processor);
+ ImmutableList<ProcessingStep> processingSteps();
+
+ @CanIgnoreReturnValue
+ @Component.Builder
+ interface Builder {
+ @BindsInstance Builder messager(Messager messager);
+ @BindsInstance Builder filer(Filer filer);
+ @BindsInstance Builder types(Types types);
+ @BindsInstance Builder elements(Elements elements);
+ @BindsInstance Builder compilerOptions(CompilerOptions compilerOptions);
+ @BindsInstance Builder processingOptions(@ProcessingOptions Map<String, String> options);
+ @CheckReturnValue ProcessorComponent build();
+ }
+ }
+
+ @Module
+ interface ProcessingStepsModule {
+ @Provides
+ static ImmutableList<ProcessingStep> processingSteps(
+ MapKeyProcessingStep mapKeyProcessingStep,
+ ForReleasableReferencesValidator forReleasableReferencesValidator,
+ CanReleaseReferencesProcessingStep canReleaseReferencesProcessingStep,
+ InjectProcessingStep injectProcessingStep,
+ MonitoringModuleProcessingStep monitoringModuleProcessingStep,
+ ProductionExecutorModuleProcessingStep productionExecutorModuleProcessingStep,
+ MultibindingAnnotationsProcessingStep multibindingAnnotationsProcessingStep,
+ BindsInstanceProcessingStep bindsInstanceProcessingStep,
+ ModuleProcessingStep moduleProcessingStep,
+ ComponentProcessingStep componentProcessingStep,
+ ComponentHjarProcessingStep componentHjarProcessingStep,
+ BindingMethodProcessingStep bindingMethodProcessingStep,
+ CompilerOptions compilerOptions) {
+ return ImmutableList.of(
+ mapKeyProcessingStep,
+ forReleasableReferencesValidator,
+ canReleaseReferencesProcessingStep,
+ injectProcessingStep,
+ monitoringModuleProcessingStep,
+ productionExecutorModuleProcessingStep,
+ multibindingAnnotationsProcessingStep,
+ bindsInstanceProcessingStep,
+ moduleProcessingStep,
+ compilerOptions.headerCompilation()
+ ? componentHjarProcessingStep
+ : componentProcessingStep,
+ bindingMethodProcessingStep);
}
- MethodSignatureFormatter methodSignatureFormatter = new MethodSignatureFormatter(types);
- BindingDeclarationFormatter bindingDeclarationFormatter =
- new BindingDeclarationFormatter(methodSignatureFormatter);
- DependencyRequestFormatter dependencyRequestFormatter = new DependencyRequestFormatter(types);
-
- KeyFactory keyFactory = new KeyFactory(types, elements);
-
- InjectValidator injectValidator = new InjectValidator(types, elements, compilerOptions);
- InjectValidator injectValidatorWhenGeneratingCode = injectValidator.whenGeneratingCode();
- ProvidesMethodValidator providesMethodValidator = new ProvidesMethodValidator(elements, types);
- ProducesMethodValidator producesMethodValidator = new ProducesMethodValidator(elements, types);
- BindsMethodValidator bindsMethodValidator = new BindsMethodValidator(elements, types);
- MultibindsMethodValidator multibindsMethodValidator =
- new MultibindsMethodValidator(elements, types);
- BindsOptionalOfMethodValidator bindsOptionalOfMethodValidator =
- new BindsOptionalOfMethodValidator(elements, types);
- AnyBindingMethodValidator anyBindingMethodValidator =
- new AnyBindingMethodValidator(
- providesMethodValidator,
- producesMethodValidator,
- bindsMethodValidator,
- multibindsMethodValidator,
- bindsOptionalOfMethodValidator);
- ModuleValidator moduleValidator =
- new ModuleValidator(
- types,
- elements,
- anyBindingMethodValidator,
- methodSignatureFormatter);
- BuilderValidator builderValidator = new BuilderValidator(elements, types);
- ComponentValidator componentValidator =
- new ComponentValidator(elements, types, moduleValidator, builderValidator);
- MapKeyValidator mapKeyValidator = new MapKeyValidator(elements);
-
- DependencyRequestFactory dependencyRequestFactory =
- new DependencyRequestFactory(keyFactory, types);
- MembersInjectionBinding.Factory membersInjectionBindingFactory =
- new MembersInjectionBinding.Factory(elements, types, keyFactory, dependencyRequestFactory);
- ProvisionBinding.Factory provisionBindingFactory =
- new ProvisionBinding.Factory(
- types, keyFactory, dependencyRequestFactory, membersInjectionBindingFactory);
- ProductionBinding.Factory productionBindingFactory =
- new ProductionBinding.Factory(types, keyFactory, dependencyRequestFactory);
- MultibindingDeclaration.Factory multibindingDeclarationFactory =
- new MultibindingDeclaration.Factory(types, keyFactory);
- SubcomponentDeclaration.Factory subcomponentDeclarationFactory =
- new SubcomponentDeclaration.Factory(keyFactory);
-
- this.factoryGenerator = new FactoryGenerator(filer, elements, types, compilerOptions);
- this.membersInjectorGenerator = new MembersInjectorGenerator(filer, elements, types);
- ComponentGenerator componentGenerator =
- new ComponentGenerator(filer, elements, types, keyFactory, compilerOptions);
- ProducerFactoryGenerator producerFactoryGenerator =
- new ProducerFactoryGenerator(filer, elements, types, compilerOptions);
- MonitoringModuleGenerator monitoringModuleGenerator =
- new MonitoringModuleGenerator(filer, elements);
- ProductionExecutorModuleGenerator productionExecutorModuleGenerator =
- new ProductionExecutorModuleGenerator(filer, elements);
-
- DelegateDeclaration.Factory bindingDelegateDeclarationFactory =
- new DelegateDeclaration.Factory(types, keyFactory, dependencyRequestFactory);
- OptionalBindingDeclaration.Factory optionalBindingDeclarationFactory =
- new OptionalBindingDeclaration.Factory(keyFactory);
-
- this.injectBindingRegistry =
- new InjectBindingRegistryImpl(
- elements,
- types,
- messager,
- injectValidator,
- keyFactory,
- provisionBindingFactory,
- membersInjectionBindingFactory,
- compilerOptions);
-
- ModuleDescriptor.Factory moduleDescriptorFactory =
- new ModuleDescriptor.Factory(
- elements,
- provisionBindingFactory,
- productionBindingFactory,
- multibindingDeclarationFactory,
- bindingDelegateDeclarationFactory,
- subcomponentDeclarationFactory,
- optionalBindingDeclarationFactory);
-
- ComponentDescriptor.Factory componentDescriptorFactory = new ComponentDescriptor.Factory(
- elements, types, dependencyRequestFactory, moduleDescriptorFactory);
-
- BindingGraph.Factory bindingGraphFactory =
- new BindingGraph.Factory(
- elements,
- injectBindingRegistry,
- keyFactory,
- provisionBindingFactory,
- productionBindingFactory);
-
- AnnotationCreatorGenerator annotationCreatorGenerator =
- new AnnotationCreatorGenerator(filer, elements);
- UnwrappedMapKeyGenerator unwrappedMapKeyGenerator =
- new UnwrappedMapKeyGenerator(filer, elements);
- CanReleaseReferencesValidator canReleaseReferencesValidator =
- new CanReleaseReferencesValidator();
- ComponentHierarchyValidator componentHierarchyValidator =
- new ComponentHierarchyValidator(compilerOptions);
- BindingGraphValidator bindingGraphValidator =
- new BindingGraphValidator(
- elements,
- types,
- compilerOptions,
- injectValidatorWhenGeneratingCode,
- injectBindingRegistry,
- bindingDeclarationFormatter,
- methodSignatureFormatter,
- dependencyRequestFormatter,
- keyFactory);
-
- ProcessingStep componentProcessingStep =
- compilerOptions.headerCompilation()
- ? new ComponentHjarProcessingStep(
- elements, types, filer, messager, componentValidator, componentDescriptorFactory)
- : new ComponentProcessingStep(
- messager,
- componentValidator,
- builderValidator,
- componentHierarchyValidator,
- bindingGraphValidator,
- componentDescriptorFactory,
- bindingGraphFactory,
- componentGenerator,
- bindingGraphPlugins);
- return ImmutableList.of(
- new MapKeyProcessingStep(
- messager, types, mapKeyValidator, annotationCreatorGenerator, unwrappedMapKeyGenerator),
- new ForReleasableReferencesValidator(messager),
- new CanReleaseReferencesProcessingStep(
- messager, canReleaseReferencesValidator, annotationCreatorGenerator),
- new InjectProcessingStep(injectBindingRegistry),
- new MonitoringModuleProcessingStep(messager, monitoringModuleGenerator),
- new ProductionExecutorModuleProcessingStep(messager, productionExecutorModuleGenerator),
- new MultibindingAnnotationsProcessingStep(messager),
- new BindsInstanceProcessingStep(messager),
- new ModuleProcessingStep(
- messager,
- moduleValidator,
- provisionBindingFactory,
- factoryGenerator,
- productionBindingFactory,
- producerFactoryGenerator),
- componentProcessingStep,
- new BindingMethodProcessingStep(messager, anyBindingMethodValidator));
+ @Binds
+ InjectBindingRegistry injectBindingRegistry(InjectBindingRegistryImpl impl);
}
@Override
diff --git a/java/dagger/internal/codegen/ComponentValidator.java b/java/dagger/internal/codegen/ComponentValidator.java
index f4f626f..3b28962 100644
--- a/java/dagger/internal/codegen/ComponentValidator.java
+++ b/java/dagger/internal/codegen/ComponentValidator.java
@@ -50,6 +50,7 @@
import java.util.List;
import java.util.Optional;
import java.util.Set;
+import javax.inject.Inject;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
@@ -74,6 +75,7 @@
private final ModuleValidator moduleValidator;
private final BuilderValidator builderValidator;
+ @Inject
ComponentValidator(
Elements elements,
Types types,
diff --git a/java/dagger/internal/codegen/DaggerElements.java b/java/dagger/internal/codegen/DaggerElements.java
index 8620aba..a62a2f5 100644
--- a/java/dagger/internal/codegen/DaggerElements.java
+++ b/java/dagger/internal/codegen/DaggerElements.java
@@ -37,6 +37,7 @@
import java.util.Set;
import java.util.function.Predicate;
import javax.annotation.processing.ProcessingEnvironment;
+import javax.inject.Inject;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.AnnotationValue;
import javax.lang.model.element.Element;
@@ -56,6 +57,7 @@
private final Elements elements;
private final Types types;
+ @Inject
DaggerElements(Elements elements, Types types) {
this.elements = checkNotNull(elements);
this.types = checkNotNull(types);
diff --git a/java/dagger/internal/codegen/DaggerTypes.java b/java/dagger/internal/codegen/DaggerTypes.java
index 72ed8b5..5a9618e 100644
--- a/java/dagger/internal/codegen/DaggerTypes.java
+++ b/java/dagger/internal/codegen/DaggerTypes.java
@@ -28,6 +28,7 @@
import java.util.List;
import java.util.Optional;
import javax.annotation.processing.ProcessingEnvironment;
+import javax.inject.Inject;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.ArrayType;
@@ -48,6 +49,7 @@
private final Types types;
private final Elements elements;
+ @Inject
DaggerTypes(Types types, Elements elements) {
this.types = checkNotNull(types);
this.elements = checkNotNull(elements);
diff --git a/java/dagger/internal/codegen/DelegateDeclaration.java b/java/dagger/internal/codegen/DelegateDeclaration.java
index f1bf253..3a99feb 100644
--- a/java/dagger/internal/codegen/DelegateDeclaration.java
+++ b/java/dagger/internal/codegen/DelegateDeclaration.java
@@ -29,6 +29,7 @@
import dagger.internal.codegen.ContributionType.HasContributionType;
import dagger.model.DependencyRequest;
import java.util.Optional;
+import javax.inject.Inject;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
@@ -52,6 +53,7 @@
private final KeyFactory keyFactory;
private final DependencyRequestFactory dependencyRequestFactory;
+ @Inject
Factory(Types types, KeyFactory keyFactory, DependencyRequestFactory dependencyRequestFactory) {
this.types = types;
this.keyFactory = keyFactory;
diff --git a/java/dagger/internal/codegen/DependencyRequestFactory.java b/java/dagger/internal/codegen/DependencyRequestFactory.java
index 1c58c8f..b3de274 100644
--- a/java/dagger/internal/codegen/DependencyRequestFactory.java
+++ b/java/dagger/internal/codegen/DependencyRequestFactory.java
@@ -40,6 +40,7 @@
import dagger.model.RequestKind;
import java.util.List;
import java.util.Optional;
+import javax.inject.Inject;
import javax.inject.Provider;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
@@ -59,6 +60,7 @@
private final KeyFactory keyFactory;
private final DaggerTypes types;
+ @Inject
DependencyRequestFactory(KeyFactory keyFactory, DaggerTypes types) {
this.keyFactory = keyFactory;
this.types = types;
diff --git a/java/dagger/internal/codegen/DependencyRequestFormatter.java b/java/dagger/internal/codegen/DependencyRequestFormatter.java
index 6b07b90..6443d7d 100644
--- a/java/dagger/internal/codegen/DependencyRequestFormatter.java
+++ b/java/dagger/internal/codegen/DependencyRequestFormatter.java
@@ -69,6 +69,7 @@
private final DaggerTypes types;
+ @Inject
DependencyRequestFormatter(DaggerTypes types) {
this.types = types;
}
diff --git a/java/dagger/internal/codegen/FactoryGenerator.java b/java/dagger/internal/codegen/FactoryGenerator.java
index 0c5a26c..da77364 100644
--- a/java/dagger/internal/codegen/FactoryGenerator.java
+++ b/java/dagger/internal/codegen/FactoryGenerator.java
@@ -77,6 +77,7 @@
private final Types types;
private final CompilerOptions compilerOptions;
+ @Inject
FactoryGenerator(
Filer filer,
Elements elements,
diff --git a/java/dagger/internal/codegen/ForReleasableReferencesValidator.java b/java/dagger/internal/codegen/ForReleasableReferencesValidator.java
index 48947ed..452cb24 100644
--- a/java/dagger/internal/codegen/ForReleasableReferencesValidator.java
+++ b/java/dagger/internal/codegen/ForReleasableReferencesValidator.java
@@ -33,6 +33,7 @@
import java.lang.annotation.Annotation;
import java.util.Set;
import javax.annotation.processing.Messager;
+import javax.inject.Inject;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
@@ -42,6 +43,7 @@
private final Messager messager;
+ @Inject
ForReleasableReferencesValidator(Messager messager) {
this.messager = messager;
}
diff --git a/java/dagger/internal/codegen/InjectBindingRegistryImpl.java b/java/dagger/internal/codegen/InjectBindingRegistryImpl.java
index 67fc035..c6940ca 100644
--- a/java/dagger/internal/codegen/InjectBindingRegistryImpl.java
+++ b/java/dagger/internal/codegen/InjectBindingRegistryImpl.java
@@ -42,6 +42,7 @@
import java.util.Set;
import javax.annotation.processing.Messager;
import javax.inject.Inject;
+import javax.inject.Singleton;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.DeclaredType;
@@ -57,6 +58,7 @@
*
* @author Gregory Kick
*/
+@Singleton
final class InjectBindingRegistryImpl implements InjectBindingRegistry {
private final Elements elements;
private final DaggerTypes types;
@@ -152,6 +154,7 @@
private final BindingsCollection<MembersInjectionBinding> membersInjectionBindings =
new BindingsCollection<>(BindingType.MEMBERS_INJECTION);
+ @Inject
InjectBindingRegistryImpl(
Elements elements,
DaggerTypes types,
diff --git a/java/dagger/internal/codegen/InjectProcessingStep.java b/java/dagger/internal/codegen/InjectProcessingStep.java
index e9ca5fc..1a47031 100644
--- a/java/dagger/internal/codegen/InjectProcessingStep.java
+++ b/java/dagger/internal/codegen/InjectProcessingStep.java
@@ -38,6 +38,7 @@
final class InjectProcessingStep implements BasicAnnotationProcessor.ProcessingStep {
private final InjectBindingRegistry injectBindingRegistry;
+ @Inject
InjectProcessingStep(InjectBindingRegistry injectBindingRegistry) {
this.injectBindingRegistry = injectBindingRegistry;
}
diff --git a/java/dagger/internal/codegen/InjectValidator.java b/java/dagger/internal/codegen/InjectValidator.java
index 9eaa82a..b01129b 100644
--- a/java/dagger/internal/codegen/InjectValidator.java
+++ b/java/dagger/internal/codegen/InjectValidator.java
@@ -77,6 +77,7 @@
private final CompilerOptions compilerOptions;
private final Optional<Diagnostic.Kind> privateAndStaticInjectionDiagnosticKind;
+ @Inject
InjectValidator(Types types, Elements elements, CompilerOptions compilerOptions) {
this(types, elements, compilerOptions, Optional.empty());
}
diff --git a/java/dagger/internal/codegen/KeyFactory.java b/java/dagger/internal/codegen/KeyFactory.java
index d00f102..5f8650b 100644
--- a/java/dagger/internal/codegen/KeyFactory.java
+++ b/java/dagger/internal/codegen/KeyFactory.java
@@ -55,6 +55,7 @@
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.stream.Stream;
+import javax.inject.Inject;
import javax.inject.Provider;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.ExecutableElement;
@@ -70,6 +71,7 @@
private final DaggerTypes types;
private final Elements elements;
+ @Inject
KeyFactory(DaggerTypes types, Elements elements) {
this.types = checkNotNull(types);
this.elements = checkNotNull(elements);
diff --git a/java/dagger/internal/codegen/MapKeyProcessingStep.java b/java/dagger/internal/codegen/MapKeyProcessingStep.java
index 241e617..80d892f 100644
--- a/java/dagger/internal/codegen/MapKeyProcessingStep.java
+++ b/java/dagger/internal/codegen/MapKeyProcessingStep.java
@@ -28,6 +28,7 @@
import java.lang.annotation.Annotation;
import java.util.Set;
import javax.annotation.processing.Messager;
+import javax.inject.Inject;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.TypeElement;
@@ -48,6 +49,7 @@
private final AnnotationCreatorGenerator annotationCreatorGenerator;
private final UnwrappedMapKeyGenerator unwrappedMapKeyGenerator;
+ @Inject
MapKeyProcessingStep(
Messager messager,
Types types,
diff --git a/java/dagger/internal/codegen/MapKeyValidator.java b/java/dagger/internal/codegen/MapKeyValidator.java
index ca4bed2..965f58b 100644
--- a/java/dagger/internal/codegen/MapKeyValidator.java
+++ b/java/dagger/internal/codegen/MapKeyValidator.java
@@ -23,6 +23,7 @@
import dagger.MapKey;
import java.util.List;
+import javax.inject.Inject;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
@@ -39,6 +40,7 @@
final class MapKeyValidator {
private final Elements elements;
+ @Inject
MapKeyValidator(Elements elements) {
this.elements = elements;
}
diff --git a/java/dagger/internal/codegen/MembersInjectionBinding.java b/java/dagger/internal/codegen/MembersInjectionBinding.java
index 7fe1721..89127d4 100644
--- a/java/dagger/internal/codegen/MembersInjectionBinding.java
+++ b/java/dagger/internal/codegen/MembersInjectionBinding.java
@@ -146,6 +146,7 @@
private final KeyFactory keyFactory;
private final DependencyRequestFactory dependencyRequestFactory;
+ @Inject
Factory(
Elements elements,
DaggerTypes types,
diff --git a/java/dagger/internal/codegen/MembersInjectorGenerator.java b/java/dagger/internal/codegen/MembersInjectorGenerator.java
index e945f5a..220aead 100644
--- a/java/dagger/internal/codegen/MembersInjectorGenerator.java
+++ b/java/dagger/internal/codegen/MembersInjectorGenerator.java
@@ -54,6 +54,7 @@
import java.util.Map.Entry;
import java.util.Optional;
import javax.annotation.processing.Filer;
+import javax.inject.Inject;
import javax.lang.model.element.Element;
import javax.lang.model.util.Elements;
import javax.lang.model.util.Types;
@@ -67,6 +68,7 @@
final class MembersInjectorGenerator extends SourceFileGenerator<MembersInjectionBinding> {
private final Types types;
+ @Inject
MembersInjectorGenerator(Filer filer, Elements elements, Types types) {
super(filer, elements);
this.types = types;
diff --git a/java/dagger/internal/codegen/MethodSignatureFormatter.java b/java/dagger/internal/codegen/MethodSignatureFormatter.java
index 66054ed..fc67351 100644
--- a/java/dagger/internal/codegen/MethodSignatureFormatter.java
+++ b/java/dagger/internal/codegen/MethodSignatureFormatter.java
@@ -25,6 +25,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Optional;
+import javax.inject.Inject;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
@@ -43,6 +44,7 @@
final class MethodSignatureFormatter extends Formatter<ExecutableElement> {
private final Types types;
+ @Inject
MethodSignatureFormatter(Types types) {
this.types = types;
}
diff --git a/java/dagger/internal/codegen/ModuleDescriptor.java b/java/dagger/internal/codegen/ModuleDescriptor.java
index 49f4d66..a8082fe 100644
--- a/java/dagger/internal/codegen/ModuleDescriptor.java
+++ b/java/dagger/internal/codegen/ModuleDescriptor.java
@@ -50,6 +50,7 @@
import java.util.LinkedHashSet;
import java.util.Optional;
import java.util.Set;
+import javax.inject.Inject;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
@@ -144,6 +145,7 @@
private final SubcomponentDeclaration.Factory subcomponentDeclarationFactory;
private final OptionalBindingDeclaration.Factory optionalBindingDeclarationFactory;
+ @Inject
Factory(
DaggerElements elements,
ProvisionBinding.Factory provisionBindingFactory,
diff --git a/java/dagger/internal/codegen/ModuleProcessingStep.java b/java/dagger/internal/codegen/ModuleProcessingStep.java
index 87ca7ff..dfd313a 100644
--- a/java/dagger/internal/codegen/ModuleProcessingStep.java
+++ b/java/dagger/internal/codegen/ModuleProcessingStep.java
@@ -32,6 +32,7 @@
import java.util.List;
import java.util.Set;
import javax.annotation.processing.Messager;
+import javax.inject.Inject;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
@@ -49,6 +50,7 @@
private final ProducerFactoryGenerator producerFactoryGenerator;
private final Set<TypeElement> processedModuleElements = Sets.newLinkedHashSet();
+ @Inject
ModuleProcessingStep(
Messager messager,
ModuleValidator moduleValidator,
diff --git a/java/dagger/internal/codegen/ModuleValidator.java b/java/dagger/internal/codegen/ModuleValidator.java
index ec4ffc2..f12dffb 100644
--- a/java/dagger/internal/codegen/ModuleValidator.java
+++ b/java/dagger/internal/codegen/ModuleValidator.java
@@ -70,6 +70,8 @@
import java.util.Map.Entry;
import java.util.Optional;
import java.util.Set;
+import javax.inject.Inject;
+import javax.inject.Singleton;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.AnnotationValue;
import javax.lang.model.element.Element;
@@ -90,6 +92,7 @@
* @author Gregory Kick
* @since 2.0
*/
+@Singleton
final class ModuleValidator {
private static final ImmutableSet<Class<? extends Annotation>> SUBCOMPONENT_TYPES =
ImmutableSet.of(Subcomponent.class, ProductionSubcomponent.class);
@@ -117,6 +120,7 @@
private final Map<TypeElement, ValidationReport<TypeElement>> cache = new HashMap<>();
private final Set<TypeElement> knownModules = new HashSet<>();
+ @Inject
ModuleValidator(
Types types,
Elements elements,
diff --git a/java/dagger/internal/codegen/MonitoringModuleGenerator.java b/java/dagger/internal/codegen/MonitoringModuleGenerator.java
index 5f2603e..ae47987 100644
--- a/java/dagger/internal/codegen/MonitoringModuleGenerator.java
+++ b/java/dagger/internal/codegen/MonitoringModuleGenerator.java
@@ -37,6 +37,7 @@
import dagger.producers.monitoring.internal.Monitors;
import java.util.Optional;
import javax.annotation.processing.Filer;
+import javax.inject.Inject;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements;
@@ -44,6 +45,7 @@
/** Generates a monitoring module for use with production components. */
final class MonitoringModuleGenerator extends SourceFileGenerator<TypeElement> {
+ @Inject
MonitoringModuleGenerator(Filer filer, Elements elements) {
super(filer, elements);
}
diff --git a/java/dagger/internal/codegen/MonitoringModuleProcessingStep.java b/java/dagger/internal/codegen/MonitoringModuleProcessingStep.java
index 1bd095e..e947589 100644
--- a/java/dagger/internal/codegen/MonitoringModuleProcessingStep.java
+++ b/java/dagger/internal/codegen/MonitoringModuleProcessingStep.java
@@ -25,6 +25,7 @@
import java.lang.annotation.Annotation;
import java.util.Set;
import javax.annotation.processing.Messager;
+import javax.inject.Inject;
import javax.lang.model.element.Element;
/**
@@ -35,6 +36,7 @@
private final Messager messager;
private final MonitoringModuleGenerator monitoringModuleGenerator;
+ @Inject
MonitoringModuleProcessingStep(
Messager messager, MonitoringModuleGenerator monitoringModuleGenerator) {
this.messager = messager;
diff --git a/java/dagger/internal/codegen/MultibindingAnnotationsProcessingStep.java b/java/dagger/internal/codegen/MultibindingAnnotationsProcessingStep.java
index df977c2..f646b5c 100644
--- a/java/dagger/internal/codegen/MultibindingAnnotationsProcessingStep.java
+++ b/java/dagger/internal/codegen/MultibindingAnnotationsProcessingStep.java
@@ -33,6 +33,7 @@
import java.util.Map.Entry;
import java.util.Set;
import javax.annotation.processing.Messager;
+import javax.inject.Inject;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
import javax.tools.Diagnostic.Kind;
@@ -48,6 +49,7 @@
private final Messager messager;
+ @Inject
MultibindingAnnotationsProcessingStep(Messager messager) {
this.messager = messager;
}
diff --git a/java/dagger/internal/codegen/MultibindingDeclaration.java b/java/dagger/internal/codegen/MultibindingDeclaration.java
index dead425..4fa25f5 100644
--- a/java/dagger/internal/codegen/MultibindingDeclaration.java
+++ b/java/dagger/internal/codegen/MultibindingDeclaration.java
@@ -30,6 +30,7 @@
import java.util.Map;
import java.util.Optional;
import java.util.Set;
+import javax.inject.Inject;
import javax.inject.Provider;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
@@ -75,6 +76,7 @@
private final Types types;
private final KeyFactory keyFactory;
+ @Inject
Factory(Types types, KeyFactory keyFactory) {
this.types = types;
this.keyFactory = keyFactory;
diff --git a/java/dagger/internal/codegen/MultibindsMethodValidator.java b/java/dagger/internal/codegen/MultibindsMethodValidator.java
index 3be0aa9..fe91086 100644
--- a/java/dagger/internal/codegen/MultibindsMethodValidator.java
+++ b/java/dagger/internal/codegen/MultibindsMethodValidator.java
@@ -28,7 +28,7 @@
import dagger.Module;
import dagger.multibindings.Multibinds;
import dagger.producers.ProducerModule;
-import java.lang.annotation.Annotation;
+import javax.inject.Inject;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Elements;
@@ -38,20 +38,13 @@
class MultibindsMethodValidator extends BindingMethodValidator {
/** Creates a validator for {@link Multibinds @Multibinds} methods. */
+ @Inject
MultibindsMethodValidator(Elements elements, Types types) {
- this(elements, types, Multibinds.class, ImmutableSet.of(Module.class, ProducerModule.class));
- }
-
- protected MultibindsMethodValidator(
- Elements elements,
- Types types,
- Class<? extends Annotation> methodAnnotation,
- Iterable<? extends Class<? extends Annotation>> enclosingElementAnnotations) {
super(
elements,
types,
- methodAnnotation,
- enclosingElementAnnotations,
+ Multibinds.class,
+ ImmutableSet.of(Module.class, ProducerModule.class),
MUST_BE_ABSTRACT,
NO_EXCEPTIONS,
NO_MULTIBINDINGS);
diff --git a/java/dagger/internal/codegen/OptionalBindingDeclaration.java b/java/dagger/internal/codegen/OptionalBindingDeclaration.java
index 2f32a70..f5e9364 100644
--- a/java/dagger/internal/codegen/OptionalBindingDeclaration.java
+++ b/java/dagger/internal/codegen/OptionalBindingDeclaration.java
@@ -23,6 +23,7 @@
import dagger.BindsOptionalOf;
import dagger.model.Key;
import java.util.Optional;
+import javax.inject.Inject;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
@@ -43,6 +44,7 @@
static class Factory {
private final KeyFactory keyFactory;
+ @Inject
Factory(KeyFactory keyFactory) {
this.keyFactory = keyFactory;
}
diff --git a/java/dagger/internal/codegen/OptionalBindingExpression.java b/java/dagger/internal/codegen/OptionalBindingExpression.java
index 86f0bcd..e1f1da8 100644
--- a/java/dagger/internal/codegen/OptionalBindingExpression.java
+++ b/java/dagger/internal/codegen/OptionalBindingExpression.java
@@ -23,6 +23,7 @@
import com.squareup.javapoet.CodeBlock;
import dagger.internal.codegen.OptionalType.OptionalKind;
import dagger.model.DependencyRequest;
+import javax.inject.Inject;
import javax.lang.model.util.Types;
/** A binding expression for optional bindings. */
@@ -31,6 +32,7 @@
private final ComponentBindingExpressions componentBindingExpressions;
private final Types types;
+ @Inject
OptionalBindingExpression(
ProvisionBinding binding,
BindingExpression delegate,
diff --git a/java/dagger/internal/codegen/ProcessingOptions.java b/java/dagger/internal/codegen/ProcessingOptions.java
new file mode 100644
index 0000000..105452a
--- /dev/null
+++ b/java/dagger/internal/codegen/ProcessingOptions.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2018 The Dagger Authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dagger.internal.codegen;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import javax.inject.Qualifier;
+
+/**
+ * A qualifier for the {@link javax.annotation.processing.ProcessingEnvironment#getOptions()
+ * processing options} passed to the current invocation of {@code javac}.
+ */
+@Retention(RUNTIME)
+@Qualifier
+@interface ProcessingOptions {}
diff --git a/java/dagger/internal/codegen/ProducerFactoryGenerator.java b/java/dagger/internal/codegen/ProducerFactoryGenerator.java
index a945690..d3344ec 100644
--- a/java/dagger/internal/codegen/ProducerFactoryGenerator.java
+++ b/java/dagger/internal/codegen/ProducerFactoryGenerator.java
@@ -64,6 +64,7 @@
import java.util.Map;
import java.util.Optional;
import javax.annotation.processing.Filer;
+import javax.inject.Inject;
import javax.lang.model.element.Element;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Elements;
@@ -79,6 +80,7 @@
private final Types types;
private final CompilerOptions compilerOptions;
+ @Inject
ProducerFactoryGenerator(
Filer filer, Elements elements, Types types, CompilerOptions compilerOptions) {
super(filer, elements);
diff --git a/java/dagger/internal/codegen/ProducesMethodValidator.java b/java/dagger/internal/codegen/ProducesMethodValidator.java
index 715aacc..69e889a 100644
--- a/java/dagger/internal/codegen/ProducesMethodValidator.java
+++ b/java/dagger/internal/codegen/ProducesMethodValidator.java
@@ -34,6 +34,7 @@
import dagger.producers.Produces;
import java.util.Optional;
import java.util.Set;
+import javax.inject.Inject;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.type.DeclaredType;
import javax.lang.model.type.TypeMirror;
@@ -48,6 +49,7 @@
*/
final class ProducesMethodValidator extends BindingMethodValidator {
+ @Inject
ProducesMethodValidator(Elements elements, Types types) {
super(
elements,
diff --git a/java/dagger/internal/codegen/ProductionBinding.java b/java/dagger/internal/codegen/ProductionBinding.java
index 6a7501b..5d827fb 100644
--- a/java/dagger/internal/codegen/ProductionBinding.java
+++ b/java/dagger/internal/codegen/ProductionBinding.java
@@ -36,6 +36,7 @@
import dagger.producers.Producer;
import java.util.Optional;
import java.util.stream.Stream;
+import javax.inject.Inject;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.ExecutableType;
@@ -133,6 +134,7 @@
private final KeyFactory keyFactory;
private final DependencyRequestFactory dependencyRequestFactory;
+ @Inject
Factory(Types types, KeyFactory keyFactory, DependencyRequestFactory dependencyRequestFactory) {
this.types = types;
this.keyFactory = keyFactory;
diff --git a/java/dagger/internal/codegen/ProductionExecutorModuleGenerator.java b/java/dagger/internal/codegen/ProductionExecutorModuleGenerator.java
index 525ae1e..b069349 100644
--- a/java/dagger/internal/codegen/ProductionExecutorModuleGenerator.java
+++ b/java/dagger/internal/codegen/ProductionExecutorModuleGenerator.java
@@ -32,6 +32,7 @@
import java.util.Optional;
import java.util.concurrent.Executor;
import javax.annotation.processing.Filer;
+import javax.inject.Inject;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements;
@@ -40,6 +41,7 @@
// TODO(beder): Replace this with a single class when the producers client library exists.
final class ProductionExecutorModuleGenerator extends SourceFileGenerator<TypeElement> {
+ @Inject
ProductionExecutorModuleGenerator(Filer filer, Elements elements) {
super(filer, elements);
}
diff --git a/java/dagger/internal/codegen/ProductionExecutorModuleProcessingStep.java b/java/dagger/internal/codegen/ProductionExecutorModuleProcessingStep.java
index d508a51..07cd490 100644
--- a/java/dagger/internal/codegen/ProductionExecutorModuleProcessingStep.java
+++ b/java/dagger/internal/codegen/ProductionExecutorModuleProcessingStep.java
@@ -25,6 +25,7 @@
import java.lang.annotation.Annotation;
import java.util.Set;
import javax.annotation.processing.Messager;
+import javax.inject.Inject;
import javax.lang.model.element.Element;
/**
@@ -35,6 +36,7 @@
private final Messager messager;
private final ProductionExecutorModuleGenerator productionExecutorModuleGenerator;
+ @Inject
ProductionExecutorModuleProcessingStep(
Messager messager, ProductionExecutorModuleGenerator productionExecutorModuleGenerator) {
this.messager = messager;
diff --git a/java/dagger/internal/codegen/ProvidesMethodValidator.java b/java/dagger/internal/codegen/ProvidesMethodValidator.java
index 9feadc7..6f1e6d7 100644
--- a/java/dagger/internal/codegen/ProvidesMethodValidator.java
+++ b/java/dagger/internal/codegen/ProvidesMethodValidator.java
@@ -25,6 +25,7 @@
import dagger.Module;
import dagger.Provides;
import dagger.producers.ProducerModule;
+import javax.inject.Inject;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.util.Elements;
@@ -38,6 +39,7 @@
*/
final class ProvidesMethodValidator extends BindingMethodValidator {
+ @Inject
ProvidesMethodValidator(Elements elements, Types types) {
super(
elements,
diff --git a/java/dagger/internal/codegen/ProvisionBinding.java b/java/dagger/internal/codegen/ProvisionBinding.java
index 218330e..4cb7107 100644
--- a/java/dagger/internal/codegen/ProvisionBinding.java
+++ b/java/dagger/internal/codegen/ProvisionBinding.java
@@ -146,6 +146,7 @@
private final DependencyRequestFactory dependencyRequestFactory;
private final MembersInjectionBinding.Factory membersInjectionBindingFactory;
+ @Inject
Factory(
DaggerTypes types,
KeyFactory keyFactory,
diff --git a/java/dagger/internal/codegen/SubcomponentDeclaration.java b/java/dagger/internal/codegen/SubcomponentDeclaration.java
index af557ad..1d17e59 100644
--- a/java/dagger/internal/codegen/SubcomponentDeclaration.java
+++ b/java/dagger/internal/codegen/SubcomponentDeclaration.java
@@ -26,6 +26,7 @@
import com.google.common.collect.ImmutableSet;
import dagger.model.Key;
import java.util.Optional;
+import javax.inject.Inject;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
@@ -57,7 +58,8 @@
static class Factory {
private final KeyFactory keyFactory;
- public Factory(KeyFactory keyFactory) {
+ @Inject
+ Factory(KeyFactory keyFactory) {
this.keyFactory = keyFactory;
}
diff --git a/java/dagger/internal/codegen/UnwrappedMapKeyGenerator.java b/java/dagger/internal/codegen/UnwrappedMapKeyGenerator.java
index 86f8d84..23d2d6e 100644
--- a/java/dagger/internal/codegen/UnwrappedMapKeyGenerator.java
+++ b/java/dagger/internal/codegen/UnwrappedMapKeyGenerator.java
@@ -19,6 +19,7 @@
import dagger.MapKey;
import java.util.Set;
import javax.annotation.processing.Filer;
+import javax.inject.Inject;
import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements;
@@ -53,6 +54,7 @@
*/
final class UnwrappedMapKeyGenerator extends AnnotationCreatorGenerator {
+ @Inject
UnwrappedMapKeyGenerator(Filer filer, Elements elements) {
super(filer, elements);
}
diff --git a/java/dagger/internal/codegen/bootstrap_compiler_deploy.jar b/java/dagger/internal/codegen/bootstrap_compiler_deploy.jar
new file mode 100644
index 0000000..0485fa2
--- /dev/null
+++ b/java/dagger/internal/codegen/bootstrap_compiler_deploy.jar
Binary files differ