diff options
Diffstat (limited to 'java/dagger/hilt/processor/internal/root/RootMetadata.java')
-rw-r--r-- | java/dagger/hilt/processor/internal/root/RootMetadata.java | 80 |
1 files changed, 15 insertions, 65 deletions
diff --git a/java/dagger/hilt/processor/internal/root/RootMetadata.java b/java/dagger/hilt/processor/internal/root/RootMetadata.java index b39b590ef..4c43f1d61 100644 --- a/java/dagger/hilt/processor/internal/root/RootMetadata.java +++ b/java/dagger/hilt/processor/internal/root/RootMetadata.java @@ -16,22 +16,20 @@ package dagger.hilt.processor.internal.root; -import static com.google.common.base.Preconditions.checkState; import static com.google.common.base.Suppliers.memoize; -import static dagger.hilt.processor.internal.HiltCompilerOptions.isSharedTestComponentsEnabled; import static dagger.internal.codegen.extension.DaggerStreams.toImmutableSet; import static javax.lang.model.element.Modifier.ABSTRACT; import static javax.lang.model.element.Modifier.PRIVATE; import static javax.lang.model.element.Modifier.STATIC; import com.google.common.base.Supplier; -import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSetMultimap; import com.squareup.javapoet.ClassName; import com.squareup.javapoet.TypeName; import dagger.hilt.processor.internal.ClassNames; import dagger.hilt.processor.internal.ComponentDescriptor; +import dagger.hilt.processor.internal.ComponentTree; import dagger.hilt.processor.internal.KotlinMetadataUtils; import dagger.hilt.processor.internal.Processors; import dagger.hilt.processor.internal.aggregateddeps.ComponentDependencies; @@ -55,42 +53,22 @@ public final class RootMetadata { ComponentTree componentTree, ComponentDependencies deps, ProcessingEnvironment env) { - return createInternal(root, ImmutableList.of(), componentTree, deps, env); - } - - static RootMetadata createForDefaultRoot( - Root root, - ImmutableList<RootMetadata> rootsUsingDefaultComponents, - ComponentTree componentTree, - ComponentDependencies deps, - ProcessingEnvironment env) { - checkState(root.isDefaultRoot()); - return createInternal(root, rootsUsingDefaultComponents, componentTree, deps, env); - } - - static RootMetadata copyWithNewTree(RootMetadata other, ComponentTree componentTree) { - return createInternal( - other.root, other.rootsUsingDefaultComponents, componentTree, other.deps, other.env); - } - - private static RootMetadata createInternal( - Root root, - ImmutableList<RootMetadata> rootsUsingDefaultComponents, - ComponentTree componentTree, - ComponentDependencies deps, - ProcessingEnvironment env) { - RootMetadata metadata = - new RootMetadata(root, componentTree, deps, rootsUsingDefaultComponents, env); + RootMetadata metadata = new RootMetadata(root, componentTree, deps, env); metadata.validate(); return metadata; } + static RootMetadata copyWithNewTree( + RootMetadata other, + ComponentTree componentTree) { + return create(other.root, componentTree, other.deps, other.env); + } + private final Root root; private final ProcessingEnvironment env; private final Elements elements; private final ComponentTree componentTree; private final ComponentDependencies deps; - private final ImmutableList<RootMetadata> rootsUsingDefaultComponents; private final Supplier<ImmutableSetMultimap<ClassName, ClassName>> scopesByComponent = memoize(this::getScopesByComponentUncached); private final Supplier<TestRootMetadata> testRootMetadata = @@ -100,14 +78,12 @@ public final class RootMetadata { Root root, ComponentTree componentTree, ComponentDependencies deps, - ImmutableList<RootMetadata> rootsUsingDefaultComponents, ProcessingEnvironment env) { this.root = root; this.env = env; this.elements = env.getElementUtils(); this.componentTree = componentTree; this.deps = deps; - this.rootsUsingDefaultComponents = rootsUsingDefaultComponents; } public Root root() { @@ -126,25 +102,9 @@ public final class RootMetadata { return deps.modules().get(componentName, root.classname(), root.isTestRoot()); } - /** - * Returns {@code true} if this is a test root that provides no test-specific dependencies or sets - * other options that would prevent it from sharing components with other test roots. - */ - // TODO(groakley): Allow more tests to share modules, e.g. tests that uninstall the same module. - // In that case, this might instead return which shared dep grouping should be used. - public boolean canShareTestComponents() { - return isSharedTestComponentsEnabled(env) - && root.isTestRoot() - && !deps.includesTestDeps(root.classname()); - } - public ImmutableSet<TypeName> entryPoints(ClassName componentName) { return ImmutableSet.<TypeName>builder() .addAll(getUserDefinedEntryPoints(componentName)) - .add( - root.isTestRoot() && componentName.equals(ClassNames.SINGLETON_COMPONENT) - ? ClassNames.TEST_SINGLETON_COMPONENT - : ClassNames.GENERATED_COMPONENT) .add(componentName) .build(); } @@ -168,7 +128,6 @@ public final class RootMetadata { } public TestRootMetadata testRootMetadata() { - checkState(!root.isDefaultRoot(), "The default root does not have TestRootMetadata!"); return testRootMetadata.get(); } @@ -190,7 +149,7 @@ public final class RootMetadata { for (ComponentDescriptor componentDescriptor : componentTree.getComponentDescriptors()) { ClassName componentName = componentDescriptor.component(); for (TypeElement extraModule : modulesThatDaggerCannotConstruct(componentName)) { - if (root.isTestRoot() && !componentName.equals(ClassNames.SINGLETON_COMPONENT)) { + if (root.type().isTestRoot() && !componentName.equals(ClassNames.SINGLETON_COMPONENT)) { env.getMessager() .printMessage( Diagnostic.Kind.ERROR, @@ -198,7 +157,7 @@ public final class RootMetadata { + "static provision methods or have a visible, no-arg constructor. Found: " + extraModule.getQualifiedName(), root.element()); - } else if (!root.isTestRoot()) { + } else if (!root.type().isTestRoot()) { env.getMessager() .printMessage( Diagnostic.Kind.ERROR, @@ -213,19 +172,10 @@ public final class RootMetadata { private ImmutableSet<TypeName> getUserDefinedEntryPoints(ClassName componentName) { ImmutableSet.Builder<TypeName> entryPointSet = ImmutableSet.builder(); - if (root.isDefaultRoot() && !rootsUsingDefaultComponents.isEmpty()) { - // Add entry points for shared component - rootsUsingDefaultComponents.stream() - .flatMap(metadata -> metadata.entryPoints(componentName).stream()) - .forEach(entryPointSet::add); - } else if (root.isDefaultRoot() && componentName.equals(ClassNames.SINGLETON_COMPONENT)) { - // We only do this for SingletonComponent because EarlyEntryPoints can only be installed - // in the SingletonComponent. - deps.earlyEntryPoints().forEach(entryPointSet::add); - } else { - deps.entryPoints().get(componentName, root.classname(), root.isTestRoot()).stream() - .map(ClassName::get) - .forEach(entryPointSet::add); + entryPointSet.add(ClassNames.GENERATED_COMPONENT); + for (TypeElement element : + deps.entryPoints().get(componentName, root.classname(), root.isTestRoot())) { + entryPointSet.add(ClassName.get(element)); } return entryPointSet.build(); } @@ -238,7 +188,7 @@ public final class RootMetadata { .flatMap(descriptor -> descriptor.scopes().stream()) .collect(toImmutableSet()); - AliasOfs aliasOfs = AliasOfs.create(env.getElementUtils(), defineComponentScopes); + AliasOfs aliasOfs = new AliasOfs(env, defineComponentScopes); for (ComponentDescriptor componentDescriptor : componentTree.getComponentDescriptors()) { for (ClassName scope : componentDescriptor.scopes()) { |