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 5847ffe ClassInfo refactoring.
5847ffe is described below
commit 5847ffe065506a81bd3f310bb180fc3170e874b8
Author: JamesBognar <[email protected]>
AuthorDate: Sat Jan 29 16:08:09 2022 -0500
ClassInfo refactoring.
---
.../java/org/apache/juneau/jena/RdfClassMeta.java | 4 +-
.../src/main/java/org/apache/juneau/BeanMeta.java | 5 +-
.../src/main/java/org/apache/juneau/ClassMeta.java | 13 +-
.../src/main/java/org/apache/juneau/Value.java | 16 ---
.../main/java/org/apache/juneau/cp/BeanStore.java | 13 --
.../main/java/org/apache/juneau/cp/Messages.java | 11 ++
.../java/org/apache/juneau/html/HtmlClassMeta.java | 11 +-
.../org/apache/juneau/html/HtmlParserSession.java | 4 +-
.../apache/juneau/html/HtmlSerializerSession.java | 4 +-
.../java/org/apache/juneau/http/HttpParts.java | 17 ++-
.../juneau/http/annotation/FormDataAnnotation.java | 10 +-
.../juneau/http/annotation/HeaderAnnotation.java | 9 +-
.../juneau/http/annotation/PathAnnotation.java | 10 +-
.../juneau/http/annotation/QueryAnnotation.java | 10 +-
.../juneau/http/remote/RrpcInterfaceMeta.java | 2 +-
.../org/apache/juneau/httppart/HttpPartSchema.java | 2 +-
.../juneau/httppart/bean/ResponseBeanMeta.java | 4 +-
.../java/org/apache/juneau/json/JsonClassMeta.java | 5 +-
.../juneau/jsonschema/JsonSchemaClassMeta.java | 2 +-
.../org/apache/juneau/reflect/AnnotationInfo.java | 24 ++++
.../java/org/apache/juneau/reflect/ClassInfo.java | 149 ++++++++++++---------
.../org/apache/juneau/reflect/ConstructorInfo.java | 17 ++-
.../java/org/apache/juneau/reflect/FieldInfo.java | 24 ++++
.../java/org/apache/juneau/reflect/MethodInfo.java | 91 +++++++++----
.../java/org/apache/juneau/reflect/Mutaters.java | 2 +-
.../java/org/apache/juneau/reflect/ParamInfo.java | 60 ++++++---
.../java/org/apache/juneau/swap/DefaultSwaps.java | 2 +-
.../juneau/urlencoding/UrlEncodingClassMeta.java | 2 +-
.../java/org/apache/juneau/xml/XmlClassMeta.java | 4 +-
.../java/org/apache/juneau/rest/RestContext.java | 10 +-
.../juneau/rest/annotation/RestAnnotation.java | 3 +-
.../org/apache/juneau/rest/arg/AttributeArg.java | 11 +-
.../apache/juneau/rest/servlet/RestServlet.java | 2 +-
.../rest/swagger/BasicSwaggerProviderSession.java | 60 ++++-----
.../apache/juneau/reflection/ClassInfoTest.java | 22 ---
.../apache/juneau/reflection/MethodInfoTest.java | 9 --
.../juneau/rest/annotation/Rest_Messages_Test.java | 14 --
37 files changed, 355 insertions(+), 303 deletions(-)
diff --git
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfClassMeta.java
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfClassMeta.java
index bf39ee2..e4e70b9 100644
---
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfClassMeta.java
+++
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfClassMeta.java
@@ -42,8 +42,8 @@ public class RdfClassMeta extends ExtendedClassMeta {
super(cm);
List<Rdf> rdfs = new ArrayList<>();
List<RdfSchema> schemas = new ArrayList<>();
- cm.getAnnotations(Rdf.class, x -> rdfs.add(x));
- cm.getAnnotations(RdfSchema.class, x -> schemas.add(x));
+ cm.getAnnotations(Rdf.class, x -> true, x -> rdfs.add(x));
+ cm.getAnnotations(RdfSchema.class, x -> true, x ->
schemas.add(x));
RdfCollectionFormat _collectionFormat =
RdfCollectionFormat.DEFAULT;
for (Rdf a : rdfs)
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 f7f712e..a86c540 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
@@ -24,7 +24,6 @@ import java.lang.reflect.*;
import java.util.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.collections.*;
-import org.apache.juneau.internal.*;
import org.apache.juneau.reflect.*;
/**
@@ -180,13 +179,13 @@ public class BeanMeta<T> {
bdClasses.a(beanFilter.getBeanDictionary());
Value<String> typeName = Value.empty();
- classMeta.getAnnotations(Bean.class, x ->
typeName.setIf(x.typeName(), StringUtils::isNotEmpty));
+ classMeta.getAnnotations(Bean.class, x ->
isNotEmpty(x.typeName()), x -> typeName.set(x.typeName()));
if (typeName.isPresent())
bdClasses.add(classMeta.innerClass);
this.beanRegistry = new BeanRegistry(ctx, null,
bdClasses.toArray(new Class<?>[bdClasses.size()]));
Value<String> typePropertyName = Value.empty();
- classMeta.getAnnotations(Bean.class, x ->
typePropertyName.setIf(x.typePropertyName(), StringUtils::isNotEmpty));
+ classMeta.getAnnotations(Bean.class, x ->
isNotEmpty(x.typePropertyName()), x ->
typePropertyName.set(x.typePropertyName()));
this.typePropertyName =
typePropertyName.orElseGet(()->ctx.getBeanTypePropertyName());
fluentSetters = (ctx.isFindFluentSetters() ||
(beanFilter != null && beanFilter.isFluentSetters()));
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 25217d8..278b499 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
@@ -2091,19 +2091,19 @@ public final class ClassMeta<T> implements Type {
}
/**
- * Consumes all annotations of the specified type defined on the
specified class or parent classes/interfaces in parent-to-child order.
+ * Consumes all matching annotations of the specified type defined on
the specified class or parent classes/interfaces in parent-to-child order.
*
- * @param a
- * The annotation to search for.
+ * @param a The annotation to search for.
+ * @param predicate The predicate.
* @param consumer The consumer of the annotations.
* @return This object.
*/
@SuppressWarnings("unchecked")
- public <A extends Annotation> ClassMeta<T> getAnnotations(Class<A> a,
Consumer<A> consumer) {
+ public <A extends Annotation> ClassMeta<T> getAnnotations(Class<A> a,
Predicate<A> predicate, Consumer<A> consumer) {
A[] array = (A[])annotationArrayMap.get(a);
if (array == null) {
if (beanContext == null) {
- info.getAnnotations(BeanContext.DEFAULT, a, x->
true, consumer);
+ info.getAnnotations(BeanContext.DEFAULT, a,
predicate, consumer);
return this;
}
List<A> l = new ArrayList<>();
@@ -2114,7 +2114,8 @@ public final class ClassMeta<T> implements Type {
annotationArrayMap.put(a, array);
}
for (A aa : array)
- consumer.accept(aa);
+ if (predicate.test(aa))
+ consumer.accept(aa);
return this;
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Value.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Value.java
index e5f9d0c..0d9e51c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Value.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Value.java
@@ -152,22 +152,6 @@ public class Value<T> {
}
/**
- * Sets the value if the specified predicate test passes.
- *
- * @param t The new value.
- * @param p The predicate to test the value against.
- * @return This object.
- */
- public Value<T> setIf(T t, Predicate<T> p) {
- if (p.test(t)) {
- this.t = t;
- if (listener != null)
- listener.onSet(t);
- }
- return this;
- }
-
- /**
* Returns the value.
*
* @return The value, or <jk>null</jk> if it is not set.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
index f2dd201..550ca09 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
@@ -267,19 +267,6 @@ public class BeanStore {
this.type = value;
return this;
}
-
- /**
- * Overrides the bean store type if the predicate test passes.
- *
- * @param value The bean store type.
- * @param predicate The predicate to test against.
- * @return This object.
- */
- public Builder typeIf(Class<? extends BeanStore> value,
Predicate<Class<? extends BeanStore>> predicate) {
- if (predicate.test(value))
- this.type = value;
- return this;
- }
}
//-----------------------------------------------------------------------------------------------------------------
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/Messages.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/Messages.java
index ac4edcd..763ed3f 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/Messages.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/Messages.java
@@ -301,6 +301,17 @@ public class Messages extends ResourceBundle {
return this;
}
+ /**
+ * Specifies a location of where to look for messages.
+ *
+ * @param bundlePath The bundle path.
+ * @return This object.
+ */
+ public Builder location(String bundlePath) {
+ this.locations.add(0, Tuple2.of(forClass, bundlePath));
+ return this;
+ }
+
// <FluentSetters>
@Override /* GENERATED - org.apache.juneau.BeanBuilder */
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlClassMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlClassMeta.java
index b654fdb..1c262c6 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlClassMeta.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlClassMeta.java
@@ -48,9 +48,12 @@ public class HtmlClassMeta extends ExtendedClassMeta {
Value<HtmlRender<?>> render = Value.empty();
Consumer<Html> c = x -> {
- noTables.setIf(x.noTables(), y -> y != false);
- noTableHeaders.setIf(x.noTableHeaders(), y -> y !=
false);
- format.setIf(x.format(), y -> y != HtmlFormat.HTML);
+ if (x.noTables())
+ noTables.set(true);
+ if (x.noTableHeaders())
+ noTableHeaders.set(true);
+ if (x.format() != HtmlFormat.HTML)
+ format.set(x.format());
if (x.render() != HtmlRender.class) {
try {
render.set(x.render().newInstance());
@@ -59,7 +62,7 @@ public class HtmlClassMeta extends ExtendedClassMeta {
}
}
};
- cm.getAnnotations(Html.class, c);
+ cm.getAnnotations(Html.class, x -> true, c);
this.noTables = noTables.orElse(false);
this.noTableHeaders = noTableHeaders.orElse(false);
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
index c40464e..2fe8544 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
@@ -476,8 +476,8 @@ public final class HtmlParserSession extends
XmlParserSession {
String name = getElementText(r);
if (beanType.hasAnnotation(HtmlLink.class)) {
Value<String> uriProperty = Value.empty(), nameProperty
= Value.empty();
- beanType.getAnnotations(HtmlLink.class, x ->
uriProperty.setIf(x.uriProperty(), StringUtils::isNotEmpty));
- beanType.getAnnotations(HtmlLink.class, x ->
nameProperty.setIf(x.nameProperty(), StringUtils::isNotEmpty));
+ beanType.getAnnotations(HtmlLink.class, x ->
isNotEmpty(x.uriProperty()), x -> uriProperty.set(x.uriProperty()));
+ beanType.getAnnotations(HtmlLink.class, x ->
isNotEmpty(x.nameProperty()), x -> nameProperty.set(x.nameProperty()));
BeanMap<T> m = newBeanMap(beanType.getInnerClass());
m.put(uriProperty.orElse(""), href);
m.put(nameProperty.orElse(""), name);
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
index 4ac4f4c..a4911cc 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
@@ -519,8 +519,8 @@ public class HtmlSerializerSession extends
XmlSerializerSession {
BeanMap m = toBeanMap(o);
if (aType.hasAnnotation(HtmlLink.class)) {
Value<String> uriProperty =
Value.empty(), nameProperty = Value.empty();
- aType.getAnnotations(HtmlLink.class, x
-> uriProperty.setIf(x.uriProperty(), StringUtils::isNotEmpty));
- aType.getAnnotations(HtmlLink.class, x
-> nameProperty.setIf(x.nameProperty(), StringUtils::isNotEmpty));
+ aType.getAnnotations(HtmlLink.class, x
-> isNotEmpty(x.uriProperty()), x -> uriProperty.set(x.uriProperty()));
+ aType.getAnnotations(HtmlLink.class, x
-> isNotEmpty(x.nameProperty()), x -> nameProperty.set(x.nameProperty()));
Object urlProp =
m.get(uriProperty.orElse(""));
Object nameProp =
m.get(nameProperty.orElse(""));
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 c7006cd..1760e0d 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
@@ -24,7 +24,6 @@ import org.apache.juneau.*;
import org.apache.juneau.http.header.*;
import org.apache.juneau.http.part.*;
import org.apache.juneau.httppart.*;
-import org.apache.juneau.internal.*;
import org.apache.juneau.reflect.*;
/**
@@ -421,29 +420,29 @@ public class HttpParts {
private static final Function<ClassMeta<?>,String> HEADER_NAME_FUNCTION
= x -> {
Value<String> n = Value.empty();
- Predicate<String> t = StringUtils::isNotEmpty;
-
x.getAnnotations(org.apache.juneau.http.annotation.Header.class, y ->
n.setIf(y.value(), t).setIf(y.name(), t));
+
x.getAnnotations(org.apache.juneau.http.annotation.Header.class, y ->
isNotEmpty(y.value()), y -> n.set(y.value()));
+
x.getAnnotations(org.apache.juneau.http.annotation.Header.class, y ->
isNotEmpty(y.name()), y -> n.set(y.name()));
return n.orElse(null);
};
private static final Function<ClassMeta<?>,String> QUERY_NAME_FUNCTION
= x -> {
Value<String> n = Value.empty();
- Predicate<String> t = StringUtils::isNotEmpty;
- x.getAnnotations(org.apache.juneau.http.annotation.Query.class,
y -> n.setIf(y.value(), t).setIf(y.name(), t));
+ x.getAnnotations(org.apache.juneau.http.annotation.Query.class,
y -> isNotEmpty(y.value()), y -> n.set(y.value()));
+ x.getAnnotations(org.apache.juneau.http.annotation.Query.class,
y -> isNotEmpty(y.name()), y -> n.set(y.name()));
return n.orElse(null);
};
private static final Function<ClassMeta<?>,String>
FORMDATA_NAME_FUNCTION = x -> {
Value<String> n = Value.empty();
- Predicate<String> t = StringUtils::isNotEmpty;
-
x.getAnnotations(org.apache.juneau.http.annotation.FormData.class, y ->
n.setIf(y.value(), t).setIf(y.name(), t));
+
x.getAnnotations(org.apache.juneau.http.annotation.FormData.class, y ->
isNotEmpty(y.value()), y -> n.set(y.value()));
+
x.getAnnotations(org.apache.juneau.http.annotation.FormData.class, y ->
isNotEmpty(y.name()), y -> n.set(y.name()));
return n.orElse(null);
};
private static final Function<ClassMeta<?>,String> PATH_NAME_FUNCTION =
x -> {
Value<String> n = Value.empty();
- Predicate<String> t = StringUtils::isNotEmpty;
- x.getAnnotations(org.apache.juneau.http.annotation.Path.class,
y -> n.setIf(y.value(), t).setIf(y.name(), t));
+ x.getAnnotations(org.apache.juneau.http.annotation.Path.class,
y -> isNotEmpty(y.value()), y -> n.set(y.value()));
+ x.getAnnotations(org.apache.juneau.http.annotation.Path.class,
y -> isNotEmpty(y.name()), y -> n.set(y.name()));
return n.orElse(null);
};
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/FormDataAnnotation.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/FormDataAnnotation.java
index 898b944..f979f80 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/FormDataAnnotation.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/FormDataAnnotation.java
@@ -12,16 +12,15 @@
//
***************************************************************************************************************************
package org.apache.juneau.http.annotation;
+import static org.apache.juneau.internal.StringUtils.*;
+
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;
import java.lang.annotation.*;
import java.lang.reflect.*;
-import java.util.function.*;
-
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.httppart.*;
-import org.apache.juneau.internal.*;
import org.apache.juneau.reflect.*;
import org.apache.juneau.svl.*;
@@ -91,9 +90,8 @@ public class FormDataAnnotation {
*/
public static Value<String> findName(ParamInfo pi) {
Value<String> n = Value.empty();
- Predicate<String> t = StringUtils::isNotEmpty;
- pi.getAnnotations(FormData.class, x -> n.setIf(x.value(),
t).setIf(x.name(), t));
- pi.getParameterType().getAnnotations(FormData.class, x ->
n.setIf(x.value(), t).setIf(x.name(), t));
+ pi.getAnnotations(FormData.class, x -> isNotEmpty(x.value()), x
-> n.set(x.value()));
+ pi.getAnnotations(FormData.class, x -> isNotEmpty(x.name()), x
-> n.set(x.name()));
return n;
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HeaderAnnotation.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HeaderAnnotation.java
index b7413e7..ca3b62c 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HeaderAnnotation.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/HeaderAnnotation.java
@@ -14,14 +14,14 @@ package org.apache.juneau.http.annotation;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;
+import static org.apache.juneau.internal.StringUtils.*;
+
import java.lang.annotation.*;
import java.lang.reflect.*;
-import java.util.function.*;
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.httppart.*;
-import org.apache.juneau.internal.*;
import org.apache.juneau.reflect.*;
import org.apache.juneau.svl.*;
@@ -91,9 +91,8 @@ public class HeaderAnnotation {
*/
public static Value<String> findName(ParamInfo pi) {
Value<String> n = Value.empty();
- Predicate<String> t = StringUtils::isNotEmpty;
- pi.getAnnotations(Header.class, x -> n.setIf(x.value(),
t).setIf(x.name(), t));
- pi.getParameterType().getAnnotations(Header.class, x ->
n.setIf(x.value(), t).setIf(x.name(), t));
+ pi.getAnnotations(Header.class, x -> isNotEmpty(x.value()), x
-> n.set(x.value()));
+ pi.getAnnotations(Header.class, x -> isNotEmpty(x.name()), x ->
n.set(x.name()));
return n;
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/PathAnnotation.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/PathAnnotation.java
index 5f22375..d501d15 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/PathAnnotation.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/PathAnnotation.java
@@ -14,14 +14,13 @@ package org.apache.juneau.http.annotation;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;
+import static org.apache.juneau.internal.StringUtils.*;
+
import java.lang.annotation.*;
import java.lang.reflect.*;
-import java.util.function.*;
-
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.httppart.*;
-import org.apache.juneau.internal.*;
import org.apache.juneau.reflect.*;
import org.apache.juneau.svl.*;
@@ -91,9 +90,8 @@ public class PathAnnotation {
*/
public static Value<String> findName(ParamInfo pi) {
Value<String> n = Value.empty();
- Predicate<String> t = StringUtils::isNotEmpty;
- pi.getAnnotations(Path.class, x -> n.setIf(x.value(),
t).setIf(x.name(), t));
- pi.getParameterType().getAnnotations(Path.class, x ->
n.setIf(x.value(), t).setIf(x.name(), t));
+ pi.getAnnotations(Path.class, x -> isNotEmpty(x.value()) , x ->
n.set(x.value()));
+ pi.getAnnotations(Path.class, x -> isNotEmpty(x.name()) , x ->
n.set(x.name()));
return n;
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/QueryAnnotation.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/QueryAnnotation.java
index 603f804..7d6f181 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/QueryAnnotation.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/QueryAnnotation.java
@@ -14,14 +14,13 @@ package org.apache.juneau.http.annotation;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;
+import static org.apache.juneau.internal.StringUtils.*;
+
import java.lang.annotation.*;
import java.lang.reflect.*;
-import java.util.function.*;
-
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.httppart.*;
-import org.apache.juneau.internal.*;
import org.apache.juneau.reflect.*;
import org.apache.juneau.svl.*;
@@ -91,9 +90,8 @@ public class QueryAnnotation {
*/
public static Value<String> findName(ParamInfo pi) {
Value<String> n = Value.empty();
- Predicate<String> t = StringUtils::isNotEmpty;
- pi.getAnnotations(Query.class, x -> n.setIf(x.value(),
t).setIf(x.name(), t));
- pi.getParameterType().getAnnotations(Query.class, x ->
n.setIf(x.value(), t).setIf(x.name(), t));
+ pi.getAnnotations(Query.class, x -> isNotEmpty(x.value()), x ->
n.set(x.value()));
+ pi.getAnnotations(Query.class, x -> isNotEmpty(x.name()), x ->
n.set(x.name()));
return n;
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/remote/RrpcInterfaceMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/remote/RrpcInterfaceMeta.java
index 38b9781..c98691d 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/remote/RrpcInterfaceMeta.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/remote/RrpcInterfaceMeta.java
@@ -53,7 +53,7 @@ public class RrpcInterfaceMeta {
Value<String> path = Value.of("");
ClassInfo ci = ClassInfo.of(c);
- ci.getAnnotations(Remote.class, x -> { if (!
x.path().isEmpty()) path.set(trimSlashes(x.path()));});
+ ci.getAnnotations(Remote.class, x -> isNotEmpty(x.path()), x ->
path.set(trimSlashes(x.path())));
AMap<Method,RrpcInterfaceMethodMeta> methods = AMap.create();
ci.getPublicMethods(
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java
index c9860db..7ebf180 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java
@@ -686,7 +686,7 @@ public class HttpPartSchema {
Builder apply(Class<? extends Annotation> c,
java.lang.reflect.Type t) {
if (t instanceof Class<?>) {
- ClassInfo.of((Class<?>)t).getAnnotations(c, x
-> apply(x));
+ ClassInfo.of((Class<?>)t).getAnnotations(c, x
-> true, x -> apply(x));
} else if (Value.isType(t)) {
apply(c, Value.getParameterType(t));
}
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 2859c21..4e3758f 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
@@ -55,8 +55,8 @@ public class ResponseBeanMeta {
return null;
Builder b = new Builder(annotations);
b.apply(ci.innerType());
- ci.getAnnotations(Response.class, x -> b.apply(x));
- ci.getAnnotations(StatusCode.class, x -> b.apply(x));
+ ci.getAnnotations(Response.class, x -> true, x -> b.apply(x));
+ ci.getAnnotations(StatusCode.class, x -> true, x -> b.apply(x));
return b.build();
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonClassMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonClassMeta.java
index ae3714f..3e0f601 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonClassMeta.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonClassMeta.java
@@ -12,8 +12,9 @@
//
***************************************************************************************************************************
package org.apache.juneau.json;
+import static org.apache.juneau.internal.StringUtils.*;
+
import org.apache.juneau.*;
-import org.apache.juneau.internal.*;
import org.apache.juneau.json.annotation.*;
/**
@@ -39,7 +40,7 @@ public class JsonClassMeta extends ExtendedClassMeta {
super(cm);
Value<String> wrapperAttr = Value.empty();
- cm.getAnnotations(Json.class, x ->
wrapperAttr.setIf(x.wrapperAttr(), StringUtils::isNotEmpty));
+ cm.getAnnotations(Json.class, x -> isNotEmpty(x.wrapperAttr()),
x -> wrapperAttr.set(x.wrapperAttr()));
this.wrapperAttr = wrapperAttr.orElse(null);
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaClassMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaClassMeta.java
index 6afe157..d4e6c19 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaClassMeta.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaClassMeta.java
@@ -49,7 +49,7 @@ public class JsonSchemaClassMeta extends ExtendedClassMeta {
throw runtimeException(e);
}
};
- cm.getAnnotations(Schema.class, c);
+ cm.getAnnotations(Schema.class, x -> true, c);
}
/**
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/AnnotationInfo.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/AnnotationInfo.java
index 042f2e0..c5a6152 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/AnnotationInfo.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/AnnotationInfo.java
@@ -15,6 +15,7 @@ package org.apache.juneau.reflect;
import java.lang.annotation.*;
import java.lang.reflect.*;
import java.util.*;
+import java.util.function.*;
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
@@ -245,6 +246,29 @@ public class AnnotationInfo<T extends Annotation> {
return (x != null && x.value().equals(group));
}
+ /**
+ * Returns <jk>true</jk> if this object passes the specified predicate
test.
+ *
+ * @param predicate The predicate.
+ * @return <jk>true</jk> if this object passes the specified predicate
test.
+ */
+ public boolean matches(Predicate<AnnotationInfo<?>> predicate) {
+ return predicate.test(this);
+ }
+
+ /**
+ * Consumes this object if the specified predicate test passes.
+ *
+ * @param predicate The predicate.
+ * @param consumer The consumer.
+ * @return This object.
+ */
+ public AnnotationInfo<?> accept(Predicate<AnnotationInfo<?>> predicate,
Consumer<AnnotationInfo<?>> consumer) {
+ if (matches(predicate))
+ consumer.accept(this);
+ return this;
+ }
+
@Override
public String toString() {
return SimpleJson.DEFAULT_READABLE.toString(toOMap());
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 b2b50b4..7723f16 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
@@ -284,6 +284,9 @@ public final class ClassInfo {
* <p>
* Does not include interfaces declared on parent classes.
*
+ * <p>
+ * Results are in the same order as Class.getInterfaces().
+ *
* @return
* An unmodifiable list of interfaces declared on this class.
* <br>Results are in the same order as {@link
Class#getInterfaces()}.
@@ -295,6 +298,9 @@ public final class ClassInfo {
/**
* Returns a list of interfaces defined on this class and superclasses.
*
+ * <p>
+ * Results are in child-to-parent order.
+ *
* @return
* An unmodifiable list of interfaces defined on this class and
superclasses.
* <br>Results are in child-to-parent order.
@@ -309,6 +315,9 @@ public final class ClassInfo {
* <p>
* Does not include interfaces.
*
+ * <p>
+ * Results are in child-to-parent order.
+ *
* @return An unmodifiable list including this class and all parent
classes.
* <br>Results are in child-to-parent order.
*/
@@ -319,6 +328,9 @@ public final class ClassInfo {
/**
* Returns a list including this class and all parent classes and
interfaces.
*
+ * <p>
+ * Results are classes-before-interfaces, then child-to-parent order.
+ *
* @return An unmodifiable list including this class and all parent
classes.
* <br>Results are ordered child-to-parent order with classes
listed before interfaces.
*/
@@ -329,16 +341,20 @@ public final class ClassInfo {
/**
* Returns the parent class or interface that matches the specified
predicate.
*
+ * <p>
+ * Results are classes-before-interfaces, then child-to-parent order.
+ *
* @param predicate The predicate to test for.
* @return The parent class or interface that matches the specified
predicate.
*/
- public ClassInfo getAllParent(Predicate<ClassInfo> predicate) {
+ public ClassInfo getAnyParent(Predicate<ClassInfo> predicate) {
for (ClassInfo ci : _getAllParents())
if (predicate.test(ci))
return ci;
return null;
}
+ /** Results are in child-to-parent order. */
ClassInfo[] _getInterfaces() {
if (interfaces == null) {
Set<ClassInfo> s = new LinkedHashSet<>();
@@ -353,6 +369,7 @@ public final class ClassInfo {
return interfaces;
}
+ /** Results are in the same order as Class.getInterfaces(). */
private ClassInfo[] _getDeclaredInterfaces() {
if (declaredInterfaces == null) {
Class<?>[] ii = c == null ? new Class[0] :
c.getInterfaces();
@@ -364,6 +381,7 @@ public final class ClassInfo {
return declaredInterfaces;
}
+ /** Results are in child-to-parent order. */
ClassInfo[] _getParents() {
if (parents == null) {
List<ClassInfo> l = new ArrayList<>();
@@ -377,6 +395,7 @@ public final class ClassInfo {
return parents;
}
+ /** Results are classes-before-interfaces, then child-to-parent order.
*/
private ClassInfo[] _getAllParents() {
if (allParents == null) {
ClassInfo[] a1 = _getParents(), a2 = _getInterfaces();
@@ -882,12 +901,40 @@ public final class ClassInfo {
* A list of all matching annotations found or an empty list if
none found.
*/
public <T extends Annotation> List<T> getAnnotations(Class<T> a) {
+ return getAnnotations(AnnotationProvider.DEFAULT, a);
+ }
+
+ /**
+ * Returns all annotations of the specified type defined on this or
parent classes/interfaces.
+ *
+ * <p>
+ * Returns the list in reverse (parent-to-child) order.
+ * @param ap The meta provider for looking up annotations on reflection
objects (classes, methods, fields, constructors).
+ * @param a
+ * The annotation to search for.
+ *
+ * @return
+ * A list of all matching annotations found or an empty list if
none found.
+ */
+ public <T extends Annotation> List<T> getAnnotations(AnnotationProvider
ap, Class<T> a) {
List<T> l = new ArrayList<>();
- getAnnotations(a, x -> l.add(x));
+ getAnnotations(ap, a, x-> true, x -> l.add(x));
return l;
}
/**
+ * Consumes all matching annotations of the specified type defined on
this or parent classes/interfaces.
+ *
+ * @param a The annotation to look for.
+ * @param predicate The predicate.
+ * @param consumer The consumer.
+ * @return This object.
+ */
+ public <T extends Annotation> ClassInfo getAnnotations(Class<T> a,
Predicate<T> predicate, Consumer<T> consumer) {
+ return getAnnotations(AnnotationProvider.DEFAULT, a, predicate,
consumer);
+ }
+
+ /**
* Finds and consumes the specified annotation on the specified class
and superclasses/interfaces to the specified consumer.
*
* <p>
@@ -921,27 +968,6 @@ public final class ClassInfo {
}
/**
- * Finds and appends the specified annotation on the specified class
and superclasses/interfaces to the specified
- * consumer.
- *
- * <p>
- * Annotations are appended in the following orders:
- * <ol>
- * <li>On the package of this class.
- * <li>On interfaces ordered child-to-parent.
- * <li>On parent classes ordered child-to-parent.
- * <li>On this class.
- * </ol>
- *
- * @param consumer The consumer of the annotations.
- * @param a The annotation to search for.
- * @return The same list.
- */
- public <T extends Annotation> ClassInfo getAnnotations(Class<T> a,
Consumer<T> consumer) {
- return getAnnotations(AnnotationProvider.DEFAULT, a, x-> true,
consumer);
- }
-
- /**
* Finds the annotation of the specified type defined on this class or
parent class/interface.
*
* <p>
@@ -993,20 +1019,6 @@ public final class ClassInfo {
}
/**
- * Returns the specified annotation only if it's been declared on this
class.
- *
- * <p>
- * More efficient than calling {@link Class#getAnnotation(Class)} since
it doesn't recursively look for the class up the parent chain.
- *
- * @param <T> The annotation class type.
- * @param a The annotation class.
- * @return The annotation, or <jk>null</jk> if not found.
- */
- public <T extends Annotation> T getDeclaredAnnotation(Class<T> a) {
- return a == null ? null : c.getDeclaredAnnotation(a);
- }
-
- /**
* Returns the specified annotation only if it's been declared on the
package of this class.
*
* @param <T> The annotation class type.
@@ -1026,25 +1038,7 @@ public final class ClassInfo {
* @return This object.
*/
public <T extends Annotation> T getAnnotation(Class<T> a, Predicate<T>
predicate) {
- return getAnnotation(predicate, a, AnnotationProvider.DEFAULT);
- }
-
- /**
- * Returns all annotations of the specified type defined on the
specified class or parent classes/interfaces.
- *
- * <p>
- * Returns the list in reverse (parent-to-child) order.
- * @param ap The meta provider for looking up annotations on reflection
objects (classes, methods, fields, constructors).
- * @param a
- * The annotation to search for.
- *
- * @return
- * A list of all matching annotations found or an empty list if
none found.
- */
- public <T extends Annotation> List<T> getAnnotations(AnnotationProvider
ap, Class<T> a) {
- List<T> l = new ArrayList<>();
- getAnnotations(ap, a, x-> true, x -> l.add(x));
- return l;
+ return getAnnotation(AnnotationProvider.DEFAULT, a, predicate);
}
/**
@@ -1062,7 +1056,7 @@ public final class ClassInfo {
* @return A new {@link AnnotationList} object on every call.
*/
public AnnotationList getAnnotationList() {
- return getAnnotationList(null);
+ return getAnnotationList(x -> true);
}
/**
@@ -1095,7 +1089,7 @@ public final class ClassInfo {
*/
public AnnotationList getAnnotationList(Predicate<AnnotationInfo<?>>
filter) {
AnnotationList l = new AnnotationList(filter);
- getAnnotationInfos(x -> l.add(x));
+ getAnnotationInfos(filter, x -> l.add(x));
return l;
}
@@ -1137,41 +1131,41 @@ public final class ClassInfo {
return null;
}
- private <T extends Annotation> T getAnnotation(Predicate<T> p, Class<T>
a, AnnotationProvider mp) {
+ private <T extends Annotation> T getAnnotation(AnnotationProvider ap,
Class<T> a, Predicate<T> p) {
T t2 = getPackageAnnotation(a);
if (t2 != null && p.test(t2))
return t2;
ClassInfo[] interfaces = _getInterfaces();
for (int i = interfaces.length-1; i >= 0; i--) {
- T o = mp.getDeclaredAnnotation(a,
interfaces[i].inner(), p);
+ T o = ap.getDeclaredAnnotation(a,
interfaces[i].inner(), p);
if (o != null)
return o;
}
ClassInfo[] parents = _getParents();
for (int i = parents.length-1; i >= 0; i--) {
- T o = mp.getDeclaredAnnotation(a, parents[i].inner(),
p);
+ T o = ap.getDeclaredAnnotation(a, parents[i].inner(),
p);
if (o != null)
return o;
}
return null;
}
- private void getAnnotationInfos(Consumer<AnnotationInfo<?>> consumer) {
+ private void getAnnotationInfos(Predicate<AnnotationInfo<?>> predicate,
Consumer<AnnotationInfo<?>> consumer) {
Package p = c.getPackage();
if (p != null)
for (Annotation a : p.getDeclaredAnnotations())
for (Annotation a2 : splitRepeated(a))
- consumer.accept(AnnotationInfo.of(p,
a2));
+ AnnotationInfo.of(p,
a2).accept(predicate, consumer);
ClassInfo[] interfaces = _getInterfaces();
for (int i = interfaces.length-1; i >= 0; i--)
for (Annotation a :
interfaces[i].c.getDeclaredAnnotations())
for (Annotation a2 : splitRepeated(a))
-
consumer.accept(AnnotationInfo.of(interfaces[i], a2));
+ AnnotationInfo.of(interfaces[i],
a2).accept(predicate, consumer);
ClassInfo[] parents = _getParents();
for (int i = parents.length-1; i >= 0; i--)
for (Annotation a :
parents[i].c.getDeclaredAnnotations())
for (Annotation a2 : splitRepeated(a))
-
consumer.accept(AnnotationInfo.of(parents[i], a2));
+ AnnotationInfo.of(parents[i],
a2).accept(predicate, consumer);
}
//-----------------------------------------------------------------------------------------------------------------
@@ -2256,9 +2250,32 @@ public final class ClassInfo {
}
//-----------------------------------------------------------------------------------------------------------------
- // Other
+ // Other methods
//-----------------------------------------------------------------------------------------------------------------
+ /**
+ * Returns <jk>true</jk> if this object passes the specified predicate
test.
+ *
+ * @param predicate The predicate.
+ * @return <jk>true</jk> if this object passes the specified predicate
test.
+ */
+ public boolean matches(Predicate<ClassInfo> predicate) {
+ return predicate.test(this);
+ }
+
+ /**
+ * Consumes this object if the specified predicate test passes.
+ *
+ * @param predicate The predicate.
+ * @param consumer The consumer.
+ * @return This object.
+ */
+ public ClassInfo accept(Predicate<ClassInfo> predicate,
Consumer<ClassInfo> consumer) {
+ if (matches(predicate))
+ consumer.accept(this);
+ return this;
+ }
+
@Override
public String toString() {
return t.toString();
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ConstructorInfo.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ConstructorInfo.java
index cfa7c64..4558a2e 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ConstructorInfo.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ConstructorInfo.java
@@ -135,16 +135,29 @@ public final class ConstructorInfo extends ExecutableInfo
implements Comparable<
//-----------------------------------------------------------------------------------------------------------------
/**
- * Returns <jk>true</jk> if this constructor passes the specified
predicate.
+ * Returns <jk>true</jk> if this object passes the specified predicate
test.
*
* @param predicate The predicate.
- * @return <jk>true</jk> if this constructor passes the specified
predicate.
+ * @return <jk>true</jk> if this object passes the specified predicate
test.
*/
public boolean matches(Predicate<ConstructorInfo> predicate) {
return predicate.test(this);
}
/**
+ * Consumes this object if the specified predicate test passes.
+ *
+ * @param predicate The predicate.
+ * @param consumer The consumer.
+ * @return This object.
+ */
+ public ConstructorInfo accept(Predicate<ConstructorInfo> predicate,
Consumer<ConstructorInfo> consumer) {
+ if (matches(predicate))
+ consumer.accept(this);
+ return this;
+ }
+
+ /**
* Returns <jk>true</jk> if this constructor can accept the specified
arguments in the specified order.
*
* @param args The arguments to check.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/FieldInfo.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/FieldInfo.java
index 81b87d0..f789423 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/FieldInfo.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/FieldInfo.java
@@ -16,6 +16,7 @@ import static org.apache.juneau.internal.ThrowableUtils.*;
import java.lang.annotation.*;
import java.lang.reflect.*;
+import java.util.function.*;
import org.apache.juneau.*;
@@ -396,6 +397,29 @@ public final class FieldInfo implements
Comparable<FieldInfo> {
//-----------------------------------------------------------------------------------------------------------------
/**
+ * Returns <jk>true</jk> if this object passes the specified predicate
test.
+ *
+ * @param predicate The predicate.
+ * @return <jk>true</jk> if this object passes the specified predicate
test.
+ */
+ public boolean matches(Predicate<FieldInfo> predicate) {
+ return predicate.test(this);
+ }
+
+ /**
+ * Consumes this object if the specified predicate test passes.
+ *
+ * @param predicate The predicate.
+ * @param consumer The consumer.
+ * @return This object.
+ */
+ public FieldInfo accept(Predicate<FieldInfo> predicate,
Consumer<FieldInfo> consumer) {
+ if (matches(predicate))
+ consumer.accept(this);
+ return this;
+ }
+
+ /**
* Returns the type of this field.
*
* @return The type of this field.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/MethodInfo.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/MethodInfo.java
index 262b90c..33dc392 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/MethodInfo.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/MethodInfo.java
@@ -103,16 +103,6 @@ public final class MethodInfo extends ExecutableInfo
implements Comparable<Metho
//-----------------------------------------------------------------------------------------------------------------
/**
- * Returns <jk>true</jk> if this method passes the specified predicate.
- *
- * @param predicate The predicate.
- * @return <jk>true</jk> if this method passes the specified predicate.
- */
- public boolean matches(Predicate<MethodInfo> predicate) {
- return predicate.test(this);
- }
-
- /**
* Returns <jk>true</jk> if this constructor can accept the specified
arguments in the specified order.
*
* @param args The arguments to check.
@@ -259,7 +249,7 @@ public final class MethodInfo extends ExecutableInfo
implements Comparable<Metho
* @return <jk>true</jk> if the specified annotation is present on this
method.
*/
public final boolean hasAnnotation(AnnotationProvider ap, Class<?
extends Annotation> a) {
- for (Method m2 : _getMatching())
+ for (Method m2 : _getMatching())
if (ap.getAnnotation(a, m2, x -> true) != null)
return true;
return false;
@@ -297,30 +287,33 @@ public final class MethodInfo extends ExecutableInfo
implements Comparable<Metho
* and the return type on the method.
* <br>Results are parent-to-child ordered.
*
- * @param a
- * The annotation to search for.
- * @return
- * A list of all matching annotations found or an empty list if
none found.
+ * @param a The annotation to search for.
+ * @return A list of all matching annotations found or an empty list if
none found.
*/
public <T extends Annotation> List<T> getAnnotations(Class<T> a) {
- return appendAnnotations(new ArrayList<>(), a);
+ return getAnnotations(AnnotationProvider.DEFAULT, a);
}
/**
- * Finds and appends the specified annotation on the specified class
and superclasses/interfaces to the specified
- * list.
+ * Returns all annotations of the specified type defined on the
specified method.
*
- * @param l The list of annotations.
- * @param a The annotation.
- * @return The same list.
+ * <p>
+ * Searches all methods with the same signature on the parent classes
or interfaces
+ * and the return type on the method.
+ * <br>Results are parent-to-child ordered.
+ *
+ * @param ap The annotation provider.
+ * @param a The annotation to search for.
+ * @return A list of all matching annotations found or an empty
list if none found.
*/
- public <T extends Annotation> List<T> appendAnnotations(List<T> l,
Class<T> a) {
- getAnnotations(a, x -> l.add(x));
+ public <T extends Annotation> List<T> getAnnotations(AnnotationProvider
ap, Class<T> a) {
+ List<T> l = new ArrayList<>();
+ getAnnotations(ap, a, x -> true, x -> l.add(x));
return l;
}
/**
- * Consumes all annotations of the specified type defined on the
specified method.
+ * Consumes all matching annotations of the specified type defined on
this method.
*
* <p>
* Searches all methods with the same signature on the parent classes
or interfaces
@@ -328,17 +321,36 @@ public final class MethodInfo extends ExecutableInfo
implements Comparable<Metho
* <br>Results are parent-to-child ordered.
*
* @param a The annotation to search for.
+ * @param predicate The predicate.
* @param consumer The consumer of the annotation.
* @return This object.
*/
+ public <T extends Annotation> MethodInfo getAnnotations(Class<T> a,
Predicate<T> predicate, Consumer<T> consumer) {
+ return getAnnotations(AnnotationProvider.DEFAULT, a, predicate,
consumer);
+ }
+
+ /**
+ * Consumes all annotations of the specified type defined on this
method.
+ *
+ * <p>
+ * Searches all methods with the same signature on the parent classes
or interfaces
+ * and the return type on the method.
+ * <br>Results are parent-to-child ordered.
+ *
+ * @param ap The annotation provider.
+ * @param a The annotation.
+ * @param predicate The predicate.
+ * @param consumer The consumer.
+ * @return This object.
+ */
@SuppressWarnings("unchecked")
- public <T extends Annotation> MethodInfo getAnnotations(Class<T> a,
Consumer<T> consumer) {
- declaringClass.getAnnotations(a, consumer);
+ public <T extends Annotation> MethodInfo
getAnnotations(AnnotationProvider ap, Class<T> a, Predicate<T> predicate,
Consumer<T> consumer) {
+ declaringClass.getAnnotations(ap, a, predicate, consumer);
for (Method m2 : getMatchingParentFirst())
for (Annotation a2 : m2.getDeclaredAnnotations())
- if (a.isInstance(a2))
+ if (a.isInstance(a2) && predicate.test((T)a2))
consumer.accept((T)a2);
-
getReturnType().unwrap(Value.class,Optional.class).getAnnotations(a, consumer);
+
getReturnType().unwrap(Value.class,Optional.class).getAnnotations(ap, a,
predicate, consumer);
return this;
}
@@ -541,6 +553,29 @@ public final class MethodInfo extends ExecutableInfo
implements Comparable<Metho
//-----------------------------------------------------------------------------------------------------------------
/**
+ * Returns <jk>true</jk> if this object passes the specified predicate
test.
+ *
+ * @param predicate The predicate.
+ * @return <jk>true</jk> if this object passes the specified predicate
test.
+ */
+ public boolean matches(Predicate<MethodInfo> predicate) {
+ return predicate.test(this);
+ }
+
+ /**
+ * Consumes this object if the specified predicate test passes.
+ *
+ * @param predicate The predicate.
+ * @param consumer The consumer.
+ * @return This object.
+ */
+ public MethodInfo accept(Predicate<MethodInfo> predicate,
Consumer<MethodInfo> consumer) {
+ if (matches(predicate))
+ consumer.accept(this);
+ return this;
+ }
+
+ /**
* Shortcut for calling the invoke method on the underlying method.
*
* @param obj the object the underlying method is invoked from.
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 578ba7f..6939922 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
@@ -151,7 +151,7 @@ public class Mutaters {
ClassInfo ici = ClassInfo.of(ic), oci = ClassInfo.of(oc);
- ClassInfo pic = ici.getAllParent(x -> m.get(x.inner()) != null);
+ ClassInfo pic = ici.getAnyParent(x -> m.get(x.inner()) != null);
if (pic != null)
return m.get(pic.inner());
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ParamInfo.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ParamInfo.java
index add7ed2..205462b 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ParamInfo.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ParamInfo.java
@@ -186,11 +186,13 @@ public final class ParamInfo {
* @return A list of all matching annotations found or an empty list if
none found.
*/
public <T extends Annotation> List<T> getAnnotations(Class<T> a) {
- return appendAnnotations(new ArrayList<>(), a, true);
+ List<T> l = new ArrayList<>();
+ getAnnotations(AnnotationProvider.DEFAULT, a, true, x -> true,
x -> l.add(x));
+ return l;
}
/**
- * Consumes all annotations of the specified type defined on this
method parameter.
+ * Consumes all matching annotations of the specified type defined on
this parameter.
*
* <p>
* Searches all methods with the same signature on the parent classes
or interfaces
@@ -199,11 +201,12 @@ public final class ParamInfo {
* Results are in parent-to-child order.
*
* @param a The annotation to search for.
+ * @param predicate The predicate.
* @param consumer The consumer for the annotations.
* @return This object.
*/
- public <T extends Annotation> ParamInfo getAnnotations(Class<T> a,
Consumer<T> consumer) {
- return getAnnotations(a, true, consumer);
+ public <T extends Annotation> ParamInfo getAnnotations(Class<T> a,
Predicate<T> predicate, Consumer<T> consumer) {
+ return getAnnotations(AnnotationProvider.DEFAULT, a, true,
predicate, consumer);
}
/**
@@ -223,42 +226,42 @@ public final class ParamInfo {
return getAnnotation(a, true, predicate);
}
- private <T extends Annotation> List<T> appendAnnotations(List<T> l,
Class<T> a, boolean parentFirst) {
- getAnnotations(a, parentFirst, x -> l.add(x));
- return l;
- }
+// private <T extends Annotation> List<T> appendAnnotations(List<T> l,
Class<T> a, boolean parentFirst) {
+// getAnnotations(AnnotationProvider.DEFAULT, a, parentFirst, x ->
true, x -> l.add(x));
+// return l;
+// }
@SuppressWarnings("unchecked")
- private <T extends Annotation> ParamInfo getAnnotations(Class<T> a,
boolean parentFirst, Consumer<T> consumer) {
+ private <T extends Annotation> ParamInfo
getAnnotations(AnnotationProvider ap, Class<T> a, boolean parentFirst,
Predicate<T> predicate, Consumer<T> consumer) {
if (eInfo.isConstructor) {
ClassInfo ci =
eInfo.getParamType(index).unwrap(Value.class,Optional.class);
Annotation[] annotations =
eInfo.getParameterAnnotations(index);
if (parentFirst) {
- ci.getAnnotations(a, consumer);
+ ci.getAnnotations(ap, a, predicate, consumer);
for (Annotation a2 : annotations)
- if (a.isInstance(a2))
+ if (a.isInstance(a2) &&
predicate.test((T)a2))
consumer.accept((T)a2);
} else {
for (Annotation a2 : annotations)
- if (a.isInstance(a2))
+ if (a.isInstance(a2) &&
predicate.test((T)a2))
consumer.accept((T)a2);
- ci.getAnnotations(a, consumer);
+ ci.getAnnotations(ap, a, predicate, consumer);
}
} else {
MethodInfo mi = (MethodInfo)eInfo;
ClassInfo ci =
eInfo.getParamType(index).unwrap(Value.class,Optional.class);
if (parentFirst) {
- ci.getAnnotations(a, consumer);
+ ci.getAnnotations(ap, a, predicate, consumer);
for (Method m2 : mi.getMatchingParentFirst())
for (Annotation a2 :
m2.getParameterAnnotations()[index])
- if (a.isInstance(a2))
+ if (a.isInstance(a2) &&
predicate.test((T)a2))
consumer.accept((T)a2);
} else {
for (Method m2 : mi.getMatching())
for (Annotation a2 :
m2.getParameterAnnotations()[index])
- if (a.isInstance(a2))
+ if (a.isInstance(a2) &&
predicate.test((T)a2))
consumer.accept((T)a2);
- ci.getAnnotations(a, consumer);
+ ci.getAnnotations(ap, a, predicate, consumer);
}
}
return this;
@@ -319,6 +322,29 @@ public final class ParamInfo {
//-----------------------------------------------------------------------------------------------------------------
/**
+ * Returns <jk>true</jk> if this object passes the specified predicate
test.
+ *
+ * @param predicate The predicate.
+ * @return <jk>true</jk> if this object passes the specified predicate
test.
+ */
+ public boolean matches(Predicate<ParamInfo> predicate) {
+ return predicate.test(this);
+ }
+
+ /**
+ * Consumes this object if the specified predicate test passes.
+ *
+ * @param predicate The predicate.
+ * @param consumer The consumer.
+ * @return This object.
+ */
+ public ParamInfo accept(Predicate<ParamInfo> predicate,
Consumer<ParamInfo> consumer) {
+ if (matches(predicate))
+ consumer.accept(this);
+ return this;
+ }
+
+ /**
* Returns <jk>true</jk> if the parameter type is an exact match for
the specified class.
*
* @param c The type to check.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/DefaultSwaps.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/DefaultSwaps.java
index ce112ee..a4d30e3 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/DefaultSwaps.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swap/DefaultSwaps.java
@@ -65,7 +65,7 @@ public class DefaultSwaps {
* @return The matched swap, or <jk>null</jk> if it couldn't be found.
*/
public static ObjectSwap<?,?> find(ClassInfo ci) {
- ClassInfo ci2 = ci.getAllParent(x -> SWAPS.get(x.inner()) !=
null);
+ ClassInfo ci2 = ci.getAnyParent(x -> SWAPS.get(x.inner()) !=
null);
return ci2 == null ? null : SWAPS.get(ci2.inner());
}
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingClassMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingClassMeta.java
index 0f19f5f..782dbcd 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingClassMeta.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingClassMeta.java
@@ -37,7 +37,7 @@ public class UrlEncodingClassMeta extends ExtendedClassMeta {
super(cm);
Value<Boolean> expandedParams = Value.empty();
- cm.getAnnotations(UrlEncoding.class, x ->
expandedParams.setIf(x.expandedParams(), y -> y == true));
+ cm.getAnnotations(UrlEncoding.class, x -> x.expandedParams(), x
-> expandedParams.set(true));
this.expandedParams = expandedParams.orElse(false);
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlClassMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlClassMeta.java
index 52b24a8..f283775 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlClassMeta.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlClassMeta.java
@@ -43,8 +43,8 @@ public class XmlClassMeta extends ExtendedClassMeta {
List<Xml> xmls = new ArrayList<>();
List<XmlSchema> schemas = new ArrayList<>();
if (cm != null) {
- cm.getAnnotations(Xml.class, x -> xmls.add(x));
- cm.getAnnotations(XmlSchema.class, x -> schemas.add(x));
+ cm.getAnnotations(Xml.class, x -> true, x ->
xmls.add(x));
+ cm.getAnnotations(XmlSchema.class, x -> true, x ->
schemas.add(x));
}
this.namespace = XmlUtils.findNamespace(xmls, schemas);
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 c2d4881..f536171 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
@@ -172,7 +172,7 @@ public class RestContext extends Context {
public static Builder create(Class<?> resourceClass, RestContext
parentContext, ServletConfig servletConfig) throws ServletException {
Value<Class<? extends Builder>> v = Value.of(Builder.class);
- ClassInfo.ofc(resourceClass).getAnnotations(Rest.class, x ->
v.setIf(x.builder(), x2 -> x2 != Builder.Null.class));
+ ClassInfo.ofc(resourceClass).getAnnotations(Rest.class, x ->
x.builder() != Builder.Null.class, x -> v.set(x.builder()));
if (v.get() == Builder.class)
return new Builder(resourceClass, parentContext,
servletConfig);
@@ -583,7 +583,7 @@ public class RestContext extends Context {
);
// Apply @Rest(beanStore).
- ClassInfo.of(resourceClass).getAnnotations(Rest.class,
x -> v.get().typeIf(x.beanStore(), y -> y != BeanStore.Null.class));
+ ClassInfo.of(resourceClass).getAnnotations(Rest.class,
x -> x.beanStore() != BeanStore.Null.class, x -> v.get().type(x.beanStore()));
// Replace with builder from: public [static]
BeanStore.Builder createBeanStore(<args>)
v.get().build()
@@ -864,11 +864,7 @@ public class RestContext extends Context {
// Find our config file. It's the last non-empty
@RestResource(config).
VarResolver vr =
beanStore.getBean(VarResolver.class).orElseThrow(()->runtimeException("VarResolver
not found."));
Value<String> cfv = Value.empty();
- Consumer<Rest> consumer = x -> {
- if (! x.config().isEmpty())
- cfv.set(vr.resolve(x.config()));
- };
- ClassInfo.of(resourceClass).getAnnotations(Rest.class,
consumer);
+ ClassInfo.of(resourceClass).getAnnotations(Rest.class,
x -> isNotEmpty(x.config()), x -> cfv.set(vr.resolve(x.config())));
String cf = cfv.orElse("");
// If not specified or value is set to SYSTEM_DEFAULT,
use system default config.
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
index d6307b6..fd16ec2 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
@@ -1073,7 +1073,6 @@ public class RestAnnotation {
@Override
public void apply(AnnotationInfo<Rest> ai, RestContext.Builder
b) {
Rest a = ai.getAnnotation();
- ClassInfo c = ai.getClassOn();
classes(a.serializers()).ifPresent(x ->
b.serializers().add(x));
classes(a.parsers()).ifPresent(x -> b.parsers().add(x));
@@ -1095,7 +1094,7 @@ public class RestAnnotation {
string(a.uriAuthority()).ifPresent(x ->
b.uriAuthority(x));
string(a.uriRelativity()).map(UriRelativity::valueOf).ifPresent(x ->
b.uriRelativity(x));
string(a.uriResolution()).map(UriResolution::valueOf).ifPresent(x ->
b.uriResolution(x));
- b.messages().location(c.inner(),
string(a.messages()).orElse(null));
+
b.messages().location(string(a.messages()).orElse(null));
type(a.fileFinder()).ifPresent(x ->
b.fileFinder().type(x));
type(a.staticFiles()).ifPresent(x ->
b.staticFiles().type(x));
string(a.path()).ifPresent(x -> b.path(x));
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/AttributeArg.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/AttributeArg.java
index 927f4d7..ceca71c 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/AttributeArg.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/AttributeArg.java
@@ -12,8 +12,9 @@
//
***************************************************************************************************************************
package org.apache.juneau.rest.arg;
+import static org.apache.juneau.internal.StringUtils.*;
+
import org.apache.juneau.*;
-import org.apache.juneau.internal.*;
import org.apache.juneau.reflect.*;
import org.apache.juneau.rest.*;
import org.apache.juneau.rest.annotation.*;
@@ -66,12 +67,8 @@ public class AttributeArg implements RestOpArg {
private String getName(ParamInfo paramInfo) {
Value<String> n = Value.empty();
- for (Attr h : paramInfo.getAnnotations(Attr.class))
- n.setIf(h.name(),
StringUtils::isNotEmpty).setIf(h.value(), StringUtils::isNotEmpty);
- paramInfo.getParameterType().getAnnotations(Attr.class, x -> {
- n.setIf(x.name(), StringUtils::isNotEmpty);
- n.setIf(x.value(), StringUtils::isNotEmpty);
- });
+ paramInfo.getAnnotations(Attr.class, x -> isNotEmpty(x.name()),
x -> n.set(x.name()));
+ paramInfo.getAnnotations(Attr.class, x ->
isNotEmpty(x.value()), x -> n.set(x.value()));
if (n.isEmpty())
throw new ArgException(paramInfo, "@Attr used without
name or value");
return n.get();
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestServlet.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestServlet.java
index 62e7137..f362543 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestServlet.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/servlet/RestServlet.java
@@ -130,7 +130,7 @@ public abstract class RestServlet extends HttpServlet {
return context.getFullPath();
ClassInfo ci = ClassInfo.of(getClass());
Value<String> path = Value.empty();
- ci.getAnnotations(Rest.class, x ->
path.setIf(trimSlashes(x.path()), StringUtils::isNotEmpty));
+ ci.getAnnotations(Rest.class, x -> isNotEmpty(x.path()), x ->
path.set(trimSlashes(x.path())));
return path.orElse("");
}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProviderSession.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProviderSession.java
index a0018b9..8f11259 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProviderSession.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProviderSession.java
@@ -101,7 +101,7 @@ public class BasicSwaggerProviderSession {
omSwagger = new OMap();
// Combine it with @Rest(swagger)
- for (Rest rr : rci.getAnnotations(Rest.class)) {
+ for (Rest rr : rci.getAnnotations(context, Rest.class)) {
OMap sInfo = omSwagger.getMap("info", true);
@@ -320,10 +320,8 @@ public class BasicSwaggerProviderSession {
if (mpi.hasAnnotation(Body.class) ||
pt.hasAnnotation(Body.class)) {
OMap param = paramMap.getMap(BODY +
".body", true).a("in", BODY);
OMap schema =
getSchema(param.getMap("schema"), type, bs);
- pt.getAnnotations(Schema.class, x ->
merge(schema, x));
- mpi.getAnnotations(Schema.class, x ->
merge(schema, x));
- pt.getAnnotations(Body.class, x ->
merge(schema, x.schema()));
- mpi.getAnnotations(Body.class, x ->
merge(schema, x.schema()));
+ mpi.getAnnotations(Schema.class, x ->
true, x -> merge(schema, x));
+ mpi.getAnnotations(Body.class, x ->
true, x -> merge(schema, x.schema()));
pushupSchemaFields(BODY, param, schema);
param.appendIf(true, true, true,
"schema", schema);
param.putIfAbsent("required", true);
@@ -332,40 +330,32 @@ public class BasicSwaggerProviderSession {
} else if (mpi.hasAnnotation(Query.class) ||
pt.hasAnnotation(Query.class)) {
String name =
QueryAnnotation.findName(mpi).orElse(null);
OMap param = paramMap.getMap(QUERY +
"." + name, true).a("name", name).a("in", QUERY);
- pt.getAnnotations(Schema.class, x ->
merge(param, x));
- pt.getAnnotations(Query.class, x ->
merge(param, x.schema()));
- mpi.getAnnotations(Schema.class, x ->
merge(param, x));
- mpi.getAnnotations(Query.class, x ->
merge(param, x.schema()));
+ mpi.getAnnotations(Schema.class, x ->
true, x -> merge(param, x));
+ mpi.getAnnotations(Query.class, x ->
true, x -> merge(param, x.schema()));
pushupSchemaFields(QUERY, param,
getSchema(param.getMap("schema"), type, bs));
addParamExample(sm, param, QUERY, type);
} else if (mpi.hasAnnotation(FormData.class) ||
pt.hasAnnotation(FormData.class)) {
String name =
FormDataAnnotation.findName(mpi).orElse(null);
OMap param = paramMap.getMap(FORM_DATA
+ "." + name, true).a("name", name).a("in", FORM_DATA);
- pt.getAnnotations(Schema.class, x ->
merge(param, x));
- pt.getAnnotations(FormData.class, x ->
merge(param, x.schema()));
- mpi.getAnnotations(Schema.class, x ->
merge(param, x));
- mpi.getAnnotations(FormData.class, x ->
merge(param, x.schema()));
+ mpi.getAnnotations(Schema.class, x ->
true, x -> merge(param, x));
+ mpi.getAnnotations(FormData.class, x ->
true, x -> merge(param, x.schema()));
pushupSchemaFields(FORM_DATA, param,
getSchema(param.getMap("schema"), type, bs));
addParamExample(sm, param, FORM_DATA,
type);
} else if (mpi.hasAnnotation(Header.class) ||
pt.hasAnnotation(Header.class)) {
String name =
HeaderAnnotation.findName(mpi).orElse(null);
OMap param = paramMap.getMap(HEADER +
"." + name, true).a("name", name).a("in", HEADER);
- pt.getAnnotations(Schema.class, x ->
merge(param, x));
- pt.getAnnotations(Header.class, x ->
merge(param, x.schema()));
- mpi.getAnnotations(Schema.class, x ->
merge(param, x));
- mpi.getAnnotations(Header.class, x ->
merge(param, x.schema()));
+ mpi.getAnnotations(Schema.class, x ->
true, x -> merge(param, x));
+ mpi.getAnnotations(Header.class, x ->
true, x -> merge(param, x.schema()));
pushupSchemaFields(HEADER, param,
getSchema(param.getMap("schema"), type, bs));
addParamExample(sm, param, HEADER,
type);
} else if (mpi.hasAnnotation(Path.class) ||
pt.hasAnnotation(Path.class)) {
String name =
PathAnnotation.findName(mpi).orElse(null);
OMap param = paramMap.getMap(PATH + "."
+ name, true).a("name", name).a("in", PATH);
- pt.getAnnotations(Schema.class, x ->
merge(param, x));
- pt.getAnnotations(Path.class, x ->
merge(param, x.schema()));
- mpi.getAnnotations(Schema.class, x ->
merge(param, x));
- mpi.getAnnotations(Path.class, x ->
merge(param, x.schema()));
+ mpi.getAnnotations(Schema.class, x ->
true, x -> merge(param, x));
+ mpi.getAnnotations(Path.class, x ->
true, x -> merge(param, x.schema()));
pushupSchemaFields(PATH, param,
getSchema(param.getMap("schema"), type, bs));
addParamExample(sm, param, PATH, type);
param.putIfAbsent("required", true);
@@ -379,15 +369,15 @@ public class BasicSwaggerProviderSession {
for (ClassInfo eci : mi.getExceptionTypes()) {
if (eci.hasAnnotation(Response.class)) {
- List<Response> la =
eci.getAnnotations(Response.class);
- List<StatusCode> la2 =
eci.getAnnotations(StatusCode.class);
+ List<Response> la =
eci.getAnnotations(context, Response.class);
+ List<StatusCode> la2 =
eci.getAnnotations(context, StatusCode.class);
Set<Integer> codes = getCodes(la2, 500);
for (Response a : la) {
for (Integer code : codes) {
OMap om =
responses.getMap(String.valueOf(code), true);
merge(om, a);
OMap schema =
getSchema(om.getMap("schema"), m.getGenericReturnType(), bs);
-
eci.getAnnotations(Schema.class, x -> merge(schema, x));
+
eci.getAnnotations(Schema.class, x -> true, x -> merge(schema, x));
pushupSchemaFields(RESPONSE, om, schema);
om.appendIf(true, true,
true, "schema", schema);
}
@@ -402,8 +392,8 @@ public class BasicSwaggerProviderSession {
String ha = a.name();
for (Integer code :
codes) {
OMap header =
responses.getMap(String.valueOf(code), true).getMap("headers", true).getMap(ha,
true);
-
ecmi.getAnnotations(Schema.class, x -> merge(header, x));
-
ecmi.getReturnType().unwrap(Value.class,Optional.class).getAnnotations(Schema.class,
x -> merge(header, x));
+
ecmi.getAnnotations(context, Schema.class, x-> true, x -> merge(header, x));
+
ecmi.getReturnType().unwrap(Value.class,Optional.class).getAnnotations(Schema.class,
x -> true, x -> merge(header, x));
pushupSchemaFields(RESPONSE_HEADER, header, getSchema(header.getMap("schema"),
ecmi.getReturnType().unwrap(Value.class,Optional.class).innerType(), bs));
}
}
@@ -412,15 +402,15 @@ public class BasicSwaggerProviderSession {
}
if (mi.hasAnnotation(Response.class) ||
mi.getReturnType().unwrap(Value.class,Optional.class).hasAnnotation(Response.class))
{
- List<Response> la =
mi.getAnnotations(Response.class);
- List<StatusCode> la2 =
mi.getAnnotations(StatusCode.class);
+ List<Response> la = mi.getAnnotations(context,
Response.class);
+ List<StatusCode> la2 =
mi.getAnnotations(context, StatusCode.class);
Set<Integer> codes = getCodes(la2, 200);
for (Response a : la) {
for (Integer code : codes) {
OMap om =
responses.getMap(String.valueOf(code), true);
merge(om, a);
OMap schema =
getSchema(om.getMap("schema"), m.getGenericReturnType(), bs);
- mi.getAnnotations(Schema.class,
x -> merge(schema, x));
+ mi.getAnnotations(context,
Schema.class, x -> true, x -> merge(schema, x));
pushupSchemaFields(RESPONSE,
om, schema);
om.appendIf(true, true, true,
"schema", schema);
addBodyExamples(sm, om, true,
m.getGenericReturnType(), locale);
@@ -436,8 +426,8 @@ public class BasicSwaggerProviderSession {
if (! isMulti(a)) {
for (Integer
code : codes) {
OMap
header = responses.getMap(String.valueOf(code), true).getMap("headers",
true).getMap(ha, true);
-
ecmi.getAnnotations(Schema.class, x -> merge(header, x));
-
ecmi.getReturnType().unwrap(Value.class,Optional.class).getAnnotations(Schema.class,
x -> merge(header, x));
+
ecmi.getAnnotations(context, Schema.class, x -> true, x -> merge(header, x));
+
ecmi.getReturnType().unwrap(Value.class,Optional.class).getAnnotations(Schema.class,
x -> true, x -> merge(header, x));
merge(header, a.schema());
pushupSchemaFields(RESPONSE_HEADER, header, getSchema(header,
ecmi.getReturnType().innerType(), bs));
}
@@ -449,7 +439,7 @@ public class BasicSwaggerProviderSession {
OMap om = responses.getMap("200", true);
ClassInfo pt2 =
ClassInfo.of(m.getGenericReturnType());
OMap schema = getSchema(om.getMap("schema"),
m.getGenericReturnType(), bs);
- pt2.getAnnotations(Schema.class, x ->
merge(schema, x));
+ pt2.getAnnotations(Schema.class, x -> true, x
-> merge(schema, x));
pushupSchemaFields(RESPONSE, om, schema);
om.appendIf(true, true, true, "schema", schema);
addBodyExamples(sm, om, true,
m.getGenericReturnType(), locale);
@@ -470,8 +460,7 @@ public class BasicSwaggerProviderSession {
if (! isMulti(a)) {
for (Integer code :
codes) {
OMap header =
responses.getMap(String.valueOf(code), true).getMap("headers",
true).getMap(name, true);
-
mpi.getAnnotations(Schema.class, x -> merge(header, x));
-
mpi.getParameterType().getAnnotations(Schema.class, x -> merge(header, x));
+
mpi.getAnnotations(Schema.class, x -> true, x -> merge(header, x));
merge(header,
a.schema());
pushupSchemaFields(RESPONSE_HEADER, header, getSchema(header, type, bs));
}
@@ -488,8 +477,7 @@ public class BasicSwaggerProviderSession {
OMap om =
responses.getMap(String.valueOf(code), true);
merge(om, a);
OMap schema =
getSchema(om.getMap("schema"), type, bs);
-
pt.getAnnotations(Schema.class, x -> merge(schema, x));
-
mpi.getAnnotations(Schema.class, x -> merge(schema, x));
+
mpi.getAnnotations(Schema.class, x -> true, x -> merge(schema, x));
la.forEach(x ->
merge(schema, x.schema()));
pushupSchemaFields(RESPONSE, om, schema);
om.appendIf(true, true,
true, "schema", schema);
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 53adb91..1f2eccf 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
@@ -630,28 +630,6 @@ public class ClassInfoTest {
}
@Test
- public void getDeclaredAnnotation() {
- check("@A(7)", g3.getDeclaredAnnotation(A.class));
- check(null, g3.getDeclaredAnnotation(B.class));
- }
-
- @Test
- public void getDeclaredAnnotation_null() {
- check(null, g3.getDeclaredAnnotation(null));
- }
-
- @Test
- public void getDeclaredAnnotation_twice() {
- check("@A(7)", g3.getDeclaredAnnotation(A.class));
- check("@A(7)", g3.getDeclaredAnnotation(A.class));
- }
-
- @Test
- public void getDeclaredAnnotation_onType() {
- check(null, aTypeInfo.getDeclaredAnnotation(A.class));
- }
-
- @Test
public void getPackageAnnotation() {
check("@PA(10)", g3.getPackageAnnotation(PA.class));
}
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/reflection/MethodInfoTest.java
b/juneau-utest/src/test/java/org/apache/juneau/reflection/MethodInfoTest.java
index 59717cd..d06d39a 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/reflection/MethodInfoTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/reflection/MethodInfoTest.java
@@ -224,15 +224,6 @@ public class MethodInfoTest {
}
@Test
- public void appendAnnotationsParentFirst() {
- check("@A(C1),@A(C2),@A(C3),@A(a1)", c_a1.appendAnnotations(new
ArrayList<>(), A.class));
- check("@A(C1),@A(C2),@A(C3),@A(a2a),@A(a2b)",
c_a2.appendAnnotations(new ArrayList<>(), A.class));
- check("@A(C1),@A(C2),@A(C3),@A(a3)", c_a3.appendAnnotations(new
ArrayList<>(), A.class));
- check("@A(C1),@A(C2),@A(C3),@A(a4)", c_a4.appendAnnotations(new
ArrayList<>(), A.class));
- check("@A(C1),@A(C2),@A(C3)", c_a5.appendAnnotations(new
ArrayList<>(), A.class));
- }
-
- @Test
public void getAnnotation() {
check("@A(a1)", c_a1.getLastAnnotation(A.class));
check("@A(a2b)", c_a2.getLastAnnotation(A.class));
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_Messages_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_Messages_Test.java
index 659089b..9a6e2ab 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_Messages_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_Messages_Test.java
@@ -56,20 +56,6 @@ public class Rest_Messages_Test {
a1.get("/c?name=key3").run().assertBody().is("{!key3}");
}
- @Rest
- public static class A2 extends A1 {}
-
- @Test
- public void a02_subclassed() throws Exception {
- MockRestClient a2 = MockRestClient.build(A2.class);
-
a2.get("/a").run().assertBody().is("{'A1.key2':'A1.value2a','A2.key3':'A2.value3b',key1:'value1a',key2:'value2b',key3:'A2.value3b'}");
-
a2.get("/b").run().assertBody().is("{'A1.key2':'A1.value2a','A2.key3':'A2.value3b',key1:'value1a',key2:'value2b',key3:'A2.value3b'}");
- a2.get("/c?name=key1").run().assertBody().is("value1a");
- a2.get("/c?name=key2").run().assertBody().is("value2b");
- a2.get("/c?name=key3").run().assertBody().is("A2.value3b");
- a2.get("/c?name=key4").run().assertBody().is("{!key4}");
- }
-
//------------------------------------------------------------------------------------------------------------------
// Overridden on subclass.
//------------------------------------------------------------------------------------------------------------------