Skip to content

Commit 0fc1aa5

Browse files
committed
Enhance ReflectiveHierarchyBuildItem.source info
Instead of just holding the root cause of the registration we update the `source` field to hold the whole chain/hierarchy that led to the registration of an item.
1 parent b633cc4 commit 0fc1aa5

File tree

4 files changed

+29
-29
lines changed

4 files changed

+29
-29
lines changed

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ private void addReflectiveHierarchy(CombinedIndexBuildItem combinedIndexBuildIte
136136
Set<DotName> processedReflectiveHierarchies, Map<DotName, Set<String>> unindexedClasses,
137137
Predicate<ClassInfo> finalFieldsWritable, BuildProducer<ReflectiveClassBuildItem> reflectiveClass,
138138
Deque<ReflectiveHierarchyVisitor> visits) {
139+
final String newSource = source + " > " + type.name().toString();
139140
if (type instanceof VoidType ||
140141
type instanceof PrimitiveType ||
141142
type instanceof UnresolvedTypeVariable ||
@@ -146,42 +147,44 @@ private void addReflectiveHierarchy(CombinedIndexBuildItem combinedIndexBuildIte
146147
return;
147148
}
148149

149-
addClassTypeHierarchy(combinedIndexBuildItem, capabilities, reflectiveHierarchyBuildItem, source, type.name(),
150+
addClassTypeHierarchy(combinedIndexBuildItem, capabilities, reflectiveHierarchyBuildItem, newSource, type.name(),
150151
type.name(),
151152
processedReflectiveHierarchies, unindexedClasses,
152153
finalFieldsWritable, reflectiveClass, visits);
153154

154155
for (ClassInfo subclass : combinedIndexBuildItem.getIndex().getAllKnownSubclasses(type.name())) {
155-
addClassTypeHierarchy(combinedIndexBuildItem, capabilities, reflectiveHierarchyBuildItem, source,
156+
addClassTypeHierarchy(combinedIndexBuildItem, capabilities, reflectiveHierarchyBuildItem, newSource,
156157
subclass.name(),
157158
subclass.name(),
158159
processedReflectiveHierarchies,
159160
unindexedClasses, finalFieldsWritable, reflectiveClass, visits);
160161
}
161162
for (ClassInfo subclass : combinedIndexBuildItem.getIndex().getAllKnownImplementors(type.name())) {
162-
addClassTypeHierarchy(combinedIndexBuildItem, capabilities, reflectiveHierarchyBuildItem, source,
163+
addClassTypeHierarchy(combinedIndexBuildItem, capabilities, reflectiveHierarchyBuildItem, newSource,
163164
subclass.name(),
164165
subclass.name(),
165166
processedReflectiveHierarchies,
166167
unindexedClasses, finalFieldsWritable, reflectiveClass, visits);
167168
}
168169
} else if (type instanceof ArrayType) {
169170
visits.addLast(() -> addReflectiveHierarchy(combinedIndexBuildItem, capabilities,
170-
reflectiveHierarchyBuildItem, source,
171+
reflectiveHierarchyBuildItem, newSource,
171172
type.asArrayType().constituent(),
172173
processedReflectiveHierarchies,
173174
unindexedClasses, finalFieldsWritable, reflectiveClass, visits));
174175
} else if (type instanceof ParameterizedType) {
175176
if (!reflectiveHierarchyBuildItem.getIgnoreTypePredicate().test(type.name())) {
176-
addClassTypeHierarchy(combinedIndexBuildItem, capabilities, reflectiveHierarchyBuildItem, source, type.name(),
177+
addClassTypeHierarchy(combinedIndexBuildItem, capabilities, reflectiveHierarchyBuildItem, newSource,
178+
type.name(),
177179
type.name(),
178180
processedReflectiveHierarchies,
179181
unindexedClasses, finalFieldsWritable, reflectiveClass, visits);
180182
}
181183
final ParameterizedType parameterizedType = (ParameterizedType) type;
182184
for (Type typeArgument : parameterizedType.arguments()) {
183185
visits.addLast(
184-
() -> addReflectiveHierarchy(combinedIndexBuildItem, capabilities, reflectiveHierarchyBuildItem, source,
186+
() -> addReflectiveHierarchy(combinedIndexBuildItem, capabilities, reflectiveHierarchyBuildItem,
187+
newSource,
185188
typeArgument,
186189
processedReflectiveHierarchies,
187190
unindexedClasses, finalFieldsWritable, reflectiveClass, visits));

extensions/jackson/deployment/src/main/java/io/quarkus/jackson/deployment/JacksonProcessor.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -166,14 +166,17 @@ void register(
166166
if (CLASS.equals(annotationTarget.kind())) {
167167
DotName dotName = annotationTarget.asClass().name();
168168
if (!ignoredDotNames.contains(dotName)) {
169-
addReflectiveHierarchyClass(dotName, reflectiveHierarchyClass);
169+
addReflectiveHierarchyClass(getClass().getSimpleName() + " annotated with @" + JSON_DESERIALIZE,
170+
dotName, reflectiveHierarchyClass);
170171
}
171172

172173
AnnotationValue annotationValue = deserializeInstance.value("builder");
173174
if (null != annotationValue && AnnotationValue.Kind.CLASS.equals(annotationValue.kind())) {
174175
DotName builderClassName = annotationValue.asClass().name();
175176
if (!BUILDER_VOID.equals(builderClassName)) {
176-
addReflectiveHierarchyClass(builderClassName, reflectiveHierarchyClass);
177+
addReflectiveHierarchyClass(
178+
getClass().getSimpleName() + " @" + JSON_DESERIALIZE + " builder of " + dotName,
179+
builderClassName, reflectiveHierarchyClass);
177180
}
178181
}
179182
}
@@ -316,10 +319,10 @@ void register(
316319
additionalBeans.produce(new AdditionalBeanBuildItem(ObjectMapperProducer.class));
317320
}
318321

319-
private void addReflectiveHierarchyClass(DotName className,
322+
private void addReflectiveHierarchyClass(String reason, DotName className,
320323
BuildProducer<ReflectiveHierarchyBuildItem> reflectiveHierarchyClass) {
321324
reflectiveHierarchyClass.produce(ReflectiveHierarchyBuildItem.builder(className)
322-
.source(getClass().getSimpleName() + " > " + className)
325+
.source(reason)
323326
.build());
324327
}
325328

extensions/jaxb/deployment/src/main/java/io/quarkus/jaxb/deployment/JaxbProcessor.java

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,17 @@ void processAnnotationsAndIndexFiles(
214214
if (jaxbRootAnnotationInstance.target().kind() == Kind.CLASS
215215
&& !JAXB_ANNOTATIONS.contains(jaxbRootAnnotationInstance.target().asClass().getClass())) {
216216
ClassInfo targetClassInfo = jaxbRootAnnotationInstance.target().asClass();
217-
addReflectiveHierarchyClass(targetClassInfo, reflectiveHierarchies, index);
217+
final var name = targetClassInfo.name();
218+
219+
reflectiveHierarchies.produce(ReflectiveHierarchyBuildItem
220+
.builder(name)
221+
.index(index)
222+
.ignoreTypePredicate(t -> ReflectiveHierarchyBuildItem.DefaultIgnoreTypePredicate.INSTANCE.test(t)
223+
|| IGNORE_TYPES.contains(t))
224+
.ignoreFieldPredicate(JaxbProcessor::isFieldIgnored)
225+
.ignoreMethodPredicate(JaxbProcessor::isMethodIgnored)
226+
.source(getClass().getSimpleName() + " annotated with @" + jaxbRootAnnotation + " > " + name)
227+
.build());
218228
classesToBeBound.add(targetClassInfo.name().toString());
219229
jaxbRootAnnotationsDetected = true;
220230
}
@@ -422,22 +432,6 @@ public static Stream<Path> safeWalk(Path p) {
422432
}
423433
}
424434

425-
private void addReflectiveHierarchyClass(ClassInfo classInfo,
426-
BuildProducer<ReflectiveHierarchyBuildItem> reflectiveHierarchy,
427-
IndexView index) {
428-
final var name = classInfo.name();
429-
430-
reflectiveHierarchy.produce(ReflectiveHierarchyBuildItem
431-
.builder(name)
432-
.index(index)
433-
.ignoreTypePredicate(t -> ReflectiveHierarchyBuildItem.DefaultIgnoreTypePredicate.INSTANCE.test(t)
434-
|| IGNORE_TYPES.contains(t))
435-
.ignoreFieldPredicate(JaxbProcessor::isFieldIgnored)
436-
.ignoreMethodPredicate(JaxbProcessor::isMethodIgnored)
437-
.source(getClass().getSimpleName() + " > " + name)
438-
.build());
439-
}
440-
441435
private void addReflectiveClass(BuildProducer<ReflectiveClassBuildItem> reflectiveClass, boolean methods, boolean fields,
442436
String... className) {
443437
reflectiveClass.produce(ReflectiveClassBuildItem.builder(className).methods(methods).fields(fields).build());

extensions/resteasy-reactive/rest/deployment/src/main/java/io/quarkus/resteasy/reactive/server/deployment/ResteasyReactiveProcessor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,7 @@ public void accept(EndpointIndexer.ResourceMethodCallbackEntry entry) {
570570
QuarkusResteasyReactiveDotNames.IGNORE_FIELD_FOR_REFLECTION_PREDICATE)
571571
.ignoreMethodPredicate(
572572
QuarkusResteasyReactiveDotNames.IGNORE_METHOD_FOR_REFLECTION_PREDICATE)
573-
.source(source)
573+
.source(source + " > " + method.returnType().name().toString())
574574
.build());
575575
}
576576

@@ -587,7 +587,7 @@ public void accept(EndpointIndexer.ResourceMethodCallbackEntry entry) {
587587
QuarkusResteasyReactiveDotNames.IGNORE_FIELD_FOR_REFLECTION_PREDICATE)
588588
.ignoreMethodPredicate(
589589
QuarkusResteasyReactiveDotNames.IGNORE_METHOD_FOR_REFLECTION_PREDICATE)
590-
.source(source)
590+
.source(source + " > " + parameterType.name().toString())
591591
.build());
592592
}
593593
if (parameterType.name().equals(FILE)) {

0 commit comments

Comments
 (0)