comparison src/share/vm/prims/jvm.cpp @ 6983:070d523b96a7

8001471: Klass::cast() does nothing Summary: Remove function Klass::cast() and calls to it. Reviewed-by: dholmes, coleenp
author hseigel
date Mon, 12 Nov 2012 16:15:05 -0500
parents 18fb7da42534
children 1baf7f1e3f23 35431a769282
comparison
equal deleted inserted replaced
6981:8c413497f434 6983:070d523b96a7
303 arrayOop s = arrayOop(JNIHandles::resolve_non_null(src)); 303 arrayOop s = arrayOop(JNIHandles::resolve_non_null(src));
304 arrayOop d = arrayOop(JNIHandles::resolve_non_null(dst)); 304 arrayOop d = arrayOop(JNIHandles::resolve_non_null(dst));
305 assert(s->is_oop(), "JVM_ArrayCopy: src not an oop"); 305 assert(s->is_oop(), "JVM_ArrayCopy: src not an oop");
306 assert(d->is_oop(), "JVM_ArrayCopy: dst not an oop"); 306 assert(d->is_oop(), "JVM_ArrayCopy: dst not an oop");
307 // Do copy 307 // Do copy
308 Klass::cast(s->klass())->copy_array(s, src_pos, d, dst_pos, length, thread); 308 s->klass()->copy_array(s, src_pos, d, dst_pos, length, thread);
309 JVM_END 309 JVM_END
310 310
311 311
312 static void set_property(Handle props, const char* key, const char* value, TRAPS) { 312 static void set_property(Handle props, const char* key, const char* value, TRAPS) {
313 JavaValue r(T_OBJECT); 313 JavaValue r(T_OBJECT);
673 673
674 674
675 JVM_ENTRY(jclass, JVM_GetCallerClass(JNIEnv* env, int depth)) 675 JVM_ENTRY(jclass, JVM_GetCallerClass(JNIEnv* env, int depth))
676 JVMWrapper("JVM_GetCallerClass"); 676 JVMWrapper("JVM_GetCallerClass");
677 Klass* k = thread->security_get_caller_class(depth); 677 Klass* k = thread->security_get_caller_class(depth);
678 return (k == NULL) ? NULL : (jclass) JNIHandles::make_local(env, Klass::cast(k)->java_mirror()); 678 return (k == NULL) ? NULL : (jclass) JNIHandles::make_local(env, k->java_mirror());
679 JVM_END 679 JVM_END
680 680
681 681
682 JVM_ENTRY(jclass, JVM_FindPrimitiveClass(JNIEnv* env, const char* utf)) 682 JVM_ENTRY(jclass, JVM_FindPrimitiveClass(JNIEnv* env, const char* utf))
683 JVMWrapper("JVM_FindPrimitiveClass"); 683 JVMWrapper("JVM_FindPrimitiveClass");
737 } 737 }
738 738
739 if (TraceClassResolution) { 739 if (TraceClassResolution) {
740 trace_class_resolution(k); 740 trace_class_resolution(k);
741 } 741 }
742 return (jclass) JNIHandles::make_local(env, Klass::cast(k)->java_mirror()); 742 return (jclass) JNIHandles::make_local(env, k->java_mirror());
743 JVM_END 743 JVM_END
744 744
745 JVM_ENTRY(jclass, JVM_FindClassFromClassLoader(JNIEnv* env, const char* name, 745 JVM_ENTRY(jclass, JVM_FindClassFromClassLoader(JNIEnv* env, const char* name,
746 jboolean init, jobject loader, 746 jboolean init, jobject loader,
747 jboolean throwError)) 747 jboolean throwError))
783 ? (Klass*)NULL 783 ? (Klass*)NULL
784 : java_lang_Class::as_Klass(from_class_oop); 784 : java_lang_Class::as_Klass(from_class_oop);
785 oop class_loader = NULL; 785 oop class_loader = NULL;
786 oop protection_domain = NULL; 786 oop protection_domain = NULL;
787 if (from_class != NULL) { 787 if (from_class != NULL) {
788 class_loader = Klass::cast(from_class)->class_loader(); 788 class_loader = from_class->class_loader();
789 protection_domain = Klass::cast(from_class)->protection_domain(); 789 protection_domain = from_class->protection_domain();
790 } 790 }
791 Handle h_loader(THREAD, class_loader); 791 Handle h_loader(THREAD, class_loader);
792 Handle h_prot (THREAD, protection_domain); 792 Handle h_prot (THREAD, protection_domain);
793 jclass result = find_class_from_class_loader(env, h_name, init, h_loader, 793 jclass result = find_class_from_class_loader(env, h_name, init, h_loader,
794 h_prot, true, thread); 794 h_prot, true, thread);
796 if (TraceClassResolution && result != NULL) { 796 if (TraceClassResolution && result != NULL) {
797 // this function is generally only used for class loading during verification. 797 // this function is generally only used for class loading during verification.
798 ResourceMark rm; 798 ResourceMark rm;
799 oop from_mirror = JNIHandles::resolve_non_null(from); 799 oop from_mirror = JNIHandles::resolve_non_null(from);
800 Klass* from_class = java_lang_Class::as_Klass(from_mirror); 800 Klass* from_class = java_lang_Class::as_Klass(from_mirror);
801 const char * from_name = Klass::cast(from_class)->external_name(); 801 const char * from_name = from_class->external_name();
802 802
803 oop mirror = JNIHandles::resolve_non_null(result); 803 oop mirror = JNIHandles::resolve_non_null(result);
804 Klass* to_class = java_lang_Class::as_Klass(mirror); 804 Klass* to_class = java_lang_Class::as_Klass(mirror);
805 const char * to = Klass::cast(to_class)->external_name(); 805 const char * to = to_class->external_name();
806 tty->print("RESOLVE %s %s (verification)\n", from_name, to); 806 tty->print("RESOLVE %s %s (verification)\n", from_name, to);
807 } 807 }
808 808
809 return result; 809 return result;
810 JVM_END 810 JVM_END
873 873
874 if (TraceClassResolution && k != NULL) { 874 if (TraceClassResolution && k != NULL) {
875 trace_class_resolution(k); 875 trace_class_resolution(k);
876 } 876 }
877 877
878 return (jclass) JNIHandles::make_local(env, Klass::cast(k)->java_mirror()); 878 return (jclass) JNIHandles::make_local(env, k->java_mirror());
879 } 879 }
880 880
881 881
882 JVM_ENTRY(jclass, JVM_DefineClass(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize len, jobject pd)) 882 JVM_ENTRY(jclass, JVM_DefineClass(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize len, jobject pd))
883 JVMWrapper2("JVM_DefineClass %s", name); 883 JVMWrapper2("JVM_DefineClass %s", name);
934 h_loader, 934 h_loader,
935 Handle(), 935 Handle(),
936 CHECK_NULL); 936 CHECK_NULL);
937 937
938 return (k == NULL) ? NULL : 938 return (k == NULL) ? NULL :
939 (jclass) JNIHandles::make_local(env, Klass::cast(k)->java_mirror()); 939 (jclass) JNIHandles::make_local(env, k->java_mirror());
940 JVM_END 940 JVM_END
941 941
942 942
943 // Reflection support ////////////////////////////////////////////////////////////////////////////// 943 // Reflection support //////////////////////////////////////////////////////////////////////////////
944 944
952 name = type2name(java_lang_Class::primitive_type(JNIHandles::resolve(cls))); 952 name = type2name(java_lang_Class::primitive_type(JNIHandles::resolve(cls)));
953 } else { 953 } else {
954 // Consider caching interned string in Klass 954 // Consider caching interned string in Klass
955 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); 955 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
956 assert(k->is_klass(), "just checking"); 956 assert(k->is_klass(), "just checking");
957 name = Klass::cast(k)->external_name(); 957 name = k->external_name();
958 } 958 }
959 oop result = StringTable::intern((char*) name, CHECK_NULL); 959 oop result = StringTable::intern((char*) name, CHECK_NULL);
960 return (jstring) JNIHandles::make_local(env, result); 960 return (jstring) JNIHandles::make_local(env, result);
961 JVM_END 961 JVM_END
962 962
989 // Fill in result 989 // Fill in result
990 if (klass->oop_is_instance()) { 990 if (klass->oop_is_instance()) {
991 // Regular instance klass, fill in all local interfaces 991 // Regular instance klass, fill in all local interfaces
992 for (int index = 0; index < size; index++) { 992 for (int index = 0; index < size; index++) {
993 Klass* k = InstanceKlass::cast(klass())->local_interfaces()->at(index); 993 Klass* k = InstanceKlass::cast(klass())->local_interfaces()->at(index);
994 result->obj_at_put(index, Klass::cast(k)->java_mirror()); 994 result->obj_at_put(index, k->java_mirror());
995 } 995 }
996 } else { 996 } else {
997 // All arrays implement java.lang.Cloneable and java.io.Serializable 997 // All arrays implement java.lang.Cloneable and java.io.Serializable
998 result->obj_at_put(0, Klass::cast(SystemDictionary::Cloneable_klass())->java_mirror()); 998 result->obj_at_put(0, SystemDictionary::Cloneable_klass()->java_mirror());
999 result->obj_at_put(1, Klass::cast(SystemDictionary::Serializable_klass())->java_mirror()); 999 result->obj_at_put(1, SystemDictionary::Serializable_klass()->java_mirror());
1000 } 1000 }
1001 return (jobjectArray) JNIHandles::make_local(env, result()); 1001 return (jobjectArray) JNIHandles::make_local(env, result());
1002 JVM_END 1002 JVM_END
1003 1003
1004 1004
1006 JVMWrapper("JVM_GetClassLoader"); 1006 JVMWrapper("JVM_GetClassLoader");
1007 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) { 1007 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
1008 return NULL; 1008 return NULL;
1009 } 1009 }
1010 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); 1010 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
1011 oop loader = Klass::cast(k)->class_loader(); 1011 oop loader = k->class_loader();
1012 return JNIHandles::make_local(env, loader); 1012 return JNIHandles::make_local(env, loader);
1013 JVM_END 1013 JVM_END
1014 1014
1015 1015
1016 JVM_QUICK_ENTRY(jboolean, JVM_IsInterface(JNIEnv *env, jclass cls)) 1016 JVM_QUICK_ENTRY(jboolean, JVM_IsInterface(JNIEnv *env, jclass cls))
1018 oop mirror = JNIHandles::resolve_non_null(cls); 1018 oop mirror = JNIHandles::resolve_non_null(cls);
1019 if (java_lang_Class::is_primitive(mirror)) { 1019 if (java_lang_Class::is_primitive(mirror)) {
1020 return JNI_FALSE; 1020 return JNI_FALSE;
1021 } 1021 }
1022 Klass* k = java_lang_Class::as_Klass(mirror); 1022 Klass* k = java_lang_Class::as_Klass(mirror);
1023 jboolean result = Klass::cast(k)->is_interface(); 1023 jboolean result = k->is_interface();
1024 assert(!result || Klass::cast(k)->oop_is_instance(), 1024 assert(!result || k->oop_is_instance(),
1025 "all interfaces are instance types"); 1025 "all interfaces are instance types");
1026 // The compiler intrinsic for isInterface tests the 1026 // The compiler intrinsic for isInterface tests the
1027 // Klass::_access_flags bits in the same way. 1027 // Klass::_access_flags bits in the same way.
1028 return result; 1028 return result;
1029 JVM_END 1029 JVM_END
1037 return NULL; 1037 return NULL;
1038 } 1038 }
1039 1039
1040 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); 1040 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
1041 objArrayOop signers = NULL; 1041 objArrayOop signers = NULL;
1042 if (Klass::cast(k)->oop_is_instance()) { 1042 if (k->oop_is_instance()) {
1043 signers = InstanceKlass::cast(k)->signers(); 1043 signers = InstanceKlass::cast(k)->signers();
1044 } 1044 }
1045 1045
1046 // If there are no signers set in the class, or if the class 1046 // If there are no signers set in the class, or if the class
1047 // is an array, return NULL. 1047 // is an array, return NULL.
1064 if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) { 1064 if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
1065 // This call is ignored for primitive types and arrays. 1065 // This call is ignored for primitive types and arrays.
1066 // Signers are only set once, ClassLoader.java, and thus shouldn't 1066 // Signers are only set once, ClassLoader.java, and thus shouldn't
1067 // be called with an array. Only the bootstrap loader creates arrays. 1067 // be called with an array. Only the bootstrap loader creates arrays.
1068 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); 1068 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
1069 if (Klass::cast(k)->oop_is_instance()) { 1069 if (k->oop_is_instance()) {
1070 InstanceKlass::cast(k)->set_signers(objArrayOop(JNIHandles::resolve(signers))); 1070 InstanceKlass::cast(k)->set_signers(objArrayOop(JNIHandles::resolve(signers)));
1071 } 1071 }
1072 } 1072 }
1073 JVM_END 1073 JVM_END
1074 1074
1083 // Primitive types does not have a protection domain. 1083 // Primitive types does not have a protection domain.
1084 return NULL; 1084 return NULL;
1085 } 1085 }
1086 1086
1087 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); 1087 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
1088 return (jobject) JNIHandles::make_local(env, Klass::cast(k)->protection_domain()); 1088 return (jobject) JNIHandles::make_local(env, k->protection_domain());
1089 JVM_END 1089 JVM_END
1090 1090
1091 1091
1092 // Obsolete since 1.2 (Class.setProtectionDomain removed), although 1092 // Obsolete since 1.2 (Class.setProtectionDomain removed), although
1093 // still defined in core libraries as of 1.5. 1093 // still defined in core libraries as of 1.5.
1099 if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) { 1099 if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) {
1100 // Call is ignored for primitive types 1100 // Call is ignored for primitive types
1101 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); 1101 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
1102 1102
1103 // cls won't be an array, as this called only from ClassLoader.defineClass 1103 // cls won't be an array, as this called only from ClassLoader.defineClass
1104 if (Klass::cast(k)->oop_is_instance()) { 1104 if (k->oop_is_instance()) {
1105 oop pd = JNIHandles::resolve(protection_domain); 1105 oop pd = JNIHandles::resolve(protection_domain);
1106 assert(pd == NULL || pd->is_oop(), "just checking"); 1106 assert(pd == NULL || pd->is_oop(), "just checking");
1107 InstanceKlass::cast(k)->set_protection_domain(pd); 1107 InstanceKlass::cast(k)->set_protection_domain(pd);
1108 } 1108 }
1109 } 1109 }
1122 1122
1123 // Check that action object understands "Object run()" 1123 // Check that action object understands "Object run()"
1124 Handle object (THREAD, JNIHandles::resolve(action)); 1124 Handle object (THREAD, JNIHandles::resolve(action));
1125 1125
1126 // get run() method 1126 // get run() method
1127 Method* m_oop = Klass::cast(object->klass())->uncached_lookup_method( 1127 Method* m_oop = object->klass()->uncached_lookup_method(
1128 vmSymbols::run_method_name(), 1128 vmSymbols::run_method_name(),
1129 vmSymbols::void_object_signature()); 1129 vmSymbols::void_object_signature());
1130 methodHandle m (THREAD, m_oop); 1130 methodHandle m (THREAD, m_oop);
1131 if (m.is_null() || !m->is_method() || !m()->is_public() || m()->is_static()) { 1131 if (m.is_null() || !m->is_method() || !m()->is_public() || m()->is_static()) {
1132 THROW_MSG_0(vmSymbols::java_lang_InternalError(), "No run method"); 1132 THROW_MSG_0(vmSymbols::java_lang_InternalError(), "No run method");
1265 1265
1266 1266
1267 JVM_QUICK_ENTRY(jboolean, JVM_IsArrayClass(JNIEnv *env, jclass cls)) 1267 JVM_QUICK_ENTRY(jboolean, JVM_IsArrayClass(JNIEnv *env, jclass cls))
1268 JVMWrapper("JVM_IsArrayClass"); 1268 JVMWrapper("JVM_IsArrayClass");
1269 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); 1269 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
1270 return (k != NULL) && Klass::cast(k)->oop_is_array() ? true : false; 1270 return (k != NULL) && k->oop_is_array() ? true : false;
1271 JVM_END 1271 JVM_END
1272 1272
1273 1273
1274 JVM_QUICK_ENTRY(jboolean, JVM_IsPrimitiveClass(JNIEnv *env, jclass cls)) 1274 JVM_QUICK_ENTRY(jboolean, JVM_IsPrimitiveClass(JNIEnv *env, jclass cls))
1275 JVMWrapper("JVM_IsPrimitiveClass"); 1275 JVMWrapper("JVM_IsPrimitiveClass");
1291 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) { 1291 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
1292 // Primitive type 1292 // Primitive type
1293 return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC; 1293 return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC;
1294 } 1294 }
1295 1295
1296 Klass* k = Klass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls))); 1296 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
1297 debug_only(int computed_modifiers = k->compute_modifier_flags(CHECK_0)); 1297 debug_only(int computed_modifiers = k->compute_modifier_flags(CHECK_0));
1298 assert(k->modifier_flags() == computed_modifiers, "modifiers cache is OK"); 1298 assert(k->modifier_flags() == computed_modifiers, "modifiers cache is OK");
1299 return k->modifier_flags(); 1299 return k->modifier_flags();
1300 JVM_END 1300 JVM_END
1301 1301
1306 JvmtiVMObjectAllocEventCollector oam; 1306 JvmtiVMObjectAllocEventCollector oam;
1307 // ofClass is a reference to a java_lang_Class object. The mirror object 1307 // ofClass is a reference to a java_lang_Class object. The mirror object
1308 // of an InstanceKlass 1308 // of an InstanceKlass
1309 1309
1310 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || 1310 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ||
1311 ! Klass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)))->oop_is_instance()) { 1311 ! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->oop_is_instance()) {
1312 oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL); 1312 oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL);
1313 return (jobjectArray)JNIHandles::make_local(env, result); 1313 return (jobjectArray)JNIHandles::make_local(env, result);
1314 } 1314 }
1315 1315
1316 instanceKlassHandle k(thread, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))); 1316 instanceKlassHandle k(thread, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));
1370 1370
1371 JVM_ENTRY(jclass, JVM_GetDeclaringClass(JNIEnv *env, jclass ofClass)) 1371 JVM_ENTRY(jclass, JVM_GetDeclaringClass(JNIEnv *env, jclass ofClass))
1372 { 1372 {
1373 // ofClass is a reference to a java_lang_Class object. 1373 // ofClass is a reference to a java_lang_Class object.
1374 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || 1374 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ||
1375 ! Klass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)))->oop_is_instance()) { 1375 ! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->oop_is_instance()) {
1376 return NULL; 1376 return NULL;
1377 } 1377 }
1378 1378
1379 bool inner_is_member = false; 1379 bool inner_is_member = false;
1380 Klass* outer_klass 1380 Klass* outer_klass
1381 = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)) 1381 = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))
1382 )->compute_enclosing_class(&inner_is_member, CHECK_NULL); 1382 )->compute_enclosing_class(&inner_is_member, CHECK_NULL);
1383 if (outer_klass == NULL) return NULL; // already a top-level class 1383 if (outer_klass == NULL) return NULL; // already a top-level class
1384 if (!inner_is_member) return NULL; // an anonymous class (inside a method) 1384 if (!inner_is_member) return NULL; // an anonymous class (inside a method)
1385 return (jclass) JNIHandles::make_local(env, Klass::cast(outer_klass)->java_mirror()); 1385 return (jclass) JNIHandles::make_local(env, outer_klass->java_mirror());
1386 } 1386 }
1387 JVM_END 1387 JVM_END
1388 1388
1389 // should be in InstanceKlass.cpp, but is here for historical reasons 1389 // should be in InstanceKlass.cpp, but is here for historical reasons
1390 Klass* InstanceKlass::compute_enclosing_class_impl(instanceKlassHandle k, 1390 Klass* InstanceKlass::compute_enclosing_class_impl(instanceKlassHandle k,
1450 JvmtiVMObjectAllocEventCollector oam; 1450 JvmtiVMObjectAllocEventCollector oam;
1451 ResourceMark rm(THREAD); 1451 ResourceMark rm(THREAD);
1452 // Return null for arrays and primatives 1452 // Return null for arrays and primatives
1453 if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) { 1453 if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) {
1454 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); 1454 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
1455 if (Klass::cast(k)->oop_is_instance()) { 1455 if (k->oop_is_instance()) {
1456 Symbol* sym = InstanceKlass::cast(k)->generic_signature(); 1456 Symbol* sym = InstanceKlass::cast(k)->generic_signature();
1457 if (sym == NULL) return NULL; 1457 if (sym == NULL) return NULL;
1458 Handle str = java_lang_String::create_from_symbol(sym, CHECK_NULL); 1458 Handle str = java_lang_String::create_from_symbol(sym, CHECK_NULL);
1459 return (jstring) JNIHandles::make_local(env, str()); 1459 return (jstring) JNIHandles::make_local(env, str());
1460 } 1460 }
1468 JVMWrapper("JVM_GetClassAnnotations"); 1468 JVMWrapper("JVM_GetClassAnnotations");
1469 ResourceMark rm(THREAD); 1469 ResourceMark rm(THREAD);
1470 // Return null for arrays and primitives 1470 // Return null for arrays and primitives
1471 if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) { 1471 if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) {
1472 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); 1472 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
1473 if (Klass::cast(k)->oop_is_instance()) { 1473 if (k->oop_is_instance()) {
1474 typeArrayOop a = Annotations::make_java_array(InstanceKlass::cast(k)->class_annotations(), CHECK_NULL); 1474 typeArrayOop a = Annotations::make_java_array(InstanceKlass::cast(k)->class_annotations(), CHECK_NULL);
1475 return (jbyteArray) JNIHandles::make_local(env, a); 1475 return (jbyteArray) JNIHandles::make_local(env, a);
1476 } 1476 }
1477 } 1477 }
1478 return NULL; 1478 return NULL;
1581 JVMWrapper("JVM_GetClassDeclaredFields"); 1581 JVMWrapper("JVM_GetClassDeclaredFields");
1582 JvmtiVMObjectAllocEventCollector oam; 1582 JvmtiVMObjectAllocEventCollector oam;
1583 1583
1584 // Exclude primitive types and array types 1584 // Exclude primitive types and array types
1585 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || 1585 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ||
1586 Klass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)))->oop_is_array()) { 1586 java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->oop_is_array()) {
1587 // Return empty array 1587 // Return empty array
1588 oop res = oopFactory::new_objArray(SystemDictionary::reflect_Field_klass(), 0, CHECK_NULL); 1588 oop res = oopFactory::new_objArray(SystemDictionary::reflect_Field_klass(), 0, CHECK_NULL);
1589 return (jobjectArray) JNIHandles::make_local(env, res); 1589 return (jobjectArray) JNIHandles::make_local(env, res);
1590 } 1590 }
1591 1591
1644 JVMWrapper("JVM_GetClassDeclaredMethods"); 1644 JVMWrapper("JVM_GetClassDeclaredMethods");
1645 JvmtiVMObjectAllocEventCollector oam; 1645 JvmtiVMObjectAllocEventCollector oam;
1646 1646
1647 // Exclude primitive types and array types 1647 // Exclude primitive types and array types
1648 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) 1648 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass))
1649 || Klass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)))->oop_is_array()) { 1649 || java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->oop_is_array()) {
1650 // Return empty array 1650 // Return empty array
1651 oop res = oopFactory::new_objArray(SystemDictionary::reflect_Method_klass(), 0, CHECK_NULL); 1651 oop res = oopFactory::new_objArray(SystemDictionary::reflect_Method_klass(), 0, CHECK_NULL);
1652 return (jobjectArray) JNIHandles::make_local(env, res); 1652 return (jobjectArray) JNIHandles::make_local(env, res);
1653 } 1653 }
1654 1654
1696 JVMWrapper("JVM_GetClassDeclaredConstructors"); 1696 JVMWrapper("JVM_GetClassDeclaredConstructors");
1697 JvmtiVMObjectAllocEventCollector oam; 1697 JvmtiVMObjectAllocEventCollector oam;
1698 1698
1699 // Exclude primitive types and array types 1699 // Exclude primitive types and array types
1700 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) 1700 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass))
1701 || Klass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)))->oop_is_array()) { 1701 || java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->oop_is_array()) {
1702 // Return empty array 1702 // Return empty array
1703 oop res = oopFactory::new_objArray(SystemDictionary::reflect_Constructor_klass(), 0 , CHECK_NULL); 1703 oop res = oopFactory::new_objArray(SystemDictionary::reflect_Constructor_klass(), 0 , CHECK_NULL);
1704 return (jobjectArray) JNIHandles::make_local(env, res); 1704 return (jobjectArray) JNIHandles::make_local(env, res);
1705 } 1705 }
1706 1706
1749 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) { 1749 if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
1750 // Primitive type 1750 // Primitive type
1751 return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC; 1751 return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC;
1752 } 1752 }
1753 1753
1754 Klass* k = Klass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls))); 1754 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
1755 return k->access_flags().as_int() & JVM_ACC_WRITTEN_FLAGS; 1755 return k->access_flags().as_int() & JVM_ACC_WRITTEN_FLAGS;
1756 } 1756 }
1757 JVM_END 1757 JVM_END
1758 1758
1759 1759
1765 JvmtiVMObjectAllocEventCollector oam; 1765 JvmtiVMObjectAllocEventCollector oam;
1766 1766
1767 // Return null for primitives and arrays 1767 // Return null for primitives and arrays
1768 if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) { 1768 if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
1769 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); 1769 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
1770 if (Klass::cast(k)->oop_is_instance()) { 1770 if (k->oop_is_instance()) {
1771 instanceKlassHandle k_h(THREAD, k); 1771 instanceKlassHandle k_h(THREAD, k);
1772 Handle jcp = sun_reflect_ConstantPool::create(CHECK_NULL); 1772 Handle jcp = sun_reflect_ConstantPool::create(CHECK_NULL);
1773 sun_reflect_ConstantPool::set_cp(jcp(), k_h->constants()); 1773 sun_reflect_ConstantPool::set_cp(jcp(), k_h->constants());
1774 return JNIHandles::make_local(jcp()); 1774 return JNIHandles::make_local(jcp());
1775 } 1775 }
2041 oop r = JNIHandles::resolve(cls); 2041 oop r = JNIHandles::resolve(cls);
2042 assert(! java_lang_Class::is_primitive(r), "primitive classes not allowed"); 2042 assert(! java_lang_Class::is_primitive(r), "primitive classes not allowed");
2043 if (java_lang_Class::is_primitive(r)) return false; 2043 if (java_lang_Class::is_primitive(r)) return false;
2044 2044
2045 Klass* k = java_lang_Class::as_Klass(r); 2045 Klass* k = java_lang_Class::as_Klass(r);
2046 assert(Klass::cast(k)->oop_is_instance(), "must be an instance klass"); 2046 assert(k->oop_is_instance(), "must be an instance klass");
2047 if (! Klass::cast(k)->oop_is_instance()) return false; 2047 if (! k->oop_is_instance()) return false;
2048 2048
2049 ResourceMark rm(THREAD); 2049 ResourceMark rm(THREAD);
2050 const char* name = Klass::cast(k)->name()->as_C_string(); 2050 const char* name = k->name()->as_C_string();
2051 bool system_class = Klass::cast(k)->class_loader() == NULL; 2051 bool system_class = k->class_loader() == NULL;
2052 return JavaAssertions::enabled(name, system_class); 2052 return JavaAssertions::enabled(name, system_class);
2053 2053
2054 JVM_END 2054 JVM_END
2055 2055
2056 2056
2077 2077
2078 JVM_ENTRY(const char*, JVM_GetClassNameUTF(JNIEnv *env, jclass cls)) 2078 JVM_ENTRY(const char*, JVM_GetClassNameUTF(JNIEnv *env, jclass cls))
2079 JVMWrapper("JVM_GetClassNameUTF"); 2079 JVMWrapper("JVM_GetClassNameUTF");
2080 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); 2080 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
2081 k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); 2081 k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
2082 return Klass::cast(k)->name()->as_utf8(); 2082 return k->name()->as_utf8();
2083 JVM_END 2083 JVM_END
2084 2084
2085 2085
2086 JVM_QUICK_ENTRY(void, JVM_GetClassCPTypes(JNIEnv *env, jclass cls, unsigned char *types)) 2086 JVM_QUICK_ENTRY(void, JVM_GetClassCPTypes(JNIEnv *env, jclass cls, unsigned char *types))
2087 JVMWrapper("JVM_GetClassCPTypes"); 2087 JVMWrapper("JVM_GetClassCPTypes");
2088 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); 2088 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
2089 k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); 2089 k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
2090 // types will have length zero if this is not an InstanceKlass 2090 // types will have length zero if this is not an InstanceKlass
2091 // (length is determined by call to JVM_GetClassCPEntriesCount) 2091 // (length is determined by call to JVM_GetClassCPEntriesCount)
2092 if (Klass::cast(k)->oop_is_instance()) { 2092 if (k->oop_is_instance()) {
2093 ConstantPool* cp = InstanceKlass::cast(k)->constants(); 2093 ConstantPool* cp = InstanceKlass::cast(k)->constants();
2094 for (int index = cp->length() - 1; index >= 0; index--) { 2094 for (int index = cp->length() - 1; index >= 0; index--) {
2095 constantTag tag = cp->tag_at(index); 2095 constantTag tag = cp->tag_at(index);
2096 types[index] = (tag.is_unresolved_klass()) ? JVM_CONSTANT_Class : tag.value(); 2096 types[index] = (tag.is_unresolved_klass()) ? JVM_CONSTANT_Class : tag.value();
2097 } 2097 }
2101 2101
2102 JVM_QUICK_ENTRY(jint, JVM_GetClassCPEntriesCount(JNIEnv *env, jclass cls)) 2102 JVM_QUICK_ENTRY(jint, JVM_GetClassCPEntriesCount(JNIEnv *env, jclass cls))
2103 JVMWrapper("JVM_GetClassCPEntriesCount"); 2103 JVMWrapper("JVM_GetClassCPEntriesCount");
2104 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); 2104 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
2105 k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); 2105 k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
2106 if (!Klass::cast(k)->oop_is_instance()) 2106 if (!k->oop_is_instance())
2107 return 0; 2107 return 0;
2108 return InstanceKlass::cast(k)->constants()->length(); 2108 return InstanceKlass::cast(k)->constants()->length();
2109 JVM_END 2109 JVM_END
2110 2110
2111 2111
2112 JVM_QUICK_ENTRY(jint, JVM_GetClassFieldsCount(JNIEnv *env, jclass cls)) 2112 JVM_QUICK_ENTRY(jint, JVM_GetClassFieldsCount(JNIEnv *env, jclass cls))
2113 JVMWrapper("JVM_GetClassFieldsCount"); 2113 JVMWrapper("JVM_GetClassFieldsCount");
2114 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); 2114 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
2115 k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); 2115 k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
2116 if (!Klass::cast(k)->oop_is_instance()) 2116 if (!k->oop_is_instance())
2117 return 0; 2117 return 0;
2118 return InstanceKlass::cast(k)->java_fields_count(); 2118 return InstanceKlass::cast(k)->java_fields_count();
2119 JVM_END 2119 JVM_END
2120 2120
2121 2121
2122 JVM_QUICK_ENTRY(jint, JVM_GetClassMethodsCount(JNIEnv *env, jclass cls)) 2122 JVM_QUICK_ENTRY(jint, JVM_GetClassMethodsCount(JNIEnv *env, jclass cls))
2123 JVMWrapper("JVM_GetClassMethodsCount"); 2123 JVMWrapper("JVM_GetClassMethodsCount");
2124 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); 2124 Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
2125 k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); 2125 k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread);
2126 if (!Klass::cast(k)->oop_is_instance()) 2126 if (!k->oop_is_instance())
2127 return 0; 2127 return 0;
2128 return InstanceKlass::cast(k)->methods()->length(); 2128 return InstanceKlass::cast(k)->methods()->length();
2129 JVM_END 2129 JVM_END
2130 2130
2131 2131
3121 // Create result array of type [Ljava/lang/Class; 3121 // Create result array of type [Ljava/lang/Class;
3122 objArrayOop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), depth, CHECK_NULL); 3122 objArrayOop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), depth, CHECK_NULL);
3123 // Fill in mirrors corresponding to method holders 3123 // Fill in mirrors corresponding to method holders
3124 int index = 0; 3124 int index = 0;
3125 while (first != NULL) { 3125 while (first != NULL) {
3126 result->obj_at_put(index++, Klass::cast(first->klass())->java_mirror()); 3126 result->obj_at_put(index++, first->klass()->java_mirror());
3127 first = first->next; 3127 first = first->next;
3128 } 3128 }
3129 assert(index == depth, "just checking"); 3129 assert(index == depth, "just checking");
3130 3130
3131 return (jobjectArray) JNIHandles::make_local(env, result); 3131 return (jobjectArray) JNIHandles::make_local(env, result);
3215 return true; 3215 return true;
3216 } 3216 }
3217 3217
3218 if (access.is_protected()) { 3218 if (access.is_protected()) {
3219 // See if current_class is a subclass of field_class 3219 // See if current_class is a subclass of field_class
3220 if (Klass::cast(current_class)->is_subclass_of(field_class)) { 3220 if (current_class->is_subclass_of(field_class)) {
3221 return true; 3221 return true;
3222 } 3222 }
3223 } 3223 }
3224 3224
3225 return (!access.is_private() && InstanceKlass::cast(current_class)->is_same_class_package(field_class)); 3225 return (!access.is_private() && InstanceKlass::cast(current_class)->is_same_class_package(field_class));
3239 ResourceMark rm(THREAD); 3239 ResourceMark rm(THREAD);
3240 THROW_0(vmSymbols::java_lang_InvalidClassException()); 3240 THROW_0(vmSymbols::java_lang_InvalidClassException());
3241 } 3241 }
3242 3242
3243 // Arrays not allowed here, must use JVM_AllocateNewArray 3243 // Arrays not allowed here, must use JVM_AllocateNewArray
3244 if (Klass::cast(java_lang_Class::as_Klass(curr_mirror))->oop_is_array() || 3244 if (java_lang_Class::as_Klass(curr_mirror)->oop_is_array() ||
3245 Klass::cast(java_lang_Class::as_Klass(init_mirror))->oop_is_array()) { 3245 java_lang_Class::as_Klass(init_mirror)->oop_is_array()) {
3246 ResourceMark rm(THREAD); 3246 ResourceMark rm(THREAD);
3247 THROW_0(vmSymbols::java_lang_InvalidClassException()); 3247 THROW_0(vmSymbols::java_lang_InvalidClassException());
3248 } 3248 }
3249 3249
3250 instanceKlassHandle curr_klass (THREAD, java_lang_Class::as_Klass(curr_mirror)); 3250 instanceKlassHandle curr_klass (THREAD, java_lang_Class::as_Klass(curr_mirror));
3262 init_klass->find_method(vmSymbols::object_initializer_name(), 3262 init_klass->find_method(vmSymbols::object_initializer_name(),
3263 vmSymbols::void_method_signature())); 3263 vmSymbols::void_method_signature()));
3264 if (m.is_null()) { 3264 if (m.is_null()) {
3265 ResourceMark rm(THREAD); 3265 ResourceMark rm(THREAD);
3266 THROW_MSG_0(vmSymbols::java_lang_NoSuchMethodError(), 3266 THROW_MSG_0(vmSymbols::java_lang_NoSuchMethodError(),
3267 Method::name_and_sig_as_C_string(Klass::cast(init_klass()), 3267 Method::name_and_sig_as_C_string(init_klass(),
3268 vmSymbols::object_initializer_name(), 3268 vmSymbols::object_initializer_name(),
3269 vmSymbols::void_method_signature())); 3269 vmSymbols::void_method_signature()));
3270 } 3270 }
3271 3271
3272 if (curr_klass == init_klass && !m->is_public()) { 3272 if (curr_klass == init_klass && !m->is_public()) {
4243 // Special handling for primitive objects 4243 // Special handling for primitive objects
4244 if (java_lang_Class::is_primitive(mirror())) { 4244 if (java_lang_Class::is_primitive(mirror())) {
4245 return NULL; 4245 return NULL;
4246 } 4246 }
4247 Klass* k = java_lang_Class::as_Klass(mirror()); 4247 Klass* k = java_lang_Class::as_Klass(mirror());
4248 if (!Klass::cast(k)->oop_is_instance()) { 4248 if (!k->oop_is_instance()) {
4249 return NULL; 4249 return NULL;
4250 } 4250 }
4251 instanceKlassHandle ik_h(THREAD, k); 4251 instanceKlassHandle ik_h(THREAD, k);
4252 int encl_method_class_idx = ik_h->enclosing_method_class_index(); 4252 int encl_method_class_idx = ik_h->enclosing_method_class_index();
4253 if (encl_method_class_idx == 0) { 4253 if (encl_method_class_idx == 0) {
4254 return NULL; 4254 return NULL;
4255 } 4255 }
4256 objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::Object_klass(), 3, CHECK_NULL); 4256 objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::Object_klass(), 3, CHECK_NULL);
4257 objArrayHandle dest(THREAD, dest_o); 4257 objArrayHandle dest(THREAD, dest_o);
4258 Klass* enc_k = ik_h->constants()->klass_at(encl_method_class_idx, CHECK_NULL); 4258 Klass* enc_k = ik_h->constants()->klass_at(encl_method_class_idx, CHECK_NULL);
4259 dest->obj_at_put(0, Klass::cast(enc_k)->java_mirror()); 4259 dest->obj_at_put(0, enc_k->java_mirror());
4260 int encl_method_method_idx = ik_h->enclosing_method_method_index(); 4260 int encl_method_method_idx = ik_h->enclosing_method_method_index();
4261 if (encl_method_method_idx != 0) { 4261 if (encl_method_method_idx != 0) {
4262 Symbol* sym = ik_h->constants()->symbol_at( 4262 Symbol* sym = ik_h->constants()->symbol_at(
4263 extract_low_short_from_int( 4263 extract_low_short_from_int(
4264 ik_h->constants()->name_and_type_at(encl_method_method_idx))); 4264 ik_h->constants()->name_and_type_at(encl_method_method_idx)));