Skip to content

Commit 9f1232f

Browse files
committed
[GR-50385] Include all reflection queries for registered classes
PullRequest: graal/16234
2 parents 9c0f742 + 3fc9b9a commit 9f1232f

File tree

20 files changed

+256
-193
lines changed

20 files changed

+256
-193
lines changed

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/core/common/util/FrequencyEncoder.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
import java.util.ArrayList;
2828
import java.util.List;
29+
import java.util.function.Consumer;
2930

3031
import org.graalvm.collections.EconomicMap;
3132
import org.graalvm.collections.Equivalence;
@@ -71,6 +72,14 @@ public static <T> FrequencyEncoder<T> createEqualityEncoder() {
7172
return new FrequencyEncoder<>(EconomicMap.create(Equivalence.DEFAULT));
7273
}
7374

75+
/*
76+
* Creates an encoder that uses {@link Object#equals(Object)} object equality and calls the
77+
* provided verifier before adding an element.
78+
*/
79+
public static <T> FrequencyEncoder<T> createVerifyingEqualityEncoder(Consumer<T> verifier) {
80+
return new VerifyingFrequencyEncoder<>(EconomicMap.create(Equivalence.DEFAULT), verifier);
81+
}
82+
7483
protected FrequencyEncoder(EconomicMap<T, Entry<T>> map) {
7584
this.map = map;
7685
}
@@ -159,4 +168,19 @@ public T[] encodeAll(T[] allObjects) {
159168
encoded = true;
160169
return allObjects;
161170
}
171+
172+
static class VerifyingFrequencyEncoder<T> extends FrequencyEncoder<T> {
173+
private final Consumer<T> verifier;
174+
175+
VerifyingFrequencyEncoder(EconomicMap<T, Entry<T>> map, Consumer<T> verifier) {
176+
super(map);
177+
this.verifier = verifier;
178+
}
179+
180+
@Override
181+
public boolean addObject(T object) {
182+
verifier.accept(object);
183+
return super.addObject(object);
184+
}
185+
}
162186
}

substratevm/src/com.oracle.svm.agent/src/com/oracle/svm/agent/NativeImageAgent.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,10 @@ protected int onLoadCallback(JNIJavaVM vm, JvmtiEnv jvmti, JvmtiEventCallbacks c
370370
}
371371
}
372372

373+
if (tracer != null) {
374+
tracer.traceTrackReflectionMetadata(trackReflectionMetadata);
375+
}
376+
373377
try {
374378
BreakpointInterceptor.onLoad(jvmti, callbacks, tracer, this, interceptedStateSupplier,
375379
experimentalClassLoaderSupport, experimentalClassDefineSupport, experimentalUnsafeAllocationSupport, trackReflectionMetadata);

substratevm/src/com.oracle.svm.agent/src/com/oracle/svm/agent/tracing/core/Tracer.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,14 @@ public void tracePhaseChange(String phase) {
7474
traceEntry(entry);
7575
}
7676

77+
public void traceTrackReflectionMetadata(boolean trackReflectionMetadata) {
78+
EconomicMap<String, Object> entry = EconomicMap.create();
79+
entry.put("tracer", "meta");
80+
entry.put("event", "track_reflection_metadata");
81+
entry.put("track", trackReflectionMetadata);
82+
traceEntry(entry);
83+
}
84+
7785
/**
7886
* Trace a call to a function or method. {@link Object} arguments are represented as strings by
7987
* calling {@link Object#toString()} on them unless they are {@link #EXPLICIT_NULL},

substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/config/OmitPreviousConfigTests.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,13 @@ private static void doTestExpectedMissingTypes(TypeConfiguration typeConfig) {
150150

151151
private static void doTestTypeFlags(TypeConfiguration typeConfig) {
152152
ConfigurationType flagTestHasDeclaredType = getConfigTypeOrFail(typeConfig, "FlagTestC");
153-
Assert.assertTrue(ConfigurationType.TestBackdoor.haveAllDeclaredClasses(flagTestHasDeclaredType) || ConfigurationType.TestBackdoor.haveAllDeclaredFields(flagTestHasDeclaredType) ||
153+
Assert.assertTrue(ConfigurationType.TestBackdoor.haveAllDeclaredClasses(flagTestHasDeclaredType) ||
154+
ConfigurationType.TestBackdoor.getAllDeclaredFields(flagTestHasDeclaredType) == ConfigurationMemberAccessibility.ACCESSED ||
154155
ConfigurationType.TestBackdoor.getAllDeclaredConstructors(flagTestHasDeclaredType) == ConfigurationMemberAccessibility.ACCESSED);
155156

156157
ConfigurationType flagTestHasPublicType = getConfigTypeOrFail(typeConfig, "FlagTestD");
157-
Assert.assertTrue(ConfigurationType.TestBackdoor.haveAllPublicClasses(flagTestHasPublicType) || ConfigurationType.TestBackdoor.haveAllPublicFields(flagTestHasPublicType) ||
158+
Assert.assertTrue(ConfigurationType.TestBackdoor.haveAllPublicClasses(flagTestHasPublicType) ||
159+
ConfigurationType.TestBackdoor.getAllPublicFields(flagTestHasPublicType) == ConfigurationMemberAccessibility.ACCESSED ||
158160
ConfigurationType.TestBackdoor.getAllPublicConstructors(flagTestHasPublicType) == ConfigurationMemberAccessibility.ACCESSED);
159161
}
160162

@@ -281,13 +283,13 @@ void setFlags(ConfigurationType config) {
281283
config.setAllDeclaredClasses();
282284
config.setAllDeclaredConstructors(ConfigurationMemberAccessibility.ACCESSED);
283285
config.setAllDeclaredMethods(ConfigurationMemberAccessibility.ACCESSED);
284-
config.setAllDeclaredFields();
286+
config.setAllDeclaredFields(ConfigurationMemberAccessibility.ACCESSED);
285287
}
286288
if (methodKind.equals(ConfigurationMemberDeclaration.PUBLIC) || methodKind.equals(ConfigurationMemberDeclaration.DECLARED_AND_PUBLIC)) {
287289
config.setAllPublicClasses();
288290
config.setAllPublicConstructors(ConfigurationMemberAccessibility.ACCESSED);
289291
config.setAllPublicMethods(ConfigurationMemberAccessibility.ACCESSED);
290-
config.setAllPublicFields();
292+
config.setAllPublicFields(ConfigurationMemberAccessibility.ACCESSED);
291293
}
292294
}
293295

0 commit comments

Comments
 (0)