|
24 | 24 | */ |
25 | 25 | package com.oracle.svm.interpreter.metadata; |
26 | 26 |
|
| 27 | +import static com.oracle.svm.espresso.classfile.Constants.ACC_CALLER_SENSITIVE; |
27 | 28 | import static com.oracle.svm.espresso.classfile.Constants.ACC_FINAL; |
28 | 29 | import static com.oracle.svm.espresso.classfile.Constants.ACC_NATIVE; |
29 | 30 | import static com.oracle.svm.espresso.classfile.Constants.ACC_SIGNATURE_POLYMORPHIC; |
|
42 | 43 | import java.util.Set; |
43 | 44 | import java.util.function.Function; |
44 | 45 |
|
| 46 | +import org.graalvm.nativeimage.AnnotationAccess; |
45 | 47 | import org.graalvm.nativeimage.Platform; |
46 | 48 | import org.graalvm.nativeimage.Platforms; |
47 | 49 |
|
|
62 | 64 | import com.oracle.svm.espresso.shared.meta.SignaturePolymorphicIntrinsic; |
63 | 65 | import com.oracle.svm.espresso.shared.vtable.PartialMethod; |
64 | 66 | import com.oracle.svm.interpreter.metadata.serialization.VisibleForSerialization; |
| 67 | +import com.oracle.svm.util.ReflectionUtil; |
65 | 68 |
|
66 | 69 | import jdk.graal.compiler.word.Word; |
67 | 70 | import jdk.vm.ci.meta.Constant; |
|
79 | 82 | * also abstract methods for vtable calls. |
80 | 83 | */ |
81 | 84 | public class InterpreterResolvedJavaMethod implements ResolvedJavaMethod, CremaMethodAccess { |
| 85 | + @Platforms(Platform.HOSTED_ONLY.class)// |
| 86 | + @SuppressWarnings("unchecked") // |
| 87 | + private static final Class<? extends Annotation> CALLER_SENSITIVE_CLASS = (Class<? extends Annotation>) ReflectionUtil.lookupClass("jdk.internal.reflect.CallerSensitive"); |
82 | 88 | /** |
83 | 89 | * This flag denotes a method that was originally native but was substituted by a non-native |
84 | 90 | * method. |
@@ -304,9 +310,16 @@ private static int createFlags(int modifiers, InterpreterResolvedObjectType decl |
304 | 310 | if (isSubstitutedNative) { |
305 | 311 | newModifiers |= ACC_SUBSTITUTED_NATIVE; |
306 | 312 | } |
| 313 | + if (AnnotationAccess.isAnnotationPresent(originalMethod, CALLER_SENSITIVE_CLASS)) { |
| 314 | + newModifiers |= ACC_CALLER_SENSITIVE; |
| 315 | + } |
307 | 316 | return newModifiers; |
308 | 317 | } |
309 | 318 |
|
| 319 | + public final boolean isCallerSensitive() { |
| 320 | + return (flags & ACC_CALLER_SENSITIVE) != 0; |
| 321 | + } |
| 322 | + |
310 | 323 | @Override |
311 | 324 | public final boolean isDeclaredSignaturePolymorphic() { |
312 | 325 | // Note: might not be true for the instantiation of polymorphic signature intrinsics. |
|
0 commit comments