aboutsummaryrefslogtreecommitdiff
path: root/java/dagger/hilt/android/processor
diff options
context:
space:
mode:
Diffstat (limited to 'java/dagger/hilt/android/processor')
-rw-r--r--java/dagger/hilt/android/processor/BUILD15
-rw-r--r--java/dagger/hilt/android/processor/internal/AndroidClassNames.java5
-rw-r--r--java/dagger/hilt/android/processor/internal/androidentrypoint/ActivityGenerator.java52
-rw-r--r--java/dagger/hilt/android/processor/internal/androidentrypoint/AndroidEntryPointMetadata.java4
-rw-r--r--java/dagger/hilt/android/processor/internal/androidentrypoint/AndroidEntryPointProcessor.java5
-rw-r--r--java/dagger/hilt/android/processor/internal/androidentrypoint/ApplicationGenerator.java6
-rw-r--r--java/dagger/hilt/android/processor/internal/androidentrypoint/BUILD9
-rw-r--r--java/dagger/hilt/android/processor/internal/androidentrypoint/FragmentGenerator.java5
-rw-r--r--java/dagger/hilt/android/processor/internal/androidentrypoint/Generators.java12
-rw-r--r--java/dagger/hilt/android/processor/internal/androidentrypoint/HiltCompilerOptions.java71
-rw-r--r--java/dagger/hilt/android/processor/internal/customtestapplication/CustomTestApplicationGenerator.java2
-rw-r--r--java/dagger/hilt/android/processor/internal/uninstallmodules/BUILD48
-rw-r--r--java/dagger/hilt/android/processor/internal/uninstallmodules/UninstallModulesProcessor.java80
-rw-r--r--java/dagger/hilt/android/processor/internal/viewmodel/ViewModelModuleGenerator.kt5
14 files changed, 252 insertions, 67 deletions
diff --git a/java/dagger/hilt/android/processor/BUILD b/java/dagger/hilt/android/processor/BUILD
index ccf21033d..e116c4443 100644
--- a/java/dagger/hilt/android/processor/BUILD
+++ b/java/dagger/hilt/android/processor/BUILD
@@ -15,14 +15,14 @@
# Description:
# Hilt android processors.
-load("//:build_defs.bzl", "POM_VERSION")
+load("//:build_defs.bzl", "POM_VERSION_ALPHA")
load("//tools:maven.bzl", "gen_maven_artifact")
package(default_visibility = ["//:src"])
java_library(
name = "artifact-lib",
- tags = ["maven_coordinates=com.google.dagger:hilt-android-compiler:" + POM_VERSION],
+ tags = ["maven_coordinates=com.google.dagger:hilt-android-compiler:" + POM_VERSION_ALPHA],
visibility = ["//visibility:private"],
exports = [
"//java/dagger/hilt/processor:artifact-lib-shared",
@@ -31,23 +31,23 @@ java_library(
gen_maven_artifact(
name = "artifact",
- artifact_coordinates = "com.google.dagger:hilt-android-compiler:" + POM_VERSION,
+ artifact_coordinates = "com.google.dagger:hilt-android-compiler:" + POM_VERSION_ALPHA,
artifact_name = "Hilt Android Processor",
artifact_target = ":artifact-lib",
artifact_target_libs = [
"//java/dagger/hilt/android/processor/internal:android_classnames",
"//java/dagger/hilt/android/processor/internal:utils",
"//java/dagger/hilt/android/processor/internal/androidentrypoint:android_generators",
+ "//java/dagger/hilt/android/processor/internal/androidentrypoint:compiler_options",
"//java/dagger/hilt/android/processor/internal/androidentrypoint:metadata",
"//java/dagger/hilt/android/processor/internal/androidentrypoint:processor_lib",
"//java/dagger/hilt/android/processor/internal/bindvalue:bind_value_processor_lib",
"//java/dagger/hilt/android/processor/internal/customtestapplication:processor_lib",
"//java/dagger/hilt/android/processor/internal/viewmodel:validation_plugin_lib",
+ "//java/dagger/hilt/android/processor/internal/uninstallmodules:processor_lib",
"//java/dagger/hilt/android/processor/internal/viewmodel:processor_lib",
- "//java/dagger/hilt/processor/internal:aggregated_elements",
"//java/dagger/hilt/processor/internal:base_processor",
"//java/dagger/hilt/processor/internal:classnames",
- "//java/dagger/hilt/processor/internal:compiler_options",
"//java/dagger/hilt/processor/internal:component_descriptor",
"//java/dagger/hilt/processor/internal:component_names",
"//java/dagger/hilt/processor/internal:components",
@@ -55,22 +55,17 @@ gen_maven_artifact(
"//java/dagger/hilt/processor/internal:processor_errors",
"//java/dagger/hilt/processor/internal:processors",
"//java/dagger/hilt/processor/internal/aggregateddeps:component_dependencies",
- "//java/dagger/hilt/processor/internal/aggregateddeps:pkg_private_metadata",
"//java/dagger/hilt/processor/internal/aggregateddeps:processor_lib",
"//java/dagger/hilt/processor/internal/aliasof:alias_ofs",
"//java/dagger/hilt/processor/internal/aliasof:processor_lib",
"//java/dagger/hilt/processor/internal/definecomponent:define_components",
"//java/dagger/hilt/processor/internal/definecomponent:processor_lib",
- "//java/dagger/hilt/processor/internal/earlyentrypoint:aggregated_early_entry_point_metadata",
- "//java/dagger/hilt/processor/internal/earlyentrypoint:processor_lib",
"//java/dagger/hilt/processor/internal/generatesrootinput:generates_root_inputs",
"//java/dagger/hilt/processor/internal/generatesrootinput:processor_lib",
"//java/dagger/hilt/processor/internal/originatingelement:processor_lib",
"//java/dagger/hilt/processor/internal/root:processor_lib",
"//java/dagger/hilt/processor/internal/root:root_metadata",
"//java/dagger/hilt/processor/internal/root:root_type",
- "//java/dagger/hilt/processor/internal/uninstallmodules:processor_lib",
- "//java/dagger/hilt/processor/internal/uninstallmodules:aggregated_uninstall_modules_metadata",
],
artifact_target_maven_deps = [
"com.google.auto:auto-common",
diff --git a/java/dagger/hilt/android/processor/internal/AndroidClassNames.java b/java/dagger/hilt/android/processor/internal/AndroidClassNames.java
index d37092003..915ae519f 100644
--- a/java/dagger/hilt/android/processor/internal/AndroidClassNames.java
+++ b/java/dagger/hilt/android/processor/internal/AndroidClassNames.java
@@ -113,10 +113,5 @@ public final class AndroidClassNames {
public static final ClassName SAVED_STATE_HANDLE =
get("androidx.lifecycle", "SavedStateHandle");
- public static final ClassName ON_CONTEXT_AVAILABLE_LISTENER =
- get("androidx.activity.contextaware", "OnContextAvailableListener");
- public static final ClassName INJECT_VIA_ON_CONTEXT_AVAILABLE_LISTENER =
- get("dagger.hilt.android", "InjectViaOnContextAvailableListener");
-
private AndroidClassNames() {}
}
diff --git a/java/dagger/hilt/android/processor/internal/androidentrypoint/ActivityGenerator.java b/java/dagger/hilt/android/processor/internal/androidentrypoint/ActivityGenerator.java
index 86fbaa712..ce9ad14c5 100644
--- a/java/dagger/hilt/android/processor/internal/androidentrypoint/ActivityGenerator.java
+++ b/java/dagger/hilt/android/processor/internal/androidentrypoint/ActivityGenerator.java
@@ -17,9 +17,9 @@
package dagger.hilt.android.processor.internal.androidentrypoint;
import com.squareup.javapoet.ClassName;
-import com.squareup.javapoet.CodeBlock;
import com.squareup.javapoet.JavaFile;
import com.squareup.javapoet.MethodSpec;
+import com.squareup.javapoet.ParameterSpec;
import com.squareup.javapoet.TypeSpec;
import com.squareup.javapoet.TypeVariableName;
import dagger.hilt.android.processor.internal.AndroidClassNames;
@@ -30,6 +30,7 @@ import javax.lang.model.element.Modifier;
/** Generates an Hilt Activity class for the @AndroidEntryPoint annotated class. */
public final class ActivityGenerator {
+
private final ProcessingEnvironment env;
private final AndroidEntryPointMetadata metadata;
private final ClassName generatedClassName;
@@ -55,11 +56,9 @@ public final class ActivityGenerator {
Generators.addGeneratedBaseClassJavadoc(builder, AndroidClassNames.ANDROID_ENTRY_POINT);
Processors.addGeneratedAnnotation(builder, env, getClass());
- Generators.copyConstructors(
- metadata.baseElement(),
- CodeBlock.builder().addStatement("_initHiltInternal()").build(),
- builder);
- builder.addMethod(init());
+ Generators.copyConstructors(metadata.baseElement(), builder);
+ builder.addMethod(onCreate());
+
metadata.baseElement().getTypeParameters().stream()
.map(TypeVariableName::get)
@@ -80,36 +79,29 @@ public final class ActivityGenerator {
.writeTo(env.getFiler());
}
- // private void init() {
- // addOnContextAvailableListener(new OnContextAvailableListener() {
- // @Override
- // public void onContextAvailable(Context context) {
- // inject();
- // }
- // });
+ // @CallSuper
+ // @Override
+ // protected void onCreate(@Nullable Bundle savedInstanceState) {
+ // inject();
+ // super.onCreate(savedInstanceState);
// }
- private MethodSpec init() {
- return MethodSpec.methodBuilder("_initHiltInternal")
- .addModifiers(Modifier.PRIVATE)
- .addStatement(
- "addOnContextAvailableListener($L)",
- TypeSpec.anonymousClassBuilder("")
- .addSuperinterface(AndroidClassNames.ON_CONTEXT_AVAILABLE_LISTENER)
- .addMethod(
- MethodSpec.methodBuilder("onContextAvailable")
- .addAnnotation(Override.class)
- .addModifiers(Modifier.PUBLIC)
- .addParameter(AndroidClassNames.CONTEXT, "context")
- .addStatement("inject()")
- .build())
+ private MethodSpec onCreate() {
+ return MethodSpec.methodBuilder("onCreate")
+ .addAnnotation(AndroidClassNames.CALL_SUPER)
+ .addAnnotation(Override.class)
+ .addModifiers(Modifier.PROTECTED)
+ .addParameter(
+ ParameterSpec.builder(AndroidClassNames.BUNDLE, "savedInstanceState")
+ .addAnnotation(AndroidClassNames.NULLABLE)
.build())
+ .addStatement("inject()")
+ .addStatement("super.onCreate(savedInstanceState)")
.build();
}
// @Override
// public ViewModelProvider.Factory getDefaultViewModelProviderFactory() {
- // return DefaultViewModelFactories.getActivityFactory(
- // this, super.getDefaultViewModelProviderFactory());
+ // return DefaultViewModelFactories.getActivityFactory(this);
// }
private MethodSpec getDefaultViewModelProviderFactory() {
return MethodSpec.methodBuilder("getDefaultViewModelProviderFactory")
@@ -117,7 +109,7 @@ public final class ActivityGenerator {
.addModifiers(Modifier.PUBLIC)
.returns(AndroidClassNames.VIEW_MODEL_PROVIDER_FACTORY)
.addStatement(
- "return $T.getActivityFactory(this, super.getDefaultViewModelProviderFactory())",
+ "return $T.getActivityFactory(this)",
AndroidClassNames.DEFAULT_VIEW_MODEL_FACTORIES)
.build();
}
diff --git a/java/dagger/hilt/android/processor/internal/androidentrypoint/AndroidEntryPointMetadata.java b/java/dagger/hilt/android/processor/internal/androidentrypoint/AndroidEntryPointMetadata.java
index c94f6a977..e5868f861 100644
--- a/java/dagger/hilt/android/processor/internal/androidentrypoint/AndroidEntryPointMetadata.java
+++ b/java/dagger/hilt/android/processor/internal/androidentrypoint/AndroidEntryPointMetadata.java
@@ -16,7 +16,7 @@
package dagger.hilt.android.processor.internal.androidentrypoint;
-import static dagger.hilt.processor.internal.HiltCompilerOptions.isAndroidSuperclassValidationDisabled;
+import static dagger.hilt.android.processor.internal.androidentrypoint.HiltCompilerOptions.BooleanOption.DISABLE_ANDROID_SUPERCLASS_VALIDATION;
import static dagger.internal.codegen.extension.DaggerStreams.toImmutableSet;
import com.google.auto.common.MoreElements;
@@ -245,7 +245,7 @@ public abstract class AndroidEntryPointMetadata {
final TypeElement baseElement;
final ClassName generatedClassName;
boolean requiresBytecodeInjection =
- isAndroidSuperclassValidationDisabled(androidEntryPointElement, env)
+ DISABLE_ANDROID_SUPERCLASS_VALIDATION.get(env)
&& MoreTypes.isTypeOf(Void.class, androidEntryPointClassValue.asType());
if (requiresBytecodeInjection) {
baseElement = MoreElements.asType(env.getTypeUtils().asElement(androidEntryPointElement.getSuperclass()));
diff --git a/java/dagger/hilt/android/processor/internal/androidentrypoint/AndroidEntryPointProcessor.java b/java/dagger/hilt/android/processor/internal/androidentrypoint/AndroidEntryPointProcessor.java
index cd3290b48..7bb9b9afe 100644
--- a/java/dagger/hilt/android/processor/internal/androidentrypoint/AndroidEntryPointProcessor.java
+++ b/java/dagger/hilt/android/processor/internal/androidentrypoint/AndroidEntryPointProcessor.java
@@ -44,6 +44,11 @@ public final class AndroidEntryPointProcessor extends BaseProcessor {
}
@Override
+ public Set<String> getSupportedOptions() {
+ return HiltCompilerOptions.getProcessorOptions();
+ }
+
+ @Override
public boolean delayErrors() {
return true;
}
diff --git a/java/dagger/hilt/android/processor/internal/androidentrypoint/ApplicationGenerator.java b/java/dagger/hilt/android/processor/internal/androidentrypoint/ApplicationGenerator.java
index 8d63cdbea..f16e06dee 100644
--- a/java/dagger/hilt/android/processor/internal/androidentrypoint/ApplicationGenerator.java
+++ b/java/dagger/hilt/android/processor/internal/androidentrypoint/ApplicationGenerator.java
@@ -38,13 +38,11 @@ public final class ApplicationGenerator {
private final ProcessingEnvironment env;
private final AndroidEntryPointMetadata metadata;
private final ClassName wrapperClassName;
- private final ComponentNames componentNames;
public ApplicationGenerator(ProcessingEnvironment env, AndroidEntryPointMetadata metadata) {
this.env = env;
this.metadata = metadata;
- this.wrapperClassName = metadata.generatedClassName();
- this.componentNames = ComponentNames.withoutRenaming();
+ wrapperClassName = metadata.generatedClassName();
}
// @Generated("ApplicationGenerator")
@@ -109,7 +107,7 @@ public final class ApplicationGenerator {
// }
private TypeSpec creatorType() {
ClassName component =
- componentNames.generatedComponent(
+ ComponentNames.generatedComponent(
metadata.elementClassName(), AndroidClassNames.SINGLETON_COMPONENT);
return TypeSpec.anonymousClassBuilder("")
.addSuperinterface(AndroidClassNames.COMPONENT_SUPPLIER)
diff --git a/java/dagger/hilt/android/processor/internal/androidentrypoint/BUILD b/java/dagger/hilt/android/processor/internal/androidentrypoint/BUILD
index efbf9e47a..55e9ddc02 100644
--- a/java/dagger/hilt/android/processor/internal/androidentrypoint/BUILD
+++ b/java/dagger/hilt/android/processor/internal/androidentrypoint/BUILD
@@ -35,9 +35,11 @@ java_library(
srcs = ["AndroidEntryPointProcessor.java"],
deps = [
":android_generators",
+ ":compiler_options",
":metadata",
"//java/dagger/hilt/android/processor/internal:android_classnames",
"//java/dagger/hilt/processor/internal:base_processor",
+ "//java/dagger/hilt/processor/internal:processors",
"//java/dagger/internal/guava:collect",
"@google_bazel_common//third_party/java/auto:service",
"@google_bazel_common//third_party/java/incap",
@@ -79,9 +81,9 @@ java_library(
"AndroidEntryPointMetadata.java",
],
deps = [
+ ":compiler_options",
"//java/dagger/hilt/android/processor/internal:android_classnames",
"//java/dagger/hilt/processor/internal:classnames",
- "//java/dagger/hilt/processor/internal:compiler_options",
"//java/dagger/hilt/processor/internal:components",
"//java/dagger/hilt/processor/internal:kotlin",
"//java/dagger/hilt/processor/internal:processor_errors",
@@ -96,6 +98,11 @@ java_library(
],
)
+java_library(
+ name = "compiler_options",
+ srcs = ["HiltCompilerOptions.java"],
+)
+
filegroup(
name = "srcs_filegroup",
srcs = glob(["*"]),
diff --git a/java/dagger/hilt/android/processor/internal/androidentrypoint/FragmentGenerator.java b/java/dagger/hilt/android/processor/internal/androidentrypoint/FragmentGenerator.java
index 81b2b6156..4ef479f46 100644
--- a/java/dagger/hilt/android/processor/internal/androidentrypoint/FragmentGenerator.java
+++ b/java/dagger/hilt/android/processor/internal/androidentrypoint/FragmentGenerator.java
@@ -202,8 +202,7 @@ public final class FragmentGenerator {
// @Override
// public ViewModelProvider.Factory getDefaultViewModelProviderFactory() {
- // return DefaultViewModelFactories.getFragmentFactory(
- // this, super.getDefaultViewModelProviderFactory());
+ // return DefaultViewModelFactories.getFragmentFactory(this);
// }
private MethodSpec getDefaultViewModelProviderFactory() {
return MethodSpec.methodBuilder("getDefaultViewModelProviderFactory")
@@ -211,7 +210,7 @@ public final class FragmentGenerator {
.addModifiers(Modifier.PUBLIC)
.returns(AndroidClassNames.VIEW_MODEL_PROVIDER_FACTORY)
.addStatement(
- "return $T.getFragmentFactory(this, super.getDefaultViewModelProviderFactory())",
+ "return $T.getFragmentFactory(this)",
AndroidClassNames.DEFAULT_VIEW_MODEL_FACTORIES)
.build();
}
diff --git a/java/dagger/hilt/android/processor/internal/androidentrypoint/Generators.java b/java/dagger/hilt/android/processor/internal/androidentrypoint/Generators.java
index 91df537c9..daadd032d 100644
--- a/java/dagger/hilt/android/processor/internal/androidentrypoint/Generators.java
+++ b/java/dagger/hilt/android/processor/internal/androidentrypoint/Generators.java
@@ -319,12 +319,6 @@ final class Generators {
.endControlFlow();
}
- // Only add @Override if an ancestor extends a generated Hilt class.
- // When using bytecode injection, this isn't always guaranteed.
- if (metadata.overridesAndroidEntryPointClass()
- && ancestorExtendsGeneratedHiltClass(metadata)) {
- methodSpecBuilder.addAnnotation(Override.class);
- }
typeSpecBuilder.addField(injectedField(metadata));
switch (metadata.androidType()) {
@@ -332,6 +326,12 @@ final class Generators {
case FRAGMENT:
case VIEW:
case SERVICE:
+ // Only add @Override if an ancestor extends a generated Hilt class.
+ // When using bytecode injection, this isn't always guaranteed.
+ if (metadata.overridesAndroidEntryPointClass()
+ && ancestorExtendsGeneratedHiltClass(metadata)) {
+ methodSpecBuilder.addAnnotation(Override.class);
+ }
methodSpecBuilder
.beginControlFlow("if (!injected)")
.addStatement("injected = true")
diff --git a/java/dagger/hilt/android/processor/internal/androidentrypoint/HiltCompilerOptions.java b/java/dagger/hilt/android/processor/internal/androidentrypoint/HiltCompilerOptions.java
new file mode 100644
index 000000000..577410d81
--- /dev/null
+++ b/java/dagger/hilt/android/processor/internal/androidentrypoint/HiltCompilerOptions.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2020 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.hilt.android.processor.internal.androidentrypoint;
+
+import java.util.Arrays;
+import java.util.Set;
+import java.util.stream.Collectors;
+import javax.annotation.processing.ProcessingEnvironment;
+
+/** Hilt annotation processor options. */
+// TODO(danysantiago): Consider consolidating with Dagger compiler options logic.
+// TODO(user): Move this class to dagger/hilt/processor/internal
+public final class HiltCompilerOptions {
+
+ /** Processor options which can have true or false values. */
+ public enum BooleanOption {
+ /**
+ * Flag that disables validating the superclass of @AndroidEntryPoint are Hilt_ generated,
+ * classes. This flag is to be used internally by the Gradle plugin, enabling the bytecode
+ * transformation to change the superclass.
+ */
+ DISABLE_ANDROID_SUPERCLASS_VALIDATION(
+ "android.internal.disableAndroidSuperclassValidation", false),
+
+ /** Flag that disables check on modules to be annotated with @InstallIn. */
+ DISABLE_MODULES_HAVE_INSTALL_IN_CHECK("disableModulesHaveInstallInCheck", false);
+
+ private final String name;
+ private final boolean defaultValue;
+
+ BooleanOption(String name, boolean defaultValue) {
+ this.name = name;
+ this.defaultValue = defaultValue;
+ }
+
+ public boolean get(ProcessingEnvironment env) {
+ String value = env.getOptions().get(getQualifiedName());
+ if (value == null) {
+ return defaultValue;
+ }
+ // TODO(danysantiago): Strictly verify input, either 'true' or 'false' and nothing else.
+ return Boolean.parseBoolean(value);
+ }
+
+ public String getQualifiedName() {
+ return "dagger.hilt." + name;
+ }
+ }
+
+ public static Set<String> getProcessorOptions() {
+ return Arrays.stream(BooleanOption.values())
+ .map(BooleanOption::getQualifiedName)
+ .collect(Collectors.toSet());
+ }
+
+ private HiltCompilerOptions() {}
+}
diff --git a/java/dagger/hilt/android/processor/internal/customtestapplication/CustomTestApplicationGenerator.java b/java/dagger/hilt/android/processor/internal/customtestapplication/CustomTestApplicationGenerator.java
index 4f7f1bd6f..51b7ef466 100644
--- a/java/dagger/hilt/android/processor/internal/customtestapplication/CustomTestApplicationGenerator.java
+++ b/java/dagger/hilt/android/processor/internal/customtestapplication/CustomTestApplicationGenerator.java
@@ -109,7 +109,7 @@ final class CustomTestApplicationGenerator {
return MethodSpec.methodBuilder("componentManager")
.addAnnotation(Override.class)
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
- .returns(ParameterizedTypeName.get(ClassNames.GENERATED_COMPONENT_MANAGER, TypeName.OBJECT))
+ .returns(TypeName.OBJECT)
.addStatement("return $N", COMPONENT_MANAGER)
.build();
}
diff --git a/java/dagger/hilt/android/processor/internal/uninstallmodules/BUILD b/java/dagger/hilt/android/processor/internal/uninstallmodules/BUILD
new file mode 100644
index 000000000..73c46061e
--- /dev/null
+++ b/java/dagger/hilt/android/processor/internal/uninstallmodules/BUILD
@@ -0,0 +1,48 @@
+# Copyright (C) 2020 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.
+
+# Description:
+# A processor for @dagger.hilt.android.testing.UninstallModules.
+
+package(default_visibility = ["//:src"])
+
+java_plugin(
+ name = "processor",
+ generates_api = 1,
+ processor_class = "dagger.hilt.android.processor.internal.uninstallmodules.UninstallModulesProcessor",
+ deps = [":processor_lib"],
+)
+
+java_library(
+ name = "processor_lib",
+ srcs = [
+ "UninstallModulesProcessor.java",
+ ],
+ deps = [
+ "//java/dagger/hilt/processor/internal:base_processor",
+ "//java/dagger/hilt/processor/internal:classnames",
+ "//java/dagger/hilt/processor/internal:processor_errors",
+ "//java/dagger/hilt/processor/internal:processors",
+ "//java/dagger/internal/codegen/extension",
+ "//java/dagger/internal/guava:collect",
+ "@google_bazel_common//third_party/java/auto:service",
+ "@google_bazel_common//third_party/java/incap",
+ "@maven//:com_google_auto_auto_common",
+ ],
+)
+
+filegroup(
+ name = "srcs_filegroup",
+ srcs = glob(["*"]),
+)
diff --git a/java/dagger/hilt/android/processor/internal/uninstallmodules/UninstallModulesProcessor.java b/java/dagger/hilt/android/processor/internal/uninstallmodules/UninstallModulesProcessor.java
new file mode 100644
index 000000000..e92f0f0a4
--- /dev/null
+++ b/java/dagger/hilt/android/processor/internal/uninstallmodules/UninstallModulesProcessor.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2020 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.hilt.android.processor.internal.uninstallmodules;
+
+import static dagger.internal.codegen.extension.DaggerStreams.toImmutableList;
+import static net.ltgt.gradle.incap.IncrementalAnnotationProcessorType.ISOLATING;
+
+import com.google.auto.common.MoreElements;
+import com.google.auto.service.AutoService;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import dagger.hilt.processor.internal.BaseProcessor;
+import dagger.hilt.processor.internal.ClassNames;
+import dagger.hilt.processor.internal.ProcessorErrors;
+import dagger.hilt.processor.internal.Processors;
+import java.util.Set;
+import javax.annotation.processing.Processor;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.TypeElement;
+import net.ltgt.gradle.incap.IncrementalAnnotationProcessor;
+
+/** Validates {@link dagger.hilt.android.testing.UninstallModules} usages. */
+@IncrementalAnnotationProcessor(ISOLATING)
+@AutoService(Processor.class)
+public final class UninstallModulesProcessor extends BaseProcessor {
+
+ @Override
+ public Set<String> getSupportedAnnotationTypes() {
+ return ImmutableSet.of(ClassNames.IGNORE_MODULES.toString());
+ }
+
+ @Override
+ public void processEach(TypeElement annotation, Element element) throws Exception {
+ // TODO(bcorso): Consider using RootType to check this?
+ // TODO(bcorso): Loosen this restriction to allow defining sets of ignored modules in libraries.
+ ProcessorErrors.checkState(
+ MoreElements.isType(element)
+ && Processors.hasAnnotation(element, ClassNames.HILT_ANDROID_TEST),
+ element,
+ "@%s should only be used on test classes annotated with @%s, but found: %s",
+ annotation.getSimpleName(),
+ ClassNames.HILT_ANDROID_TEST.simpleName(),
+ element);
+
+ ImmutableList<TypeElement> invalidModules =
+ Processors.getAnnotationClassValues(
+ getElementUtils(),
+ Processors.getAnnotationMirror(element, ClassNames.IGNORE_MODULES),
+ "value")
+ .stream()
+ .filter(
+ module ->
+ !(Processors.hasAnnotation(module, ClassNames.MODULE)
+ && Processors.hasAnnotation(module, ClassNames.INSTALL_IN)))
+ .collect(toImmutableList());
+
+ ProcessorErrors.checkState(
+ invalidModules.isEmpty(),
+ // TODO(b/152801981): Point to the annotation value rather than the annotated element.
+ element,
+ "@%s should only include modules annotated with both @Module and @InstallIn, but found: "
+ + "%s.",
+ annotation.getSimpleName(),
+ invalidModules);
+ }
+}
diff --git a/java/dagger/hilt/android/processor/internal/viewmodel/ViewModelModuleGenerator.kt b/java/dagger/hilt/android/processor/internal/viewmodel/ViewModelModuleGenerator.kt
index 1bc2e93bf..846f7d261 100644
--- a/java/dagger/hilt/android/processor/internal/viewmodel/ViewModelModuleGenerator.kt
+++ b/java/dagger/hilt/android/processor/internal/viewmodel/ViewModelModuleGenerator.kt
@@ -93,11 +93,6 @@ internal class ViewModelModuleGenerator(
component = AndroidClassNames.VIEW_MODEL_COMPONENT
)
.addModifiers(Modifier.ABSTRACT)
- .addMethod(
- MethodSpec.constructorBuilder()
- .addModifiers(Modifier.PRIVATE)
- .build()
- )
.addMethod(getViewModelBindsMethod())
.build()