Skip to content

Commit 3a54ab4

Browse files
committed
Tests for missing metdata exceptions
1 parent 69765f3 commit 3a54ab4

File tree

27 files changed

+442
-165
lines changed

27 files changed

+442
-165
lines changed

sdk/src/org.graalvm.nativeimage/snapshot.sigtest

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,15 @@ meth public static <%0 extends java.lang.Enum<{%%0}>> {%%0} valueOf(java.lang.Cl
3737
supr java.lang.Object
3838
hfds name,ordinal
3939

40+
CLSS public java.lang.Error
41+
cons protected init(java.lang.String,java.lang.Throwable,boolean,boolean)
42+
cons public init()
43+
cons public init(java.lang.String)
44+
cons public init(java.lang.String,java.lang.Throwable)
45+
cons public init(java.lang.Throwable)
46+
supr java.lang.Throwable
47+
hfds serialVersionUID
48+
4049
CLSS public java.lang.Exception
4150
cons protected init(java.lang.String,java.lang.Throwable,boolean,boolean)
4251
cons public init()
@@ -222,6 +231,11 @@ meth public abstract void fatalError()
222231
meth public abstract void flush()
223232
meth public abstract void log(org.graalvm.nativeimage.c.type.CCharPointer,org.graalvm.word.UnsignedWord)
224233

234+
CLSS public final org.graalvm.nativeimage.MissingReflectionRegistrationError
235+
cons public init(java.lang.String)
236+
supr java.lang.Error
237+
hfds serialVersionUID
238+
225239
CLSS public abstract interface org.graalvm.nativeimage.ObjectHandle
226240
intf org.graalvm.word.ComparableWord
227241

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
3939
* SOFTWARE.
4040
*/
41-
package org.graalvm.nativeimage.metadata;
41+
package org.graalvm.nativeimage;
4242

4343
/**
4444
* This exception is thrown when a reflective query (such as
@@ -49,10 +49,10 @@
4949
* a change in the reachability of an element will not cause changes in the behavior of the
5050
* application).
5151
*/
52-
public final class MissingReflectionMetadataException extends RuntimeException {
52+
public final class MissingReflectionRegistrationError extends Error {
5353
private static final long serialVersionUID = 1L;
5454

55-
public MissingReflectionMetadataException(String message) {
55+
public MissingReflectionRegistrationError(String message) {
5656
super(message);
5757
}
5858
}

sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/ReflectionRegistry.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,14 @@ default void registerAllRecordComponentsQuery(ConfigurationCondition condition,
9595
default void registerAllPermittedSubclassesQuery(ConfigurationCondition condition, Class<?> clazz) {
9696
}
9797

98+
@SuppressWarnings("unused")
99+
default void registerAllNestMembersQuery(ConfigurationCondition condition, Class<?> clazz) {
100+
}
101+
102+
@SuppressWarnings("unused")
103+
default void registerAllSignersQuery(ConfigurationCondition condition, Class<?> clazz) {
104+
}
105+
98106
@SuppressWarnings("unused")
99107
default void registerClassLookupException(ConfigurationCondition condition, String typeName, Throwable t) {
100108
}

substratevm/src/com.oracle.graal.pointsto.standalone/src/com/oracle/graal/pointsto/standalone/StandaloneHost.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@ public void onTypeReachable(AnalysisType type) {
8080
*/
8181
}
8282

83+
@Override
84+
public void onTypeInstantiated(AnalysisType newValue) {
85+
}
86+
8387
@Override
8488
public GraphBuilderPhase.Instance createGraphBuilderPhase(HostedProviders providers, GraphBuilderConfiguration graphBuilderConfig, OptimisticOptimizations optimisticOpts,
8589
IntrinsicContext initialIntrinsicContext) {

substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/api/HostVM.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,13 @@ public void checkType(ResolvedJavaType type, AnalysisUniverse universe) {
152152
*/
153153
public abstract void onTypeReachable(AnalysisType newValue);
154154

155+
/**
156+
* Run initialization tasks for a newly instantiated {@link AnalysisType}.
157+
*
158+
* @param newValue the type to initialize
159+
*/
160+
public abstract void onTypeInstantiated(AnalysisType newValue);
161+
155162
/**
156163
* Check if an {@link AnalysisType} is initialized.
157164
*/

substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/meta/AnalysisType.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,7 @@
4141
import java.util.function.Function;
4242

4343
import org.graalvm.compiler.debug.GraalError;
44-
import org.graalvm.nativeimage.ImageSingletons;
4544
import org.graalvm.nativeimage.hosted.Feature.DuringAnalysisAccess;
46-
import org.graalvm.nativeimage.impl.ConfigurationCondition;
47-
import org.graalvm.nativeimage.impl.RuntimeReflectionSupport;
4845
import org.graalvm.word.WordBase;
4946

5047
import com.oracle.graal.pointsto.BigBang;
@@ -580,9 +577,6 @@ protected void onReachable() {
580577
* of explicit registration of types for reflection.
581578
*/
582579
registerAsAllocated("All array types are marked as instantiated eagerly.");
583-
} else if (isAnnotation()) {
584-
/* getDeclaredMethods is called in the AnnotationType constructor */
585-
ImageSingletons.lookup(RuntimeReflectionSupport.class).registerAllDeclaredMethodsQuery(ConfigurationCondition.alwaysTrue(), true, getJavaClass());
586580
}
587581
ensureOnTypeReachableTaskDone();
588582
}

substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/meta/AnalysisUniverse.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -692,6 +692,7 @@ public void onFieldAccessed(AnalysisField field) {
692692
}
693693

694694
public void onTypeInstantiated(AnalysisType type, UsageKind usage) {
695+
hostVM.onTypeInstantiated(type);
695696
bb.onTypeInstantiated(type, usage);
696697
}
697698

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,14 @@ private static boolean getPermittedSubclasses(JNIEnvironment jni, JNIObjectHandl
273273
return handleGetClasses(jni, thread, bp, state);
274274
}
275275

276+
private static boolean getNestMembers(JNIEnvironment jni, JNIObjectHandle thread, Breakpoint bp, InterceptedState state) {
277+
return handleGetClasses(jni, thread, bp, state);
278+
}
279+
280+
private static boolean getSigners(JNIEnvironment jni, JNIObjectHandle thread, Breakpoint bp, InterceptedState state) {
281+
return handleGetClasses(jni, thread, bp, state);
282+
}
283+
276284
private static boolean handleGetClasses(JNIEnvironment jni, JNIObjectHandle thread, Breakpoint bp, InterceptedState state) {
277285
JNIObjectHandle callerClass = state.getDirectCallerClass();
278286
JNIObjectHandle self = getReceiver(thread);
@@ -1769,7 +1777,11 @@ private interface BreakpointHandler {
17691777
optionalBrk("java/lang/Class", "getRecordComponents", "()[Ljava/lang/reflect/RecordComponent;",
17701778
BreakpointInterceptor::getRecordComponents),
17711779
optionalBrk("java/lang/Class", "getPermittedSubclasses", "()[Ljava/lang/Class;",
1772-
BreakpointInterceptor::getPermittedSubclasses)
1780+
BreakpointInterceptor::getPermittedSubclasses),
1781+
optionalBrk("java/lang/Class", "getNestMembers", "()[Ljava/lang/Class;",
1782+
BreakpointInterceptor::getNestMembers),
1783+
optionalBrk("java/lang/Class", "getSigners", "()[Ljava/lang/Object;",
1784+
BreakpointInterceptor::getSigners)
17731785
};
17741786

17751787
private static boolean allocateInstance(JNIEnvironment jni, JNIObjectHandle thread, @SuppressWarnings("unused") Breakpoint bp, InterceptedState state) {

substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationType.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ static ConfigurationType copyAndMerge(ConfigurationType type, ConfigurationType
9494
private boolean allDeclaredClasses;
9595
private boolean allRecordComponents;
9696
private boolean allPermittedSubclasses;
97+
private boolean allNestMembers;
98+
private boolean allSigners;
9799
private boolean allPublicClasses;
98100
private boolean allDeclaredFields;
99101
private boolean allPublicFields;
@@ -269,6 +271,8 @@ private void setFlagsFromOther(ConfigurationType other, BiPredicate<Boolean, Boo
269271
allDeclaredClasses = flagPredicate.test(allDeclaredClasses, other.allDeclaredClasses);
270272
allRecordComponents = flagPredicate.test(allRecordComponents, other.allRecordComponents);
271273
allPermittedSubclasses = flagPredicate.test(allPermittedSubclasses, other.allPermittedSubclasses);
274+
allNestMembers = flagPredicate.test(allNestMembers, other.allNestMembers);
275+
allSigners = flagPredicate.test(allSigners, other.allSigners);
272276
allPublicClasses = flagPredicate.test(allPublicClasses, other.allPublicClasses);
273277
allDeclaredFields = flagPredicate.test(allDeclaredFields, other.allDeclaredFields);
274278
allPublicFields = flagPredicate.test(allPublicFields, other.allPublicFields);
@@ -284,7 +288,7 @@ private boolean isEmpty() {
284288
}
285289

286290
private boolean allFlagsFalse() {
287-
return !(allDeclaredClasses || allRecordComponents || allPermittedSubclasses || allPublicClasses || allDeclaredFields || allPublicFields ||
291+
return !(allDeclaredClasses || allRecordComponents || allPermittedSubclasses || allNestMembers || allSigners || allPublicClasses || allDeclaredFields || allPublicFields ||
288292
allDeclaredMethodsAccess != ConfigurationMemberAccessibility.NONE || allPublicMethodsAccess != ConfigurationMemberAccessibility.NONE ||
289293
allDeclaredConstructorsAccess != ConfigurationMemberAccessibility.NONE || allPublicConstructorsAccess != ConfigurationMemberAccessibility.NONE);
290294
}
@@ -377,6 +381,14 @@ public synchronized void setAllPermittedSubclasses() {
377381
allPermittedSubclasses = true;
378382
}
379383

384+
public synchronized void setAllNestMembers() {
385+
allNestMembers = true;
386+
}
387+
388+
public synchronized void setAllSigners() {
389+
allSigners = true;
390+
}
391+
380392
public synchronized void setAllPublicClasses() {
381393
allPublicClasses = true;
382394
}
@@ -438,6 +450,8 @@ public synchronized void printJson(JsonWriter writer) throws IOException {
438450
optionallyPrintJsonBoolean(writer, allDeclaredClasses, "allDeclaredClasses");
439451
optionallyPrintJsonBoolean(writer, allRecordComponents, "allRecordComponents");
440452
optionallyPrintJsonBoolean(writer, allPermittedSubclasses, "allPermittedSubclasses");
453+
optionallyPrintJsonBoolean(writer, allNestMembers, "allNestMembers");
454+
optionallyPrintJsonBoolean(writer, allSigners, "allSigners");
441455
optionallyPrintJsonBoolean(writer, allPublicClasses, "allPublicClasses");
442456
optionallyPrintJsonBoolean(writer, allDeclaredMethodsAccess == ConfigurationMemberAccessibility.QUERIED, "queryAllDeclaredMethods");
443457
optionallyPrintJsonBoolean(writer, allPublicMethodsAccess == ConfigurationMemberAccessibility.QUERIED, "queryAllPublicMethods");
@@ -546,6 +560,14 @@ public static boolean haveAllPermittedSubclasses(ConfigurationType type) {
546560
return type.allPermittedSubclasses;
547561
}
548562

563+
public static boolean haveAllNestMembers(ConfigurationType type) {
564+
return type.allNestMembers;
565+
}
566+
567+
public static boolean haveAllSigners(ConfigurationType type) {
568+
return type.allSigners;
569+
}
570+
549571
public static boolean haveAllPublicClasses(ConfigurationType type) {
550572
return type.allPublicClasses;
551573
}

substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ParserConfigurationAdapter.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,16 @@ public void registerPermittedSubclasses(ConfigurationType type) {
113113
type.setAllPermittedSubclasses();
114114
}
115115

116+
@Override
117+
public void registerNestMembers(ConfigurationType type) {
118+
type.setAllNestMembers();
119+
}
120+
121+
@Override
122+
public void registerSigners(ConfigurationType type) {
123+
type.setAllSigners();
124+
}
125+
116126
@Override
117127
public void registerPublicFields(ConfigurationType type) {
118128
type.setAllPublicFields();

0 commit comments

Comments
 (0)