aboutsummaryrefslogtreecommitdiff
path: root/java/dagger/hilt/processor/internal
diff options
context:
space:
mode:
authorBrad Corso <bcorso@google.com>2021-04-05 13:10:21 -0700
committerDagger Team <dagger-dev+copybara@google.com>2021-04-05 13:11:41 -0700
commit32694a939f9864e7cf59a310599ebfaee62722a1 (patch)
tree4fd3bb88b9f68e823cdca95c5e8cf6eb671fe0ea /java/dagger/hilt/processor/internal
parent0336b1a8f4dd2fac1ebc924f6a7e3b13aa017f56 (diff)
downloaddagger2-32694a939f9864e7cf59a310599ebfaee62722a1.tar.gz
Pull AliasOfPropagatedDataMetadata into its own source file.
RELNOTES=N/A PiperOrigin-RevId: 366859328
Diffstat (limited to 'java/dagger/hilt/processor/internal')
-rw-r--r--java/dagger/hilt/processor/internal/ClassNames.java2
-rw-r--r--java/dagger/hilt/processor/internal/aliasof/AliasOfPropagatedDataGenerator.java2
-rw-r--r--java/dagger/hilt/processor/internal/aliasof/AliasOfPropagatedDataMetadata.java97
-rw-r--r--java/dagger/hilt/processor/internal/aliasof/AliasOfs.java96
-rw-r--r--java/dagger/hilt/processor/internal/aliasof/BUILD5
-rw-r--r--java/dagger/hilt/processor/internal/root/RootMetadata.java2
6 files changed, 128 insertions, 76 deletions
diff --git a/java/dagger/hilt/processor/internal/ClassNames.java b/java/dagger/hilt/processor/internal/ClassNames.java
index 2fa090083..ac6b34623 100644
--- a/java/dagger/hilt/processor/internal/ClassNames.java
+++ b/java/dagger/hilt/processor/internal/ClassNames.java
@@ -86,6 +86,8 @@ public final class ClassNames {
public static final ClassName ALIAS_OF = get("dagger.hilt.migration", "AliasOf");
public static final ClassName ALIAS_OF_PROPAGATED_DATA =
get("dagger.hilt.internal.aliasof", "AliasOfPropagatedData");
+ public static final String ALIAS_OF_PROPAGATED_DATA_PACKAGE =
+ "dagger.hilt.processor.internal.aliasof.codegen";
public static final ClassName GENERATES_ROOT_INPUT = get("dagger.hilt", "GeneratesRootInput");
public static final ClassName GENERATES_ROOT_INPUT_PROPAGATED_DATA =
diff --git a/java/dagger/hilt/processor/internal/aliasof/AliasOfPropagatedDataGenerator.java b/java/dagger/hilt/processor/internal/aliasof/AliasOfPropagatedDataGenerator.java
index 75c4c15ac..2ccb5cfbd 100644
--- a/java/dagger/hilt/processor/internal/aliasof/AliasOfPropagatedDataGenerator.java
+++ b/java/dagger/hilt/processor/internal/aliasof/AliasOfPropagatedDataGenerator.java
@@ -52,7 +52,7 @@ final class AliasOfPropagatedDataGenerator {
Processors.addGeneratedAnnotation(generator, processingEnv, getClass());
- JavaFile.builder(AliasOfs.AGGREGATING_PACKAGE, generator.build())
+ JavaFile.builder(ClassNames.ALIAS_OF_PROPAGATED_DATA_PACKAGE, generator.build())
.build()
.writeTo(processingEnv.getFiler());
}
diff --git a/java/dagger/hilt/processor/internal/aliasof/AliasOfPropagatedDataMetadata.java b/java/dagger/hilt/processor/internal/aliasof/AliasOfPropagatedDataMetadata.java
new file mode 100644
index 000000000..1ba41d57b
--- /dev/null
+++ b/java/dagger/hilt/processor/internal/aliasof/AliasOfPropagatedDataMetadata.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2021 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.processor.internal.aliasof;
+
+import static com.google.auto.common.MoreElements.asType;
+import static com.google.auto.common.MoreElements.isType;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableSet;
+import dagger.hilt.processor.internal.ClassNames;
+import dagger.hilt.processor.internal.ProcessorErrors;
+import dagger.hilt.processor.internal.Processors;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.PackageElement;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.util.Elements;
+
+/**
+ * A class that represents the values stored in an {@link
+ * dagger.hilt.internal.aliasof.AliasOfPropagatedData} annotation.
+ */
+@AutoValue
+abstract class AliasOfPropagatedDataMetadata {
+
+ abstract TypeElement defineComponentScopeElement();
+
+ abstract TypeElement aliasElement();
+
+ static ImmutableSet<AliasOfPropagatedDataMetadata> from(Elements elements) {
+ PackageElement packageElement =
+ elements.getPackageElement(ClassNames.ALIAS_OF_PROPAGATED_DATA_PACKAGE);
+
+ if (packageElement == null) {
+ return ImmutableSet.of();
+ }
+
+ ImmutableSet<Element> aggregatedElements =
+ ImmutableSet.copyOf(packageElement.getEnclosedElements());
+
+ ProcessorErrors.checkState(
+ !aggregatedElements.isEmpty(),
+ packageElement,
+ "No dependencies found. Did you remove code in package %s?",
+ ClassNames.ALIAS_OF_PROPAGATED_DATA_PACKAGE);
+
+ ImmutableSet.Builder<AliasOfPropagatedDataMetadata> builder = ImmutableSet.builder();
+ for (Element element : aggregatedElements) {
+ ProcessorErrors.checkState(
+ isType(element),
+ element,
+ "Only types may be in package %s. Did you add custom code in the package?",
+ ClassNames.ALIAS_OF_PROPAGATED_DATA_PACKAGE);
+
+ builder.add(create(asType(element), elements));
+ }
+ return builder.build();
+ }
+
+ private static AliasOfPropagatedDataMetadata create(TypeElement element, Elements elements) {
+ AnnotationMirror annotationMirror =
+ Processors.getAnnotationMirror(element, ClassNames.ALIAS_OF_PROPAGATED_DATA);
+
+ ProcessorErrors.checkState(
+ annotationMirror != null,
+ element,
+ "Classes in package %s must be annotated with @%s: %s."
+ + " Found: %s. Files in this package are generated, did you add custom code in the"
+ + " package? ",
+ ClassNames.ALIAS_OF_PROPAGATED_DATA_PACKAGE,
+ ClassNames.ALIAS_OF_PROPAGATED_DATA,
+ element.getSimpleName(),
+ element.getAnnotationMirrors());
+
+ TypeElement defineComponentScopeElement =
+ Processors.getAnnotationClassValue(elements, annotationMirror, "defineComponentScope");
+
+ TypeElement aliasElement =
+ Processors.getAnnotationClassValue(elements, annotationMirror, "alias");
+
+ return new AutoValue_AliasOfPropagatedDataMetadata(defineComponentScopeElement, aliasElement);
+ }
+}
diff --git a/java/dagger/hilt/processor/internal/aliasof/AliasOfs.java b/java/dagger/hilt/processor/internal/aliasof/AliasOfs.java
index 930a72e27..18951bdf9 100644
--- a/java/dagger/hilt/processor/internal/aliasof/AliasOfs.java
+++ b/java/dagger/hilt/processor/internal/aliasof/AliasOfs.java
@@ -16,23 +16,11 @@
package dagger.hilt.processor.internal.aliasof;
-import static com.google.common.base.Suppliers.memoize;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Supplier;
-import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.ImmutableSetMultimap;
import com.squareup.javapoet.ClassName;
-import dagger.hilt.processor.internal.ClassNames;
import dagger.hilt.processor.internal.ProcessorErrors;
-import dagger.hilt.processor.internal.Processors;
-import java.util.List;
-import javax.annotation.processing.ProcessingEnvironment;
-import javax.lang.model.element.AnnotationMirror;
-import javax.lang.model.element.Element;
-import javax.lang.model.element.ElementKind;
-import javax.lang.model.element.PackageElement;
-import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements;
/**
@@ -40,69 +28,33 @@ import javax.lang.model.util.Elements;
* to scopes they are alias of.
*/
public final class AliasOfs {
- static final String AGGREGATING_PACKAGE = AliasOfs.class.getPackage().getName() + ".codegen";
+ public static AliasOfs create(Elements elements, ImmutableSet<ClassName> defineComponentScopes) {
+ ImmutableSetMultimap.Builder<ClassName, ClassName> builder = ImmutableSetMultimap.builder();
+ AliasOfPropagatedDataMetadata.from(elements)
+ .forEach(
+ metadata -> {
+ ClassName defineComponentScopeName =
+ ClassName.get(metadata.defineComponentScopeElement());
+ ClassName aliasScopeName = ClassName.get(metadata.aliasElement());
+ ProcessorErrors.checkState(
+ defineComponentScopes.contains(defineComponentScopeName),
+ metadata.aliasElement(),
+ "The scope %s cannot be an alias for %s. You can only have aliases of a scope"
+ + " defined directly on a @DefineComponent type.",
+ aliasScopeName,
+ defineComponentScopeName);
+ builder.put(defineComponentScopeName, aliasScopeName);
+ });
+ return new AliasOfs(builder.build());
+ }
- private final ProcessingEnvironment processingEnvironment;
- private final ImmutableSet<ClassName> defineComponentScopes;
- private final Supplier<ImmutableMultimap<ClassName, ClassName>> aliases =
- memoize(() -> getAliases());
+ private final ImmutableSetMultimap<ClassName, ClassName> defineComponentScopeToAliases;
- public AliasOfs(
- ProcessingEnvironment processingEnvironment, ImmutableSet<ClassName> defineComponentScopes) {
- this.defineComponentScopes = defineComponentScopes;
- this.processingEnvironment = processingEnvironment;
+ private AliasOfs(ImmutableSetMultimap<ClassName, ClassName> defineComponentScopeToAliases) {
+ this.defineComponentScopeToAliases = defineComponentScopeToAliases;
}
public ImmutableSet<ClassName> getAliasesFor(ClassName defineComponentScope) {
- return ImmutableSet.copyOf(aliases.get().get(defineComponentScope));
- }
-
- private ImmutableMultimap<ClassName, ClassName> getAliases() {
- Elements elements = processingEnvironment.getElementUtils();
- PackageElement packageElement = elements.getPackageElement(AGGREGATING_PACKAGE);
- if (packageElement == null) {
- return ImmutableMultimap.of();
- }
- List<? extends Element> scopeAliasElements = packageElement.getEnclosedElements();
- Preconditions.checkState(
- !scopeAliasElements.isEmpty(), "No scope aliases Found in package %s.", packageElement);
-
- ImmutableMultimap.Builder<ClassName, ClassName> builder = ImmutableMultimap.builder();
- for (Element element : scopeAliasElements) {
- ProcessorErrors.checkState(
- element.getKind() == ElementKind.CLASS,
- element,
- "Only classes may be in package %s. Did you add custom code in the package?",
- packageElement);
-
- AnnotationMirror annotationMirror =
- Processors.getAnnotationMirror(element, ClassNames.ALIAS_OF_PROPAGATED_DATA);
-
- ProcessorErrors.checkState(
- annotationMirror != null,
- element,
- "Classes in package %s must be annotated with @%s: %s."
- + " Found: %s. Files in this package are generated, did you add custom code in the"
- + " package? ",
- packageElement,
- ClassNames.ALIAS_OF_PROPAGATED_DATA,
- element.getSimpleName(),
- element.getAnnotationMirrors());
-
- TypeElement defineComponentScope =
- Processors.getAnnotationClassValue(elements, annotationMirror, "defineComponentScope");
- TypeElement alias = Processors.getAnnotationClassValue(elements, annotationMirror, "alias");
-
- Preconditions.checkState(
- defineComponentScopes.contains(ClassName.get(defineComponentScope)),
- "The scope %s cannot be an alias for %s. You can only have aliases of a scope defined"
- + " directly on a @DefineComponent type.",
- ClassName.get(alias),
- ClassName.get(defineComponentScope));
-
- builder.put(ClassName.get(defineComponentScope), ClassName.get(alias));
- }
-
- return builder.build();
+ return defineComponentScopeToAliases.get(defineComponentScope);
}
}
diff --git a/java/dagger/hilt/processor/internal/aliasof/BUILD b/java/dagger/hilt/processor/internal/aliasof/BUILD
index d3f90f2fa..9a29a8ed8 100644
--- a/java/dagger/hilt/processor/internal/aliasof/BUILD
+++ b/java/dagger/hilt/processor/internal/aliasof/BUILD
@@ -31,7 +31,6 @@ java_library(
"AliasOfPropagatedDataGenerator.java",
],
deps = [
- ":alias_ofs",
"//java/dagger/hilt/processor/internal:base_processor",
"//java/dagger/hilt/processor/internal:classnames",
"//java/dagger/hilt/processor/internal:processor_errors",
@@ -46,15 +45,17 @@ java_library(
java_library(
name = "alias_ofs",
srcs = [
+ "AliasOfPropagatedDataMetadata.java",
"AliasOfs.java",
],
deps = [
"//java/dagger/hilt/processor/internal:classnames",
"//java/dagger/hilt/processor/internal:processor_errors",
"//java/dagger/hilt/processor/internal:processors",
- "//java/dagger/internal/guava:base",
"//java/dagger/internal/guava:collect",
+ "@google_bazel_common//third_party/java/auto:value",
"@google_bazel_common//third_party/java/javapoet",
+ "@maven//:com_google_auto_auto_common",
],
)
diff --git a/java/dagger/hilt/processor/internal/root/RootMetadata.java b/java/dagger/hilt/processor/internal/root/RootMetadata.java
index e3ace8ef0..76d1d1495 100644
--- a/java/dagger/hilt/processor/internal/root/RootMetadata.java
+++ b/java/dagger/hilt/processor/internal/root/RootMetadata.java
@@ -242,7 +242,7 @@ public final class RootMetadata {
.flatMap(descriptor -> descriptor.scopes().stream())
.collect(toImmutableSet());
- AliasOfs aliasOfs = new AliasOfs(env, defineComponentScopes);
+ AliasOfs aliasOfs = AliasOfs.create(env.getElementUtils(), defineComponentScopes);
for (ComponentDescriptor componentDescriptor : componentTree.getComponentDescriptors()) {
for (ClassName scope : componentDescriptor.scopes()) {