From 9c09bf9653dc8d082b6c6dea0b0108f77b066a38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=91=E6=88=9F?= Date: Sun, 18 Apr 2021 09:45:57 +0800 Subject: [PATCH] avoid to select constructor with parameter of its own type --- .../testable/core/tool/OmniConstructor.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) 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 1bbdf01..b9d93ef 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 @@ -2,6 +2,7 @@ package com.alibaba.testable.core.tool; import com.alibaba.testable.core.exception.ClassConstructionException; import com.alibaba.testable.core.model.TestableNull; +import com.alibaba.testable.core.util.CollectionUtil; import com.alibaba.testable.core.util.TypeUtil; import javax.lang.model.type.NullType; @@ -200,7 +201,7 @@ public class OmniConstructor { Class[] types = constructor.getParameterTypes(); if (types.length == 1 && types[0].equals(NullType.class)) { return constructor; - } else if (types.length < minimalParametersSize) { + } else if (types.length < minimalParametersSize && !anyMatch(types, clazz)) { minimalParametersSize = types.length; bestConstructor = constructor; } @@ -208,4 +209,16 @@ 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; + } + }