< prev index next >
src/hotspot/share/prims/jvm.cpp
Print this page
@@ -3707,10 +3707,16 @@
return;
}
Klass* caller_k = java_lang_Class::as_Klass(JNIHandles::resolve(caller));
InstanceKlass* caller_ik = InstanceKlass::cast(caller_k);
+ if (caller_ik->is_hidden() || caller_ik->is_unsafe_anonymous()) {
+ // VM anonymous classes and hidden classes not of type lambda proxy classes are currently not being archived.
+ // If the caller_ik is of one of the above types, the corresponding lambda proxy class won't be
+ // registered for archiving.
+ return;
+ }
Klass* lambda_k = java_lang_Class::as_Klass(JNIHandles::resolve(lambdaProxyClass));
InstanceKlass* lambda_ik = InstanceKlass::cast(lambda_k);
assert(lambda_ik->is_hidden(), "must be a hidden class");
assert(!lambda_ik->is_non_strong_hidden(), "expected a strong hidden class");
@@ -3749,11 +3755,11 @@
return NULL;
}
if (invokedName == NULL || invokedType == NULL || methodType == NULL ||
implMethodMember == NULL || instantiatedMethodType == NULL) {
- return NULL;
+ THROW_(vmSymbols::java_lang_NullPointerException(), NULL);
}
Klass* caller_k = java_lang_Class::as_Klass(JNIHandles::resolve(caller));
InstanceKlass* caller_ik = InstanceKlass::cast(caller_k);
if (!caller_ik->is_shared()) {
@@ -3777,11 +3783,11 @@
InstanceKlass* lambda_ik = SystemDictionaryShared::get_shared_lambda_proxy_class(caller_ik, invoked_name, invoked_type,
method_type, m, instantiated_method_type);
jclass jcls = NULL;
if (lambda_ik != NULL) {
- InstanceKlass* loaded_lambda = SystemDictionaryShared::load_shared_lambda_proxy_class(lambda_ik, caller_ik, initialize, THREAD);
+ InstanceKlass* loaded_lambda = SystemDictionaryShared::prepare_shared_lambda_proxy_class(lambda_ik, caller_ik, initialize, THREAD);
jcls = loaded_lambda == NULL ? NULL : (jclass) JNIHandles::make_local(env, loaded_lambda->java_mirror());
}
return jcls;
JVM_END
< prev index next >