Skip to content

Commit 4557b4a

Browse files
committed
Remove long deprecated finalFieldsWritable-related code
1 parent daa004a commit 4557b4a

File tree

4 files changed

+12
-80
lines changed

4 files changed

+12
-80
lines changed

core/deployment/src/main/java/io/quarkus/deployment/builditem/nativeimage/ReflectiveClassBuildItem.java

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import org.jboss.logging.Logger;
99

1010
import io.quarkus.builder.item.MultiBuildItem;
11-
import io.quarkus.runtime.graal.GraalVM;
1211

1312
/**
1413
* Used to register a class for reflection in native mode
@@ -196,15 +195,6 @@ public boolean isQueryConstructors() {
196195
return queryConstructors;
197196
}
198197

199-
/**
200-
* @deprecated As of GraalVM 21.2 finalFieldsWritable is no longer needed when registering fields for reflection. This will
201-
* be removed in a future version of Quarkus.
202-
*/
203-
@Deprecated
204-
public boolean areFinalFieldsWritable() {
205-
return false;
206-
}
207-
208198
public boolean isWeak() {
209199
return weak;
210200
}
@@ -335,15 +325,6 @@ public Builder classes() {
335325
return classes(true);
336326
}
337327

338-
/**
339-
* @deprecated As of GraalVM 21.2 finalFieldsWritable is no longer needed when registering fields for reflection. This
340-
* will be removed in a future version of Quarkus.
341-
*/
342-
@Deprecated(forRemoval = true)
343-
public Builder finalFieldsWritable(boolean finalFieldsWritable) {
344-
return this;
345-
}
346-
347328
public Builder weak(boolean weak) {
348329
this.weak = weak;
349330
return this;

core/deployment/src/main/java/io/quarkus/deployment/builditem/nativeimage/ReflectiveClassFinalFieldsWritablePredicateBuildItem.java

Lines changed: 0 additions & 26 deletions
This file was deleted.

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

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import io.quarkus.deployment.annotations.BuildStep;
3636
import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
3737
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
38-
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassFinalFieldsWritablePredicateBuildItem;
3938
import io.quarkus.deployment.builditem.nativeimage.ReflectiveHierarchyBuildItem;
4039
import io.quarkus.deployment.builditem.nativeimage.ReflectiveHierarchyIgnoreWarningBuildItem;
4140
import io.quarkus.deployment.util.JandexUtil;
@@ -58,21 +57,10 @@ public ReflectiveHierarchyIgnoreWarningBuildItem ignoreJavaClassWarnings() {
5857
public void build(CombinedIndexBuildItem combinedIndexBuildItem, Capabilities capabilities,
5958
List<ReflectiveHierarchyBuildItem> hierarchy,
6059
List<ReflectiveHierarchyIgnoreWarningBuildItem> ignored,
61-
List<ReflectiveClassFinalFieldsWritablePredicateBuildItem> finalFieldsWritablePredicates,
6260
BuildProducer<ReflectiveClassBuildItem> reflectiveClass) throws Exception {
6361
Set<DotName> processedReflectiveHierarchies = new HashSet<>();
6462
Map<DotName, Set<String>> unindexedClasses = new TreeMap<>();
6563

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-
7664
// to avoid recursive processing of the hierarchy (which could lead to a StackOverflowError) we are going to be scheduling type visits instead
7765
final Deque<ReflectiveHierarchyVisitor> visits = new ArrayDeque<>();
7866

@@ -83,7 +71,7 @@ public void build(CombinedIndexBuildItem combinedIndexBuildItem, Capabilities ca
8371
i.getType(),
8472
processedReflectiveHierarchies,
8573
unindexedClasses,
86-
finalFieldsWritable, reflectiveClass, visits);
74+
reflectiveClass, visits);
8775
}
8876

8977
while (!visits.isEmpty()) {
@@ -134,7 +122,7 @@ private void removeIgnored(Map<DotName, Set<String>> unindexedClasses,
134122
private void addReflectiveHierarchy(CombinedIndexBuildItem combinedIndexBuildItem,
135123
Capabilities capabilities, ReflectiveHierarchyBuildItem reflectiveHierarchyBuildItem, String source, Type type,
136124
Set<DotName> processedReflectiveHierarchies, Map<DotName, Set<String>> unindexedClasses,
137-
Predicate<ClassInfo> finalFieldsWritable, BuildProducer<ReflectiveClassBuildItem> reflectiveClass,
125+
BuildProducer<ReflectiveClassBuildItem> reflectiveClass,
138126
Deque<ReflectiveHierarchyVisitor> visits) {
139127
final String newSource = source + " > " + type.name().toString();
140128
if (type instanceof VoidType ||
@@ -150,35 +138,35 @@ private void addReflectiveHierarchy(CombinedIndexBuildItem combinedIndexBuildIte
150138
addClassTypeHierarchy(combinedIndexBuildItem, capabilities, reflectiveHierarchyBuildItem, newSource, type.name(),
151139
type.name(),
152140
processedReflectiveHierarchies, unindexedClasses,
153-
finalFieldsWritable, reflectiveClass, visits);
141+
reflectiveClass, visits);
154142

155143
for (ClassInfo subclass : combinedIndexBuildItem.getIndex().getAllKnownSubclasses(type.name())) {
156144
addClassTypeHierarchy(combinedIndexBuildItem, capabilities, reflectiveHierarchyBuildItem, newSource,
157145
subclass.name(),
158146
subclass.name(),
159147
processedReflectiveHierarchies,
160-
unindexedClasses, finalFieldsWritable, reflectiveClass, visits);
148+
unindexedClasses, reflectiveClass, visits);
161149
}
162150
for (ClassInfo subclass : combinedIndexBuildItem.getIndex().getAllKnownImplementors(type.name())) {
163151
addClassTypeHierarchy(combinedIndexBuildItem, capabilities, reflectiveHierarchyBuildItem, newSource,
164152
subclass.name(),
165153
subclass.name(),
166154
processedReflectiveHierarchies,
167-
unindexedClasses, finalFieldsWritable, reflectiveClass, visits);
155+
unindexedClasses, reflectiveClass, visits);
168156
}
169157
} else if (type instanceof ArrayType) {
170158
visits.addLast(() -> addReflectiveHierarchy(combinedIndexBuildItem, capabilities,
171159
reflectiveHierarchyBuildItem, newSource,
172160
type.asArrayType().constituent(),
173161
processedReflectiveHierarchies,
174-
unindexedClasses, finalFieldsWritable, reflectiveClass, visits));
162+
unindexedClasses, reflectiveClass, visits));
175163
} else if (type instanceof ParameterizedType) {
176164
if (!reflectiveHierarchyBuildItem.getIgnoreTypePredicate().test(type.name())) {
177165
addClassTypeHierarchy(combinedIndexBuildItem, capabilities, reflectiveHierarchyBuildItem, newSource,
178166
type.name(),
179167
type.name(),
180168
processedReflectiveHierarchies,
181-
unindexedClasses, finalFieldsWritable, reflectiveClass, visits);
169+
unindexedClasses, reflectiveClass, visits);
182170
}
183171
final ParameterizedType parameterizedType = (ParameterizedType) type;
184172
for (Type typeArgument : parameterizedType.arguments()) {
@@ -187,7 +175,7 @@ private void addReflectiveHierarchy(CombinedIndexBuildItem combinedIndexBuildIte
187175
newSource,
188176
typeArgument,
189177
processedReflectiveHierarchies,
190-
unindexedClasses, finalFieldsWritable, reflectiveClass, visits));
178+
unindexedClasses, reflectiveClass, visits));
191179
}
192180
}
193181
}
@@ -199,7 +187,6 @@ private void addClassTypeHierarchy(CombinedIndexBuildItem combinedIndexBuildItem
199187
DotName initialName,
200188
Set<DotName> processedReflectiveHierarchies,
201189
Map<DotName, Set<String>> unindexedClasses,
202-
Predicate<ClassInfo> finalFieldsWritable,
203190
BuildProducer<ReflectiveClassBuildItem> reflectiveClass,
204191
Deque<ReflectiveHierarchyVisitor> visits) {
205192
if (name == null) {
@@ -242,7 +229,7 @@ private void addClassTypeHierarchy(CombinedIndexBuildItem combinedIndexBuildItem
242229
visits.addLast(() -> addClassTypeHierarchy(combinedIndexBuildItem, capabilities, reflectiveHierarchyBuildItem, source,
243230
info.superName(), initialName,
244231
processedReflectiveHierarchies,
245-
unindexedClasses, finalFieldsWritable, reflectiveClass, visits));
232+
unindexedClasses, reflectiveClass, visits));
246233
for (FieldInfo field : info.fields()) {
247234
if (reflectiveHierarchyBuildItem.getIgnoreFieldPredicate().test(field) ||
248235
// skip the static fields (especially loggers)
@@ -256,7 +243,7 @@ private void addClassTypeHierarchy(CombinedIndexBuildItem combinedIndexBuildItem
256243
() -> addReflectiveHierarchy(combinedIndexBuildItem, capabilities, reflectiveHierarchyBuildItem, source,
257244
fieldType,
258245
processedReflectiveHierarchies,
259-
unindexedClasses, finalFieldsWritable, reflectiveClass, visits));
246+
unindexedClasses, reflectiveClass, visits));
260247
}
261248
for (MethodInfo method : info.methods()) {
262249
if (reflectiveHierarchyBuildItem.getIgnoreMethodPredicate().test(method) ||
@@ -270,7 +257,7 @@ private void addClassTypeHierarchy(CombinedIndexBuildItem combinedIndexBuildItem
270257
reflectiveHierarchyBuildItem, source,
271258
method.returnType(),
272259
processedReflectiveHierarchies,
273-
unindexedClasses, finalFieldsWritable, reflectiveClass, visits));
260+
unindexedClasses, reflectiveClass, visits));
274261
}
275262

