| 
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