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))
|