276263
// 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
279266
for (DotName memberClassName : info.memberClasses()) {
280267
addClassTypeHierarchy(combinedIndexBuildItem, capabilities, reflectiveHierarchyBuildItem, source,
281268
memberClassName, memberClassName, processedReflectiveHierarchies, unindexedClasses,
282-
finalFieldsWritable, reflectiveClass, visits);
269+
reflectiveClass, visits);
283270
}
284271
}
285272
}

extensions/kotlin/deployment/src/main/java/io/quarkus/kotlin/deployment/KotlinProcessor.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import io.quarkus.deployment.builditem.FeatureBuildItem;
1212
import io.quarkus.deployment.builditem.nativeimage.NativeImageResourcePatternsBuildItem;
1313
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
14-
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassFinalFieldsWritablePredicateBuildItem;
1514
import io.quarkus.deployment.builditem.nativeimage.ReflectiveHierarchyIgnoreWarningBuildItem;
1615
import io.quarkus.deployment.builditem.nativeimage.ServiceProviderBuildItem;
1716
import io.quarkus.jackson.spi.ClassPathJacksonModuleBuildItem;
@@ -39,15 +38,6 @@ void registerKotlinJacksonModule(BuildProducer<ClassPathJacksonModuleBuildItem>
3938
classPathJacksonModules.produce(new ClassPathJacksonModuleBuildItem(KOTLIN_JACKSON_MODULE));
4039
}
4140

42-
/**
43-
* Kotlin data classes that have multiple constructors need to have their final fields writable,
44-
* otherwise creating an instance of them with default values fails in native mode.
45-
*/
46-
@BuildStep
47-
ReflectiveClassFinalFieldsWritablePredicateBuildItem dataClassPredicate() {
48-
return new ReflectiveClassFinalFieldsWritablePredicateBuildItem(new IsDataClassWithDefaultValuesPredicate());
49-
}
50-
5141
/*
5242
* Register the Kotlin reflection types if they are present.
5343
*/

0 commit comments

Comments
 (0)