hotspot/src/share/vm/prims/jvm.cpp
changeset 33611 9abd65805e19
parent 33602 16053580a684
child 34235 4cc9d7af1b01
child 33980 cbd63978deb5
equal deleted inserted replaced
33602:16053580a684 33611:9abd65805e19
  1020   }
  1020   }
  1021 
  1021 
  1022   KlassHandle klass(thread, java_lang_Class::as_Klass(mirror));
  1022   KlassHandle klass(thread, java_lang_Class::as_Klass(mirror));
  1023   // Figure size of result array
  1023   // Figure size of result array
  1024   int size;
  1024   int size;
  1025   if (klass->oop_is_instance()) {
  1025   if (klass->is_instance_klass()) {
  1026     size = InstanceKlass::cast(klass())->local_interfaces()->length();
  1026     size = InstanceKlass::cast(klass())->local_interfaces()->length();
  1027   } else {
  1027   } else {
  1028     assert(klass->oop_is_objArray() || klass->oop_is_typeArray(), "Illegal mirror klass");
  1028     assert(klass->is_objArray_klass() || klass->is_typeArray_klass(), "Illegal mirror klass");
  1029     size = 2;
  1029     size = 2;
  1030   }
  1030   }
  1031 
  1031 
  1032   // Allocate result array
  1032   // Allocate result array
  1033   objArrayOop r = oopFactory::new_objArray(SystemDictionary::Class_klass(), size, CHECK_NULL);
  1033   objArrayOop r = oopFactory::new_objArray(SystemDictionary::Class_klass(), size, CHECK_NULL);
  1034   objArrayHandle result (THREAD, r);
  1034   objArrayHandle result (THREAD, r);
  1035   // Fill in result
  1035   // Fill in result
  1036   if (klass->oop_is_instance()) {
  1036   if (klass->is_instance_klass()) {
  1037     // Regular instance klass, fill in all local interfaces
  1037     // Regular instance klass, fill in all local interfaces
  1038     for (int index = 0; index < size; index++) {
  1038     for (int index = 0; index < size; index++) {
  1039       Klass* k = InstanceKlass::cast(klass())->local_interfaces()->at(index);
  1039       Klass* k = InstanceKlass::cast(klass())->local_interfaces()->at(index);
  1040       result->obj_at_put(index, k->java_mirror());
  1040       result->obj_at_put(index, k->java_mirror());
  1041     }
  1041     }
  1054   if (java_lang_Class::is_primitive(mirror)) {
  1054   if (java_lang_Class::is_primitive(mirror)) {
  1055     return JNI_FALSE;
  1055     return JNI_FALSE;
  1056   }
  1056   }
  1057   Klass* k = java_lang_Class::as_Klass(mirror);
  1057   Klass* k = java_lang_Class::as_Klass(mirror);
  1058   jboolean result = k->is_interface();
  1058   jboolean result = k->is_interface();
  1059   assert(!result || k->oop_is_instance(),
  1059   assert(!result || k->is_instance_klass(),
  1060          "all interfaces are instance types");
  1060          "all interfaces are instance types");
  1061   // The compiler intrinsic for isInterface tests the
  1061   // The compiler intrinsic for isInterface tests the
  1062   // Klass::_access_flags bits in the same way.
  1062   // Klass::_access_flags bits in the same way.
  1063   return result;
  1063   return result;
  1064 JVM_END
  1064 JVM_END
  1095   if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
  1095   if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
  1096     // This call is ignored for primitive types and arrays.
  1096     // This call is ignored for primitive types and arrays.
  1097     // Signers are only set once, ClassLoader.java, and thus shouldn't
  1097     // Signers are only set once, ClassLoader.java, and thus shouldn't
  1098     // be called with an array.  Only the bootstrap loader creates arrays.
  1098     // be called with an array.  Only the bootstrap loader creates arrays.
  1099     Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  1099     Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  1100     if (k->oop_is_instance()) {
  1100     if (k->is_instance_klass()) {
  1101       java_lang_Class::set_signers(k->java_mirror(), objArrayOop(JNIHandles::resolve(signers)));
  1101       java_lang_Class::set_signers(k->java_mirror(), objArrayOop(JNIHandles::resolve(signers)));
  1102     }
  1102     }
  1103   }
  1103   }
  1104 JVM_END
  1104 JVM_END
  1105 
  1105 
  1354 
  1354 
  1355 
  1355 
  1356 JVM_QUICK_ENTRY(jboolean, JVM_IsArrayClass(JNIEnv *env, jclass cls))
  1356 JVM_QUICK_ENTRY(jboolean, JVM_IsArrayClass(JNIEnv *env, jclass cls))
  1357   JVMWrapper("JVM_IsArrayClass");
  1357   JVMWrapper("JVM_IsArrayClass");
  1358   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  1358   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  1359   return (k != NULL) && k->oop_is_array() ? true : false;
  1359   return (k != NULL) && k->is_array_klass() ? true : false;
  1360 JVM_END
  1360 JVM_END
  1361 
  1361 
  1362 
  1362 
  1363 JVM_QUICK_ENTRY(jboolean, JVM_IsPrimitiveClass(JNIEnv *env, jclass cls))
  1363 JVM_QUICK_ENTRY(jboolean, JVM_IsPrimitiveClass(JNIEnv *env, jclass cls))
  1364   JVMWrapper("JVM_IsPrimitiveClass");
  1364   JVMWrapper("JVM_IsPrimitiveClass");
  1387   JvmtiVMObjectAllocEventCollector oam;
  1387   JvmtiVMObjectAllocEventCollector oam;
  1388   // ofClass is a reference to a java_lang_Class object. The mirror object
  1388   // ofClass is a reference to a java_lang_Class object. The mirror object
  1389   // of an InstanceKlass
  1389   // of an InstanceKlass
  1390 
  1390 
  1391   if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ||
  1391   if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ||
  1392       ! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->oop_is_instance()) {
  1392       ! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_instance_klass()) {
  1393     oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL);
  1393     oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL);
  1394     return (jobjectArray)JNIHandles::make_local(env, result);
  1394     return (jobjectArray)JNIHandles::make_local(env, result);
  1395   }
  1395   }
  1396 
  1396 
  1397   instanceKlassHandle k(thread, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));
  1397   instanceKlassHandle k(thread, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));
  1451 
  1451 
  1452 JVM_ENTRY(jclass, JVM_GetDeclaringClass(JNIEnv *env, jclass ofClass))
  1452 JVM_ENTRY(jclass, JVM_GetDeclaringClass(JNIEnv *env, jclass ofClass))
  1453 {
  1453 {
  1454   // ofClass is a reference to a java_lang_Class object.
  1454   // ofClass is a reference to a java_lang_Class object.
  1455   if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ||
  1455   if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ||
  1456       ! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->oop_is_instance()) {
  1456       ! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_instance_klass()) {
  1457     return NULL;
  1457     return NULL;
  1458   }
  1458   }
  1459 
  1459 
  1460   bool inner_is_member = false;
  1460   bool inner_is_member = false;
  1461   Klass* outer_klass
  1461   Klass* outer_klass
  1469 
  1469 
  1470 JVM_ENTRY(jstring, JVM_GetSimpleBinaryName(JNIEnv *env, jclass cls))
  1470 JVM_ENTRY(jstring, JVM_GetSimpleBinaryName(JNIEnv *env, jclass cls))
  1471 {
  1471 {
  1472   oop mirror = JNIHandles::resolve_non_null(cls);
  1472   oop mirror = JNIHandles::resolve_non_null(cls);
  1473   if (java_lang_Class::is_primitive(mirror) ||
  1473   if (java_lang_Class::is_primitive(mirror) ||
  1474       !java_lang_Class::as_Klass(mirror)->oop_is_instance()) {
  1474       !java_lang_Class::as_Klass(mirror)->is_instance_klass()) {
  1475     return NULL;
  1475     return NULL;
  1476   }
  1476   }
  1477   instanceKlassHandle k(THREAD, InstanceKlass::cast(java_lang_Class::as_Klass(mirror)));
  1477   instanceKlassHandle k(THREAD, InstanceKlass::cast(java_lang_Class::as_Klass(mirror)));
  1478   int ooff = 0, noff = 0;
  1478   int ooff = 0, noff = 0;
  1479   if (InstanceKlass::find_inner_classes_attr(k, &ooff, &noff, THREAD)) {
  1479   if (InstanceKlass::find_inner_classes_attr(k, &ooff, &noff, THREAD)) {
  1494   JvmtiVMObjectAllocEventCollector oam;
  1494   JvmtiVMObjectAllocEventCollector oam;
  1495   ResourceMark rm(THREAD);
  1495   ResourceMark rm(THREAD);
  1496   // Return null for arrays and primatives
  1496   // Return null for arrays and primatives
  1497   if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) {
  1497   if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) {
  1498     Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
  1498     Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
  1499     if (k->oop_is_instance()) {
  1499     if (k->is_instance_klass()) {
  1500       Symbol* sym = InstanceKlass::cast(k)->generic_signature();
  1500       Symbol* sym = InstanceKlass::cast(k)->generic_signature();
  1501       if (sym == NULL) return NULL;
  1501       if (sym == NULL) return NULL;
  1502       Handle str = java_lang_String::create_from_symbol(sym, CHECK_NULL);
  1502       Handle str = java_lang_String::create_from_symbol(sym, CHECK_NULL);
  1503       return (jstring) JNIHandles::make_local(env, str());
  1503       return (jstring) JNIHandles::make_local(env, str());
  1504     }
  1504     }
  1512   JVMWrapper("JVM_GetClassAnnotations");
  1512   JVMWrapper("JVM_GetClassAnnotations");
  1513 
  1513 
  1514   // Return null for arrays and primitives
  1514   // Return null for arrays and primitives
  1515   if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) {
  1515   if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) {
  1516     Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
  1516     Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
  1517     if (k->oop_is_instance()) {
  1517     if (k->is_instance_klass()) {
  1518       typeArrayOop a = Annotations::make_java_array(InstanceKlass::cast(k)->class_annotations(), CHECK_NULL);
  1518       typeArrayOop a = Annotations::make_java_array(InstanceKlass::cast(k)->class_annotations(), CHECK_NULL);
  1519       return (jbyteArray) JNIHandles::make_local(env, a);
  1519       return (jbyteArray) JNIHandles::make_local(env, a);
  1520     }
  1520     }
  1521   }
  1521   }
  1522   return NULL;
  1522   return NULL;
  1582   JVMWrapper("JVM_GetClassTypeAnnotations");
  1582   JVMWrapper("JVM_GetClassTypeAnnotations");
  1583   ResourceMark rm(THREAD);
  1583   ResourceMark rm(THREAD);
  1584   // Return null for arrays and primitives
  1584   // Return null for arrays and primitives
  1585   if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) {
  1585   if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) {
  1586     Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
  1586     Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
  1587     if (k->oop_is_instance()) {
  1587     if (k->is_instance_klass()) {
  1588       AnnotationArray* type_annotations = InstanceKlass::cast(k)->class_type_annotations();
  1588       AnnotationArray* type_annotations = InstanceKlass::cast(k)->class_type_annotations();
  1589       if (type_annotations != NULL) {
  1589       if (type_annotations != NULL) {
  1590         typeArrayOop a = Annotations::make_java_array(type_annotations, CHECK_NULL);
  1590         typeArrayOop a = Annotations::make_java_array(type_annotations, CHECK_NULL);
  1591         return (jbyteArray) JNIHandles::make_local(env, a);
  1591         return (jbyteArray) JNIHandles::make_local(env, a);
  1592       }
  1592       }
  1691   JVMWrapper("JVM_GetClassDeclaredFields");
  1691   JVMWrapper("JVM_GetClassDeclaredFields");
  1692   JvmtiVMObjectAllocEventCollector oam;
  1692   JvmtiVMObjectAllocEventCollector oam;
  1693 
  1693 
  1694   // Exclude primitive types and array types
  1694   // Exclude primitive types and array types
  1695   if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ||
  1695   if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ||
  1696       java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->oop_is_array()) {
  1696       java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_array_klass()) {
  1697     // Return empty array
  1697     // Return empty array
  1698     oop res = oopFactory::new_objArray(SystemDictionary::reflect_Field_klass(), 0, CHECK_NULL);
  1698     oop res = oopFactory::new_objArray(SystemDictionary::reflect_Field_klass(), 0, CHECK_NULL);
  1699     return (jobjectArray) JNIHandles::make_local(env, res);
  1699     return (jobjectArray) JNIHandles::make_local(env, res);
  1700   }
  1700   }
  1701 
  1701 
  1765 
  1765 
  1766   JvmtiVMObjectAllocEventCollector oam;
  1766   JvmtiVMObjectAllocEventCollector oam;
  1767 
  1767 
  1768   // Exclude primitive types and array types
  1768   // Exclude primitive types and array types
  1769   if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass))
  1769   if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass))
  1770       || java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->oop_is_array()) {
  1770       || java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_array_klass()) {
  1771     // Return empty array
  1771     // Return empty array
  1772     oop res = oopFactory::new_objArray(klass, 0, CHECK_NULL);
  1772     oop res = oopFactory::new_objArray(klass, 0, CHECK_NULL);
  1773     return (jobjectArray) JNIHandles::make_local(env, res);
  1773     return (jobjectArray) JNIHandles::make_local(env, res);
  1774   }
  1774   }
  1775 
  1775 
  1866   JvmtiVMObjectAllocEventCollector oam;
  1866   JvmtiVMObjectAllocEventCollector oam;
  1867 
  1867 
  1868   // Return null for primitives and arrays
  1868   // Return null for primitives and arrays
  1869   if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
  1869   if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
  1870     Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  1870     Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  1871     if (k->oop_is_instance()) {
  1871     if (k->is_instance_klass()) {
  1872       instanceKlassHandle k_h(THREAD, k);
  1872       instanceKlassHandle k_h(THREAD, k);
  1873       Handle jcp = sun_reflect_ConstantPool::create(CHECK_NULL);
  1873       Handle jcp = sun_reflect_ConstantPool::create(CHECK_NULL);
  1874       sun_reflect_ConstantPool::set_cp(jcp(), k_h->constants());
  1874       sun_reflect_ConstantPool::set_cp(jcp(), k_h->constants());
  1875       return JNIHandles::make_local(jcp());
  1875       return JNIHandles::make_local(jcp());
  1876     }
  1876     }
  2134   oop r = JNIHandles::resolve(cls);
  2134   oop r = JNIHandles::resolve(cls);
  2135   assert(! java_lang_Class::is_primitive(r), "primitive classes not allowed");
  2135   assert(! java_lang_Class::is_primitive(r), "primitive classes not allowed");
  2136   if (java_lang_Class::is_primitive(r)) return false;
  2136   if (java_lang_Class::is_primitive(r)) return false;
  2137 
  2137 
  2138   Klass* k = java_lang_Class::as_Klass(r);
  2138   Klass* k = java_lang_Class::as_Klass(r);
  2139   assert(k->oop_is_instance(), "must be an instance klass");
  2139   assert(k->is_instance_klass(), "must be an instance klass");
  2140   if (! k->oop_is_instance()) return false;
  2140   if (!k->is_instance_klass()) return false;
  2141 
  2141 
  2142   ResourceMark rm(THREAD);
  2142   ResourceMark rm(THREAD);
  2143   const char* name = k->name()->as_C_string();
  2143   const char* name = k->name()->as_C_string();
  2144   bool system_class = k->class_loader() == NULL;
  2144   bool system_class = k->class_loader() == NULL;
  2145   return JavaAssertions::enabled(name, system_class);
  2145   return JavaAssertions::enabled(name, system_class);
  2180   JVMWrapper("JVM_GetClassCPTypes");
  2180   JVMWrapper("JVM_GetClassCPTypes");
  2181   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  2181   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  2182   k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
  2182   k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
  2183   // types will have length zero if this is not an InstanceKlass
  2183   // types will have length zero if this is not an InstanceKlass
  2184   // (length is determined by call to JVM_GetClassCPEntriesCount)
  2184   // (length is determined by call to JVM_GetClassCPEntriesCount)
  2185   if (k->oop_is_instance()) {
  2185   if (k->is_instance_klass()) {
  2186     ConstantPool* cp = InstanceKlass::cast(k)->constants();
  2186     ConstantPool* cp = InstanceKlass::cast(k)->constants();
  2187     for (int index = cp->length() - 1; index >= 0; index--) {
  2187     for (int index = cp->length() - 1; index >= 0; index--) {
  2188       constantTag tag = cp->tag_at(index);
  2188       constantTag tag = cp->tag_at(index);
  2189       types[index] = (tag.is_unresolved_klass()) ? JVM_CONSTANT_Class : tag.value();
  2189       types[index] = (tag.is_unresolved_klass()) ? JVM_CONSTANT_Class : tag.value();
  2190   }
  2190     }
  2191   }
  2191   }
  2192 JVM_END
  2192 JVM_END
  2193 
  2193 
  2194 
  2194 
  2195 JVM_QUICK_ENTRY(jint, JVM_GetClassCPEntriesCount(JNIEnv *env, jclass cls))
  2195 JVM_QUICK_ENTRY(jint, JVM_GetClassCPEntriesCount(JNIEnv *env, jclass cls))
  2196   JVMWrapper("JVM_GetClassCPEntriesCount");
  2196   JVMWrapper("JVM_GetClassCPEntriesCount");
  2197   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  2197   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  2198   k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
  2198   k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
  2199   if (!k->oop_is_instance())
  2199   return (!k->is_instance_klass()) ? 0 : InstanceKlass::cast(k)->constants()->length();
  2200     return 0;
       
  2201   return InstanceKlass::cast(k)->constants()->length();
       
  2202 JVM_END
  2200 JVM_END
  2203 
  2201 
  2204 
  2202 
  2205 JVM_QUICK_ENTRY(jint, JVM_GetClassFieldsCount(JNIEnv *env, jclass cls))
  2203 JVM_QUICK_ENTRY(jint, JVM_GetClassFieldsCount(JNIEnv *env, jclass cls))
  2206   JVMWrapper("JVM_GetClassFieldsCount");
  2204   JVMWrapper("JVM_GetClassFieldsCount");
  2207   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  2205   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  2208   k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
  2206   k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
  2209   if (!k->oop_is_instance())
  2207   return (!k->is_instance_klass()) ? 0 : InstanceKlass::cast(k)->java_fields_count();
  2210     return 0;
       
  2211   return InstanceKlass::cast(k)->java_fields_count();
       
  2212 JVM_END
  2208 JVM_END
  2213 
  2209 
  2214 
  2210 
  2215 JVM_QUICK_ENTRY(jint, JVM_GetClassMethodsCount(JNIEnv *env, jclass cls))
  2211 JVM_QUICK_ENTRY(jint, JVM_GetClassMethodsCount(JNIEnv *env, jclass cls))
  2216   JVMWrapper("JVM_GetClassMethodsCount");
  2212   JVMWrapper("JVM_GetClassMethodsCount");
  2217   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  2213   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
  2218   k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
  2214   k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
  2219   if (!k->oop_is_instance())
  2215   return (!k->is_instance_klass()) ? 0 : InstanceKlass::cast(k)->methods()->length();
  2220     return 0;
       
  2221   return InstanceKlass::cast(k)->methods()->length();
       
  2222 JVM_END
  2216 JVM_END
  2223 
  2217 
  2224 
  2218 
  2225 // The following methods, used for the verifier, are never called with
  2219 // The following methods, used for the verifier, are never called with
  2226 // array klasses, so a direct cast to InstanceKlass is safe.
  2220 // array klasses, so a direct cast to InstanceKlass is safe.
  3474   //   if there is no security manager in 3-arg Class.forName().
  3468   //   if there is no security manager in 3-arg Class.forName().
  3475   Klass* klass = SystemDictionary::resolve_or_fail(name, loader, protection_domain, throwError != 0, CHECK_NULL);
  3469   Klass* klass = SystemDictionary::resolve_or_fail(name, loader, protection_domain, throwError != 0, CHECK_NULL);
  3476 
  3470 
  3477   KlassHandle klass_handle(THREAD, klass);
  3471   KlassHandle klass_handle(THREAD, klass);
  3478   // Check if we should initialize the class
  3472   // Check if we should initialize the class
  3479   if (init && klass_handle->oop_is_instance()) {
  3473   if (init && klass_handle->is_instance_klass()) {
  3480     klass_handle->initialize(CHECK_NULL);
  3474     klass_handle->initialize(CHECK_NULL);
  3481   }
  3475   }
  3482   return (jclass) JNIHandles::make_local(env, klass_handle->java_mirror());
  3476   return (jclass) JNIHandles::make_local(env, klass_handle->java_mirror());
  3483 }
  3477 }
  3484 
  3478 
  3622   // Special handling for primitive objects
  3616   // Special handling for primitive objects
  3623   if (java_lang_Class::is_primitive(mirror())) {
  3617   if (java_lang_Class::is_primitive(mirror())) {
  3624     return NULL;
  3618     return NULL;
  3625   }
  3619   }
  3626   Klass* k = java_lang_Class::as_Klass(mirror());
  3620   Klass* k = java_lang_Class::as_Klass(mirror());
  3627   if (!k->oop_is_instance()) {
  3621   if (!k->is_instance_klass()) {
  3628     return NULL;
  3622     return NULL;
  3629   }
  3623   }
  3630   instanceKlassHandle ik_h(THREAD, k);
  3624   instanceKlassHandle ik_h(THREAD, k);
  3631   int encl_method_class_idx = ik_h->enclosing_method_class_index();
  3625   int encl_method_class_idx = ik_h->enclosing_method_class_index();
  3632   if (encl_method_class_idx == 0) {
  3626   if (encl_method_class_idx == 0) {