src/share/vm/runtime/reflection.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 7017732_incremental Sdiff src/share/vm/runtime

src/share/vm/runtime/reflection.cpp

Print this page




 632 // Utility method converting a single SignatureStream element into java.lang.Class instance
 633 
 634 oop get_mirror_from_signature(methodHandle method, SignatureStream* ss, TRAPS) {
 635   switch (ss->type()) {
 636     default:
 637       assert(ss->type() != T_VOID || ss->at_return_type(), "T_VOID should only appear as return type");
 638       return java_lang_Class::primitive_mirror(ss->type());
 639     case T_OBJECT:
 640     case T_ARRAY:
 641       Symbol* name        = ss->as_symbol(CHECK_NULL);
 642       oop loader            = instanceKlass::cast(method->method_holder())->class_loader();
 643       oop protection_domain = instanceKlass::cast(method->method_holder())->protection_domain();
 644       klassOop k = SystemDictionary::resolve_or_fail(
 645                                        name,
 646                                        Handle(THREAD, loader),
 647                                        Handle(THREAD, protection_domain),
 648                                        true, CHECK_NULL);
 649       if (TraceClassResolution) {
 650         trace_class_resolution(k);
 651       }
 652       return k->klass_part()->java_mirror();
 653   };
 654 }
 655 
 656 
 657 objArrayHandle Reflection::get_parameter_types(methodHandle method, int parameter_count, oop* return_type, TRAPS) {
 658   // Allocate array holding parameter types (java.lang.Class instances)
 659   objArrayOop m = oopFactory::new_objArray(SystemDictionary::Class_klass(), parameter_count, CHECK_(objArrayHandle()));
 660   objArrayHandle mirrors (THREAD, m);
 661   int index = 0;
 662   // Collect parameter types
 663   ResourceMark rm(THREAD);
 664   Symbol*  signature  = method->signature();
 665   SignatureStream ss(signature);
 666   while (!ss.at_return_type()) {
 667     oop mirror = get_mirror_from_signature(method, &ss, CHECK_(objArrayHandle()));
 668     mirrors->obj_at_put(index++, mirror);
 669     ss.next();
 670   }
 671   assert(index == parameter_count, "invalid parameter count");
 672   if (return_type != NULL) {




 632 // Utility method converting a single SignatureStream element into java.lang.Class instance
 633 
 634 oop get_mirror_from_signature(methodHandle method, SignatureStream* ss, TRAPS) {
 635   switch (ss->type()) {
 636     default:
 637       assert(ss->type() != T_VOID || ss->at_return_type(), "T_VOID should only appear as return type");
 638       return java_lang_Class::primitive_mirror(ss->type());
 639     case T_OBJECT:
 640     case T_ARRAY:
 641       Symbol* name        = ss->as_symbol(CHECK_NULL);
 642       oop loader            = instanceKlass::cast(method->method_holder())->class_loader();
 643       oop protection_domain = instanceKlass::cast(method->method_holder())->protection_domain();
 644       klassOop k = SystemDictionary::resolve_or_fail(
 645                                        name,
 646                                        Handle(THREAD, loader),
 647                                        Handle(THREAD, protection_domain),
 648                                        true, CHECK_NULL);
 649       if (TraceClassResolution) {
 650         trace_class_resolution(k);
 651       }
 652       return k->java_mirror();
 653   };
 654 }
 655 
 656 
 657 objArrayHandle Reflection::get_parameter_types(methodHandle method, int parameter_count, oop* return_type, TRAPS) {
 658   // Allocate array holding parameter types (java.lang.Class instances)
 659   objArrayOop m = oopFactory::new_objArray(SystemDictionary::Class_klass(), parameter_count, CHECK_(objArrayHandle()));
 660   objArrayHandle mirrors (THREAD, m);
 661   int index = 0;
 662   // Collect parameter types
 663   ResourceMark rm(THREAD);
 664   Symbol*  signature  = method->signature();
 665   SignatureStream ss(signature);
 666   while (!ss.at_return_type()) {
 667     oop mirror = get_mirror_from_signature(method, &ss, CHECK_(objArrayHandle()));
 668     mirrors->obj_at_put(index++, mirror);
 669     ss.next();
 670   }
 671   assert(index == parameter_count, "invalid parameter count");
 672   if (return_type != NULL) {


src/share/vm/runtime/reflection.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File