From 8ebe2a5d0c24a8e040dd6b96f75b04cd28039cce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=91=E6=88=9F?= Date: Sat, 24 Apr 2021 18:46:04 +0800 Subject: [PATCH] allow constructor with parameter of same type as class under constructing --- .../testable/core/tool/OmniConstructor.java | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/testable-core/src/main/java/com/alibaba/testable/core/tool/OmniConstructor.java b/testable-core/src/main/java/com/alibaba/testable/core/tool/OmniConstructor.java index 7fc1466..4bff988 100644 --- a/testable-core/src/main/java/com/alibaba/testable/core/tool/OmniConstructor.java +++ b/testable-core/src/main/java/com/alibaba/testable/core/tool/OmniConstructor.java @@ -204,7 +204,7 @@ public class OmniConstructor { } else { Object[] args = new Object[types.length]; for (int i = 0; i < types.length; i++) { - args[i] = newInstance(types[i], classPool, level + 1); + args[i] = types[i].equals(clazz) ? null : newInstance(types[i], classPool, level + 1); } return constructor.newInstance(args); } @@ -217,7 +217,7 @@ public class OmniConstructor { Class[] types = constructor.getParameterTypes(); if (types.length == 1 && types[0].equals(Void.class)) { return constructor; - } else if (types.length < minimalParametersSize && !anyMatch(types, clazz)) { + } else if (types.length < minimalParametersSize) { minimalParametersSize = types.length; bestConstructor = constructor; } @@ -225,16 +225,4 @@ public class OmniConstructor { return bestConstructor; } - private static boolean anyMatch(Class[] types, Class clazz) { - for (Class t : types) { - if (clazz.getName().equals(t.getName())) { - return true; - } - if (clazz.getSuperclass() != null && clazz.getSuperclass().getName().equals(t.getName())) { - return true; - } - } - return false; - } - }