< prev index next >

src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java

Print this page

 998         java.util.Arrays.class,
 999         jdk.internal.misc.Unsafe.class
1000         //MethodHandle.class already covered
1001     };
1002 
1003     static boolean isStaticallyInvocable(NamedFunction ... functions) {
1004         for (NamedFunction nf : functions) {
1005             if (!isStaticallyInvocable(nf.member())) {
1006                 return false;
1007             }
1008         }
1009         return true;
1010     }
1011 
1012     static boolean isStaticallyInvocable(Name name) {
1013         return isStaticallyInvocable(name.function.member());
1014     }
1015 
1016     static boolean isStaticallyInvocable(MemberName member) {
1017         if (member == null)  return false;
1018         if (member.isConstructor())  return false;

1019         Class<?> cls = member.getDeclaringClass();
1020         // Fast-path non-private members declared by MethodHandles, which is a common
1021         // case
1022         if (MethodHandle.class.isAssignableFrom(cls) && !member.isPrivate()) {
1023             assert(isStaticallyInvocableType(member.getMethodOrFieldType()));
1024             return true;
1025         }
1026         if (cls.isArray() || cls.isPrimitive())
1027             return false;  // FIXME
1028         if (cls.isAnonymousClass() || cls.isLocalClass())
1029             return false;  // inner class of some sort
1030         if (cls.getClassLoader() != MethodHandle.class.getClassLoader())
1031             return false;  // not on BCP
1032         if (cls.isHidden())
1033             return false;
1034         if (!isStaticallyInvocableType(member.getMethodOrFieldType()))
1035             return false;
1036         if (!member.isPrivate() && VerifyAccess.isSamePackage(MethodHandle.class, cls))
1037             return true;   // in java.lang.invoke package
1038         if (member.isPublic() && isStaticallyNameable(cls))

 998         java.util.Arrays.class,
 999         jdk.internal.misc.Unsafe.class
1000         //MethodHandle.class already covered
1001     };
1002 
1003     static boolean isStaticallyInvocable(NamedFunction ... functions) {
1004         for (NamedFunction nf : functions) {
1005             if (!isStaticallyInvocable(nf.member())) {
1006                 return false;
1007             }
1008         }
1009         return true;
1010     }
1011 
1012     static boolean isStaticallyInvocable(Name name) {
1013         return isStaticallyInvocable(name.function.member());
1014     }
1015 
1016     static boolean isStaticallyInvocable(MemberName member) {
1017         if (member == null)  return false;
1018         if (member.isObjectConstructor() || member.isStaticValueFactoryMethod())  return false;
1019 
1020         Class<?> cls = member.getDeclaringClass();
1021         // Fast-path non-private members declared by MethodHandles, which is a common
1022         // case
1023         if (MethodHandle.class.isAssignableFrom(cls) && !member.isPrivate()) {
1024             assert(isStaticallyInvocableType(member.getMethodOrFieldType()));
1025             return true;
1026         }
1027         if (cls.isArray() || cls.isPrimitive())
1028             return false;  // FIXME
1029         if (cls.isAnonymousClass() || cls.isLocalClass())
1030             return false;  // inner class of some sort
1031         if (cls.getClassLoader() != MethodHandle.class.getClassLoader())
1032             return false;  // not on BCP
1033         if (cls.isHidden())
1034             return false;
1035         if (!isStaticallyInvocableType(member.getMethodOrFieldType()))
1036             return false;
1037         if (!member.isPrivate() && VerifyAccess.isSamePackage(MethodHandle.class, cls))
1038             return true;   // in java.lang.invoke package
1039         if (member.isPublic() && isStaticallyNameable(cls))
< prev index next >