Mercurial > hg > truffle
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))); |