mockit.internal.util.RealMethod Maven / Gradle / Ivy
/*
* Copyright (c) 2006-2012 Rogério Liesenfeld
* This file is subject to the terms of the MIT license (see LICENSE.txt).
*/
package mockit.internal.util;
import java.lang.reflect.*;
public final class RealMethod
{
public final Method method;
public RealMethod(Class realClass, String methodName, String methodDesc)
{
method = initialize(realClass, methodName, methodDesc);
}
public RealMethod(String className, String methodNameAndDesc)
{
this(ClassLoad.loadClass(className), methodNameAndDesc);
}
public RealMethod(Class realClass, String methodNameAndDesc)
{
int p = methodNameAndDesc.indexOf('(');
String methodName = methodNameAndDesc.substring(0, p);
String methodDesc = methodNameAndDesc.substring(p);
method = initialize(realClass, methodName, methodDesc);
}
private Method initialize(Class realClass, String methodName, String methodDesc)
{
Class[] parameterTypes = TypeDescriptor.getParameterTypes(methodDesc);
Class ownerClass = realClass;
while (true) {
try {
return ownerClass.getDeclaredMethod(methodName, parameterTypes);
}
catch (NoSuchMethodException e) {
ownerClass = ownerClass.getSuperclass();
if (ownerClass == Object.class) {
throw new RuntimeException(e);
}
}
}
}
}