Skip to content

Commit 40d4453

Browse files
committed
Avoid double scanning mappings that are already included by the Quarkus processor
1 parent e89ca76 commit 40d4453

File tree

3 files changed

+22
-15
lines changed

3 files changed

+22
-15
lines changed

core/deployment/src/main/java/io/quarkus/deployment/configuration/ConfigMappingUtils.java

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.quarkus.deployment.configuration;
22

3+
import static io.quarkus.bootstrap.classloading.QuarkusClassLoader.isApplicationClass;
34
import static io.smallrye.config.ConfigMappings.ConfigClass.configClass;
45
import static org.jboss.jandex.AnnotationTarget.Kind.CLASS;
56

@@ -21,12 +22,12 @@
2122
import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
2223
import io.quarkus.deployment.builditem.ConfigClassBuildItem;
2324
import io.quarkus.deployment.builditem.ConfigClassBuildItem.Kind;
25+
import io.quarkus.deployment.builditem.ConfigurationBuildItem;
2426
import io.quarkus.deployment.builditem.GeneratedClassBuildItem;
2527
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
2628
import io.quarkus.deployment.builditem.nativeimage.ReflectiveMethodBuildItem;
2729
import io.quarkus.deployment.util.ReflectUtil;
2830
import io.quarkus.hibernate.validator.spi.AdditionalConstrainedClassBuildItem;
29-
import io.quarkus.runtime.annotations.ConfigRoot;
3031
import io.smallrye.config.ConfigMapping;
3132
import io.smallrye.config.ConfigMappingInterface;
3233
import io.smallrye.config.ConfigMappingInterface.LeafProperty;
@@ -38,14 +39,14 @@
3839

