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:
@@ -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());
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user