aboutsummaryrefslogtreecommitdiff
path: root/java/dagger/hilt/android/processor/internal/uninstallmodules
diff options
context:
space:
mode:
Diffstat (limited to 'java/dagger/hilt/android/processor/internal/uninstallmodules')
-rw-r--r--java/dagger/hilt/android/processor/internal/uninstallmodules/BUILD48
-rw-r--r--java/dagger/hilt/android/processor/internal/uninstallmodules/UninstallModulesProcessor.java80
2 files changed, 128 insertions, 0 deletions
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);
+ }
+}