Repository: commons-lang Updated Branches: refs/heads/master 05d951803 -> cc94767e7
[LANG-1350] ConstructorUtils.invokeConstructor(Class, Object...) regression Project: http://git-wip-us.apache.org/repos/asf/commons-lang/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-lang/commit/cc94767e Tree: http://git-wip-us.apache.org/repos/asf/commons-lang/tree/cc94767e Diff: http://git-wip-us.apache.org/repos/asf/commons-lang/diff/cc94767e Branch: refs/heads/master Commit: cc94767e7eabdfcf9d1cab1d8d1d8556864394c6 Parents: 05d9518 Author: Gary Gregory <garydgreg...@gmail.com> Authored: Mon Aug 21 09:28:01 2017 -0600 Committer: Gary Gregory <garydgreg...@gmail.com> Committed: Mon Aug 21 09:28:01 2017 -0600 ---------------------------------------------------------------------- src/changes/changes.xml | 1 + .../org/apache/commons/lang3/reflect/MemberUtils.java | 7 ++++++- .../commons/lang3/reflect/ConstructorUtilsTest.java | 14 ++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-lang/blob/cc94767e/src/changes/changes.xml ---------------------------------------------------------------------- diff --git a/src/changes/changes.xml b/src/changes/changes.xml index ee6c0ef..5846472 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -47,6 +47,7 @@ The <action> type attribute can be add,update,fix,remove. <release version="3.7" date="tba" description="tba"> <action issue="LANG-1346" type="update" dev="pschumacher">Remove deprecation from RandomStringUtils</action> + <action issue="LANG-1350" type="update" dev="ggregory" due-to="Brett Kail">ConstructorUtils.invokeConstructor(Class, Object...) regression</action> </release> <release version="3.6" date="2017-06-08" description="New features and bug fixes. Requires Java 7."> http://git-wip-us.apache.org/repos/asf/commons-lang/blob/cc94767e/src/main/java/org/apache/commons/lang3/reflect/MemberUtils.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/lang3/reflect/MemberUtils.java b/src/main/java/org/apache/commons/lang3/reflect/MemberUtils.java index 86c5411..9523858 100644 --- a/src/main/java/org/apache/commons/lang3/reflect/MemberUtils.java +++ b/src/main/java/org/apache/commons/lang3/reflect/MemberUtils.java @@ -255,6 +255,10 @@ abstract class MemberUtils { private static boolean isMatchingExecutable(final Executable method, final Class<?>[] parameterTypes) { final Class<?>[] methodParameterTypes = method.getParameterTypes(); + if (ClassUtils.isAssignable(parameterTypes, methodParameterTypes, true)) { + return true; + } + if (method.isVarArgs()) { int i; for (i = 0; i < methodParameterTypes.length - 1 && i < parameterTypes.length; i++) { @@ -270,7 +274,8 @@ abstract class MemberUtils { } return true; } - return ClassUtils.isAssignable(parameterTypes, methodParameterTypes, true); + + return false; } /** http://git-wip-us.apache.org/repos/asf/commons-lang/blob/cc94767e/src/test/java/org/apache/commons/lang3/reflect/ConstructorUtilsTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/lang3/reflect/ConstructorUtilsTest.java b/src/test/java/org/apache/commons/lang3/reflect/ConstructorUtilsTest.java index 9cd39c4..06e388e 100644 --- a/src/test/java/org/apache/commons/lang3/reflect/ConstructorUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/reflect/ConstructorUtilsTest.java @@ -77,6 +77,11 @@ public class ConstructorUtilsTest { varArgs = s; } + public TestBean(final BaseClass bc, String... s) { + toString = "(BaseClass, String...)"; + varArgs = s; + } + public TestBean(final Integer i, final String... s) { toString = "(Integer, String...)"; varArgs = s; @@ -101,6 +106,10 @@ public class ConstructorUtilsTest { } } + private static class BaseClass {} + + private static class SubClass extends BaseClass {} + static class PrivateClass { @SuppressWarnings("unused") public PrivateClass() { @@ -157,6 +166,8 @@ public class ConstructorUtilsTest { .verify("(String...)", new String[]{"a", "b"}); ConstructorUtils.invokeConstructor(TestBean.class, NumberUtils.INTEGER_ONE, "a", "b") .verify("(Integer, String...)", new String[]{"a", "b"}); + ConstructorUtils.invokeConstructor(TestBean.class, new SubClass(), new String[]{"a", "b"}) + .verify("(BaseClass, String...)", new String[]{"a", "b"}); } @Test @@ -252,6 +263,9 @@ public class ConstructorUtilsTest { singletonArray(Double.class), singletonArray(Double.TYPE)); expectMatchingAccessibleConstructorParameterTypes(TestBean.class, singletonArray(Double.TYPE), singletonArray(Double.TYPE)); + expectMatchingAccessibleConstructorParameterTypes(TestBean.class, + new Class<?>[]{SubClass.class, String[].class}, + new Class<?>[]{BaseClass.class, String[].class}); } @Test