From 95e62b7ff822d0179850b3eb9baf6f0e0d89eb2e Mon Sep 17 00:00:00 2001 From: Scott Frederick Date: Fri, 2 Sep 2022 17:26:15 -0500 Subject: [PATCH] Sort the contents of generated imports files The list of class names generated by annotation processors should be sorted before being written to `AutoConfiguration.imports` and `ManagementContextConfiguration.imports` files to make the build more deterministic. See gh-31228 --- .../AbstractImportsAnnotationProcessor.java | 2 ++ .../AutoConfigurationImportsAnnotationProcessorTests.java | 4 ++-- ...ntContextConfigurationImportsAnnotationProcessorTests.java | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-autoconfigure-processor/src/main/java/org/springframework/boot/autoconfigureprocessor/AbstractImportsAnnotationProcessor.java b/spring-boot-project/spring-boot-tools/spring-boot-autoconfigure-processor/src/main/java/org/springframework/boot/autoconfigureprocessor/AbstractImportsAnnotationProcessor.java index ad5f40bed05..6f6e8becfbb 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-autoconfigure-processor/src/main/java/org/springframework/boot/autoconfigureprocessor/AbstractImportsAnnotationProcessor.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-autoconfigure-processor/src/main/java/org/springframework/boot/autoconfigureprocessor/AbstractImportsAnnotationProcessor.java @@ -21,6 +21,7 @@ import java.io.OutputStreamWriter; import java.io.Writer; import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Set; @@ -74,6 +75,7 @@ abstract class AbstractImportsAnnotationProcessor extends AbstractProcessor { Filer filer = this.processingEnv.getFiler(); FileObject file = filer.createResource(StandardLocation.CLASS_OUTPUT, "", getImportsFilePath()); try (Writer writer = new OutputStreamWriter(file.openOutputStream(), StandardCharsets.UTF_8)) { + Collections.sort(this.qualifiedClassNames); for (String className : this.qualifiedClassNames) { writer.append(className); writer.append(System.lineSeparator()); diff --git a/spring-boot-project/spring-boot-tools/spring-boot-autoconfigure-processor/src/test/java/org/springframework/boot/autoconfigureprocessor/AutoConfigurationImportsAnnotationProcessorTests.java b/spring-boot-project/spring-boot-tools/spring-boot-autoconfigure-processor/src/test/java/org/springframework/boot/autoconfigureprocessor/AutoConfigurationImportsAnnotationProcessorTests.java index 67b59e1d6d0..690c4fb60cb 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-autoconfigure-processor/src/test/java/org/springframework/boot/autoconfigureprocessor/AutoConfigurationImportsAnnotationProcessorTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-autoconfigure-processor/src/test/java/org/springframework/boot/autoconfigureprocessor/AutoConfigurationImportsAnnotationProcessorTests.java @@ -50,8 +50,8 @@ class AutoConfigurationImportsAnnotationProcessorTests { @Test void annotatedClasses() throws Exception { - List classes = compile(TestAutoConfigurationConfiguration.class, - TestAutoConfigurationOnlyConfiguration.class); + List classes = compile(TestAutoConfigurationOnlyConfiguration.class, + TestAutoConfigurationConfiguration.class); assertThat(classes).hasSize(2); assertThat(classes).containsExactly( "org.springframework.boot.autoconfigureprocessor.TestAutoConfigurationConfiguration", diff --git a/spring-boot-project/spring-boot-tools/spring-boot-autoconfigure-processor/src/test/java/org/springframework/boot/autoconfigureprocessor/ManagementContextConfigurationImportsAnnotationProcessorTests.java b/spring-boot-project/spring-boot-tools/spring-boot-autoconfigure-processor/src/test/java/org/springframework/boot/autoconfigureprocessor/ManagementContextConfigurationImportsAnnotationProcessorTests.java index 56e3818f48e..d855815441d 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-autoconfigure-processor/src/test/java/org/springframework/boot/autoconfigureprocessor/ManagementContextConfigurationImportsAnnotationProcessorTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-autoconfigure-processor/src/test/java/org/springframework/boot/autoconfigureprocessor/ManagementContextConfigurationImportsAnnotationProcessorTests.java @@ -50,8 +50,8 @@ class ManagementContextConfigurationImportsAnnotationProcessorTests { @Test void annotatedClasses() throws Exception { - List classes = compile(TestManagementContextConfigurationOne.class, - TestManagementContextConfigurationTwo.class); + List classes = compile(TestManagementContextConfigurationTwo.class, + TestManagementContextConfigurationOne.class); assertThat(classes).hasSize(2); assertThat(classes).containsExactly( "org.springframework.boot.autoconfigureprocessor.TestManagementContextConfigurationOne",