aboutsummaryrefslogtreecommitdiff
path: root/java/dagger/hilt/processor/internal/aliasof
diff options
context:
space:
mode:
Diffstat (limited to 'java/dagger/hilt/processor/internal/aliasof')
-rw-r--r--java/dagger/hilt/processor/internal/aliasof/AliasOfProcessor.java6
-rw-r--r--java/dagger/hilt/processor/internal/aliasof/AliasOfPropagatedDataGenerator.java32
-rw-r--r--java/dagger/hilt/processor/internal/aliasof/AliasOfPropagatedDataMetadata.java65
-rw-r--r--java/dagger/hilt/processor/internal/aliasof/AliasOfs.java96
-rw-r--r--java/dagger/hilt/processor/internal/aliasof/BUILD7
5 files changed, 95 insertions, 111 deletions
diff --git a/java/dagger/hilt/processor/internal/aliasof/AliasOfProcessor.java b/java/dagger/hilt/processor/internal/aliasof/AliasOfProcessor.java
index 02e7f5d56..6efd6431e 100644
--- a/java/dagger/hilt/processor/internal/aliasof/AliasOfProcessor.java
+++ b/java/dagger/hilt/processor/internal/aliasof/AliasOfProcessor.java
@@ -16,7 +16,6 @@
package dagger.hilt.processor.internal.aliasof;
-import static com.google.auto.common.MoreElements.asType;
import static net.ltgt.gradle.incap.IncrementalAnnotationProcessorType.ISOLATING;
import com.google.auto.service.AutoService;
@@ -49,14 +48,13 @@ public final class AliasOfProcessor extends BaseProcessor {
"%s should only be used on scopes." + " However, it was found annotating %s",
annotation,
element);
-
AnnotationMirror annotationMirror =
Processors.getAnnotationMirror(element, ClassNames.ALIAS_OF);
- TypeElement defineComponentScope =
+ Element defineComponentScope =
Processors.getAnnotationClassValue(getElementUtils(), annotationMirror, "value");
- new AliasOfPropagatedDataGenerator(getProcessingEnv(), asType(element), defineComponentScope)
+ new AliasOfPropagatedDataGenerator(getProcessingEnv(), element, defineComponentScope)
.generate();
}
}
diff --git a/java/dagger/hilt/processor/internal/aliasof/AliasOfPropagatedDataGenerator.java b/java/dagger/hilt/processor/internal/aliasof/AliasOfPropagatedDataGenerator.java
index 1d7edf285..75c4c15ac 100644
--- a/java/dagger/hilt/processor/internal/aliasof/AliasOfPropagatedDataGenerator.java
+++ b/java/dagger/hilt/processor/internal/aliasof/AliasOfPropagatedDataGenerator.java
@@ -17,37 +17,43 @@
package dagger.hilt.processor.internal.aliasof;
import com.squareup.javapoet.AnnotationSpec;
+import com.squareup.javapoet.JavaFile;
+import com.squareup.javapoet.TypeSpec;
import dagger.hilt.processor.internal.ClassNames;
import dagger.hilt.processor.internal.Processors;
import java.io.IOException;
import javax.annotation.processing.ProcessingEnvironment;
-import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.Element;
/** Generates resource files for {@link dagger.hilt.migration.AliasOf}. */
final class AliasOfPropagatedDataGenerator {
private final ProcessingEnvironment processingEnv;
- private final TypeElement aliasScope;
- private final TypeElement defineComponentScope;
+ private final Element aliasScope;
+ private final Element defineComponentScope;
AliasOfPropagatedDataGenerator(
- ProcessingEnvironment processingEnv,
- TypeElement aliasScope,
- TypeElement defineComponentScope) {
+ ProcessingEnvironment processingEnv, Element aliasScope, Element defineComponentScope) {
this.processingEnv = processingEnv;
this.aliasScope = aliasScope;
this.defineComponentScope = defineComponentScope;
}
void generate() throws IOException {
- Processors.generateAggregatingClass(
- ClassNames.ALIAS_OF_PROPAGATED_DATA_PACKAGE,
- AnnotationSpec.builder(ClassNames.ALIAS_OF_PROPAGATED_DATA)
+ TypeSpec.Builder generator =
+ TypeSpec.classBuilder(Processors.getFullEnclosedName(aliasScope))
+ .addOriginatingElement(aliasScope)
+ .addAnnotation(
+ AnnotationSpec.builder(ClassNames.ALIAS_OF_PROPAGATED_DATA)
.addMember("defineComponentScope", "$T.class", defineComponentScope)
.addMember("alias", "$T.class", aliasScope)
- .build(),
- aliasScope,
- getClass(),
- processingEnv);
+ .build())
+ .addJavadoc("Generated class for aggregating scope aliases. \n");
+
+ Processors.addGeneratedAnnotation(generator, processingEnv, getClass());
+
+ JavaFile.builder(AliasOfs.AGGREGATING_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
deleted file mode 100644
index 30a2c70c6..000000000
--- a/java/dagger/hilt/processor/internal/aliasof/AliasOfPropagatedDataMetadata.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * 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 dagger.internal.codegen.extension.DaggerStreams.toImmutableSet;
-
-import com.google.auto.value.AutoValue;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import dagger.hilt.processor.internal.AggregatedElements;
-import dagger.hilt.processor.internal.AnnotationValues;
-import dagger.hilt.processor.internal.ClassNames;
-import dagger.hilt.processor.internal.Processors;
-import javax.lang.model.element.AnnotationMirror;
-import javax.lang.model.element.AnnotationValue;
-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) {
- return AggregatedElements.from(
- ClassNames.ALIAS_OF_PROPAGATED_DATA_PACKAGE,
- ClassNames.ALIAS_OF_PROPAGATED_DATA,
- elements)
- .stream()
- .map(aggregatedElement -> create(aggregatedElement, elements))
- .collect(toImmutableSet());
- }
-
- private static AliasOfPropagatedDataMetadata create(TypeElement element, Elements elements) {
- AnnotationMirror annotationMirror =
- Processors.getAnnotationMirror(element, ClassNames.ALIAS_OF_PROPAGATED_DATA);
-
- ImmutableMap<String, AnnotationValue> values =
- Processors.getAnnotationValues(elements, annotationMirror);
-
- return new AutoValue_AliasOfPropagatedDataMetadata(
- AnnotationValues.getTypeElement(values.get("defineComponentScope")),
- AnnotationValues.getTypeElement(values.get("alias")));
- }
-}
diff --git a/java/dagger/hilt/processor/internal/aliasof/AliasOfs.java b/java/dagger/hilt/processor/internal/aliasof/AliasOfs.java
index 18951bdf9..930a72e27 100644
--- a/java/dagger/hilt/processor/internal/aliasof/AliasOfs.java
+++ b/java/dagger/hilt/processor/internal/aliasof/AliasOfs.java
@@ -16,11 +16,23 @@
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;
/**
@@ -28,33 +40,69 @@ import javax.lang.model.util.Elements;
* to scopes they are alias of.
*/
public final class AliasOfs {
- 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());
- }
+ static final String AGGREGATING_PACKAGE = AliasOfs.class.getPackage().getName() + ".codegen";
- private final ImmutableSetMultimap<ClassName, ClassName> defineComponentScopeToAliases;
+ private final ProcessingEnvironment processingEnvironment;
+ private final ImmutableSet<ClassName> defineComponentScopes;
+ private final Supplier<ImmutableMultimap<ClassName, ClassName>> aliases =
+ memoize(() -> getAliases());
- private AliasOfs(ImmutableSetMultimap<ClassName, ClassName> defineComponentScopeToAliases) {
- this.defineComponentScopeToAliases = defineComponentScopeToAliases;
+ public AliasOfs(
+ ProcessingEnvironment processingEnvironment, ImmutableSet<ClassName> defineComponentScopes) {
+ this.defineComponentScopes = defineComponentScopes;
+ this.processingEnvironment = processingEnvironment;
}
public ImmutableSet<ClassName> getAliasesFor(ClassName defineComponentScope) {
- return defineComponentScopeToAliases.get(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();
}
}
diff --git a/java/dagger/hilt/processor/internal/aliasof/BUILD b/java/dagger/hilt/processor/internal/aliasof/BUILD
index ffd0c9ae8..d3f90f2fa 100644
--- a/java/dagger/hilt/processor/internal/aliasof/BUILD
+++ b/java/dagger/hilt/processor/internal/aliasof/BUILD
@@ -31,6 +31,7 @@ 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",
@@ -39,24 +40,20 @@ java_library(
"@google_bazel_common//third_party/java/auto:service",
"@google_bazel_common//third_party/java/incap",
"@google_bazel_common//third_party/java/javapoet",
- "@maven//:com_google_auto_auto_common",
],
)
java_library(
name = "alias_ofs",
srcs = [
- "AliasOfPropagatedDataMetadata.java",
"AliasOfs.java",
],
deps = [
- "//java/dagger/hilt/processor/internal:aggregated_elements",
"//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:base",
"//java/dagger/internal/guava:collect",
- "@google_bazel_common//third_party/java/auto:value",
"@google_bazel_common//third_party/java/javapoet",
],
)