Skip to content

Commit 5c9f2ad

Browse files
authored
Merge pull request #49038 from gsmet/stable-config-generation
Improve reproducibility of Config classes generation
2 parents e40ec34 + 698bf27 commit 5c9f2ad

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

core/deployment/src/main/java/io/quarkus/deployment/steps/ConfigGenerationBuildStep.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.ArrayList;
2222
import java.util.HashMap;
2323
import java.util.HashSet;
24+
import java.util.LinkedHashSet;
2425
import java.util.List;
2526
import java.util.Map;
2627
import java.util.Objects;
@@ -267,13 +268,13 @@ void generateBuilders(
267268
Set<String> configCustomizers = discoverService(SmallRyeConfigBuilderCustomizer.class, reflectiveClass);
268269

269270
// TODO - introduce a way to ignore mappings that are only used for documentation or to prevent warnings
270-
Set<ConfigClass> ignoreMappings = new HashSet<>();
271+
Set<ConfigClass> ignoreMappings = new LinkedHashSet<>();
271272
ignoreMappings.add(ConfigClass.configClass(BuildAnalyticsConfig.class, "quarkus.analytics"));
272273
ignoreMappings.add(ConfigClass.configClass(BuilderConfig.class, "quarkus.builder"));
273274
ignoreMappings.add(ConfigClass.configClass(CommandLineRuntimeConfig.class, "quarkus"));
274275
ignoreMappings.add(ConfigClass.configClass(DebugRuntimeConfig.class, "quarkus.debug"));
275276

276-
Set<ConfigClass> allMappings = new HashSet<>();
277+
Set<ConfigClass> allMappings = new LinkedHashSet<>();
277278
allMappings.addAll(staticSafeConfigMappings(configMappings));
278279
allMappings.addAll(runtimeConfigMappings(configMappings));
279280
allMappings.addAll(configItem.getReadResult().getBuildTimeRunTimeMappings());
@@ -284,11 +285,11 @@ void generateBuilders(
284285
Map<Object, FieldDescriptor> sharedFields = generateSharedConfig(generatedClass, converters, allMappings);
285286

286287
// For Static Init Config
287-
Set<ConfigClass> staticMappings = new HashSet<>();
288+
Set<ConfigClass> staticMappings = new LinkedHashSet<>();
288289
staticMappings.addAll(staticSafeConfigMappings(configMappings));
289290
staticMappings.addAll(configItem.getReadResult().getBuildTimeRunTimeMappings());
290291
staticMappings.removeAll(ignoreMappings);
291-
Set<String> staticCustomizers = new HashSet<>(staticSafeServices(configCustomizers));
292+
Set<String> staticCustomizers = new LinkedHashSet<>(staticSafeServices(configCustomizers));
292293
staticCustomizers.add(StaticInitConfigBuilder.class.getName());
293294

294295
generateConfigBuilder(generatedClass, reflectiveClass, CONFIG_STATIC_NAME,
@@ -311,12 +312,12 @@ void generateBuilders(
311312
reflectiveClass.produce(ReflectiveClassBuildItem.builder(CONFIG_STATIC_NAME).build());
312313

313314
// For RunTime Config
314-
Set<ConfigClass> runTimeMappings = new HashSet<>();
315+
Set<ConfigClass> runTimeMappings = new LinkedHashSet<>();
315316
runTimeMappings.addAll(runtimeConfigMappings(configMappings));
316317
runTimeMappings.addAll(configItem.getReadResult().getBuildTimeRunTimeMappings());
317318
runTimeMappings.addAll(configItem.getReadResult().getRunTimeMappings());
318319
runTimeMappings.removeAll(ignoreMappings);
319-
Set<String> runtimeCustomizers = new HashSet<>(configCustomizers);
320+
Set<String> runtimeCustomizers = new LinkedHashSet<>(configCustomizers);
320321
runtimeCustomizers.add(RuntimeConfigBuilder.class.getName());
321322

322323
generateConfigBuilder(generatedClass, reflectiveClass, CONFIG_RUNTIME_NAME,
@@ -837,7 +838,7 @@ private static Set<String> discoverService(
837838
Class<?> serviceClass,
838839
BuildProducer<ReflectiveClassBuildItem> reflectiveClass) throws IOException {
839840
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
840-
Set<String> services = new HashSet<>();
841+
Set<String> services = new LinkedHashSet<>();
841842
for (String service : classNamesNamedIn(classLoader, SERVICES_PREFIX + serviceClass.getName())) {
842843
// The discovery includes deployment modules, so we only include services available at runtime
843844
if (QuarkusClassLoader.isClassPresentAtRuntime(service)) {
@@ -850,7 +851,7 @@ private static Set<String> discoverService(
850851

851852
private static Set<String> staticSafeServices(Set<String> services) {
852853
ClassLoader classloader = Thread.currentThread().getContextClassLoader();
853-
Set<String> staticSafe = new HashSet<>();
854+
Set<String> staticSafe = new LinkedHashSet<>();
854855
for (String service : services) {
855856
// SmallRye Config services are always safe, but they cannot be annotated with @StaticInitSafe
856857
if (service.startsWith("io.smallrye.config.")) {

0 commit comments

Comments
 (0)