35
35
import io .quarkus .deployment .annotations .BuildStep ;
36
36
import io .quarkus .deployment .builditem .CombinedIndexBuildItem ;
37
37
import io .quarkus .deployment .builditem .nativeimage .ReflectiveClassBuildItem ;
38
- import io .quarkus .deployment .builditem .nativeimage .ReflectiveClassFinalFieldsWritablePredicateBuildItem ;
39
38
import io .quarkus .deployment .builditem .nativeimage .ReflectiveHierarchyBuildItem ;
40
39
import io .quarkus .deployment .builditem .nativeimage .ReflectiveHierarchyIgnoreWarningBuildItem ;
41
40
import io .quarkus .deployment .util .JandexUtil ;
@@ -58,21 +57,10 @@ public ReflectiveHierarchyIgnoreWarningBuildItem ignoreJavaClassWarnings() {
58
57
public void build (CombinedIndexBuildItem combinedIndexBuildItem , Capabilities capabilities ,
59
58
List <ReflectiveHierarchyBuildItem > hierarchy ,
60
59
List <ReflectiveHierarchyIgnoreWarningBuildItem > ignored ,
61
- List <ReflectiveClassFinalFieldsWritablePredicateBuildItem > finalFieldsWritablePredicates ,
62
60
BuildProducer <ReflectiveClassBuildItem > reflectiveClass ) throws Exception {
63
61
Set <DotName > processedReflectiveHierarchies = new HashSet <>();
64
62
Map <DotName , Set <String >> unindexedClasses = new TreeMap <>();
65
63
66
- final Predicate <ClassInfo > finalFieldsWritable = finalFieldsWritablePredicates .isEmpty () ?
67
- // no need to make final fields writable by default
68
- (c ) -> false
69
- :
70
- // create a predicate that returns true if any of the predicates says that final fields need to be writable
71
- finalFieldsWritablePredicates
72
- .stream ()
73
- .map (ReflectiveClassFinalFieldsWritablePredicateBuildItem ::getPredicate )
74
- .reduce (c -> false , Predicate ::or );
75
-
76
64
// to avoid recursive processing of the hierarchy (which could lead to a StackOverflowError) we are going to be scheduling type visits instead
77
65
final Deque <ReflectiveHierarchyVisitor > visits = new ArrayDeque <>();
78
66
@@ -83,7 +71,7 @@ public void build(CombinedIndexBuildItem combinedIndexBuildItem, Capabilities ca
83
71
i .getType (),
84
72
processedReflectiveHierarchies ,
85
73
unindexedClasses ,
86
- finalFieldsWritable , reflectiveClass , visits );
74
+ reflectiveClass , visits );
87
75
}
88
76
89
77
while (!visits .isEmpty ()) {
@@ -134,7 +122,7 @@ private void removeIgnored(Map<DotName, Set<String>> unindexedClasses,
134
122
private void addReflectiveHierarchy (CombinedIndexBuildItem combinedIndexBuildItem ,
135
123
Capabilities capabilities , ReflectiveHierarchyBuildItem reflectiveHierarchyBuildItem , String source , Type type ,
136
124
Set <DotName > processedReflectiveHierarchies , Map <DotName , Set <String >> unindexedClasses ,
137
- Predicate < ClassInfo > finalFieldsWritable , BuildProducer <ReflectiveClassBuildItem > reflectiveClass ,
125
+ BuildProducer <ReflectiveClassBuildItem > reflectiveClass ,
138
126
Deque <ReflectiveHierarchyVisitor > visits ) {
139
127
final String newSource = source + " > " + type .name ().toString ();
140
128
if (type instanceof VoidType ||
@@ -150,35 +138,35 @@ private void addReflectiveHierarchy(CombinedIndexBuildItem combinedIndexBuildIte
150
138
addClassTypeHierarchy (combinedIndexBuildItem , capabilities , reflectiveHierarchyBuildItem , newSource , type .name (),
151
139
type .name (),
152
140
processedReflectiveHierarchies , unindexedClasses ,
153
- finalFieldsWritable , reflectiveClass , visits );
141
+ reflectiveClass , visits );
154
142
155
143
for (ClassInfo subclass : combinedIndexBuildItem .getIndex ().getAllKnownSubclasses (type .name ())) {
156
144
addClassTypeHierarchy (combinedIndexBuildItem , capabilities , reflectiveHierarchyBuildItem , newSource ,
157
145
subclass .name (),
158
146
subclass .name (),
159
147
processedReflectiveHierarchies ,
160
- unindexedClasses , finalFieldsWritable , reflectiveClass , visits );
148
+ unindexedClasses , reflectiveClass , visits );
161
149
}
162
150
for (ClassInfo subclass : combinedIndexBuildItem .getIndex ().getAllKnownImplementors (type .name ())) {
163
151
addClassTypeHierarchy (combinedIndexBuildItem , capabilities , reflectiveHierarchyBuildItem , newSource ,
164
152
subclass .name (),
165
153
subclass .name (),
166
154
processedReflectiveHierarchies ,
167
- unindexedClasses , finalFieldsWritable , reflectiveClass , visits );
155
+ unindexedClasses , reflectiveClass , visits );
168
156
}
169
157
} else if (type instanceof ArrayType ) {
170
158
visits .addLast (() -> addReflectiveHierarchy (combinedIndexBuildItem , capabilities ,
171
159
reflectiveHierarchyBuildItem , newSource ,
172
160
type .asArrayType ().constituent (),
173
161
processedReflectiveHierarchies ,
174
- unindexedClasses , finalFieldsWritable , reflectiveClass , visits ));
162
+ unindexedClasses , reflectiveClass , visits ));
175
163
} else if (type instanceof ParameterizedType ) {
176
164
if (!reflectiveHierarchyBuildItem .getIgnoreTypePredicate ().test (type .name ())) {
177
165
addClassTypeHierarchy (combinedIndexBuildItem , capabilities , reflectiveHierarchyBuildItem , newSource ,
178
166
type .name (),
179
167
type .name (),
180
168
processedReflectiveHierarchies ,
181
- unindexedClasses , finalFieldsWritable , reflectiveClass , visits );
169
+ unindexedClasses , reflectiveClass , visits );
182
170
}
183
171
final ParameterizedType parameterizedType = (ParameterizedType ) type ;
184
172
for (Type typeArgument : parameterizedType .arguments ()) {
@@ -187,7 +175,7 @@ private void addReflectiveHierarchy(CombinedIndexBuildItem combinedIndexBuildIte
187
175
newSource ,
188
176
typeArgument ,
189
177
processedReflectiveHierarchies ,
190
- unindexedClasses , finalFieldsWritable , reflectiveClass , visits ));
178
+ unindexedClasses , reflectiveClass , visits ));
191
179
}
192
180
}
193
181
}
@@ -199,7 +187,6 @@ private void addClassTypeHierarchy(CombinedIndexBuildItem combinedIndexBuildItem
199
187
DotName initialName ,
200
188
Set <DotName > processedReflectiveHierarchies ,
201
189
Map <DotName , Set <String >> unindexedClasses ,
202
- Predicate <ClassInfo > finalFieldsWritable ,
203
190
BuildProducer <ReflectiveClassBuildItem > reflectiveClass ,
204
191
Deque <ReflectiveHierarchyVisitor > visits ) {
205
192
if (name == null ) {
@@ -242,7 +229,7 @@ private void addClassTypeHierarchy(CombinedIndexBuildItem combinedIndexBuildItem
242
229
visits .addLast (() -> addClassTypeHierarchy (combinedIndexBuildItem , capabilities , reflectiveHierarchyBuildItem , source ,
243
230
info .superName (), initialName ,
244
231
processedReflectiveHierarchies ,
245
- unindexedClasses , finalFieldsWritable , reflectiveClass , visits ));
232
+ unindexedClasses , reflectiveClass , visits ));
246
233
for (FieldInfo field : info .fields ()) {
247
234
if (reflectiveHierarchyBuildItem .getIgnoreFieldPredicate ().test (field ) ||
248
235
// skip the static fields (especially loggers)
@@ -256,7 +243,7 @@ private void addClassTypeHierarchy(CombinedIndexBuildItem combinedIndexBuildItem
256
243
() -> addReflectiveHierarchy (combinedIndexBuildItem , capabilities , reflectiveHierarchyBuildItem , source ,
257
244
fieldType ,
258
245
processedReflectiveHierarchies ,
259
- unindexedClasses , finalFieldsWritable , reflectiveClass , visits ));
246
+ unindexedClasses , reflectiveClass , visits ));
260
247
}
261
248
for (MethodInfo method : info .methods ()) {
262
249
if (reflectiveHierarchyBuildItem .getIgnoreMethodPredicate ().test (method ) ||
@@ -270,7 +257,7 @@ private void addClassTypeHierarchy(CombinedIndexBuildItem combinedIndexBuildItem
270
257
reflectiveHierarchyBuildItem , source ,
271
258
method .returnType (),
272
259
processedReflectiveHierarchies ,
273
- unindexedClasses , finalFieldsWritable , reflectiveClass , visits ));
260
+ unindexedClasses , reflectiveClass , visits ));
274
261
}
275
262
276
263
// for Kotlin classes, we need to register the nested classes as well because companion classes are very often necessary at runtime
@@ -279,7 +266,7 @@ private void addClassTypeHierarchy(CombinedIndexBuildItem combinedIndexBuildItem
279
266
for (DotName memberClassName : info .memberClasses ()) {
280
267
addClassTypeHierarchy (combinedIndexBuildItem , capabilities , reflectiveHierarchyBuildItem , source ,
281
268
memberClassName , memberClassName , processedReflectiveHierarchies , unindexedClasses ,
282
- finalFieldsWritable , reflectiveClass , visits );
269
+ reflectiveClass , visits );
283
270
}
284
271
}
285
272
}
0 commit comments