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 6c3eeee2e8 Utility class modernization
6c3eeee2e8 is described below
commit 6c3eeee2e853cc4796955b0b71d587b94596552d
Author: James Bognar <[email protected]>
AuthorDate: Wed Nov 5 16:49:14 2025 -0500
Utility class modernization
---
.../juneau/common/reflect/AnnotationInfo.java | 2 +-
.../apache/juneau/common/reflect/ClassInfo.java | 104 -----------------
.../org/apache/juneau/common/utils/ClassUtils.java | 2 +-
.../apache/juneau/common/utils/PredicateUtils.java | 67 +++++++++++
.../src/main/java/org/apache/juneau/BeanMeta.java | 12 +-
.../src/main/java/org/apache/juneau/ClassMeta.java | 13 +--
.../java/org/apache/juneau/cp/BeanCreator.java | 8 +-
.../juneau/httppart/bean/RequestBeanMeta.java | 2 +-
.../juneau/httppart/bean/ResponseBeanMeta.java | 2 +-
.../java/org/apache/juneau/swap/SurrogateSwap.java | 2 +-
.../juneau/rest/client/remote/RemoteMeta.java | 2 +-
.../juneau/http/remote/RrpcInterfaceMeta.java | 2 +-
.../java/org/apache/juneau/rest/RestContext.java | 24 ++--
.../juneau/rest/debug/BasicDebugEnablement.java | 5 +-
.../juneau/common/utils/PredicateUtils_Test.java | 125 +++++++++++++++++++++
15 files changed, 228 insertions(+), 144 deletions(-)
diff --git
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/AnnotationInfo.java
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/AnnotationInfo.java
index b001a29ef0..bf7d8f1023 100644
---
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/AnnotationInfo.java
+++
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/AnnotationInfo.java
@@ -166,7 +166,7 @@ public class AnnotationInfo<T extends Annotation> {
jm.put(s(annotatable.getAnnotatableType()),
annotatable.getAnnotatableName());
var ja = new LinkedHashMap<String, Object>();
var ca = ClassInfo.of(a.annotationType());
- ca.forEachDeclaredMethod(null, x -> {
+ ca.getDeclaredMethods().stream().forEach(x -> {
try {
var v = x.invoke(a);
var d = x.inner().getDefaultValue();
diff --git
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ClassInfo.java
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ClassInfo.java
index 2a94f54fa6..f48e8bcf51 100644
---
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ClassInfo.java
+++
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/reflect/ClassInfo.java
@@ -402,19 +402,6 @@ public class ClassInfo extends ElementInfo implements
Annotatable {
}
- /**
- * Performs an action on all matching declared methods on this class
and all parent classes.
- *
- * @param filter A predicate to apply to the entries to determine if
action should be performed. Can be <jk>null</jk>.
- * @param action An action to perform on the entry.
- * @return This object.
- */
- public ClassInfo forEachAllMethodParentFirst(Predicate<MethodInfo>
filter, Consumer<MethodInfo> action) {
- for (var mi : allMethodsParentFirst.get())
- consumeIf(filter, action, mi);
- return this;
- }
-
/**
* Performs an action on all matching annotations on this class and
superclasses/interfaces.
*
@@ -483,97 +470,6 @@ public class ClassInfo extends ElementInfo implements
Annotatable {
return this;
}
- /**
- * Performs an action on all matching declared constructors on this
class.
- *
- * @param filter A predicate to apply to the entries to determine if
action should be performed. Can be <jk>null</jk>.
- * @param action An action to perform on the entry.
- * @return This object.
- */
- public ClassInfo forEachDeclaredConstructor(Predicate<ConstructorInfo>
filter, Consumer<ConstructorInfo> action) {
- for (var mi : declaredConstructors.get())
- consumeIf(filter, action, mi);
- return this;
- }
-
- /**
- * Performs an action on all matching declared fields on this class.
- *
- * @param filter A predicate to apply to the entries to determine if
action should be performed. Can be <jk>null</jk>.
- * @param action An action to perform on the entry.
- * @return This object.
- */
- public ClassInfo forEachDeclaredField(Predicate<FieldInfo> filter,
Consumer<FieldInfo> action) {
- for (var fi : declaredFields.get())
- consumeIf(filter, action, fi);
- return this;
- }
-
- /**
- * Performs an action on all matching declared methods on this class.
- *
- * @param filter A predicate to apply to the entries to determine if
action should be performed. Can be <jk>null</jk>.
- * @param action An action to perform on the entry.
- * @return This object.
- */
- public ClassInfo forEachDeclaredMethod(Predicate<MethodInfo> filter,
Consumer<MethodInfo> action) {
- for (var mi : declaredMethods.get())
- consumeIf(filter, action, mi);
- return this;
- }
-
- /**
- * Performs an action on all matching methods on this class.
- *
- * @param filter A predicate to apply to the entries to determine if
action should be performed. Can be <jk>null</jk>.
- * @param action An action to perform on the entry.
- * @return This object.
- */
- public ClassInfo forEachMethod(Predicate<MethodInfo> filter,
Consumer<MethodInfo> action) {
- for (var mi : allMethods.get())
- consumeIf(filter, action, mi);
- return this;
- }
-
- /**
- * Performs an action on all matching public constructors on this class.
- *
- * @param filter A predicate to apply to the entries to determine if
action should be performed. Can be <jk>null</jk>.
- * @param action An action to perform on the entry.
- * @return This object.
- */
- public ClassInfo forEachPublicConstructor(Predicate<ConstructorInfo>
filter, Consumer<ConstructorInfo> action) {
- for (var mi : publicConstructors.get())
- consumeIf(filter, action, mi);
- return this;
- }
-
- /**
- * Performs an action on all matching public fields on this class.
- *
- * @param filter A predicate to apply to the entries to determine if
action should be performed. Can be <jk>null</jk>.
- * @param action An action to perform on the entry.
- * @return This object.
- */
- public ClassInfo forEachPublicField(Predicate<FieldInfo> filter,
Consumer<FieldInfo> action) {
- for (var mi : publicFields.get())
- consumeIf(filter, action, mi);
- return this;
- }
-
- /**
- * Performs an action on all matching public methods on this class.
- *
- * @param filter A predicate to apply to the entries to determine if
action should be performed. Can be <jk>null</jk>.
- * @param action An action to perform on the entry.
- * @return This object.
- */
- public ClassInfo forEachPublicMethod(Predicate<MethodInfo> filter,
Consumer<MethodInfo> action) {
- for (var mi : publicMethods.get())
- consumeIf(filter, action, mi);
- return this;
- }
-
/**
* Returns all fields on this class and all parent classes.
*
diff --git
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/ClassUtils.java
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/ClassUtils.java
index 65cfec54bd..4c8a6058c3 100644
---
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/ClassUtils.java
+++
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/ClassUtils.java
@@ -429,7 +429,7 @@ public class ClassUtils {
if (s.contains("$$EnhancerBySpringCGLIB$$")) {
// Try to invoke getTargetClass() if available (Spring
specific)
Value<Class<?>> v = Value.empty();
- ClassInfo.of(c).forEachPublicMethod(m ->
m.hasName("getTargetClass") && m.hasNoParameters() &&
m.hasReturnType(Class.class), m -> safe(() -> v.set(m.invoke(o))));
+ ClassInfo.of(c).getPublicMethods().stream().filter(m ->
m.hasName("getTargetClass") && m.hasNoParameters() &&
m.hasReturnType(Class.class)).forEach(m -> safe(() -> v.set(m.invoke(o))));
return v.isPresent() ? v.get() : c.getSuperclass();
}
diff --git
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/PredicateUtils.java
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/PredicateUtils.java
index ac8186b639..8c69cd5fd4 100644
---
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/PredicateUtils.java
+++
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/PredicateUtils.java
@@ -20,6 +20,8 @@ import static org.apache.juneau.common.utils.Utils.*;
import java.util.function.*;
+import org.apache.juneau.common.reflect.*;
+
/**
* Utility methods for composing {@link Predicate} instances.
*/
@@ -174,4 +176,69 @@ public final class PredicateUtils {
return v;
};
}
+
+ /**
+ * Returns a predicate that tests whether an {@link ElementInfo} has
the specified flag.
+ *
+ * <p>
+ * Useful for filtering streams of reflection elements.
+ *
+ * <h5 class='section'>Example:</h5>
+ * <p class='bjava'>
+ * List<ClassInfo> classes = ...;
+ * ClassInfo publicClass = classes.stream()
+ * .filter(is(PUBLIC))
+ * .findFirst()
+ * .orElse(<jk>null</jk>);
+ * </p>
+ *
+ * @param flag The flag to test for.
+ * @return A predicate that returns {@code true} if the element has the
specified flag.
+ */
+ public static Predicate<ElementInfo> is(ElementFlag flag) {
+ return ei -> ei.is(flag);
+ }
+
+ /**
+ * Returns a predicate that tests whether an {@link ElementInfo} has
all of the specified flags.
+ *
+ * <p>
+ * Useful for filtering streams of reflection elements.
+ *
+ * <h5 class='section'>Example:</h5>
+ * <p class='bjava'>
+ * List<ClassInfo> classes = ...;
+ * ClassInfo publicNonDeprecated = classes.stream()
+ * .filter(isAll(PUBLIC, NOT_DEPRECATED))
+ * .findFirst()
+ * .orElse(<jk>null</jk>);
+ * </p>
+ *
+ * @param flags The flags to test for.
+ * @return A predicate that returns {@code true} if the element has all
of the specified flags.
+ */
+ public static Predicate<ElementInfo> isAll(ElementFlag...flags) {
+ return ei -> ei.isAll(flags);
+ }
+
+ /**
+ * Returns a predicate that tests whether an {@link ElementInfo} has
any of the specified flags.
+ *
+ * <p>
+ * Useful for filtering streams of reflection elements.
+ *
+ * <h5 class='section'>Example:</h5>
+ * <p class='bjava'>
+ * List<ClassInfo> classes = ...;
+ * List<ClassInfo> visibleClasses = classes.stream()
+ * .filter(isAny(PUBLIC, PROTECTED))
+ * .collect(Collectors.toList());
+ * </p>
+ *
+ * @param flags The flags to test for.
+ * @return A predicate that returns {@code true} if the element has any
of the specified flags.
+ */
+ public static Predicate<ElementInfo> isAny(ElementFlag...flags) {
+ return ei -> ei.isAny(flags);
+ }
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
index b3c2f4e913..0678497c22 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
@@ -247,7 +247,7 @@ public class BeanMeta<T> {
return "Class is not serializable";
// Look for @Beanc constructor on public
constructors.
- ci.forEachPublicConstructor(x ->
x.hasAnnotation(ctx, Beanc.class), x -> {
+ ci.getPublicConstructors().stream().filter(x ->
x.hasAnnotation(ctx, Beanc.class)).forEach(x -> {
if (nn(constructor))
throw new
BeanRuntimeException(c, "Multiple instances of '@Beanc' found.");
constructor = x;
@@ -270,7 +270,7 @@ public class BeanMeta<T> {
// Look for @Beanc on all other constructors.
if (constructor == null) {
- ci.forEachDeclaredConstructor(x ->
x.hasAnnotation(ctx, Beanc.class), x -> {
+
ci.getDeclaredConstructors().stream().filter(x -> x.hasAnnotation(ctx,
Beanc.class)).forEach(x -> {
if (nn(constructor))
throw new
BeanRuntimeException(c, "Multiple instances of '@Beanc' found.");
constructor = x;
@@ -565,13 +565,13 @@ public class BeanMeta<T> {
boolean noIgnoreTransients = ! ctx.isIgnoreTransientFields();
forEachClass(ClassInfo.of(c), stopClass, c2 -> {
// @formatter:off
- c2.forEachDeclaredField(
- x -> x.isNotStatic()
+ c2.getDeclaredFields().stream()
+ .filter(x -> x.isNotStatic()
&& (x.isNotTransient() || noIgnoreTransients)
&& (x.hasNoAnnotation(Transient.class) ||
noIgnoreTransients)
&& x.hasNoAnnotation(ctx, BeanIgnore.class)
- && (v.isVisible(x.inner()) ||
x.hasAnnotation(ctx, Beanp.class)),
- x -> l.add(x.inner())
+ && (v.isVisible(x.inner()) ||
x.hasAnnotation(ctx, Beanp.class)))
+ .forEach(x -> l.add(x.inner())
);
// @formatter:on
});
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 8b29d4ece4..152869c968 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
@@ -218,7 +218,7 @@ public class ClassMeta<T> implements Type {
namePropertyMethod = new
Setter.FieldSetter(x.accessible().inner());
});
- ci.forEachDeclaredField(x -> x.hasAnnotation(bc,
Example.class), x -> {
+ ci.getDeclaredFields().stream().filter(x ->
x.hasAnnotation(bc, Example.class)).forEach(x -> {
if (! (x.isStatic() &&
ci.isParentOf(x.getType().inner())))
throw new ClassMetaRuntimeException(c,
"@Example used on invalid field ''{0}''. Must be static and an instance of the
type.", x);
exampleField = x.accessible().inner();
@@ -242,7 +242,7 @@ public class ClassMeta<T> implements Type {
}
}
- ci.forEachDeclaredMethod(m -> m.hasAnnotation(bc,
Example.class), m -> {
+ ci.getDeclaredMethods().stream().filter(m ->
m.hasAnnotation(bc, Example.class)).forEach(m -> {
if (! (m.isStatic() &&
m.hasParameterTypesLenient(BeanSession.class) &&
ci.isParentOf(m.getReturnType().inner())))
throw new ClassMetaRuntimeException(c,
"@Example used on invalid method ''{0}''. Must be static and return an
instance of the declaring class.", m.toString());
m.setAccessible();
@@ -253,7 +253,7 @@ public class ClassMeta<T> implements Type {
isAbstract = ci.isAbstract() && ci.isNotPrimitive();
// Find constructor(String) method if present.
- ci.forEachPublicConstructor(cs -> cs.isPublic() &&
cs.isNotDeprecated(), cs -> {
+ ci.getPublicConstructors().stream().filter(cs ->
cs.isPublic() && cs.isNotDeprecated()).forEach(cs -> {
var params = cs.getParameters();
if (params.size() == (isMemberClass ? 1 : 0) &&
c != Object.class && ! isAbstract) {
noArgConstructor = cs;
@@ -267,10 +267,9 @@ public class ClassMeta<T> implements Type {
primitiveDefault = ci.getPrimitiveDefault();
// @formatter:off
- ci.forEachPublicMethod(
- MethodInfo::isNotDeprecated,
- x -> publicMethods.put(x.getSignature(),
x.inner())
- );
+ ci.getPublicMethods().stream()
+ .filter(MethodInfo::isNotDeprecated)
+ .forEach(x ->
publicMethods.put(x.getSignature(), x.inner()));
// @formatter:on
BeanFilter beanFilter = findBeanFilter(bc);
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreator.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreator.java
index 619234c97b..1fa4c03f03 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreator.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanCreator.java
@@ -285,7 +285,7 @@ public class BeanCreator<T> {
Match<MethodInfo> match = new Match<>();
// Look for static creator method.
- type.forEachPublicMethod(x -> isStaticCreateMethod(x),
x -> {
+ type.getPublicMethods().stream().filter(x ->
isStaticCreateMethod(x)).forEach(x -> {
found.set("STATIC_CREATOR");
if (hasAllParams(x))
match.add(x);
@@ -309,7 +309,7 @@ public class BeanCreator<T> {
// Look for public constructor.
Match<ConstructorInfo> constructorMatch = new Match<>();
- type.forEachPublicConstructor(x -> true, x -> {
+ type.getPublicConstructors().stream().forEach(x -> {
found.setIfEmpty("PUBLIC_CONSTRUCTOR");
if (hasAllParams(x))
constructorMatch.add(x);
@@ -317,7 +317,7 @@ public class BeanCreator<T> {
// Look for protected constructor.
if (! constructorMatch.isPresent()) {
-
type.forEachDeclaredConstructor(ConstructorInfo::isProtected, x -> {
+
type.getDeclaredConstructors().stream().filter(ConstructorInfo::isProtected).forEach(x
-> {
found.setIfEmpty("PROTECTED_CONSTRUCTOR");
if (hasAllParams(x))
constructorMatch.add(x);
@@ -331,7 +331,7 @@ public class BeanCreator<T> {
if (builder == null) {
// Look for static-builder/protected-constructor pair.
Value<T> value = Value.empty();
- type.forEachDeclaredConstructor(x ->
x.hasNumParameters(1) && x.isVisible(PROTECTED), x -> {
+ type.getDeclaredConstructors().stream().filter(x ->
x.hasNumParameters(1) && x.isVisible(PROTECTED)).forEach(x -> {
Class<?> pt =
x.getParameter(0).getParameterType().inner();
MethodInfo m = type.getPublicMethod(y ->
isStaticCreateMethod(y, pt));
if (nn(m)) {
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanMeta.java
index d8bebebf25..97ec86f252 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanMeta.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanMeta.java
@@ -53,7 +53,7 @@ public class RequestBeanMeta {
Builder apply(Class<?> c) {
this.cm = BeanContext.DEFAULT.getClassMeta(c);
apply(cm.getLastAnnotation(Request.class));
- cm.getInfo().forEachPublicMethod(x -> true, x -> {
+ cm.getInfo().getPublicMethods().stream().forEach(x -> {
String n = x.getSimpleName();
if (x.hasAnnotation(Header.class)) {
assertNoArgs(x, Header.class);
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanMeta.java
index 33e3859641..63e10ea0d8 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanMeta.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanMeta.java
@@ -81,7 +81,7 @@ public class ResponseBeanMeta {
Class<?> c = toClass(t);
this.cm = BeanContext.DEFAULT.getClassMeta(c);
ClassInfo ci = cm.getInfo();
- ci.forEachPublicMethod(x -> true, x -> {
+ ci.getPublicMethods().stream().forEach(x -> {
assertNoInvalidAnnotations(x, Query.class,
FormData.class);
if (x.hasAnnotation(Header.class)) {
assertNoArgs(x, Header.class);
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/SurrogateSwap.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/SurrogateSwap.java
index 95a71641ac..6b063664dc 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/SurrogateSwap.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/SurrogateSwap.java
@@ -54,7 +54,7 @@ public class SurrogateSwap<T,F> extends ObjectSwap<T,F> {
public static List<SurrogateSwap<?,?>> findObjectSwaps(Class<?> c,
BeanContext bc) {
List<SurrogateSwap<?,?>> l = new LinkedList<>();
var ci = ClassInfo.of(c);
- ci.forEachPublicConstructor(x -> x.hasNoAnnotation(bc,
BeanIgnore.class) && x.hasNumParameters(1) && x.isPublic(), x -> {
+ ci.getPublicConstructors().stream().filter(x ->
x.hasNoAnnotation(bc, BeanIgnore.class) && x.hasNumParameters(1) &&
x.isPublic()).forEach(x -> {
var pt = x.getParameter(0).getParameterType().inner();
if (! pt.equals(c.getDeclaringClass())) {
// Find the unswap method if there is one.
diff --git
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteMeta.java
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteMeta.java
index 1dedaca6f3..600d83be7d 100644
---
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteMeta.java
+++
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteMeta.java
@@ -91,7 +91,7 @@ public class RemoteMeta {
Map<Method,RemoteOperationMeta> operations = map();
var path2 = path;
- ci.forEachPublicMethod(x -> true, x ->
operations.put(x.inner(), new RemoteOperationMeta(path2, x.inner(), "GET")));
+ ci.getPublicMethods().stream().forEach(x ->
operations.put(x.inner(), new RemoteOperationMeta(path2, x.inner(), "GET")));
this.operations = u(operations);
this.headers = headers;
diff --git
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RrpcInterfaceMeta.java
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RrpcInterfaceMeta.java
index 98248cba98..28ced4863c 100644
---
a/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RrpcInterfaceMeta.java
+++
b/juneau-rest/juneau-rest-common/src/main/java/org/apache/juneau/http/remote/RrpcInterfaceMeta.java
@@ -61,7 +61,7 @@ public class RrpcInterfaceMeta {
ci.forEachAnnotation(Remote.class, x -> isNotEmpty(x.path()), x
-> path.set(trimSlashes(x.path())));
Map<Method,RrpcInterfaceMethodMeta> methods = map();
- ci.forEachPublicMethod(x -> true, x -> methods.put(x.inner(),
new RrpcInterfaceMethodMeta(uri, x.inner())));
+ ci.getPublicMethods().stream().forEach(x ->
methods.put(x.inner(), new RrpcInterfaceMethodMeta(uri, x.inner())));
Map<String,RrpcInterfaceMethodMeta> methodsByPath = map();
methods.values().forEach(x -> methodsByPath.put(x.getPath(),
x));
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 8151383fe2..f403acc196 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
@@ -202,10 +202,9 @@ public class RestContext extends Context {
var r = resource.get();
// @formatter:off
- ClassInfo.ofProxy(r).forEachAllMethodParentFirst(
- y -> y.hasAnnotation(annotation),
- y -> y.forEachAnnotation(annotation, predicate,
z -> x.put(y.getSignature(), y.accessible().inner()))
- );
+ ClassInfo.ofProxy(r).getAllMethodsParentFirst().stream()
+ .filter(y -> y.hasAnnotation(annotation))
+ .forEach(y -> y.forEachAnnotation(annotation,
predicate, z -> x.put(y.getSignature(), y.accessible().inner())));
// @formatter:on
var x2 = MethodList.of(x.values());
@@ -1769,7 +1768,7 @@ public class RestContext extends Context {
));
// @formatter:on
- rci.forEachMethod(x ->
x.hasAnnotation(RestInject.class), x -> {
+ rci.getMethods().stream().filter(x ->
x.hasAnnotation(RestInject.class)).forEach(x -> {
var rt = x.getReturnType().<Object>inner();
var name =
RestInjectAnnotation.name(x.getAnnotation(RestInject.class));
if (! (DELAYED_INJECTION.contains(rt) ||
DELAYED_INJECTION_NAMES.contains(name))) {
@@ -3778,9 +3777,9 @@ public class RestContext extends Context {
var map = CollectionUtils.<String,MethodInfo>map();
// @formatter:off
- ClassInfo.ofProxy(r).forEachAllMethodParentFirst(
- y -> y.hasAnnotation(RestInit.class) && !
y.hasArg(RestOpContext.Builder.class),
- y -> {
+ ClassInfo.ofProxy(r).getAllMethodsParentFirst().stream()
+ .filter(y -> y.hasAnnotation(RestInit.class) &&
! y.hasArg(RestOpContext.Builder.class))
+ .forEach(y -> {
var sig = y.getSignature();
if (! map.containsKey(sig))
map.put(sig, y.accessible());
@@ -4568,14 +4567,13 @@ public class RestContext extends Context {
var initMap = CollectionUtils.<String,MethodInfo>map();
// @formatter:off
-
ClassInfo.ofProxy(resource.get()).forEachAllMethodParentFirst(
- y -> y.hasAnnotation(RestInit.class) &&
y.hasArg(RestOpContext.Builder.class),
- y -> {
+
ClassInfo.ofProxy(resource.get()).getAllMethodsParentFirst().stream()
+ .filter(y -> y.hasAnnotation(RestInit.class) &&
y.hasArg(RestOpContext.Builder.class))
+ .forEach(y -> {
String sig = y.getSignature();
if (! initMap.containsKey(sig))
initMap.put(sig,
y.accessible());
- }
- );
+ });
// @formatter:on
for (var mi : rci.getPublicMethods()) {
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
index 92d400638d..7a41225c6f 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/debug/BasicDebugEnablement.java
@@ -83,9 +83,8 @@ public class BasicDebugEnablement extends DebugEnablement {
// Gather @RestOp(debug) settings.
// @formatter:off
- ci.forEachPublicMethod(
- x -> true,
- x -> {
+ ci.getPublicMethods().stream()
+ .forEach(x -> {
x.getAnnotationList(REST_OP_GROUP).forEachValue(
String.class,
"debug",
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/common/utils/PredicateUtils_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/common/utils/PredicateUtils_Test.java
index 6261584afb..d81f772231 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/common/utils/PredicateUtils_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/common/utils/PredicateUtils_Test.java
@@ -17,10 +17,14 @@
package org.apache.juneau.common.utils;
import static org.apache.juneau.common.utils.PredicateUtils.*;
+import static org.apache.juneau.common.reflect.ElementFlag.*;
import static org.junit.jupiter.api.Assertions.*;
+import java.util.*;
import java.util.function.*;
+import java.util.stream.*;
+import org.apache.juneau.common.reflect.*;
import org.junit.jupiter.api.*;
public class PredicateUtils_Test {
@@ -108,6 +112,127 @@ public class PredicateUtils_Test {
assertTrue(p.test("Alpha"));
assertFalse(p.test("Beta"));
}
+
+ // Test classes for ElementInfo filtering
+ public static class PublicClass {}
+ private static class PrivateClass {}
+ public static final class PublicFinalClass {}
+ @Deprecated
+ public static class DeprecatedPublicClass {}
+
+ @Test
+ void is_singleFlag_matches() {
+ List<ClassInfo> classes = Stream.of(PublicClass.class,
PrivateClass.class)
+ .map(ClassInfo::of)
+ .collect(Collectors.toList());
+
+ ClassInfo result = classes.stream()
+ .filter(is(PUBLIC))
+ .findFirst()
+ .orElse(null);
+
+ assertNotNull(result);
+ assertEquals(PublicClass.class.getName(), result.getName());
+ }
+
+ @Test
+ void is_singleFlag_noMatch() {
+ List<ClassInfo> classes = Stream.of(PublicClass.class)
+ .map(ClassInfo::of)
+ .collect(Collectors.toList());
+
+ ClassInfo result = classes.stream()
+ .filter(is(PRIVATE))
+ .findFirst()
+ .orElse(null);
+
+ assertNull(result);
+ }
+
+ @Test
+ void isAll_multipleFlags_matches() {
+ List<ClassInfo> classes = Stream.of(PublicClass.class,
PrivateClass.class, PublicFinalClass.class, DeprecatedPublicClass.class)
+ .map(ClassInfo::of)
+ .collect(Collectors.toList());
+
+ ClassInfo result = classes.stream()
+ .filter(isAll(PUBLIC, NOT_DEPRECATED))
+ .findFirst()
+ .orElse(null);
+
+ assertNotNull(result);
+ assertEquals(PublicClass.class.getName(), result.getName());
+ }
+
+ @Test
+ void isAll_multipleFlags_collectAll() {
+ List<ClassInfo> classes = Stream.of(PublicClass.class,
PrivateClass.class, PublicFinalClass.class)
+ .map(ClassInfo::of)
+ .collect(Collectors.toList());
+
+ List<ClassInfo> results = classes.stream()
+ .filter(isAll(PUBLIC, NOT_DEPRECATED))
+ .collect(Collectors.toList());
+
+ assertEquals(2, results.size());
+ assertTrue(results.stream().anyMatch(c ->
c.getName().equals(PublicClass.class.getName())));
+ assertTrue(results.stream().anyMatch(c ->
c.getName().equals(PublicFinalClass.class.getName())));
+ }
+
+ @Test
+ void isAll_noMatch() {
+ List<ClassInfo> classes = Stream.of(PublicClass.class,
PrivateClass.class)
+ .map(ClassInfo::of)
+ .collect(Collectors.toList());
+
+ ClassInfo result = classes.stream()
+ .filter(isAll(PUBLIC, FINAL))
+ .findFirst()
+ .orElse(null);
+
+ assertNull(result);
+ }
+
+ @Test
+ void isAny_multipleFlags_matchesFirst() {
+ List<ClassInfo> classes = Stream.of(PublicClass.class,
PrivateClass.class)
+ .map(ClassInfo::of)
+ .collect(Collectors.toList());
+
+ List<ClassInfo> results = classes.stream()
+ .filter(isAny(PUBLIC, PROTECTED))
+ .collect(Collectors.toList());
+
+ assertEquals(1, results.size());
+ assertEquals(PublicClass.class.getName(), results.get(0).getName());
+ }
+
+ @Test
+ void isAny_multipleFlags_matchesMultiple() {
+ List<ClassInfo> classes = Stream.of(PublicClass.class,
PrivateClass.class, PublicFinalClass.class)
+ .map(ClassInfo::of)
+ .collect(Collectors.toList());
+
+ List<ClassInfo> results = classes.stream()
+ .filter(isAny(PUBLIC, PRIVATE))
+ .collect(Collectors.toList());
+
+ assertEquals(3, results.size());
+ }
+
+ @Test
+ void isAny_noMatch() {
+ List<ClassInfo> classes = Stream.of(PublicClass.class)
+ .map(ClassInfo::of)
+ .collect(Collectors.toList());
+
+ ClassInfo result = classes.stream()
+ .filter(isAny(PRIVATE, PROTECTED))
+ .findFirst()
+ .orElse(null);
+
+ assertNull(result);
+ }
}