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 6f74c64 ClassInfo refactoring.
6f74c64 is described below
commit 6f74c6495c2212f9c92856d9bafd14e03085eb7c
Author: JamesBognar <[email protected]>
AuthorDate: Sun Jan 23 15:45:12 2022 -0500
ClassInfo refactoring.
---
.../java/org/apache/juneau/jena/RdfClassMeta.java | 17 ++-----
.../src/main/java/org/apache/juneau/BeanMeta.java | 17 +++----
.../main/java/org/apache/juneau/BeanRegistry.java | 14 +++---
.../src/main/java/org/apache/juneau/ClassMeta.java | 32 ++++++++-----
.../java/org/apache/juneau/csv/CsvClassMeta.java | 14 ------
.../java/org/apache/juneau/html/HtmlClassMeta.java | 52 ++++++++++------------
.../org/apache/juneau/html/HtmlParserSession.java | 14 +++---
.../apache/juneau/html/HtmlSerializerSession.java | 14 +++---
.../java/org/apache/juneau/http/HttpParts.java | 45 +++++++------------
.../java/org/apache/juneau/json/JsonClassMeta.java | 22 ++-------
.../juneau/jsonschema/JsonSchemaClassMeta.java | 16 ++++---
.../apache/juneau/msgpack/MsgPackClassMeta.java | 14 ------
.../org/apache/juneau/oapi/OpenApiClassMeta.java | 14 ------
.../juneau/plaintext/PlainTextClassMeta.java | 14 ------
.../java/org/apache/juneau/reflect/ClassInfo.java | 4 +-
.../org/apache/juneau/soap/SoapXmlClassMeta.java | 14 ------
.../java/org/apache/juneau/uon/UonClassMeta.java | 14 ------
.../juneau/urlencoding/UrlEncodingClassMeta.java | 22 ++-------
.../java/org/apache/juneau/xml/XmlClassMeta.java | 27 +++--------
19 files changed, 116 insertions(+), 264 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 1cd3fad..bf39ee2 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
@@ -29,7 +29,6 @@ import org.apache.juneau.xml.*;
*/
public class RdfClassMeta extends ExtendedClassMeta {
- private final List<Rdf> rdfs;
private final RdfCollectionFormat collectionFormat;
private final Namespace namespace;
@@ -41,28 +40,20 @@ public class RdfClassMeta extends ExtendedClassMeta {
*/
public RdfClassMeta(ClassMeta<?> cm, RdfMetaProvider mp) {
super(cm);
- this.rdfs = cm.getAnnotations(Rdf.class);
+ 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));
RdfCollectionFormat _collectionFormat =
RdfCollectionFormat.DEFAULT;
for (Rdf a : rdfs)
if (a.collectionFormat() != RdfCollectionFormat.DEFAULT)
_collectionFormat = a.collectionFormat();
this.collectionFormat = _collectionFormat;
-
- List<RdfSchema> schemas = cm.getAnnotations(RdfSchema.class);
this.namespace = RdfUtils.findNamespace(rdfs, schemas);
}
/**
- * Returns the {@link Rdf @Rdf} annotations defined on the class.
- *
- * @return An unmodifiable list of annotations ordered parent-to-child,
or an empty list if not found.
- */
- protected List<Rdf> getAnnotations() {
- return rdfs;
- }
-
- /**
* Returns the {@link Rdf#collectionFormat() @Rdf(collectionFormat)}
annotation defined on the class.
*
* @return The value of the annotation, or <jk>null</jk> if annotation
is not
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 3fa26b7..b50bcb5 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
@@ -26,6 +26,7 @@ import java.util.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.collections.*;
+import org.apache.juneau.internal.*;
import org.apache.juneau.reflect.*;
/**
@@ -180,19 +181,15 @@ public class BeanMeta<T> {
if (beanFilter != null &&
beanFilter.getBeanDictionary() != null)
bdClasses.a(beanFilter.getBeanDictionary());
- boolean hasTypeName = false;
- for (Bean b :
classMeta.getAnnotations(Bean.class))
- if (! b.typeName().isEmpty())
- hasTypeName = true;
- if (hasTypeName)
+ Value<String> typeName = Value.empty();
+ classMeta.getAnnotations(Bean.class, x ->
typeName.setIf(x.typeName(), StringUtils::isNotEmpty));
+ if (typeName.isPresent())
bdClasses.add(classMeta.innerClass);
this.beanRegistry = new BeanRegistry(ctx, null,
bdClasses.toArray(new Class<?>[bdClasses.size()]));
- for (Bean b :
classMeta.getAnnotations(Bean.class))
- if (! b.typePropertyName().isEmpty())
- typePropertyName =
b.typePropertyName();
- if (typePropertyName == null)
- typePropertyName =
ctx.getBeanTypePropertyName();
+ Value<String> typePropertyName = Value.empty();
+ classMeta.getAnnotations(Bean.class, x ->
typePropertyName.setIf(x.typePropertyName(), StringUtils::isNotEmpty));
+ 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/BeanRegistry.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java
index 6c6bb14..e8de10b 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java
@@ -20,6 +20,7 @@ import java.util.*;
import java.util.concurrent.*;
import org.apache.juneau.annotation.*;
+import org.apache.juneau.internal.*;
import org.apache.juneau.reflect.*;
/**
@@ -93,13 +94,12 @@ public class BeanRegistry {
addToMap(typeName, val);
}
} else {
- String typeName = null;
- for (Bean b :
ci.getAnnotations(Bean.class, beanContext))
- if (! b.typeName().isEmpty())
- typeName = b.typeName();
- if (typeName == null)
- throw new
BeanRuntimeException("Class ''{0}'' was passed to BeanRegistry but it doesn't
have a @Bean(typeName) annotation defined.", className(c));
- addToMap(typeName,
beanContext.getClassMeta(c));
+ Value<String> typeName = Value.empty();
+ ci.getAnnotations(Bean.class,
beanContext, x -> typeName.setIf(x.typeName(), StringUtils::isNotEmpty));
+ addToMap(
+ typeName.orElseThrow(() -> new
BeanRuntimeException("Class ''{0}'' was passed to BeanRegistry but it doesn't
have a @Bean(typeName) annotation defined.", className(c))),
+ beanContext.getClassMeta(c)
+ );
}
}
} catch (BeanRuntimeException e) {
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 875587a..3aeb4b1 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
@@ -117,7 +117,7 @@ public final class ClassMeta<T> implements Type {
private final Map<Class<?>,Mutater<?,T>> fromMutaters = new
ConcurrentHashMap<>();
private final Map<Class<?>,Mutater<T,?>> toMutaters = new
ConcurrentHashMap<>();
private final Mutater<String,T> stringMutater;
- private final Map<Class<?>,List<?>> annotationListMap = new
ConcurrentHashMap<>();
+ private final Map<Class<?>,Annotation[]> annotationArrayMap = new
ConcurrentHashMap<>();
private final Map<Class<?>,Optional<?>> annotationLastMap = new
ConcurrentHashMap<>();
private final Map<String,Optional<?>> properties = new
ConcurrentHashMap<>();
@@ -2100,23 +2100,31 @@ public final class ClassMeta<T> implements Type {
}
/**
- * Returns all annotations of the specified type defined on the
specified class or parent classes/interfaces in parent-to-child order.
+ * Consumes all 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.
- * @return
- * A list of all matching annotations found or an empty list if
none found.
+ * @param consumer The consumer of the annotations.
+ * @return This object.
*/
@SuppressWarnings("unchecked")
- public <A extends Annotation> List<A> getAnnotations(Class<A> a) {
- List<A> l = (List<A>)annotationListMap.get(a);
- if (l == null) {
- if (beanContext == null)
- return info.getAnnotations(a,
BeanContext.DEFAULT);
- l = Collections.unmodifiableList(info.getAnnotations(a,
beanContext));
- annotationListMap.put(a, l);
+ public <A extends Annotation> ClassMeta<T> getAnnotations(Class<A> a,
Consumer<A> consumer) {
+ A[] array = (A[])annotationArrayMap.get(a);
+ if (array == null) {
+ if (beanContext == null) {
+ info.getAnnotations(a, BeanContext.DEFAULT,
consumer);
+ return this;
+ }
+ List<A> l = new ArrayList<>();
+ info.getAnnotations(a, beanContext, x -> l.add(x));
+ array = (A[])Array.newInstance(a, l.size());
+ for (int i = 0; i < l.size(); i++)
+ Array.set(array, i, l.get(i));
+ annotationArrayMap.put(a, array);
}
- return l;
+ for (A aa : array)
+ consumer.accept(aa);
+ return this;
}
/**
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvClassMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvClassMeta.java
index ff1137a..640562f 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvClassMeta.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvClassMeta.java
@@ -12,8 +12,6 @@
//
***************************************************************************************************************************
package org.apache.juneau.csv;
-import java.util.*;
-
import org.apache.juneau.*;
import org.apache.juneau.csv.annotation.*;
@@ -28,8 +26,6 @@ import org.apache.juneau.csv.annotation.*;
*/
public class CsvClassMeta extends ExtendedClassMeta {
- private final List<Csv> csvs;
-
/**
* Constructor.
*
@@ -38,15 +34,5 @@ public class CsvClassMeta extends ExtendedClassMeta {
*/
public CsvClassMeta(ClassMeta<?> cm, CsvMetaProvider mp) {
super(cm);
- this.csvs = cm.getAnnotations(Csv.class);
- }
-
- /**
- * Returns the {@link Csv @Csv} annotations defined on the class.
- *
- * @return An unmodifiable list of annotations ordered parent-to-child,
or an empty list if not found.
- */
- protected List<Csv> getAnnotation() {
- return csvs;
}
}
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 a47b37e..b654fdb 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
@@ -12,9 +12,9 @@
//
***************************************************************************************************************************
package org.apache.juneau.html;
-import static org.apache.juneau.internal.ClassUtils.*;
+import static org.apache.juneau.internal.ThrowableUtils.*;
-import java.util.*;
+import java.util.function.*;
import org.apache.juneau.*;
import org.apache.juneau.html.annotation.*;
@@ -30,7 +30,6 @@ import org.apache.juneau.html.annotation.*;
*/
public class HtmlClassMeta extends ExtendedClassMeta {
- private final List<Html> htmls;
private final boolean noTables, noTableHeaders;
private final HtmlFormat format;
private final HtmlRender<?> render;
@@ -43,32 +42,29 @@ public class HtmlClassMeta extends ExtendedClassMeta {
*/
public HtmlClassMeta(ClassMeta<?> cm, HtmlMetaProvider mp) {
super(cm);
- this.htmls = cm.getAnnotations(Html.class);
-
- boolean _noTables = false, _noTableHeaders = false;
- HtmlRender<?> _render = null;
- HtmlFormat _format = HtmlFormat.HTML;
-
- for (Html a : this.htmls) {
- _format = a.format();
- _noTables = a.noTables();
- _noTableHeaders = a.noTableHeaders();
- _render = castOrCreate(HtmlRender.class, a.render());
- }
-
- this.noTables = _noTables;
- this.noTableHeaders = _noTableHeaders;
- this.render = _render;
- this.format = _format;
- }
- /**
- * Returns the {@link Html @Html} annotations defined on the class.
- *
- * @return An unmodifiable list of annotations ordered parent-to-child,
or an empty list if not found.
- */
- protected List<Html> getAnnotations() {
- return htmls;
+ Value<Boolean> noTables = Value.empty(), noTableHeaders =
Value.empty();
+ Value<HtmlFormat> format = Value.empty();
+ 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.render() != HtmlRender.class) {
+ try {
+ render.set(x.render().newInstance());
+ } catch (Exception e) {
+ throw runtimeException(e);
+ }
+ }
+ };
+ cm.getAnnotations(Html.class, c);
+
+ this.noTables = noTables.orElse(false);
+ this.noTableHeaders = noTableHeaders.orElse(false);
+ this.render = render.orElse(null);
+ this.format = format.orElse(HtmlFormat.HTML);
}
/**
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 1ee2006..c40464e 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
@@ -475,16 +475,12 @@ public final class HtmlParserSession extends
XmlParserSession {
String href = r.getAttributeValue(null, "href");
String name = getElementText(r);
if (beanType.hasAnnotation(HtmlLink.class)) {
- String uriProperty = "", nameProperty = "";
- for (HtmlLink a :
beanType.getAnnotations(HtmlLink.class)) {
- if (! a.uriProperty().isEmpty())
- uriProperty = a.uriProperty();
- if (! a.nameProperty().isEmpty())
- nameProperty = a.nameProperty();
- }
+ 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));
BeanMap<T> m = newBeanMap(beanType.getInnerClass());
- m.put(uriProperty, href);
- m.put(nameProperty, name);
+ m.put(uriProperty.orElse(""), href);
+ m.put(nameProperty.orElse(""), name);
return m.getBean();
}
return convertToType(href, beanType);
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 377a1a4..4ac4f4c 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
@@ -518,15 +518,11 @@ public class HtmlSerializerSession extends
XmlSerializerSession {
} else if (sType.isBean()) {
BeanMap m = toBeanMap(o);
if (aType.hasAnnotation(HtmlLink.class)) {
- String uriProperty = "", nameProperty =
"";
- for (HtmlLink a :
aType.getAnnotations(HtmlLink.class)) {
- if (! a.uriProperty().isEmpty())
- uriProperty =
a.uriProperty();
- if (!
a.nameProperty().isEmpty())
- nameProperty =
a.nameProperty();
- }
- Object urlProp = m.get(uriProperty);
- Object nameProp = m.get(nameProperty);
+ 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));
+ Object urlProp =
m.get(uriProperty.orElse(""));
+ Object nameProp =
m.get(nameProperty.orElse(""));
out.oTag("a").attrUri("href",
urlProp).append('>').text(nameProp).eTag("a");
cr = CR_MIXED;
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 ac2e4ef..c7006cd 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,6 +24,7 @@ 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.*;
/**
@@ -419,43 +420,31 @@ public class HttpParts {
//-----------------------------------------------------------------------------------------------------------------
private static final Function<ClassMeta<?>,String> HEADER_NAME_FUNCTION
= x -> {
- for (org.apache.juneau.http.annotation.Header a :
x.getAnnotations(org.apache.juneau.http.annotation.Header.class)) {
- if (! a.value().isEmpty())
- return a.value();
- if (! a.name().isEmpty())
- return a.name();
- }
- return null;
+ 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));
+ return n.orElse(null);
};
private static final Function<ClassMeta<?>,String> QUERY_NAME_FUNCTION
= x -> {
- for (org.apache.juneau.http.annotation.Query a :
x.getAnnotations(org.apache.juneau.http.annotation.Query.class)) {
- if (! a.value().isEmpty())
- return a.value();
- if (! a.name().isEmpty())
- return a.name();
- }
- return null;
+ 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));
+ return n.orElse(null);
};
private static final Function<ClassMeta<?>,String>
FORMDATA_NAME_FUNCTION = x -> {
- for (org.apache.juneau.http.annotation.FormData a :
x.getAnnotations(org.apache.juneau.http.annotation.FormData.class)) {
- if (! a.value().isEmpty())
- return a.value();
- if (! a.name().isEmpty())
- return a.name();
- }
- return null;
+ 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));
+ return n.orElse(null);
};
private static final Function<ClassMeta<?>,String> PATH_NAME_FUNCTION =
x -> {
- for (org.apache.juneau.http.annotation.Path a :
x.getAnnotations(org.apache.juneau.http.annotation.Path.class)) {
- if (! a.value().isEmpty())
- return a.value();
- if (! a.name().isEmpty())
- return a.name();
- }
- return null;
+ 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));
+ return n.orElse(null);
};
private static final Function<ClassMeta<?>,ConstructorInfo>
CONSTRUCTOR_FUNCTION = x -> {
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 27f6dc7..ae3714f 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,9 +12,8 @@
//
***************************************************************************************************************************
package org.apache.juneau.json;
-import java.util.*;
-
import org.apache.juneau.*;
+import org.apache.juneau.internal.*;
import org.apache.juneau.json.annotation.*;
/**
@@ -28,7 +27,6 @@ import org.apache.juneau.json.annotation.*;
*/
public class JsonClassMeta extends ExtendedClassMeta {
- private final List<Json> jsons;
private final String wrapperAttr;
/**
@@ -39,22 +37,10 @@ public class JsonClassMeta extends ExtendedClassMeta {
*/
public JsonClassMeta(ClassMeta<?> cm, JsonMetaProvider mp) {
super(cm);
- this.jsons = cm.getAnnotations(Json.class);
-
- String _wrapperAttr = null;
- for (Json a : this.jsons)
- if (! a.wrapperAttr().isEmpty())
- _wrapperAttr = a.wrapperAttr();
- this.wrapperAttr = _wrapperAttr;
- }
- /**
- * Returns the {@link Json @Json} annotations defined on the class.
- *
- * @return An unmodifiable list of annotations ordered parent-to-child,
or an empty list if not found.
- */
- protected List<Json> getAnnotations() {
- return jsons;
+ Value<String> wrapperAttr = Value.empty();
+ cm.getAnnotations(Json.class, x ->
wrapperAttr.setIf(x.wrapperAttr(), StringUtils::isNotEmpty));
+ 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 ef318d4..6afe157 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
@@ -14,6 +14,8 @@ package org.apache.juneau.jsonschema;
import static org.apache.juneau.internal.ThrowableUtils.*;
+import java.util.function.*;
+
import org.apache.juneau.*;
import org.apache.juneau.collections.*;
import org.apache.juneau.http.annotation.*;
@@ -40,12 +42,14 @@ public class JsonSchemaClassMeta extends ExtendedClassMeta {
*/
public JsonSchemaClassMeta(ClassMeta<?> cm, JsonSchemaMetaProvider mp) {
super(cm);
- try {
- for (Schema a : cm.getAnnotations(Schema.class))
- schema.append(SchemaAnnotation.asMap(a));
- } catch (ParseException e) {
- throw runtimeException(e);
- }
+ Consumer<Schema> c = x -> {
+ try {
+ schema.append(SchemaAnnotation.asMap(x));
+ } catch (ParseException e) {
+ throw runtimeException(e);
+ }
+ };
+ cm.getAnnotations(Schema.class, c);
}
/**
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackClassMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackClassMeta.java
index c311097..7abe184 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackClassMeta.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackClassMeta.java
@@ -12,8 +12,6 @@
//
***************************************************************************************************************************
package org.apache.juneau.msgpack;
-import java.util.*;
-
import org.apache.juneau.*;
import org.apache.juneau.msgpack.annotation.*;
@@ -28,8 +26,6 @@ import org.apache.juneau.msgpack.annotation.*;
*/
public class MsgPackClassMeta extends ExtendedClassMeta {
- private final List<MsgPack> msgPacks;
-
/**
* Constructor.
*
@@ -38,15 +34,5 @@ public class MsgPackClassMeta extends ExtendedClassMeta {
*/
public MsgPackClassMeta(ClassMeta<?> cm, MsgPackMetaProvider mp) {
super(cm);
- this.msgPacks = cm.getAnnotations(MsgPack.class);
- }
-
- /**
- * Returns the {@link MsgPack @MsgPack} annotations defined on the
class.
- *
- * @return An unmodifiable list of annotations ordered parent-to-child,
or an empty list if not found.
- */
- protected List<MsgPack> getAnnotations() {
- return msgPacks;
}
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiClassMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiClassMeta.java
index b577d82..8b9379a 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiClassMeta.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiClassMeta.java
@@ -12,8 +12,6 @@
//
***************************************************************************************************************************
package org.apache.juneau.oapi;
-import java.util.*;
-
import org.apache.juneau.*;
import org.apache.juneau.oapi.annotation.*;
@@ -28,8 +26,6 @@ import org.apache.juneau.oapi.annotation.*;
*/
public class OpenApiClassMeta extends ExtendedClassMeta {
- private final List<OpenApi> openApis;
-
/**
* Constructor.
*
@@ -38,15 +34,5 @@ public class OpenApiClassMeta extends ExtendedClassMeta {
*/
public OpenApiClassMeta(ClassMeta<?> cm, OpenApiMetaProvider mp) {
super(cm);
- this.openApis = cm.getAnnotations(OpenApi.class);
- }
-
- /**
- * Returns the {@link OpenApi @OpenApi} annotations defined on the
class.
- *
- * @return An unmodifiable list of annotations ordered parent-to-child,
or an empty list if not found.
- */
- protected List<OpenApi> getAnnotations() {
- return openApis;
}
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextClassMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextClassMeta.java
index cc5e505..e8e8483 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextClassMeta.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextClassMeta.java
@@ -12,8 +12,6 @@
//
***************************************************************************************************************************
package org.apache.juneau.plaintext;
-import java.util.*;
-
import org.apache.juneau.*;
import org.apache.juneau.plaintext.annotation.*;
@@ -28,8 +26,6 @@ import org.apache.juneau.plaintext.annotation.*;
*/
public class PlainTextClassMeta extends ExtendedClassMeta {
- private final List<PlainText> plainTexts;
-
/**
* Constructor.
*
@@ -38,15 +34,5 @@ public class PlainTextClassMeta extends ExtendedClassMeta {
*/
public PlainTextClassMeta(ClassMeta<?> cm, PlainTextMetaProvider mp) {
super(cm);
- this.plainTexts = cm.getAnnotations(PlainText.class);
- }
-
- /**
- * Returns the {@link PlainText @PlainText} annotations defined on the
class.
- *
- * @return An unmodifiable list of annotations ordered parent-to-child,
or an empty list if not found.
- */
- protected List<PlainText> getAnnotations() {
- return plainTexts;
}
}
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 884ed00..a625c8b 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
@@ -979,7 +979,9 @@ 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,
MetaProvider mp) {
- return appendAnnotations(new ArrayList<>(), a, mp);
+ List<T> l = new ArrayList<>();
+ getAnnotations(a, mp, x -> l.add(x));
+ return l;
}
/**
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlClassMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlClassMeta.java
index e19ae28..50147b1 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlClassMeta.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlClassMeta.java
@@ -12,8 +12,6 @@
//
***************************************************************************************************************************
package org.apache.juneau.soap;
-import java.util.*;
-
import org.apache.juneau.*;
import org.apache.juneau.soap.annotation.*;
@@ -28,8 +26,6 @@ import org.apache.juneau.soap.annotation.*;
*/
public class SoapXmlClassMeta extends ExtendedClassMeta {
- private final List<SoapXml> soapXmls;
-
/**
* Constructor.
*
@@ -38,15 +34,5 @@ public class SoapXmlClassMeta extends ExtendedClassMeta {
*/
public SoapXmlClassMeta(ClassMeta<?> cm, SoapXmlMetaProvider mp) {
super(cm);
- this.soapXmls = cm.getAnnotations(SoapXml.class);
- }
-
- /**
- * Returns the {@link SoapXml @SoapXml} annotations defined on the
class.
- *
- * @return An unmodifiable list of annotations ordered parent-to-child,
or an empty list if not found.
- */
- protected List<SoapXml> getAnnotations() {
- return soapXmls;
}
}
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonClassMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonClassMeta.java
index 2ddf5a0..fa9d122 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonClassMeta.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonClassMeta.java
@@ -12,8 +12,6 @@
//
***************************************************************************************************************************
package org.apache.juneau.uon;
-import java.util.*;
-
import org.apache.juneau.*;
import org.apache.juneau.uon.annotation.*;
@@ -28,8 +26,6 @@ import org.apache.juneau.uon.annotation.*;
*/
public class UonClassMeta extends ExtendedClassMeta {
- private final List<Uon> uons;
-
/**
* Constructor.
*
@@ -38,15 +34,5 @@ public class UonClassMeta extends ExtendedClassMeta {
*/
public UonClassMeta(ClassMeta<?> cm, UonMetaProvider mp) {
super(cm);
- this.uons = cm.getAnnotations(Uon.class);
- }
-
- /**
- * Returns the {@link Uon @Uon} annotations defined on the class.
- *
- * @return An unmodifiable list of annotations ordered parent-to-child,
or an empty list if not found.
- */
- protected List<Uon> getAnnotations() {
- return uons;
}
}
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 c04026a..0f19f5f 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
@@ -12,8 +12,6 @@
//
***************************************************************************************************************************
package org.apache.juneau.urlencoding;
-import java.util.*;
-
import org.apache.juneau.*;
import org.apache.juneau.urlencoding.annotation.*;
@@ -27,7 +25,6 @@ import org.apache.juneau.urlencoding.annotation.*;
*/
public class UrlEncodingClassMeta extends ExtendedClassMeta {
- private final List<UrlEncoding> urlEncodings;
private final boolean expandedParams;
/**
@@ -38,23 +35,10 @@ public class UrlEncodingClassMeta extends ExtendedClassMeta
{
*/
public UrlEncodingClassMeta(ClassMeta<?> cm, UrlEncodingMetaProvider
mp) {
super(cm);
- this.urlEncodings = cm.getAnnotations(UrlEncoding.class);
-
- boolean _expandedParams = false;
- for (UrlEncoding a : urlEncodings)
- if (a.expandedParams())
- _expandedParams = true;
-
- this.expandedParams = _expandedParams;
- }
- /**
- * Returns the {@link UrlEncoding} annotations defined on the class.
- *
- * @return An unmodifiable list of annotations ordered parent-to-child,
or an empty list if not found.
- */
- protected List<UrlEncoding> getAnnotations() {
- return urlEncodings;
+ Value<Boolean> expandedParams = Value.empty();
+ cm.getAnnotations(UrlEncoding.class, x ->
expandedParams.setIf(x.expandedParams(), y -> y == 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 4d4f202..52b24a8 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
@@ -29,7 +29,6 @@ import org.apache.juneau.xml.annotation.*;
public class XmlClassMeta extends ExtendedClassMeta {
private final Namespace namespace;
- private final List<Xml> xmls;
private final XmlFormat format;
private final String childName;
@@ -41,8 +40,13 @@ public class XmlClassMeta extends ExtendedClassMeta {
*/
public XmlClassMeta(ClassMeta<?> cm, XmlMetaProvider mp) {
super(cm);
- this.namespace = findNamespace(cm, mp);
- this.xmls = cm.getAnnotations(Xml.class);
+ 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));
+ }
+ this.namespace = XmlUtils.findNamespace(xmls, schemas);
String _childName = null;
XmlFormat _format = XmlFormat.DEFAULT;
@@ -57,15 +61,6 @@ public class XmlClassMeta extends ExtendedClassMeta {
}
/**
- * Returns the {@link Xml @Xml} annotations defined on the class.
- *
- * @return An unmodifiable list of annotations ordered parent-to-child,
or an empty list if not found.
- */
- protected List<Xml> getAnnotations() {
- return xmls;
- }
-
- /**
* Returns the {@link Xml#format() @Xml(format)} annotation defined on
the class.
*
* @return The value of the annotation, or {@link XmlFormat#DEFAULT} if
not specified.
@@ -102,12 +97,4 @@ public class XmlClassMeta extends ExtendedClassMeta {
public Namespace getNamespace() {
return namespace;
}
-
- private static Namespace findNamespace(ClassMeta<?> cm, MetaProvider
mp) {
- if (cm == null)
- return null;
- List<Xml> xmls = cm.getAnnotations(Xml.class);
- List<XmlSchema> schemas = cm.getAnnotations(XmlSchema.class);
- return XmlUtils.findNamespace(xmls, schemas);
- }
}