1980 // else - ok, class loaded by a different thread in parallel, |
1980 // else - ok, class loaded by a different thread in parallel, |
1981 // we should only have found it if it was done loading and ok to use |
1981 // we should only have found it if it was done loading and ok to use |
1982 // system dictionary only holds instance classes, placeholders |
1982 // system dictionary only holds instance classes, placeholders |
1983 // also holds array classes |
1983 // also holds array classes |
1984 |
1984 |
1985 assert(check->oop_is_instance(), "noninstance in systemdictionary"); |
1985 assert(check->is_instance_klass(), "noninstance in systemdictionary"); |
1986 if ((defining == true) || (k() != check)) { |
1986 if ((defining == true) || (k() != check)) { |
1987 linkage_error = "loader (instance of %s): attempted duplicate class " |
1987 linkage_error = "loader (instance of %s): attempted duplicate class " |
1988 "definition for name: \"%s\""; |
1988 "definition for name: \"%s\""; |
1989 } else { |
1989 } else { |
1990 return; |
1990 return; |
2386 // This is a safe bet for public classes in java.lang, such as Object and String. |
2386 // This is a safe bet for public classes in java.lang, such as Object and String. |
2387 // We also include public classes in java.lang.invoke, because they appear frequently in system-level method types. |
2387 // We also include public classes in java.lang.invoke, because they appear frequently in system-level method types. |
2388 // Out of an abundance of caution, we do not include any other classes, not even for packages like java.util. |
2388 // Out of an abundance of caution, we do not include any other classes, not even for packages like java.util. |
2389 static bool is_always_visible_class(oop mirror) { |
2389 static bool is_always_visible_class(oop mirror) { |
2390 Klass* klass = java_lang_Class::as_Klass(mirror); |
2390 Klass* klass = java_lang_Class::as_Klass(mirror); |
2391 if (klass->oop_is_objArray()) { |
2391 if (klass->is_objArray_klass()) { |
2392 klass = ObjArrayKlass::cast(klass)->bottom_klass(); // check element type |
2392 klass = ObjArrayKlass::cast(klass)->bottom_klass(); // check element type |
2393 } |
2393 } |
2394 if (klass->oop_is_typeArray()) { |
2394 if (klass->is_typeArray_klass()) { |
2395 return true; // primitive array |
2395 return true; // primitive array |
2396 } |
2396 } |
2397 assert(klass->oop_is_instance(), "%s", klass->external_name()); |
2397 assert(klass->is_instance_klass(), "%s", klass->external_name()); |
2398 return klass->is_public() && |
2398 return klass->is_public() && |
2399 (InstanceKlass::cast(klass)->is_same_class_package(SystemDictionary::Object_klass()) || // java.lang |
2399 (InstanceKlass::cast(klass)->is_same_class_package(SystemDictionary::Object_klass()) || // java.lang |
2400 InstanceKlass::cast(klass)->is_same_class_package(SystemDictionary::MethodHandle_klass())); // java.lang.invoke |
2400 InstanceKlass::cast(klass)->is_same_class_package(SystemDictionary::MethodHandle_klass())); // java.lang.invoke |
2401 } |
2401 } |
2402 |
2402 |
2456 // Check accessibility. |
2456 // Check accessibility. |
2457 if (ss.is_object() && accessing_klass.not_null()) { |
2457 if (ss.is_object() && accessing_klass.not_null()) { |
2458 Klass* sel_klass = java_lang_Class::as_Klass(mirror); |
2458 Klass* sel_klass = java_lang_Class::as_Klass(mirror); |
2459 mirror = NULL; // safety |
2459 mirror = NULL; // safety |
2460 // Emulate ConstantPool::verify_constant_pool_resolve. |
2460 // Emulate ConstantPool::verify_constant_pool_resolve. |
2461 if (sel_klass->oop_is_objArray()) |
2461 if (sel_klass->is_objArray_klass()) |
2462 sel_klass = ObjArrayKlass::cast(sel_klass)->bottom_klass(); |
2462 sel_klass = ObjArrayKlass::cast(sel_klass)->bottom_klass(); |
2463 if (sel_klass->oop_is_instance()) { |
2463 if (sel_klass->is_instance_klass()) { |
2464 KlassHandle sel_kh(THREAD, sel_klass); |
2464 KlassHandle sel_kh(THREAD, sel_klass); |
2465 LinkResolver::check_klass_accessability(accessing_klass, sel_kh, CHECK_(empty)); |
2465 LinkResolver::check_klass_accessability(accessing_klass, sel_kh, CHECK_(empty)); |
2466 } |
2466 } |
2467 } |
2467 } |
2468 } |
2468 } |