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 ///////////////////////////////////// |