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

Reply via email to