This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new d63137b BeanStore refactoring.
d63137b is described below
commit d63137bd5673673f6fc358ee9df82e254e8e9b24
Author: JamesBognar <[email protected]>
AuthorDate: Sat Jan 22 14:45:10 2022 -0500
BeanStore refactoring.
---
.../src/main/java/org/apache/juneau/ClassMeta.java | 10 +-
.../java/org/apache/juneau/http/HttpParts.java | 4 +-
.../apache/juneau/http/header/HeaderBeanMeta.java | 8 +-
.../org/apache/juneau/http/part/PartBeanMeta.java | 8 +-
.../org/apache/juneau/internal/ClassUtils.java | 6 +-
.../java/org/apache/juneau/parser/ParserSet.java | 2 +-
.../java/org/apache/juneau/reflect/ClassInfo.java | 111 +--------------------
.../java/org/apache/juneau/reflect/Mutaters.java | 2 +-
.../apache/juneau/serializer/SerializerSet.java | 2 +-
.../java/org/apache/juneau/swap/BuilderSwap.java | 20 +++-
.../apache/juneau/rest/client/ResponseBody.java | 4 +-
.../apache/juneau/rest/client/ResponseHeader.java | 4 +-
.../org/apache/juneau/rest/client/RestRequest.java | 8 +-
.../apache/juneau/rest/HttpRuntimeException.java | 4 +-
.../java/org/apache/juneau/rest/RestContext.java | 4 +-
.../java/org/apache/juneau/cp/BeanStore_Test.java | 8 +-
.../apache/juneau/reflection/ClassInfoTest.java | 78 ++-------------
.../juneau/reflection/ConstructorInfoTest.java | 6 +-
.../juneau/reflection/ExecutableInfoTest.java | 42 ++++----
.../apache/juneau/reflection/ParamInfoTest.java | 6 +-
20 files changed, 94 insertions(+), 243 deletions(-)
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
index f3d948f..6ae7ce6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
@@ -440,8 +440,8 @@ public final class ClassMeta<T> implements Type {
ci.getPublicMethod(
x -> x.isStatic()
&& x.isNotDeprecated()
- && x.hasReturnType(c)
- && x.hasParamTypes(String.class)
+ && x.hasReturnType(c)
+ && x.hasParamTypes(String.class)
&& ArrayUtils.contains(x.getName(),
fromStringMethodNames))
).map(x -> x.inner())
.orElse(null);
@@ -451,7 +451,7 @@ public final class ClassMeta<T> implements Type {
ci.getPublicMethod(
x -> x.isStatic()
&& x.isNotDeprecated()
- && x.hasName("example")
+ && x.hasName("example")
&&
x.hasFuzzyParamTypes(BeanSession.class))
).map(x -> x.inner())
.orElse(null);
@@ -525,7 +525,7 @@ public final class ClassMeta<T> implements Type {
primitiveDefault = ci.getPrimitiveDefault();
ci.getPublicMethods(
- x -> x.isNotDeprecated(),
+ x -> x.isNotDeprecated(),
x -> publicMethods.put(x.getSignature(),
x.inner())
);
@@ -554,7 +554,7 @@ public final class ClassMeta<T> implements Type {
if (innerClass != Object.class) {
ClassInfo x = implClass == null ? ci :
ClassInfo.of(implClass);
- noArgConstructor = x.getPublicConstructor();
+ noArgConstructor = x.getPublicConstructor(y ->
y.hasNoParams());
}
try {
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpParts.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpParts.java
index 52e86d6..ac2e4ef 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpParts.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpParts.java
@@ -460,9 +460,9 @@ public class HttpParts {
private static final Function<ClassMeta<?>,ConstructorInfo>
CONSTRUCTOR_FUNCTION = x -> {
ClassInfo ci = x.getInfo();
- ConstructorInfo cc = ci.getConstructor(Visibility.PUBLIC,
String.class);
+ ConstructorInfo cc = ci.getPublicConstructor(y ->
y.hasParamTypes(String.class));
if (cc == null)
- cc = ci.getConstructor(Visibility.PUBLIC, String.class,
String.class);
+ cc = ci.getPublicConstructor(y ->
y.hasParamTypes(String.class, String.class));
return cc;
};
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderBeanMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderBeanMeta.java
index 8c5cf73..d3886e3 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderBeanMeta.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderBeanMeta.java
@@ -91,13 +91,13 @@ public class HeaderBeanMeta<T> {
ClassInfo ci = ClassInfo.of(type);
- ConstructorInfo cci = ci.getPublicConstructor(String.class);
+ ConstructorInfo cci = ci.getPublicConstructor(x ->
x.hasParamTypes(String.class));
if (cci == null)
- cci = ci.getPublicConstructor(Object.class);
+ cci = ci.getPublicConstructor(x ->
x.hasParamTypes(Object.class));
if (cci == null)
- cci = ci.getPublicConstructor(String.class,
String.class);
+ cci = ci.getPublicConstructor(x ->
x.hasParamTypes(String.class, String.class));
if (cci == null)
- cci = ci.getPublicConstructor(String.class,
Object.class);
+ cci = ci.getPublicConstructor(x ->
x.hasParamTypes(String.class, Object.class));
constructor = cci == null ? null : cci.inner();
this.schema =
HttpPartSchema.create(org.apache.juneau.http.annotation.Header.class, type);
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartBeanMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartBeanMeta.java
index 2dcd704..2920b25 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartBeanMeta.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartBeanMeta.java
@@ -92,13 +92,13 @@ public class PartBeanMeta<T> {
ClassInfo ci = ClassInfo.of(type);
- ConstructorInfo cci = ci.getPublicConstructor(String.class);
+ ConstructorInfo cci = ci.getPublicConstructor(x ->
x.hasParamTypes(String.class));
if (cci == null)
- cci = ci.getPublicConstructor(Object.class);
+ cci = ci.getPublicConstructor(x ->
x.hasParamTypes(Object.class));
if (cci == null)
- cci = ci.getPublicConstructor(String.class,
String.class);
+ cci = ci.getPublicConstructor(x ->
x.hasParamTypes(String.class, String.class));
if (cci == null)
- cci = ci.getPublicConstructor(String.class,
Object.class);
+ cci = ci.getPublicConstructor(x ->
x.hasParamTypes(String.class, Object.class));
constructor = cci == null ? null : cci.inner();
if (ci.hasAnnotation(Query.class))
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassUtils.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassUtils.java
index 3be64eb..5aa99b5 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassUtils.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ClassUtils.java
@@ -121,14 +121,16 @@ public final class ClassUtils {
return null;
// First look for an exact match.
- ConstructorInfo con =
c3.getPublicConstructor(args);
+ Object[] args2 = args;
+ ConstructorInfo con = c3.getPublicConstructor(x
-> x.canAccept(args2));
if (con != null)
return con.<T>invoke(args);
// Next look for an exact match including the
outer.
if (outer != null) {
args =
AList.of(outer).append(args).toArray();
- con = c3.getPublicConstructor(args);
+ Object[] args3 = args;
+ con = c3.getPublicConstructor(x ->
x.canAccept(args3));
if (con != null)
return con.<T>invoke(args);
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSet.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSet.java
index 2498ca8..8154ee4 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSet.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSet.java
@@ -322,7 +322,7 @@ public final class ParserSet {
if (o instanceof Class) {
// Check for no-arg constructor.
- ConstructorInfo ci =
ClassInfo.of((Class<?>)o).getPublicConstructor();
+ ConstructorInfo ci =
ClassInfo.of((Class<?>)o).getPublicConstructor(x -> x.hasNoParams());
if (ci != null)
return ci.invoke();
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
index c8fbd39..504abce 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
@@ -13,12 +13,9 @@
package org.apache.juneau.reflect;
import static org.apache.juneau.internal.StringUtils.*;
-import static org.apache.juneau.reflect.ReflectFlags.*;
import static org.apache.juneau.assertions.Assertions.*;
import static org.apache.juneau.internal.ThrowableUtils.*;
import static org.apache.juneau.internal.ObjectUtils.*;
-import static org.apache.juneau.reflect.ReflectionFilters.*;
-
import java.lang.annotation.*;
import java.lang.reflect.*;
import java.util.*;
@@ -600,46 +597,6 @@ public final class ClassInfo {
}
//-----------------------------------------------------------------------------------------------------------------
- // Special methods
-
//-----------------------------------------------------------------------------------------------------------------
-
- /**
- * Returns the <c>public static Builder create()</c> method on this
class.
- *
- * @return The <c>public static Builder create()</c> method on this
class, or <jk>null</jk> if it doesn't exist.
- */
- public Optional<MethodInfo> getBuilderCreateMethod() {
- return getPublicConstructors()
- .stream()
- .filter(x -> x.hasNumParams(1))
- .map(x -> x.getParam(0).getParameterType())
- .filter(x -> ne(x.inner(), c)) // Ignore
copy-constructor.
- .map(x -> getStaticCreator(x))
- .filter(x -> x.isPresent())
- .findFirst()
- .orElse(Optional.empty());
- }
-
- private Optional<MethodInfo> getStaticCreator(ClassInfo ci) {
- return getPublicMethods()
- .stream()
- .filter(x -> x.isAll(PUBLIC, STATIC) &&
x.hasName("create") && x.hasReturnType(ci))
- .findFirst();
- }
-
- /**
- * Returns the <c>T build()</c> method on this class.
- *
- * @return The <c>T build()</c> method on this class, or {@link
Optional#empty()} if it doesn't exist.
- */
- public Optional<MethodInfo> getBuilderBuildMethod() {
- return getDeclaredMethods()
- .stream()
- .filter(x -> x.isAll(NOT_STATIC) && x.hasName("build")
&& (!x.hasParams()) && (!x.hasReturnType(void.class)))
- .findFirst();
- }
-
-
//-----------------------------------------------------------------------------------------------------------------
// Constructors
//-----------------------------------------------------------------------------------------------------------------
@@ -666,17 +623,6 @@ public final class ClassInfo {
}
/**
- * Returns the public constructor with the specified argument types.
- *
- * @param args The exact argument types.
- * @return
- * The public constructor with the specified argument types, or
<jk>null</jk> if not found.
- */
- public ConstructorInfo getPublicConstructor(Class<?>...args) {
- return
Arrays.stream(_getPublicConstructors()).filter(hasArgs(args)).findFirst().orElse(null);
- }
-
- /**
* Returns the public constructor that passes the specified predicate
test.
*
* <p>
@@ -685,8 +631,11 @@ public final class ClassInfo {
* @param test The test that the public constructor must pass.
* @return The first matching public constructor.
*/
- public Optional<ConstructorInfo>
getConstructor(Predicate<ExecutableInfo> test) {
- return
Arrays.stream(_getDeclaredConstructors()).filter(test).findFirst();
+ public ConstructorInfo getConstructor(Predicate<ExecutableInfo> test) {
+ for (ConstructorInfo ci : _getDeclaredConstructors())
+ if (test.test(ci))
+ return ci;
+ return null;
}
/**
@@ -703,20 +652,6 @@ public final class ClassInfo {
}
/**
- * Same as {@link #getPublicConstructor(Class...)} but allows for
inexact arg type matching.
- *
- * <p>
- * For example, the method <c>foo(CharSequence)</c> will be matched by
<code>getAvailablePublicConstructor(String.<jk>class</jk>)</code>
- *
- * @param args The exact argument types.
- * @return
- * The public constructor with the specified argument types, or
<jk>null</jk> if not found.
- */
- public ConstructorInfo getAvailablePublicConstructor(Class<?>...args) {
- return _getConstructor(Visibility.PUBLIC, false, args);
- }
-
- /**
* Returns all the constructors defined on this class.
*
* @return All constructors defined on this class.
@@ -726,18 +661,6 @@ public final class ClassInfo {
}
/**
- * Finds the public constructor that can take in the specified
arguments.
- *
- * @param args The arguments we want to pass into the constructor.
- * @return
- * The constructor, or <jk>null</jk> if a public constructor could
not be found that takes in the specified
- * arguments.
- */
- public ConstructorInfo getPublicConstructor(Object...args) {
- return getPublicConstructor(ClassUtils.getClasses(args));
- }
-
- /**
* Finds the public constructor that can take in the specified
arguments using fuzzy-arg matching.
*
* @param args The arguments we want to pass into the constructor.
@@ -749,30 +672,6 @@ public final class ClassInfo {
return _getConstructor(Visibility.PUBLIC, true,
ClassUtils.getClasses(args));
}
- /**
- * Finds the public constructor that can take in the specified
arguments using fuzzy-arg matching.
- *
- * @param args The arguments we want to pass into the constructor.
- * @return
- * The constructor, never <jk>null</jk>.
- */
- public Optional<ConstructorInfo>
getOptionalPublicConstructorFuzzy(Object...args) {
- return Optional.ofNullable(_getConstructor(Visibility.PUBLIC,
true, ClassUtils.getClasses(args)));
- }
-
- /**
- * Finds a constructor with the specified parameters without throwing
an exception.
- *
- * @param vis The minimum visibility.
- * @param argTypes
- * The argument types in the constructor.
- * Can be subtypes of the actual constructor argument types.
- * @return The matching constructor, or <jk>null</jk> if constructor
could not be found.
- */
- public ConstructorInfo getConstructor(Visibility vis,
Class<?>...argTypes) {
- return _getConstructor(vis, false, argTypes);
- }
-
private ConstructorInfo[] _getPublicConstructors() {
if (publicConstructors == null) {
Constructor<?>[] cc = c == null ? new Constructor[0] :
c.getConstructors();
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/Mutaters.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/Mutaters.java
index fcc6bd0..1c91d68 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/Mutaters.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/Mutaters.java
@@ -216,7 +216,7 @@ public class Mutaters {
}
}
- ConstructorInfo c = oci.getPublicConstructor(ic);
+ ConstructorInfo c = oci.getPublicConstructor(x ->
x.hasParamTypes(ic));
if (c != null && c.isNotDeprecated()) {
boolean isMemberClass = oci.isNonStaticMemberClass();
return new Mutater() {
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSet.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSet.java
index 080a90f..9e03ccc 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSet.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSet.java
@@ -318,7 +318,7 @@ public final class SerializerSet {
if (o instanceof Class) {
// Check for no-arg constructor.
- ConstructorInfo ci =
ClassInfo.of((Class<?>)o).getPublicConstructor();
+ ConstructorInfo ci =
ClassInfo.of((Class<?>)o).getPublicConstructor(x -> x.hasNoParams());
if (ci != null)
return ci.invoke();
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/BuilderSwap.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/BuilderSwap.java
index 92ba2a8..eca3489 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/BuilderSwap.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/BuilderSwap.java
@@ -151,7 +151,7 @@ public class BuilderSwap<T,B> {
ConstructorInfo objectConstructor;
ConstructorInfo builderConstructor;
- createObjectMethod = bci.getBuilderBuildMethod().orElse(null);
+ createObjectMethod = getBuilderBuildMethod(bci);
if (createObjectMethod != null)
objectClass =
createObjectMethod.getReturnType().inner();
@@ -160,12 +160,12 @@ public class BuilderSwap<T,B> {
ClassInfo pci = ClassInfo.of(objectClass);
- objectConstructor = pci.getConstructor(cVis, builderClass);
+ objectConstructor = pci.getConstructor(x -> x.isVisible(cVis)
&& x.hasParamTypes(builderClass));
if (objectConstructor == null)
return null;
builderConstructor = bci.getNoArgConstructor(cVis);
- createBuilderMethod = pci.getBuilderCreateMethod().orElse(null);
+ createBuilderMethod = getBuilderCreateMethod(pci);
if (builderConstructor == null && createBuilderMethod == null)
return null;
@@ -220,9 +220,10 @@ public class BuilderSwap<T,B> {
if (builderConstructor == null && builderCreateMethod == null)
return null;
- objectCreateMethod = bci.getBuilderBuildMethod().orElse(null);
+ objectCreateMethod = getBuilderBuildMethod(bci);
+ Class<?> builderClass2 = builderClass;
if (objectConstructor == null)
- objectConstructor = pci.getConstructor(cVis,
builderClass);
+ objectConstructor = pci.getConstructor(x ->
x.isVisible(cVis) && x.hasParamTypes(builderClass2));
if (objectConstructor == null && objectCreateMethod == null)
return null;
@@ -245,4 +246,13 @@ public class BuilderSwap<T,B> {
&& x.hasParamTypes(argType)
) != null;
}
+
+ private static MethodInfo getBuilderBuildMethod(ClassInfo c) {
+ return c.getDeclaredMethod(
+ x -> x.isNotStatic()
+ && x.hasNoParams()
+ && (!x.hasReturnType(void.class))
+ && x.hasName("build")
+ );
+ }
}
\ No newline at end of file
diff --git
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseBody.java
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseBody.java
index cf48cf0..c0a5060 100644
---
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseBody.java
+++
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseBody.java
@@ -675,7 +675,7 @@ public class ResponseBody implements HttpEntity {
if (type.is(HttpResource.class))
type =
(ClassMeta<T>)getClassMeta(BasicResource.class);
- ConstructorInfo ci =
type.getInfo().getPublicConstructor(HttpResponse.class);
+ ConstructorInfo ci =
type.getInfo().getPublicConstructor(x -> x.hasParamTypes(HttpResponse.class));
if (ci != null) {
try {
return (T)ci.invoke(response);
@@ -710,7 +710,7 @@ public class ResponseBody implements HttpEntity {
// Some HTTP responses have no body, so
try to create these beans if they've got no-arg constructors.
if (t == null && !
type.is(String.class)) {
- ConstructorInfo c =
type.getInfo().getPublicConstructor();
+ ConstructorInfo c =
type.getInfo().getPublicConstructor(x -> x.hasNoParams());
if (c != null) {
try {
return
c.<T>invoke();
diff --git
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseHeader.java
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseHeader.java
index ba93c71..780716c 100644
---
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseHeader.java
+++
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/ResponseHeader.java
@@ -227,10 +227,10 @@ public class ResponseHeader implements Header {
public <T extends BasicHeader> T asHeader(Class<T> c) {
try {
ClassInfo ci = ClassInfo.of(c);
- ConstructorInfo cc =
ci.getConstructor(Visibility.PUBLIC, String.class);
+ ConstructorInfo cc = ci.getPublicConstructor(x ->
x.hasParamTypes(String.class));
if (cc != null)
return cc.invoke(getValue());
- cc = ci.getConstructor(Visibility.PUBLIC, String.class,
String.class);
+ cc = ci.getPublicConstructor(x ->
x.hasParamTypes(String.class, String.class));
if (cc != null)
return cc.invoke(getName(), getValue());
} catch (Throwable e) {
diff --git
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestRequest.java
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestRequest.java
index 8842b36..0d1b862 100644
---
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestRequest.java
+++
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestRequest.java
@@ -2565,16 +2565,16 @@ public class RestRequest extends BeanSession implements
HttpUriRequest, Configur
if (t.getName().equals(className)) {
ConstructorInfo c = null;
ClassInfo ci = ClassInfo.of(t);
- c =
ci.getPublicConstructor(HttpResponse.class);
+ c = ci.getPublicConstructor(x
-> x.hasParamTypes(HttpResponse.class));
if (c != null)
throw
c.<Throwable>invoke(response);
- c =
ci.getPublicConstructor(String.class);
+ c = ci.getPublicConstructor(x
-> x.hasParamTypes(String.class));
if (c != null)
throw
c.<Throwable>invoke(message != null ? message : response.getBody().asString());
- c =
ci.getPublicConstructor(String.class,Throwable.class);
+ c = ci.getPublicConstructor(x
-> x.hasParamTypes(String.class,Throwable.class));
if (c != null)
throw
c.<Throwable>invoke(message != null ? message : response.getBody().asString(),
null);
- c = ci.getPublicConstructor();
+ c = ci.getPublicConstructor(x
-> x.hasNoParams());
if (c != null)
throw
c.<Throwable>invoke();
}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/HttpRuntimeException.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/HttpRuntimeException.java
index b21b7ff..384e10a 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/HttpRuntimeException.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/HttpRuntimeException.java
@@ -106,11 +106,11 @@ public final class HttpRuntimeException extends
BasicRuntimeException {
ClassInfo eci = ClassInfo.ofc(ec);
try {
- ConstructorInfo cci =
eci.getPublicConstructor(Throwable.class, String.class, Object[].class);
+ ConstructorInfo cci = eci.getPublicConstructor(x ->
x.hasParamTypes(Throwable.class, String.class, Object[].class));
if (cci != null)
return toHttpException((Throwable)cci.invoke(t,
msg, args), InternalServerError.class);
- cci = eci.getPublicConstructor(Throwable.class);
+ cci = eci.getPublicConstructor(x ->
x.hasParamTypes(Throwable.class));
if (cci != null)
return
toHttpException((Throwable)cci.invoke(t), InternalServerError.class);
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index 550ab8c..7096732 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -6907,11 +6907,11 @@ public class RestContext extends Context {
ClassInfo eci = ClassInfo.ofc(defaultThrowable);
try {
- ConstructorInfo cci =
eci.getPublicConstructor(Throwable.class, String.class, Object[].class);
+ ConstructorInfo cci = eci.getPublicConstructor(x ->
x.hasParamTypes(Throwable.class, String.class, Object[].class));
if (cci != null)
return
toHttpException((Throwable)cci.invoke(t), InternalServerError.class);
- cci = eci.getPublicConstructor(Throwable.class);
+ cci = eci.getPublicConstructor(x ->
x.hasParamTypes(Throwable.class));
if (cci != null)
return
toHttpException((Throwable)cci.invoke(t), InternalServerError.class);
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/cp/BeanStore_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/cp/BeanStore_Test.java
index 86d0991..84ec21e 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/cp/BeanStore_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/cp/BeanStore_Test.java
@@ -270,8 +270,8 @@ public class BeanStore_Test {
BeanStore b2c =
BeanStore.create().outer(outer).parent(b1p).threadSafe().build();
ClassInfo ci = ClassInfo.of(B1.class);
- ConstructorInfo c1 = ci.getPublicConstructor(A1.class,
Optional.class, BeanStore.class);
- ConstructorInfo c2 = ci.getPublicConstructor(A1.class,
Optional.class);
+ ConstructorInfo c1 = ci.getPublicConstructor(x ->
x.hasParamTypes(A1.class, Optional.class, BeanStore.class));
+ ConstructorInfo c2 = ci.getPublicConstructor(x ->
x.hasParamTypes(A1.class, Optional.class));
MethodInfo m1 = ci.getPublicMethod(x-> x.hasName("m1"));
MethodInfo m2 = ci.getPublicMethod(x-> x.hasName("m2"));
MethodInfo m3 = ci.getPublicMethod(x-> x.hasName("m3"));
@@ -405,8 +405,8 @@ public class BeanStore_Test {
BeanStore b2c =
BeanStore.create().outer(this).parent(b1p).threadSafe().build();
ClassInfo ci = ClassInfo.of(B2.class);
- ConstructorInfo c1 =
ci.getPublicConstructor(BeanStore_Test.class, A1.class, Optional.class,
BeanStore.class);
- ConstructorInfo c2 =
ci.getPublicConstructor(BeanStore_Test.class, A1.class, Optional.class);
+ ConstructorInfo c1 = ci.getPublicConstructor(x ->
x.hasParamTypes(BeanStore_Test.class, A1.class, Optional.class,
BeanStore.class));
+ ConstructorInfo c2 = ci.getPublicConstructor(x ->
x.hasParamTypes(BeanStore_Test.class, A1.class, Optional.class));
for (BeanStore b : array(b1p, b1c, b2p, b2c)) {
assertString(b.getMissingParams(c1)).is(A1n);
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/reflection/ClassInfoTest.java
b/juneau-utest/src/test/java/org/apache/juneau/reflection/ClassInfoTest.java
index ed3c1bc..4156728 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/reflection/ClassInfoTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/reflection/ClassInfoTest.java
@@ -399,65 +399,6 @@ public class ClassInfoTest {
}
//-----------------------------------------------------------------------------------------------------------------
- // Special methods
-
//-----------------------------------------------------------------------------------------------------------------
-
- static class DCx {}
- static class DC1 {
- public static DCx create() {return null;}
- public DC1(DCx x) {}
- }
- static class DC2 {
- protected static DCx create() {return null;}
- }
- static class DC3 {
- public DCx create() {return null;}
- }
- static class DC4 {
- public static void create() {}
- }
- static class DC5 {
- public static DCx createFoo() {return null;}
- }
- static ClassInfo dc1=of(DC1.class), dc2=of(DC2.class),
dc3=of(DC3.class), dc4=of(DC4.class), dc5=of(DC5.class);
-
- @Test
- public void getBuilderCreateMethod() throws Exception {
- check("DC1.create()",
dc1.getBuilderCreateMethod().orElse(null));
- check(null, dc2.getBuilderCreateMethod().orElse(null));
- check(null, dc3.getBuilderCreateMethod().orElse(null));
- check(null, dc4.getBuilderCreateMethod().orElse(null));
- check(null, dc5.getBuilderCreateMethod().orElse(null));
- }
-
- static class DDx {}
- static class DD1 {
- public DDx build() {return null;}
- }
- static class DD2 {
- public void build() {}
- }
- static class DD3 {
- public static DDx build() {return null;}
- }
- static class DD4 {
- public DDx build2() {return null;}
- }
- static class DD5 {
- public DDx build(String x) {return null;}
- }
- static ClassInfo dd1=of(DD1.class), dd2=of(DD2.class),
dd3=of(DD3.class), dd4=of(DD4.class), dd5=of(DD5.class);
-
- @Test
- public void getBuilderBuildMethod() throws Exception {
- check("DD1.build()", dd1.getBuilderBuildMethod().orElse(null));
- check(null, dd2.getBuilderBuildMethod().orElse(null));
- check(null, dd3.getBuilderBuildMethod().orElse(null));
- check(null, dd4.getBuilderBuildMethod().orElse(null));
- check(null, dd5.getBuilderBuildMethod().orElse(null));
- }
-
-
//-----------------------------------------------------------------------------------------------------------------
// Constructors
//-----------------------------------------------------------------------------------------------------------------
@@ -529,13 +470,12 @@ public class ClassInfoTest {
@Test
public void getPublicConstructor_classArgs() {
- check("E1(String)", e1.getPublicConstructor(String.class));
- check("E1(Writer)",
e1.getAvailablePublicConstructor(StringWriter.class));
+ check("E1(String)", e1.getPublicConstructor(x ->
x.hasParamTypes(String.class)));
}
@Test
public void getPublicConstructor_objectArgs() {
- check("E1(String)", e1.getPublicConstructor("foo"));
+ check("E1(String)", e1.getPublicConstructor(x ->
x.canAccept("foo")));
}
@Test
@@ -569,17 +509,17 @@ public class ClassInfoTest {
@Test
public void getPublicNoArgConstructor() {
- check("E1()", e1.getPublicConstructor());
+ check("E1()", e1.getPublicConstructor(x -> x.hasNoParams()));
}
@Test
public void getConstructor() {
- check("E1(int)", e1.getConstructor(Visibility.PROTECTED,
int.class));
- check("E1(int)", e1.getConstructor(Visibility.PRIVATE,
int.class));
- check(null, e1.getConstructor(Visibility.PUBLIC, int.class));
- check("E3()", e3.getConstructor(Visibility.PUBLIC));
- check(null, e4.getConstructor(Visibility.PUBLIC));
- check("E5()", e5.getConstructor(Visibility.PUBLIC));
+ check("E1(int)", e1.getConstructor(x ->
x.isVisible(Visibility.PROTECTED) && x.hasParamTypes(int.class)));
+ check("E1(int)", e1.getConstructor(x ->
x.isVisible(Visibility.PRIVATE) && x.hasParamTypes(int.class)));
+ check(null, e1.getConstructor(x ->
x.isVisible(Visibility.PUBLIC) && x.hasParamTypes(int.class)));
+ check("E3()", e3.getConstructor(x ->
x.isVisible(Visibility.PUBLIC)));
+ check("E4(ClassInfoTest)", e4.getConstructor(x ->
x.isVisible(Visibility.PUBLIC)));
+ check("E5()", e5.getConstructor(x ->
x.isVisible(Visibility.PUBLIC)));
}
//-----------------------------------------------------------------------------------------------------------------
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/reflection/ConstructorInfoTest.java
b/juneau-utest/src/test/java/org/apache/juneau/reflection/ConstructorInfoTest.java
index 859cee4..a7e3e33 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/reflection/ConstructorInfoTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/reflection/ConstructorInfoTest.java
@@ -109,10 +109,10 @@ public class ConstructorInfoTest {
}
static ClassInfo b = ClassInfo.of(B.class);
static ConstructorInfo
- b_c1 = b.getPublicConstructor(),
- b_c2 = b.getPublicConstructor(String.class),
+ b_c1 = b.getPublicConstructor(x -> x.hasNoParams()),
+ b_c2 = b.getPublicConstructor(x ->
x.hasParamTypes(String.class)),
b_c3 = b.getDeclaredConstructor(x ->
x.hasParamTypes(int.class)),
- b_c4 = b.getPublicConstructor(String.class, String.class);
+ b_c4 = b.getPublicConstructor(x ->
x.hasParamTypes(String.class, String.class));
@Test
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/reflection/ExecutableInfoTest.java
b/juneau-utest/src/test/java/org/apache/juneau/reflection/ExecutableInfoTest.java
index 6a51439..29ce29b 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/reflection/ExecutableInfoTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/reflection/ExecutableInfoTest.java
@@ -73,13 +73,13 @@ public class ExecutableInfoTest {
@Test
public void isConstructor() {
- assertTrue(a.getPublicConstructor().isConstructor());
+ assertTrue(a.getPublicConstructor(x ->
x.hasNoParams()).isConstructor());
assertFalse(a.getPublicMethod(x ->
x.hasName("foo")).isConstructor());
}
@Test
public void getDeclaringClass() {
- check("A", a.getPublicConstructor().getDeclaringClass());
+ check("A", a.getPublicConstructor(x ->
x.hasNoParams()).getDeclaringClass());
check("A", a.getPublicMethod(x ->
x.hasName("foo")).getDeclaringClass());
}
@@ -95,8 +95,8 @@ public class ExecutableInfoTest {
}
static ClassInfo b = ClassInfo.of(B.class);
static ExecutableInfo
- b_c1=b.getPublicConstructor(),
- b_c2=b.getPublicConstructor(String.class),
+ b_c1=b.getPublicConstructor(x -> x.hasNoParams()),
+ b_c2=b.getPublicConstructor(x -> x.hasParamTypes(String.class)),
b_m1=b.getPublicMethod(x -> x.hasName("m") && x.hasNoParams()),
b_m2=b.getPublicMethod(x -> x.hasName("m") &&
x.hasParamTypes(String.class))
;
@@ -156,7 +156,7 @@ public class ExecutableInfoTest {
@Test
public void getParam_nocache() {
ClassInfo b = ClassInfo.of(B.class);
- check("B[0]", b.getPublicConstructor(String.class).getParam(0));
+ check("B[0]", b.getPublicConstructor(x ->
x.hasParamTypes(String.class)).getParam(0));
check("m[0]", b.getPublicMethod(x -> x.hasName("m") &&
x.hasParamTypes(String.class)).getParam(0));
}
@@ -170,9 +170,9 @@ public class ExecutableInfoTest {
@Test
public void getParam_indexOutOfBounds_noCache() {
ClassInfo b = ClassInfo.of(B.class);
-
assertThrown(()->b.getPublicConstructor().getParam(0)).message().is("Invalid
index '0'. No parameters.");
-
assertThrown(()->b.getPublicConstructor(String.class).getParam(-1)).message().is("Invalid
index '-1'. Parameter count: 1");
-
assertThrown(()->b.getPublicConstructor(String.class).getParam(1)).message().is("Invalid
index '1'. Parameter count: 1");
+ assertThrown(()->b.getPublicConstructor(x ->
x.hasNoParams()).getParam(0)).message().is("Invalid index '0'. No
parameters.");
+ assertThrown(()->b.getPublicConstructor(x ->
x.hasParamTypes(String.class)).getParam(-1)).message().is("Invalid index '-1'.
Parameter count: 1");
+ assertThrown(()->b.getPublicConstructor(x ->
x.hasParamTypes(String.class)).getParam(1)).message().is("Invalid index '1'.
Parameter count: 1");
}
@Test
@@ -268,9 +268,9 @@ public class ExecutableInfoTest {
}
static ClassInfo c = ClassInfo.of(C.class);
static ConstructorInfo
- c_c1=c.getPublicConstructor(),
- c_c2=c.getPublicConstructor(String.class),
- c_c3=c.getPublicConstructor(int.class)
+ c_c1=c.getPublicConstructor(x -> x.hasNoParams()),
+ c_c2=c.getPublicConstructor(x -> x.hasParamTypes(String.class)),
+ c_c3=c.getPublicConstructor(x -> x.hasParamTypes(int.class))
;
static MethodInfo
c_m1=c.getPublicMethod(x -> x.hasName("m") && x.hasNoParams()),
@@ -329,7 +329,7 @@ public class ExecutableInfoTest {
}
static ClassInfo d = ClassInfo.of(D.class);
static ExecutableInfo
- d_c=d.getPublicConstructor(),
+ d_c=d.getPublicConstructor(x -> x.hasNoParams()),
d_m=d.getPublicMethod(x -> x.hasName("m"))
;
@@ -591,9 +591,9 @@ public class ExecutableInfoTest {
@Test
public void getFullName_constructor() {
-
assertEquals("org.apache.juneau.reflection.ExecutableInfoTest$X()",
x.getPublicConstructor().getFullName());
-
assertEquals("org.apache.juneau.reflection.ExecutableInfoTest$X(java.lang.String)",
x.getPublicConstructor(String.class).getFullName());
-
assertEquals("org.apache.juneau.reflection.ExecutableInfoTest$X(java.util.Map<java.lang.String,java.lang.Object>)",
x.getPublicConstructor(Map.class).getFullName());
+
assertEquals("org.apache.juneau.reflection.ExecutableInfoTest$X()",
x.getPublicConstructor(x -> x.hasNoParams()).getFullName());
+
assertEquals("org.apache.juneau.reflection.ExecutableInfoTest$X(java.lang.String)",
x.getPublicConstructor(x -> x.hasParamTypes(String.class)).getFullName());
+
assertEquals("org.apache.juneau.reflection.ExecutableInfoTest$X(java.util.Map<java.lang.String,java.lang.Object>)",
x.getPublicConstructor(x -> x.hasParamTypes(Map.class)).getFullName());
}
@Test
@@ -605,9 +605,9 @@ public class ExecutableInfoTest {
@Test
public void getShortName_constructor() {
- assertEquals("X()", x.getPublicConstructor().getShortName());
- assertEquals("X(String)",
x.getPublicConstructor(String.class).getShortName());
- assertEquals("X(Map)",
x.getPublicConstructor(Map.class).getShortName());
+ assertEquals("X()", x.getPublicConstructor(x ->
x.hasNoParams()).getShortName());
+ assertEquals("X(String)", x.getPublicConstructor(x ->
x.hasParamTypes(String.class)).getShortName());
+ assertEquals("X(Map)", x.getPublicConstructor(x ->
x.hasParamTypes(Map.class)).getShortName());
}
@Test
@@ -619,8 +619,8 @@ public class ExecutableInfoTest {
@Test
public void getSimpleName_constructor() {
- assertEquals("X", x.getPublicConstructor().getSimpleName());
- assertEquals("X",
x.getPublicConstructor(String.class).getSimpleName());
- assertEquals("X",
x.getPublicConstructor(Map.class).getSimpleName());
+ assertEquals("X", x.getPublicConstructor(x ->
x.hasNoParams()).getSimpleName());
+ assertEquals("X", x.getPublicConstructor(x ->
x.hasParamTypes(String.class)).getSimpleName());
+ assertEquals("X", x.getPublicConstructor(x ->
x.hasParamTypes(Map.class)).getSimpleName());
}
}
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/reflection/ParamInfoTest.java
b/juneau-utest/src/test/java/org/apache/juneau/reflection/ParamInfoTest.java
index 0cd1073..a804655 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/reflection/ParamInfoTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/reflection/ParamInfoTest.java
@@ -86,8 +86,8 @@ public class ParamInfoTest {
static ClassInfo b = ClassInfo.of(B.class);
static ParamInfo
- b_b_a = b.getPublicConstructor(int.class,
String.class).getParam(0),
- b_b_b = b.getPublicConstructor(int.class,
String.class).getParam(1),
+ b_b_a = b.getPublicConstructor(x -> x.hasParamTypes(int.class,
String.class)).getParam(0),
+ b_b_b = b.getPublicConstructor(x -> x.hasParamTypes(int.class,
String.class)).getParam(1),
b_a1_a = b.getMethod(x -> x.hasName("a1")).getParam(0),
b_a1_b = b.getMethod(x -> x.hasName("a1")).getParam(1),
b_a2_a = b.getMethod(x -> x.hasName("a2")).getParam(0),
@@ -172,7 +172,7 @@ public class ParamInfoTest {
cb = ClassInfo.of(CB.class),
cc = ClassInfo.of(CC.class);
static ParamInfo
- cc_cc = cc.getPublicConstructor(C1.class).getParam(0),
+ cc_cc = cc.getPublicConstructor(x ->
x.hasParamTypes(C1.class)).getParam(0),
cb_a1 = cb.getMethod(x -> x.hasName("a1")).getParam(0),
cb_a2 = cb.getMethod(x -> x.hasName("a2")).getParam(0),
cc_a1 = cc.getMethod(x -> x.hasName("a1")).getParam(0),