unfold parameter list for n.e.f method

This commit is contained in:
金戟 2020-07-22 23:26:03 +08:00
parent 8dd76e22ff
commit 9c757cebc1
2 changed files with 73 additions and 16 deletions

View File

@ -33,38 +33,38 @@ public class TypeUtil {
/** /**
* add item to constructor pool * add item to constructor pool
*/ */
public static void addToConstructorPool(TestableSubstitution np) { public static void addToConstructorPool(TestableSubstitution substitution) {
mockNewPool.add(np); mockNewPool.add(substitution);
} }
/** /**
* add item to method pool * add item to method pool
*/ */
public static void addToMemberMethodPool(TestableSubstitution np) { public static void addToMemberMethodPool(TestableSubstitution substitution) {
mockMemberPool.add(np); mockMemberPool.add(substitution);
} }
/** /**
* substitution entry for new * substitution entry for new
*/ */
public static <T> T wrapNew(Class<T> ct, Object... as) { public static <T> T wrapNew(Class<T> classType, Object... parameters) {
Class[] cs = TypeUtil.getClassesFromObjects(as); Class[] cs = TypeUtil.getClassesFromObjects(parameters);
if (!mockNewPool.isEmpty()) { if (!mockNewPool.isEmpty()) {
try { try {
TestableSubstitution pi = getFromConstructorPool(ct, cs); TestableSubstitution pi = getFromConstructorPool(classType, cs);
if (pi != null) { if (pi != null) {
Method m = pi.targetObject.getClass().getDeclaredMethod(pi.methodName, pi.parameterTypes); Method m = pi.targetObject.getClass().getDeclaredMethod(pi.methodName, pi.parameterTypes);
m.setAccessible(true); m.setAccessible(true);
return (T)m.invoke(pi.targetObject, as); return (T)m.invoke(pi.targetObject, parameters);
} }
} catch (Exception e) { } catch (Exception e) {
return null; return null;
} }
} }
try { try {
Constructor c = TypeUtil.getConstructorByParameterTypes(ct.getConstructors(), cs); Constructor c = TypeUtil.getConstructorByParameterTypes(classType.getConstructors(), cs);
if (c != null) { if (c != null) {
return (T)c.newInstance(as); return (T)c.newInstance(parameters);
} }
} catch (Exception e) { } catch (Exception e) {
return null; return null;
@ -75,25 +75,25 @@ public class TypeUtil {
/** /**
* substitution entry for member call * substitution entry for member call
*/ */
public static <T> T wrapCall(Object obj, String mn, Object... as) { public static <T> T wrapCall(Object targetObject, String methodName, Object... parameters) {
Class[] cs = TypeUtil.getClassesFromObjects(as); Class[] cs = TypeUtil.getClassesFromObjects(parameters);
if (!mockMemberPool.isEmpty()) { if (!mockMemberPool.isEmpty()) {
try { try {
TestableSubstitution pi = getFromMemberMethodPool(mn, cs); TestableSubstitution pi = getFromMemberMethodPool(methodName, cs);
if (pi != null) { if (pi != null) {
Method m = pi.targetObject.getClass().getDeclaredMethod(pi.methodName, pi.parameterTypes); Method m = pi.targetObject.getClass().getDeclaredMethod(pi.methodName, pi.parameterTypes);
m.setAccessible(true); m.setAccessible(true);
return (T)m.invoke(pi.targetObject, as); return (T)m.invoke(pi.targetObject, parameters);
} }
} catch (Exception e) { } catch (Exception e) {
return null; return null;
} }
} }
try { try {
Method m = TypeUtil.getMethodByNameAndParameterTypes(obj.getClass().getDeclaredMethods(), mn, cs); Method m = TypeUtil.getMethodByNameAndParameterTypes(targetObject.getClass().getDeclaredMethods(), methodName, cs);
if (m != null) { if (m != null) {
m.setAccessible(true); m.setAccessible(true);
return (T)m.invoke(obj, as); return (T)m.invoke(targetObject, parameters);
} }
} catch (Exception e) { } catch (Exception e) {
return null; return null;

View File

@ -1,5 +1,6 @@
package n; package n;
import static com.alibaba.testable.util.TypeUtil.wrapCall;
import static com.alibaba.testable.util.TypeUtil.wrapNew; import static com.alibaba.testable.util.TypeUtil.wrapNew;
public final class e { public final class e {
@ -61,4 +62,60 @@ public final class e {
return wrapNew(ct, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); return wrapNew(ct, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);
} }
public static <T> T f(Object o, String mn) {
return wrapCall(o, mn);
}
public static <T> T f(Object o, String mn, Object a1) {
return wrapCall(o, mn, a1);
}
public static <T> T f(Object o, String mn, Object a1, Object a2) {
return wrapCall(o, mn, a1, a2);
}
public static <T> T f(Object o, String mn, Object a1, Object a2, Object a3) {
return wrapCall(o, mn, a1, a2, a3);
}
public static <T> T f(Object o, String mn, Object a1, Object a2, Object a3, Object a4) {
return wrapCall(o, mn, a1, a2, a3, a4);
}
public static <T> T f(Object o, String mn, Object a1, Object a2, Object a3, Object a4, Object a5) {
return wrapCall(o, mn, a1, a2, a3, a4, a5);
}
public static <T> T f(Object o, String mn, Object a1, Object a2, Object a3, Object a4, Object a5, Object a6) {
return wrapCall(o, mn, a1, a2, a3, a4, a5, a6);
}
public static <T> T f(Object o, String mn, Object a1, Object a2, Object a3, Object a4, Object a5, Object a6, Object a7) {
return wrapCall(o, mn, a1, a2, a3, a4, a5, a6, a7);
}
public static <T> T f(Object o, String mn, Object a1, Object a2, Object a3, Object a4, Object a5, Object a6, Object a7,
Object a8) {
return wrapCall(o, mn, a1, a2, a3, a4, a5, a6, a7, a8);
}
public static <T> T f(Object o, String mn, Object a1, Object a2, Object a3, Object a4, Object a5, Object a6, Object a7,
Object a8, Object a9) {
return wrapCall(o, mn, a1, a2, a3, a4, a5, a6, a7, a8, a9);
}
public static <T> T f(Object o, String mn, Object a1, Object a2, Object a3, Object a4, Object a5, Object a6, Object a7,
Object a8, Object a9, Object a10) {
return wrapCall(o, mn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
}
public static <T> T f(Object o, String mn, Object a1, Object a2, Object a3, Object a4, Object a5, Object a6, Object a7,
Object a8, Object a9, Object a10, Object a11) {
return wrapCall(o, mn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
}
public static <T> T f(Object o, String mn, Object a1, Object a2, Object a3, Object a4, Object a5, Object a6, Object a7,
Object a8, Object a9, Object a10, Object a11, Object a12) {
return wrapCall(o, mn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);
}
} }