< prev index next >

src/hotspot/share/runtime/reflection.cpp

Print this page

        

*** 38,57 **** --- 38,59 ---- #include "memory/universe.hpp" #include "oops/instanceKlass.hpp" #include "oops/objArrayKlass.hpp" #include "oops/objArrayOop.inline.hpp" #include "oops/oop.inline.hpp" + #include "oops/valueKlass.hpp" #include "oops/typeArrayOop.inline.hpp" #include "prims/jvmtiExport.hpp" #include "runtime/arguments.hpp" #include "runtime/fieldDescriptor.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/javaCalls.hpp" #include "runtime/reflection.hpp" #include "runtime/reflectionUtils.hpp" #include "runtime/signature.hpp" #include "runtime/vframe.inline.hpp" + #include "utilities/globalDefinitions.hpp" static void trace_class_resolution(const Klass* to_class) { ResourceMark rm; int line_number = -1; const char * source_file = NULL;
*** 780,796 **** outer->external_name(), inner->external_name() ); } // Utility method converting a single SignatureStream element into java.lang.Class instance static oop get_mirror_from_signature(const methodHandle& method, SignatureStream* ss, TRAPS) { ! ! if (T_OBJECT == ss->type() || T_ARRAY == ss->type() || T_VALUETYPE == ss->type()) { Symbol* name = ss->as_symbol(CHECK_NULL); oop loader = method->method_holder()->class_loader(); oop protection_domain = method->method_holder()->protection_domain(); const Klass* k = SystemDictionary::resolve_or_fail(name, Handle(THREAD, loader), --- 782,809 ---- outer->external_name(), inner->external_name() ); } + // Returns Q-mirror if qtype_if_value is true and k is a ValueKlass; + // otherwise returns java_mirror or L-mirror for ValueKlass + static oop java_mirror(Klass* k, jboolean qtype_if_value) { + if (qtype_if_value && k->is_value()) { + ValueKlass* vk = ValueKlass::cast(InstanceKlass::cast(k)); + return vk->value_mirror(); + } else { + return k->java_mirror(); + } + } + // Utility method converting a single SignatureStream element into java.lang.Class instance static oop get_mirror_from_signature(const methodHandle& method, SignatureStream* ss, TRAPS) { ! BasicType bt = ss->type(); ! if (T_OBJECT == bt || T_ARRAY == bt || T_VALUETYPE == bt) { Symbol* name = ss->as_symbol(CHECK_NULL); oop loader = method->method_holder()->class_loader(); oop protection_domain = method->method_holder()->protection_domain(); const Klass* k = SystemDictionary::resolve_or_fail(name, Handle(THREAD, loader),
*** 798,814 **** true, CHECK_NULL); if (log_is_enabled(Debug, class, resolve)) { trace_class_resolution(k); } ! return k->java_mirror(); } ! assert(ss->type() != T_VOID || ss->at_return_type(), "T_VOID should only appear as return type"); ! return java_lang_Class::primitive_mirror(ss->type()); } static objArrayHandle get_parameter_types(const methodHandle& method, int parameter_count, oop* return_type, --- 811,827 ---- true, CHECK_NULL); if (log_is_enabled(Debug, class, resolve)) { trace_class_resolution(k); } ! return java_mirror((Klass*)k, bt == T_VALUETYPE); } ! assert(bt != T_VOID || ss->at_return_type(), "T_VOID should only appear as return type"); ! return java_lang_Class::primitive_mirror(bt); } static objArrayHandle get_parameter_types(const methodHandle& method, int parameter_count, oop* return_type,
*** 853,864 **** true, CHECK_(Handle())); if (log_is_enabled(Debug, class, resolve)) { trace_class_resolution(result); } ! ! oop nt = result->java_mirror(); return Handle(THREAD, nt); } oop Reflection::new_method(const methodHandle& method, bool for_constant_pool_access, TRAPS) { --- 866,876 ---- true, CHECK_(Handle())); if (log_is_enabled(Debug, class, resolve)) { trace_class_resolution(result); } ! oop nt = java_mirror(result, type == T_VALUETYPE); return Handle(THREAD, nt); } oop Reflection::new_method(const methodHandle& method, bool for_constant_pool_access, TRAPS) {
< prev index next >