From fdb1e2051fa6478b826d22a20a7bfbc4082d0362 Mon Sep 17 00:00:00 2001 From: Stefan Oehme Date: Fri, 19 Nov 2021 19:42:36 +0100 Subject: [PATCH] Don't reprocess aggregated types when there's nothing to compile Fixes https://github.com/micronaut-projects/micronaut-core/issues/6536 Signed-off-by: Stefan Oehme --- ...alAnnotationProcessingIntegrationTest.groovy | 6 +++++- ...alAnnotationProcessingIntegrationTest.groovy | 17 +++++++++++++++++ .../incremental/deps/ClassSetAnalysis.java | 3 +++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/subprojects/language-java/src/integTest/groovy/org/gradle/api/tasks/compile/AbstractIncrementalAnnotationProcessingIntegrationTest.groovy b/subprojects/language-java/src/integTest/groovy/org/gradle/api/tasks/compile/AbstractIncrementalAnnotationProcessingIntegrationTest.groovy index f0f309cf0006..1703b9772c43 100644 --- a/subprojects/language-java/src/integTest/groovy/org/gradle/api/tasks/compile/AbstractIncrementalAnnotationProcessingIntegrationTest.groovy +++ b/subprojects/language-java/src/integTest/groovy/org/gradle/api/tasks/compile/AbstractIncrementalAnnotationProcessingIntegrationTest.groovy @@ -21,6 +21,7 @@ import org.gradle.integtests.fixtures.CompilationOutputsFixture import org.gradle.language.fixtures.AnnotationProcessorFixture import org.gradle.language.fixtures.CompileJavaBuildOperationsFixture import org.gradle.test.fixtures.file.TestFile +import org.intellij.lang.annotations.Language abstract class AbstractIncrementalAnnotationProcessingIntegrationTest extends AbstractIntegrationSpec { @@ -53,6 +54,9 @@ abstract class AbstractIncrementalAnnotationProcessingIntegrationTest extends Ab dependencies { compileOnly project(":annotation") annotationProcessor project(":processor") + + testCompileOnly project(":annotation") + testAnnotationProcessor project(":processor") } """ @@ -70,7 +74,7 @@ abstract class AbstractIncrementalAnnotationProcessingIntegrationTest extends Ab processor.writeAnnotationProcessorTo(processorProjectDir) } - protected final File java(String... classBodies) { + protected final File java(@Language("java") String... classBodies) { javaInPackage('', classBodies) } diff --git a/subprojects/language-java/src/integTest/groovy/org/gradle/api/tasks/compile/AggregatingIncrementalAnnotationProcessingIntegrationTest.groovy b/subprojects/language-java/src/integTest/groovy/org/gradle/api/tasks/compile/AggregatingIncrementalAnnotationProcessingIntegrationTest.groovy index f35b4bdce7ec..f6558187f78e 100644 --- a/subprojects/language-java/src/integTest/groovy/org/gradle/api/tasks/compile/AggregatingIncrementalAnnotationProcessingIntegrationTest.groovy +++ b/subprojects/language-java/src/integTest/groovy/org/gradle/api/tasks/compile/AggregatingIncrementalAnnotationProcessingIntegrationTest.groovy @@ -436,6 +436,23 @@ class AggregatingIncrementalAnnotationProcessingIntegrationTest extends Abstract succeeds "compileJava" } + @Issue("https://https://github.com/micronaut-projects/micronaut-core/issues/6536") + def "does not reprocess if nothing in the current sourceSet changed"() { + given: + withProcessor(new AnnotatedGeneratedClassProcessorFixture()) + javaTestSourceFile "@Bean class Test {}" + outputs.snapshot { succeeds "compileTestJava" } + + when: + java "class Unrelated {}" + + then: + succeeds "compileTestJava" + + and: + outputs.recompiledClasses("Unrelated") + } + private boolean serviceRegistryReferences(String... services) { def registry = file("build/classes/java/main/ServiceRegistryResource.txt").text services.every() { diff --git a/subprojects/language-java/src/main/java/org/gradle/api/internal/tasks/compile/incremental/deps/ClassSetAnalysis.java b/subprojects/language-java/src/main/java/org/gradle/api/internal/tasks/compile/incremental/deps/ClassSetAnalysis.java index 96bd0434c401..d16862dccc4a 100644 --- a/subprojects/language-java/src/main/java/org/gradle/api/internal/tasks/compile/incremental/deps/ClassSetAnalysis.java +++ b/subprojects/language-java/src/main/java/org/gradle/api/internal/tasks/compile/incremental/deps/ClassSetAnalysis.java @@ -157,6 +157,9 @@ private DependentsSet findDirectDependents(String className) { * - the originating types of generated classes that need to be recompiled, since they wouldn't exist if the originating type is not reprocessed */ public Set getTypesToReprocess(Set compiledClasses) { + if (compiledClasses.isEmpty()) { + return Collections.emptySet(); + } Set typesToReprocess = new HashSet<>(annotationProcessingData.getAggregatedTypes()); for (Map.Entry> entry : annotationProcessingData.getGeneratedTypesByOrigin().entrySet()) { if (entry.getValue().stream().anyMatch(compiledClasses::contains)) {