hotspot/src/share/vm/classfile/systemDictionary.cpp
changeset 33611 9abd65805e19
parent 33602 16053580a684
child 33612 b1487e78deee
equal deleted inserted replaced
33602:16053580a684 33611:9abd65805e19
  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   }