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
This commit is contained in:
Scott Frederick
2022-09-02 17:26:15 -05:00
parent 6b3b0dd3a6
commit 95e62b7ff8
3 changed files with 6 additions and 4 deletions

View File

@@ -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());

View File

@@ -50,8 +50,8 @@ class AutoConfigurationImportsAnnotationProcessorTests {
@Test
void annotatedClasses() throws Exception {
List<String> classes = compile(TestAutoConfigurationConfiguration.class,
TestAutoConfigurationOnlyConfiguration.class);
List<String> classes = compile(TestAutoConfigurationOnlyConfiguration.class,
TestAutoConfigurationConfiguration.class);
assertThat(classes).hasSize(2);
assertThat(classes).containsExactly(
"org.springframework.boot.autoconfigureprocessor.TestAutoConfigurationConfiguration",

View File

@@ -50,8 +50,8 @@ class ManagementContextConfigurationImportsAnnotationProcessorTests {
@Test
void annotatedClasses() throws Exception {
List<String> classes = compile(TestManagementContextConfigurationOne.class,
TestManagementContextConfigurationTwo.class);
List<String> classes = compile(TestManagementContextConfigurationTwo.class,
TestManagementContextConfigurationOne.class);
assertThat(classes).hasSize(2);
assertThat(classes).containsExactly(
"org.springframework.boot.autoconfigureprocessor.TestManagementContextConfigurationOne",