From 917db818bec2cd6c36d6baec64292d605d7db7fe Mon Sep 17 00:00:00 2001 From: Brad Corso Date: Mon, 17 Aug 2026 09:59:40 -0700 Subject: [PATCH] Roll forward CL/962380999: Add support for adding BindingGraphPlugins directly to CompilerTests/HiltCompilerTests. New: * Removed checks that prevented ComponentProcessor/KspComponentProcessor from being added via the old `withAdditional*Processors` APIs. * Fixed bug in `PeerInjectionValidationPluginTest` setup to avoid calling `withAdditional*Processors` twice (which essentially overrides the first call). We can consider adding the ban back once all BindingGraphPlugin users are migrated to the new API. RELNOTES=N/A PiperOrigin-RevId: 966032675 --- .../testing/compile/HiltCompilerTests.java | 41 +++++++++++++++---- .../dagger/testing/compile/CompilerTests.java | 4 ++ .../DuplicateAndroidInjectorsCheckerTest.java | 7 +--- .../processor/internal/viewmodel/BUILD | 2 - .../ViewModelValidationPluginTest.kt | 12 +----- ...lValidationPluginWithAssistedInjectTest.kt | 13 +----- 6 files changed, 42 insertions(+), 37 deletions(-) diff --git a/hilt-testing/main/java/dagger/hilt/android/testing/compile/HiltCompilerTests.java b/hilt-testing/main/java/dagger/hilt/android/testing/compile/HiltCompilerTests.java index 4a2c0061cec..67ec6279f52 100644 --- a/hilt-testing/main/java/dagger/hilt/android/testing/compile/HiltCompilerTests.java +++ b/hilt-testing/main/java/dagger/hilt/android/testing/compile/HiltCompilerTests.java @@ -57,6 +57,7 @@ import dagger.hilt.processor.internal.uninstallmodules.UninstallModulesProcessor; import dagger.internal.codegen.ComponentProcessor; import dagger.internal.codegen.KspComponentProcessor; +import dagger.spi.model.BindingGraphPlugin; import dagger.testing.compile.CompilerTests; import java.io.File; import java.util.Arrays; @@ -65,6 +66,7 @@ import java.util.Map; import java.util.function.Consumer; import java.util.function.Function; +import java.util.function.Supplier; import javax.annotation.processing.Processor; import org.junit.rules.TemporaryFolder; @@ -125,7 +127,8 @@ public static Compiler compiler(Processor... extraProcessors) { public static Compiler compiler(Collection extraProcessors) { return CompilerTests.compiler() - .withProcessors(CompilerTests.mergeProcessors(defaultProcessors(), extraProcessors)); + .withProcessors( + CompilerTests.mergeProcessors(defaultProcessors(ImmutableList.of()), extraProcessors)); } public static void compileWithKapt( @@ -170,7 +173,7 @@ public static void compileWithKapt( /* javacArguments= */ DEFAULT_JAVAC_OPTIONS, /* kotlincArguments= */ DEFAULT_KOTLINC_OPTIONS, /* kaptProcessors= */ ImmutableList.builder() - .addAll(defaultProcessors()) + .addAll(defaultProcessors(ImmutableList.of())) .addAll(additionalProcessors) .build(), /* symbolProcessorProviders= */ ImmutableList.of(), @@ -178,12 +181,13 @@ public static void compileWithKapt( onCompilationResult.accept(result); } - static ImmutableList defaultProcessors() { + private static ImmutableList defaultProcessors( + ImmutableCollection bindingGraphPlugins) { return ImmutableList.of( new AggregatedDepsProcessor(), new AliasOfProcessor(), new AndroidEntryPointProcessor(), - new ComponentProcessor(), + ComponentProcessor.withTestPlugins(bindingGraphPlugins), new ComponentTreeDepsProcessor(), new CustomTestApplicationProcessor(), new DefineComponentProcessor(), @@ -194,13 +198,14 @@ static ImmutableList defaultProcessors() { new UninstallModulesProcessor()); } - private static ImmutableList kspDefaultProcessors() { + private static ImmutableList kspDefaultProcessors( + ImmutableCollection bindingGraphPlugins) { // TODO(bcorso): Add the rest of the KSP processors here. return ImmutableList.of( new KspAggregatedDepsProcessor.Provider(), new KspAliasOfProcessor.Provider(), new KspAndroidEntryPointProcessor.Provider(), - new KspComponentProcessor.Provider(), + KspComponentProcessor.Provider.withTestPlugins(bindingGraphPlugins), new KspComponentTreeDepsProcessor.Provider(), new KspCustomTestApplicationProcessor.Provider(), new KspDefineComponentProcessor.Provider(), @@ -221,6 +226,7 @@ static Builder builder() { .additionalJavacProcessors(ImmutableList.of()) .additionalKspProcessors(ImmutableList.of()) .processingSteps(ImmutableList.of()) + .bindingGraphPluginSuppliers(ImmutableList.of()) .javacArguments(ImmutableList.of()); } @@ -239,6 +245,14 @@ static Builder builder() { /** Returns the extra KSP processors. */ abstract ImmutableCollection additionalKspProcessors(); + /** Returns the {@link BindingGraphPlugin} suppliers. */ + abstract ImmutableCollection> bindingGraphPluginSuppliers(); + + /** Returns the {@link BindingGraphPlugin}s. */ + private ImmutableList bindingGraphPlugins() { + return bindingGraphPluginSuppliers().stream().map(Supplier::get).collect(toImmutableList()); + } + /** Returns the command-line options */ abstract ImmutableCollection javacArguments(); @@ -255,6 +269,10 @@ public HiltCompiler withProcessingSteps( return toBuilder().processingSteps(ImmutableList.copyOf(mapping)).build(); } + public HiltCompiler withBindingGraphPlugins(Supplier... suppliers) { + return toBuilder().bindingGraphPluginSuppliers(ImmutableList.copyOf(suppliers)).build(); + } + /** Returns a new {@link HiltCompiler} instance with the additional Javac processors. */ public HiltCompiler withAdditionalJavacProcessors(Processor... processors) { return toBuilder().additionalJavacProcessors(ImmutableList.copyOf(processors)).build(); @@ -375,7 +393,9 @@ private ImmutableList mergedJavacArguments() { private ImmutableList mergedJavacProcessors() { return ImmutableList.builder() - .addAll(CompilerTests.mergeProcessors(defaultProcessors(), additionalJavacProcessors())) + .addAll( + CompilerTests.mergeProcessors( + defaultProcessors(bindingGraphPlugins()), additionalJavacProcessors())) .addAll( processingSteps().stream() .map(HiltCompilerProcessors.JavacProcessor::new) @@ -385,7 +405,9 @@ private ImmutableList mergedJavacProcessors() { private ImmutableList mergedKspProcessors() { return ImmutableList.builder() - .addAll(CompilerTests.mergeProcessors(kspDefaultProcessors(), additionalKspProcessors())) + .addAll( + CompilerTests.mergeProcessors( + kspDefaultProcessors(bindingGraphPlugins()), additionalKspProcessors())) .addAll( processingSteps().stream() .map(HiltCompilerProcessors.KspProcessor.Provider::new) @@ -407,6 +429,9 @@ abstract Builder additionalKspProcessors( abstract Builder processingSteps( ImmutableCollection> processingSteps); + abstract Builder bindingGraphPluginSuppliers( + ImmutableCollection> bindingGraphPluginSuppliers); + abstract HiltCompiler build(); } } diff --git a/java/dagger/testing/compile/CompilerTests.java b/java/dagger/testing/compile/CompilerTests.java index 6bb9884f6d1..2ed6210d232 100644 --- a/java/dagger/testing/compile/CompilerTests.java +++ b/java/dagger/testing/compile/CompilerTests.java @@ -401,8 +401,10 @@ abstract Builder additionalKspProcessors( abstract Builder processingStepSuppliers( ImmutableCollection> processingStepSuppliers); + abstract Builder bindingGraphPluginSuppliers( ImmutableCollection> bindingGraphPluginSuppliers); + abstract DaggerCompiler build(); } } @@ -416,6 +418,8 @@ abstract Builder bindingGraphPluginSuppliers( */ public static ImmutableList mergeProcessors( Collection defaultProcessors, Collection extraProcessors) { + // TODO: b/545333255 - Add validation to prevent ComponentProcessor in extraProcessors once all + // users are migrated to the new bindingGraphPluginSuppliers API. Map, T> processors = defaultProcessors.stream() .collect(toMap(Object::getClass, (T e) -> e, (p1, p2) -> p2, HashMap::new)); diff --git a/javatests/dagger/android/processor/DuplicateAndroidInjectorsCheckerTest.java b/javatests/dagger/android/processor/DuplicateAndroidInjectorsCheckerTest.java index 1486abfcb9c..3f1ba0a586f 100644 --- a/javatests/dagger/android/processor/DuplicateAndroidInjectorsCheckerTest.java +++ b/javatests/dagger/android/processor/DuplicateAndroidInjectorsCheckerTest.java @@ -17,8 +17,6 @@ package dagger.android.processor; import androidx.room3.compiler.processing.util.Source; -import dagger.internal.codegen.ComponentProcessor; -import dagger.internal.codegen.KspComponentProcessor; import dagger.testing.compile.CompilerTests; import org.junit.Test; import org.junit.runner.RunWith; @@ -88,10 +86,7 @@ public void conflictingMapKeys() { "}"); CompilerTests.daggerCompiler(activity, injectorFactory, module, component) - .withAdditionalJavacProcessors( - ComponentProcessor.withTestPlugins(new DuplicateAndroidInjectorsChecker())) - .withAdditionalKspProcessors( - KspComponentProcessor.Provider.withTestPlugins(new DuplicateAndroidInjectorsChecker())) + .withBindingGraphPlugins(DuplicateAndroidInjectorsChecker::new) .compile( subject -> { subject.compilationDidFail(); diff --git a/javatests/dagger/hilt/android/processor/internal/viewmodel/BUILD b/javatests/dagger/hilt/android/processor/internal/viewmodel/BUILD index 314b8fbc83a..cecfbf96c67 100644 --- a/javatests/dagger/hilt/android/processor/internal/viewmodel/BUILD +++ b/javatests/dagger/hilt/android/processor/internal/viewmodel/BUILD @@ -55,7 +55,6 @@ kt_compiler_test( resources = glob(["goldens/ViewModelValidationPluginTest/**"]), deps = [ ":test_utils", - "//dagger-compiler:processor", "//dagger-compiler:xprocessing", "//dagger-compiler/main/java/dagger/internal/codegen/xprocessing:xprocessing-testing", "//hilt-compiler/main/java/dagger/hilt/android/processor/internal/viewmodel:processor_lib", @@ -87,7 +86,6 @@ kt_compiler_test( resources = glob(["goldens/ViewModelValidationPluginWithAssistedInjectTest/**"]), deps = [ ":test_utils", - "//dagger-compiler:processor", "//dagger-compiler:xprocessing", "//dagger-compiler/main/java/dagger/internal/codegen/xprocessing:xprocessing-testing", "//hilt-compiler/main/java/dagger/hilt/android/processor/internal/viewmodel:processor_lib", diff --git a/javatests/dagger/hilt/android/processor/internal/viewmodel/ViewModelValidationPluginTest.kt b/javatests/dagger/hilt/android/processor/internal/viewmodel/ViewModelValidationPluginTest.kt index 5b94cfc64ae..129156f911b 100644 --- a/javatests/dagger/hilt/android/processor/internal/viewmodel/ViewModelValidationPluginTest.kt +++ b/javatests/dagger/hilt/android/processor/internal/viewmodel/ViewModelValidationPluginTest.kt @@ -20,8 +20,6 @@ import androidx.room3.compiler.processing.ExperimentalProcessingApi import androidx.room3.compiler.processing.util.Source import com.google.common.collect.ImmutableList import dagger.hilt.android.testing.compile.HiltCompilerTests -import dagger.internal.codegen.ComponentProcessor -import dagger.internal.codegen.KspComponentProcessor import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.JUnit4 @@ -32,14 +30,8 @@ class ViewModelValidationPluginTest { private fun testCompiler(vararg sources: Source): HiltCompilerTests.HiltCompiler = HiltCompilerTests.hiltCompiler(ImmutableList.copyOf(sources)) - .withAdditionalJavacProcessors( - ComponentProcessor.withTestPlugins(ViewModelValidationPlugin()), - ViewModelProcessor() - ) - .withAdditionalKspProcessors( - KspComponentProcessor.Provider.withTestPlugins(ViewModelValidationPlugin()), - KspViewModelProcessor.Provider() - ) + .withBindingGraphPlugins(::ViewModelValidationPlugin) + .withProcessingSteps(::ViewModelProcessingStep) private val hiltAndroidApp = """ diff --git a/javatests/dagger/hilt/android/processor/internal/viewmodel/ViewModelValidationPluginWithAssistedInjectTest.kt b/javatests/dagger/hilt/android/processor/internal/viewmodel/ViewModelValidationPluginWithAssistedInjectTest.kt index 86395655ca1..66d9922f2b9 100644 --- a/javatests/dagger/hilt/android/processor/internal/viewmodel/ViewModelValidationPluginWithAssistedInjectTest.kt +++ b/javatests/dagger/hilt/android/processor/internal/viewmodel/ViewModelValidationPluginWithAssistedInjectTest.kt @@ -21,9 +21,6 @@ import androidx.room3.compiler.processing.util.Source import com.google.common.collect.ImmutableList import com.google.common.collect.ImmutableMap import dagger.hilt.android.testing.compile.HiltCompilerTests -import dagger.internal.codegen.ComponentProcessor -import dagger.internal.codegen.KspComponentProcessor -import dagger.testing.compile.CompilerTests.* import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.JUnit4 @@ -34,14 +31,8 @@ class ViewModelValidationPluginWithAssistedInjectTest { private fun testCompiler(vararg sources: Source): HiltCompilerTests.HiltCompiler = HiltCompilerTests.hiltCompiler(ImmutableList.copyOf(sources)) - .withAdditionalJavacProcessors( - ComponentProcessor.withTestPlugins(ViewModelValidationPlugin()), - ViewModelProcessor() - ) - .withAdditionalKspProcessors( - KspComponentProcessor.Provider.withTestPlugins(ViewModelValidationPlugin()), - KspViewModelProcessor.Provider() - ) + .withBindingGraphPlugins(::ViewModelValidationPlugin) + .withProcessingSteps(::ViewModelProcessingStep) .withProcessorOptions(ImmutableMap.of("dagger.hilt.enableAssistedInjectViewModels", "true")) private val hiltAndroidApp =