Mercurial > hg > graal-jvmci-8
comparison src/share/vm/runtime/reflection.cpp @ 6940:18fb7da42534
8000725: NPG: method_holder() and pool_holder() and pool_holder field should be InstanceKlass
Summary: Change types of above methods and field to InstanceKlass and remove unneeded casts from the source files.
Reviewed-by: dholmes, coleenp, zgu
Contributed-by: harold.seigel@oracle.com
author | coleenp |
---|---|
date | Tue, 06 Nov 2012 15:09:37 -0500 |
parents | 4735d2c84362 |
children | 070d523b96a7 |
comparison
equal
deleted
inserted
replaced
6939:c284cf4781f0 | 6940:18fb7da42534 |
---|---|
54 JavaThread* jthread = JavaThread::current(); | 54 JavaThread* jthread = JavaThread::current(); |
55 if (jthread->has_last_Java_frame()) { | 55 if (jthread->has_last_Java_frame()) { |
56 vframeStream vfst(jthread); | 56 vframeStream vfst(jthread); |
57 // skip over any frames belonging to java.lang.Class | 57 // skip over any frames belonging to java.lang.Class |
58 while (!vfst.at_end() && | 58 while (!vfst.at_end() && |
59 InstanceKlass::cast(vfst.method()->method_holder())->name() == vmSymbols::java_lang_Class()) { | 59 vfst.method()->method_holder()->name() == vmSymbols::java_lang_Class()) { |
60 vfst.next(); | 60 vfst.next(); |
61 } | 61 } |
62 if (!vfst.at_end()) { | 62 if (!vfst.at_end()) { |
63 // this frame is a likely suspect | 63 // this frame is a likely suspect |
64 caller = vfst.method()->method_holder(); | 64 caller = vfst.method()->method_holder(); |
65 line_number = vfst.method()->line_number_from_bci(vfst.bci()); | 65 line_number = vfst.method()->line_number_from_bci(vfst.bci()); |
66 Symbol* s = InstanceKlass::cast(vfst.method()->method_holder())->source_file_name(); | 66 Symbol* s = vfst.method()->method_holder()->source_file_name(); |
67 if (s != NULL) { | 67 if (s != NULL) { |
68 source_file = s->as_C_string(); | 68 source_file = s->as_C_string(); |
69 } | 69 } |
70 } | 70 } |
71 } | 71 } |
640 assert(ss->type() != T_VOID || ss->at_return_type(), "T_VOID should only appear as return type"); | 640 assert(ss->type() != T_VOID || ss->at_return_type(), "T_VOID should only appear as return type"); |
641 return java_lang_Class::primitive_mirror(ss->type()); | 641 return java_lang_Class::primitive_mirror(ss->type()); |
642 case T_OBJECT: | 642 case T_OBJECT: |
643 case T_ARRAY: | 643 case T_ARRAY: |
644 Symbol* name = ss->as_symbol(CHECK_NULL); | 644 Symbol* name = ss->as_symbol(CHECK_NULL); |
645 oop loader = InstanceKlass::cast(method->method_holder())->class_loader(); | 645 oop loader = method->method_holder()->class_loader(); |
646 oop protection_domain = InstanceKlass::cast(method->method_holder())->protection_domain(); | 646 oop protection_domain = method->method_holder()->protection_domain(); |
647 Klass* k = SystemDictionary::resolve_or_fail( | 647 Klass* k = SystemDictionary::resolve_or_fail( |
648 name, | 648 name, |
649 Handle(THREAD, loader), | 649 Handle(THREAD, loader), |
650 Handle(THREAD, protection_domain), | 650 Handle(THREAD, protection_domain), |
651 true, CHECK_NULL); | 651 true, CHECK_NULL); |
712 // In jdk1.2.x, getMethods on an interface erroneously includes <clinit>, thus the complicated assert. | 712 // In jdk1.2.x, getMethods on an interface erroneously includes <clinit>, thus the complicated assert. |
713 // Also allow sun.reflect.ConstantPool to refer to <clinit> methods as java.lang.reflect.Methods. | 713 // Also allow sun.reflect.ConstantPool to refer to <clinit> methods as java.lang.reflect.Methods. |
714 assert(!method()->is_initializer() || | 714 assert(!method()->is_initializer() || |
715 (for_constant_pool_access && method()->is_static()) || | 715 (for_constant_pool_access && method()->is_static()) || |
716 (method()->name() == vmSymbols::class_initializer_name() | 716 (method()->name() == vmSymbols::class_initializer_name() |
717 && Klass::cast(method()->method_holder())->is_interface() && JDK_Version::is_jdk12x_version()), "should call new_constructor instead"); | 717 && method()->method_holder()->is_interface() && JDK_Version::is_jdk12x_version()), "should call new_constructor instead"); |
718 instanceKlassHandle holder (THREAD, method->method_holder()); | 718 instanceKlassHandle holder (THREAD, method->method_holder()); |
719 int slot = method->method_idnum(); | 719 int slot = method->method_idnum(); |
720 | 720 |
721 Symbol* signature = method->signature(); | 721 Symbol* signature = method->signature(); |
722 int parameter_count = ArgumentCount(signature).size(); | 722 int parameter_count = ArgumentCount(signature).size(); |
830 Symbol* signature = fd->signature(); | 830 Symbol* signature = fd->signature(); |
831 instanceKlassHandle holder (THREAD, fd->field_holder()); | 831 instanceKlassHandle holder (THREAD, fd->field_holder()); |
832 Handle type = new_type(signature, holder, CHECK_NULL); | 832 Handle type = new_type(signature, holder, CHECK_NULL); |
833 Handle rh = java_lang_reflect_Field::create(CHECK_NULL); | 833 Handle rh = java_lang_reflect_Field::create(CHECK_NULL); |
834 | 834 |
835 java_lang_reflect_Field::set_clazz(rh(), Klass::cast(fd->field_holder())->java_mirror()); | 835 java_lang_reflect_Field::set_clazz(rh(), fd->field_holder()->java_mirror()); |
836 java_lang_reflect_Field::set_slot(rh(), fd->index()); | 836 java_lang_reflect_Field::set_slot(rh(), fd->index()); |
837 java_lang_reflect_Field::set_name(rh(), name()); | 837 java_lang_reflect_Field::set_name(rh(), name()); |
838 java_lang_reflect_Field::set_type(rh(), type()); | 838 java_lang_reflect_Field::set_type(rh(), type()); |
839 // Note the ACC_ANNOTATION bit, which is a per-class access flag, is never set here. | 839 // Note the ACC_ANNOTATION bit, which is a per-class access flag, is never set here. |
840 java_lang_reflect_Field::set_modifiers(rh(), fd->access_flags().as_int() & JVM_RECOGNIZED_FIELD_MODIFIERS); | 840 java_lang_reflect_Field::set_modifiers(rh(), fd->access_flags().as_int() & JVM_RECOGNIZED_FIELD_MODIFIERS); |
898 // no need to resolve if method is private or <init> | 898 // no need to resolve if method is private or <init> |
899 if (reflected_method->is_private() || reflected_method->name() == vmSymbols::object_initializer_name()) { | 899 if (reflected_method->is_private() || reflected_method->name() == vmSymbols::object_initializer_name()) { |
900 method = reflected_method; | 900 method = reflected_method; |
901 } else { | 901 } else { |
902 // resolve based on the receiver | 902 // resolve based on the receiver |
903 if (InstanceKlass::cast(reflected_method->method_holder())->is_interface()) { | 903 if (reflected_method->method_holder()->is_interface()) { |
904 // resolve interface call | 904 // resolve interface call |
905 if (ReflectionWrapResolutionErrors) { | 905 if (ReflectionWrapResolutionErrors) { |
906 // new default: 6531596 | 906 // new default: 6531596 |
907 // Match resolution errors with those thrown due to reflection inlining | 907 // Match resolution errors with those thrown due to reflection inlining |
908 // Linktime resolution & IllegalAccessCheck already done by Class.getMethod() | 908 // Linktime resolution & IllegalAccessCheck already done by Class.getMethod() |