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