You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2017/08/21 15:28:04 UTC
[lang] [LANG-1350] ConstructorUtils.invokeConstructor(Class,
Object...) regression
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 <ga...@gmail.com>
Authored: Mon Aug 21 09:28:01 2017 -0600
Committer: Gary Gregory <ga...@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