hotspot/src/share/vm/runtime/reflection.cpp
changeset 224 6a257cd604e7
parent 1 489c9b5090e2
child 362 00cf4bffd828
equal deleted inserted replaced
223:5c3b023117d9 224:6a257cd604e7
  1546   } else {
  1546   } else {
  1547     rtype = T_OBJECT;
  1547     rtype = T_OBJECT;
  1548   }
  1548   }
  1549 
  1549 
  1550   instanceKlassHandle klass(THREAD, java_lang_Class::as_klassOop(mirror));
  1550   instanceKlassHandle klass(THREAD, java_lang_Class::as_klassOop(mirror));
  1551   if (!klass->methods()->is_within_bounds(slot)) {
  1551   methodOop m = klass->method_with_idnum(slot);
       
  1552   if (m == NULL) {
  1552     THROW_MSG_0(vmSymbols::java_lang_InternalError(), "invoke");
  1553     THROW_MSG_0(vmSymbols::java_lang_InternalError(), "invoke");
  1553   }
  1554   }
  1554   methodHandle method(THREAD, methodOop(klass->methods()->obj_at(slot)));
  1555   methodHandle method(THREAD, m);
  1555 
  1556 
  1556   return invoke(klass, method, receiver, override, ptypes, rtype, args, true, THREAD);
  1557   return invoke(klass, method, receiver, override, ptypes, rtype, args, true, THREAD);
  1557 }
  1558 }
  1558 
  1559 
  1559 
  1560 
  1562   int slot               = java_lang_reflect_Constructor::slot(constructor_mirror);
  1563   int slot               = java_lang_reflect_Constructor::slot(constructor_mirror);
  1563   bool override          = java_lang_reflect_Constructor::override(constructor_mirror) != 0;
  1564   bool override          = java_lang_reflect_Constructor::override(constructor_mirror) != 0;
  1564   objArrayHandle ptypes(THREAD, objArrayOop(java_lang_reflect_Constructor::parameter_types(constructor_mirror)));
  1565   objArrayHandle ptypes(THREAD, objArrayOop(java_lang_reflect_Constructor::parameter_types(constructor_mirror)));
  1565 
  1566 
  1566   instanceKlassHandle klass(THREAD, java_lang_Class::as_klassOop(mirror));
  1567   instanceKlassHandle klass(THREAD, java_lang_Class::as_klassOop(mirror));
  1567   if (!klass->methods()->is_within_bounds(slot)) {
  1568   methodOop m = klass->method_with_idnum(slot);
       
  1569   if (m == NULL) {
  1568     THROW_MSG_0(vmSymbols::java_lang_InternalError(), "invoke");
  1570     THROW_MSG_0(vmSymbols::java_lang_InternalError(), "invoke");
  1569   }
  1571   }
  1570   methodHandle method(THREAD, methodOop(klass->methods()->obj_at(slot)));
  1572   methodHandle method(THREAD, m);
  1571   assert(method->name() == vmSymbols::object_initializer_name(), "invalid constructor");
  1573   assert(method->name() == vmSymbols::object_initializer_name(), "invalid constructor");
  1572 
  1574 
  1573   // Make sure klass gets initialize
  1575   // Make sure klass gets initialize
  1574   klass->initialize(CHECK_NULL);
  1576   klass->initialize(CHECK_NULL);
  1575 
  1577