diff -r 853b91521c30 -r 33342314ce89 jdk/src/java.base/share/classes/java/lang/Class.java --- a/jdk/src/java.base/share/classes/java/lang/Class.java Thu Jun 15 17:24:12 2017 +0000 +++ b/jdk/src/java.base/share/classes/java/lang/Class.java Fri Jun 16 09:20:39 2017 -0700 @@ -50,6 +50,7 @@ import java.security.AccessController; import java.security.PrivilegedAction; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -2067,25 +2068,6 @@ } /** - * Returns a {@code Method} object that reflects the specified public - * member method of the class or interface represented by this - * {@code Class} object. - * - * @param name the name of the method - * @param parameterTypes the list of parameters - * @return the {@code Method} object that matches the specified - * {@code name} and {@code parameterTypes}; {@code null} - * if the method is not found or the name is - * "<init>"or "<clinit>". - */ - Method getMethodOrNull(String name, Class... parameterTypes) { - Objects.requireNonNull(name); - Method method = getMethod0(name, parameterTypes); - return method == null ? null : getReflectionFactory().copyMethod(method); - } - - - /** * Returns a {@code Constructor} object that reflects the specified * public constructor of the class represented by this {@code Class} * object. The {@code parameterTypes} parameter is an array of @@ -2225,7 +2207,6 @@ /** - * * Returns an array containing {@code Method} objects reflecting all the * declared methods of the class or interface represented by this {@code * Class} object, including public, protected, default (package) @@ -2453,6 +2434,30 @@ return getReflectionFactory().copyMethod(method); } + /** + * Returns the list of {@code Method} objects for the declared public + * methods of this class or interface that have the specified method name + * and parameter types. + * + * @param name the name of the method + * @param parameterTypes the parameter array + * @return the list of {@code Method} objects for the public methods of + * this class matching the specified name and parameters + */ + List getDeclaredPublicMethods(String name, Class... parameterTypes) { + Method[] methods = privateGetDeclaredMethods(/* publicOnly */ true); + ReflectionFactory factory = getReflectionFactory(); + List result = new ArrayList<>(); + for (Method method : methods) { + if (method.getName().equals(name) + && Arrays.equals( + factory.getExecutableSharedParameterTypes(method), + parameterTypes)) { + result.add(factory.copyMethod(method)); + } + } + return result; + } /** * Returns a {@code Constructor} object that reflects the specified