--- old/src/hotspot/share/prims/jvm.cpp 2020-03-17 11:31:29.000000000 -0700 +++ new/src/hotspot/share/prims/jvm.cpp 2020-03-17 11:31:29.000000000 -0700 @@ -988,13 +988,13 @@ enum { NESTMATE = java_lang_invoke_MemberName::MN_NESTMATE_CLASS, HIDDEN_CLASS = java_lang_invoke_MemberName::MN_HIDDEN_CLASS, - WEAK_CLASS = java_lang_invoke_MemberName::MN_WEAK_CLASS, + STRONG_LOADER_LINK = java_lang_invoke_MemberName::MN_STRONG_LOADER_LINK, ACCESS_VM_ANNOTATIONS = java_lang_invoke_MemberName::MN_ACCESS_VM_ANNOTATIONS }; /* * Define a class with the specified flags that indicates if it's a nestmate, - * hidden, or weakly referenced from class loader. + * hidden, or strongly referenced from class loader. */ static jclass jvm_lookup_define_class(JNIEnv *env, jclass lookup, const char *name, jobject loader, const jbyte *buf, jsize len, jobject pd, @@ -1012,7 +1012,7 @@ jboolean is_nestmate = (flags & NESTMATE) == NESTMATE; jboolean is_hidden = (flags & HIDDEN_CLASS) == HIDDEN_CLASS; - jboolean is_weak = (flags & WEAK_CLASS) == WEAK_CLASS; + jboolean is_strong = (flags & STRONG_LOADER_LINK) == STRONG_LOADER_LINK; jboolean vm_annotations = (flags & ACCESS_VM_ANNOTATIONS) == ACCESS_VM_ANNOTATIONS; InstanceKlass* host_class = NULL; @@ -1026,7 +1026,7 @@ is_nestmate ? "with dynamic nest-host " : "non-nestmate", is_nestmate ? host_class->external_name() : "", is_hidden ? "hidden" : "not hidden", - is_weak ? "weak" : "strong", + is_strong ? "strong" : "weak", vm_annotations ? "with vm annotations" : "without vm annotation"); } @@ -1038,15 +1038,15 @@ if (is_nestmate) { THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "dynamic nestmate is only applicable for hidden classes"); } - if (is_weak) { - THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "weak class is only applicable for hidden classes"); + if (!is_strong) { + THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "an ordinary class must be strongly referenced by its defining loader"); } if (vm_annotations) { THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "vm annotations only allowed for hidden classes"); } - if (flags) { + if (flags != STRONG_LOADER_LINK) { THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), - err_msg("flag 0x%x can only be set for hidden classes", flags)); + err_msg("invalid flag 0x%x", flags)); } } @@ -1093,7 +1093,7 @@ host_class, classData_h, is_hidden, - is_weak, + !is_strong, vm_annotations); defined_k = SystemDictionary::parse_stream(class_name, class_loader,