3940
public class ConfigMappingUtils {
4041
public static final DotName CONFIG_MAPPING_NAME = DotName.createSimple(ConfigMapping.class.getName());
41-
public static final DotName CONFIG_ROOT_NAME = DotName.createSimple(ConfigRoot.class.getName());
4242

4343
private ConfigMappingUtils() {
4444
throw new UnsupportedOperationException();
4545
}
4646

4747
// Used for application Mappings and MP ConfigProperties
4848
public static void processConfigClasses(
49+
ConfigurationBuildItem configItem,
4950
CombinedIndexBuildItem combinedIndex,
5051
BuildProducer<GeneratedClassBuildItem> generatedClasses,
5152
BuildProducer<ReflectiveClassBuildItem> reflectiveClasses,
@@ -62,27 +63,31 @@ public static void processConfigClasses(
6263
continue;
6364
}
6465

65-
// Skip roots
66-
if (target.hasAnnotation(CONFIG_ROOT_NAME)) {
66+
// Ignore scanned classes from the processor.
67+
// Usually they are not available in Jandex, but there are cases where extensions have jandex to their
68+
// own classes, or user applications adding @ConfigRoot to generate documentation. In that case, it would
69+
// generate duplicates.
70+
ConfigClass configClass = configClass(
71+
toClass(target.asClass().name()),
72+
Optional.ofNullable(annotationPrefix).map(AnnotationValue::asString).orElse(""));
73+
if (configItem.getReadResult().getAllMappingsByClass().containsKey(configClass.getType())) {
6774
continue;
6875
}
69-
70-
Class<?> configClass = toClass(target.asClass().name());
71-
String prefix = Optional.ofNullable(annotationPrefix).map(AnnotationValue::asString).orElse("");
7276
Kind configClassKind = getConfigClassType(instance);
73-
processConfigClass(configClass(configClass, prefix), configClassKind, true, combinedIndex,
74-
generatedClasses, reflectiveClasses, reflectiveMethods, configClasses, additionalConstrainedClasses);
77+
processConfigClass(configClass, configClassKind, combinedIndex, generatedClasses, reflectiveClasses,
78+
reflectiveMethods, configClasses, additionalConstrainedClasses);
7579
}
7680
}
7781

7882
public static void processConfigMapping(
83+
ConfigurationBuildItem configItem,
7984
CombinedIndexBuildItem combinedIndex,
8085
BuildProducer<GeneratedClassBuildItem> generatedClasses,
8186
BuildProducer<ReflectiveClassBuildItem> reflectiveClasses,
8287
BuildProducer<ReflectiveMethodBuildItem> reflectiveMethods,
8388
BuildProducer<ConfigClassBuildItem> configClasses,
8489
BuildProducer<AdditionalConstrainedClassBuildItem> additionalConstrainedClasses) {
85-
processConfigClasses(combinedIndex, generatedClasses, reflectiveClasses, reflectiveMethods, configClasses,
90+
processConfigClasses(configItem, combinedIndex, generatedClasses, reflectiveClasses, reflectiveMethods, configClasses,
8691
additionalConstrainedClasses, CONFIG_MAPPING_NAME);
8792
}
8893

@@ -95,14 +100,13 @@ public static void processExtensionConfigMapping(
95100
BuildProducer<ConfigClassBuildItem> configClasses,
96101
BuildProducer<AdditionalConstrainedClassBuildItem> additionalConstrainedClasses) {
97102

98-
processConfigClass(configClass, Kind.MAPPING, false, combinedIndex, generatedClasses, reflectiveClasses,
103+
processConfigClass(configClass, Kind.MAPPING, combinedIndex, generatedClasses, reflectiveClasses,
99104
reflectiveMethods, configClasses, additionalConstrainedClasses);
100105
}
101106

102107
private static void processConfigClass(
103108
ConfigClass configClassWithPrefix,
104109
Kind configClassKind,
105-
boolean isApplicationClass,
106110
CombinedIndexBuildItem combinedIndex,
107111
BuildProducer<GeneratedClassBuildItem> generatedClasses,
108112
BuildProducer<ReflectiveClassBuildItem> reflectiveClasses,
@@ -121,7 +125,8 @@ private static void processConfigClass(
121125
generatedClassesNames.add(mappingMetadata.getClassName());
122126
// This is the generated implementation of the mapping by SmallRye Config.
123127
byte[] classBytes = mappingMetadata.getClassBytes();
124-
generatedClasses.produce(new GeneratedClassBuildItem(isApplicationClass, mappingMetadata.getClassName(),
128+
generatedClasses.produce(new GeneratedClassBuildItem(isApplicationClass(configClass.getName()),
129+
mappingMetadata.getClassName(),
125130
classBytes));
126131
additionalConstrainedClasses.produce(AdditionalConstrainedClassBuildItem.of(mappingMetadata.getClassName(),
127132
classBytes));

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ void generateMappings(
204204
BuildProducer<ConfigClassBuildItem> configClasses,
205205
BuildProducer<AdditionalConstrainedClassBuildItem> additionalConstrainedClasses) {
206206

207-
processConfigMapping(combinedIndex, generatedClasses, reflectiveClasses, reflectiveMethods, configClasses,
207+
processConfigMapping(configItem, combinedIndex, generatedClasses, reflectiveClasses, reflectiveMethods, configClasses,
208208
additionalConstrainedClasses);
209209

210210
List<ConfigClass> buildTimeRunTimeMappings = configItem.getReadResult().getBuildTimeRunTimeMappings();

extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/ConfigBuildStep.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
import io.quarkus.deployment.builditem.ConfigClassBuildItem;
6464
import io.quarkus.deployment.builditem.ConfigMappingBuildItem;
6565
import io.quarkus.deployment.builditem.ConfigPropertiesBuildItem;
66+
import io.quarkus.deployment.builditem.ConfigurationBuildItem;
6667
import io.quarkus.deployment.builditem.GeneratedClassBuildItem;
6768
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
6869
import io.quarkus.deployment.builditem.nativeimage.ReflectiveMethodBuildItem;
@@ -261,14 +262,15 @@ public void transform(TransformationContext context) {
261262

262263
@BuildStep
263264
void generateConfigProperties(
265+
ConfigurationBuildItem configItem,
264266
CombinedIndexBuildItem combinedIndex,
265267
BuildProducer<GeneratedClassBuildItem> generatedClasses,
266268
BuildProducer<ReflectiveClassBuildItem> reflectiveClasses,
267269
BuildProducer<ReflectiveMethodBuildItem> reflectiveMethods,
268270
BuildProducer<ConfigClassBuildItem> configClasses,
269271
BuildProducer<AdditionalConstrainedClassBuildItem> additionalConstrainedClasses) {
270272

271-
processConfigClasses(combinedIndex, generatedClasses, reflectiveClasses, reflectiveMethods, configClasses,
273+
processConfigClasses(configItem, combinedIndex, generatedClasses, reflectiveClasses, reflectiveMethods, configClasses,
272274
additionalConstrainedClasses, MP_CONFIG_PROPERTIES_NAME);
273275
}
274276

0 commit comments

Comments
 (0)