hotspot/src/share/vm/prims/jvm.cpp
changeset 27612 7201412afbd0
parent 27471 6e56277909f1
child 27667 3c814b51da6c
child 27685 26a697375de3
equal deleted inserted replaced
27611:e8e7b0902deb 27612:7201412afbd0
  1655   Method* method_ptr = jvm_get_method_common(method);
  1655   Method* method_ptr = jvm_get_method_common(method);
  1656   methodHandle mh (THREAD, method_ptr);
  1656   methodHandle mh (THREAD, method_ptr);
  1657   Handle reflected_method (THREAD, JNIHandles::resolve_non_null(method));
  1657   Handle reflected_method (THREAD, JNIHandles::resolve_non_null(method));
  1658   const int num_params = mh->method_parameters_length();
  1658   const int num_params = mh->method_parameters_length();
  1659 
  1659 
  1660   if (0 != num_params) {
  1660   if (num_params < 0) {
       
  1661     // A -1 return value from method_parameters_length means there is no
       
  1662     // parameter data.  Return null to indicate this to the reflection
       
  1663     // API.
       
  1664     assert(num_params == -1, "num_params should be -1 if it is less than zero");
       
  1665     return (jobjectArray)NULL;
       
  1666   } else {
       
  1667     // Otherwise, we return something up to reflection, even if it is
       
  1668     // a zero-length array.  Why?  Because in some cases this can
       
  1669     // trigger a MalformedParametersException.
       
  1670 
  1661     // make sure all the symbols are properly formatted
  1671     // make sure all the symbols are properly formatted
  1662     for (int i = 0; i < num_params; i++) {
  1672     for (int i = 0; i < num_params; i++) {
  1663       MethodParametersElement* params = mh->method_parameters_start();
  1673       MethodParametersElement* params = mh->method_parameters_start();
  1664       int index = params[i].name_cp_index;
  1674       int index = params[i].name_cp_index;
  1665       bounds_check(mh->constants(), index, CHECK_NULL);
  1675       bounds_check(mh->constants(), index, CHECK_NULL);
  1683       oop param = Reflection::new_parameter(reflected_method, i, sym,
  1693       oop param = Reflection::new_parameter(reflected_method, i, sym,
  1684                                             flags, CHECK_NULL);
  1694                                             flags, CHECK_NULL);
  1685       result->obj_at_put(i, param);
  1695       result->obj_at_put(i, param);
  1686     }
  1696     }
  1687     return (jobjectArray)JNIHandles::make_local(env, result());
  1697     return (jobjectArray)JNIHandles::make_local(env, result());
  1688   } else {
       
  1689     return (jobjectArray)NULL;
       
  1690   }
  1698   }
  1691 }
  1699 }
  1692 JVM_END
  1700 JVM_END
  1693 
  1701 
  1694 // New (JDK 1.4) reflection implementation /////////////////////////////////////
  1702 // New (JDK 1.4) reflection implementation /////////////////////////////////////