You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/09/03 10:56:11 UTC
[isis] branch master updated: ISIS-2774: run field enumeration
through ClassCache
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 8151983 ISIS-2774: run field enumeration through ClassCache
8151983 is described below
commit 8151983e18edcdb1be8b423cf05e170877625fa6
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Sep 3 12:56:04 2021 +0200
ISIS-2774: run field enumeration through ClassCache
---
.../commons/internal/reflection/_ClassCache.java | 23 ++++++++++++++++------
.../isis/core/metamodel/facets/Evaluators.java | 17 +++++++++-------
2 files changed, 27 insertions(+), 13 deletions(-)
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/reflection/_ClassCache.java b/commons/src/main/java/org/apache/isis/commons/internal/reflection/_ClassCache.java
index e587945..f6aa35d 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/reflection/_ClassCache.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/reflection/_ClassCache.java
@@ -18,6 +18,7 @@
*/
package org.apache.isis.commons.internal.reflection;
+import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
@@ -93,6 +94,10 @@ public final class _ClassCache implements AutoCloseable {
return inspectType(type).declaredMethods.stream();
}
+ public Stream<Field> streamDeclaredFields(final Class<?> type) {
+ return inspectType(type).declaredFields.stream();
+ }
+
/**
* Returns a Stream of declared Methods, that pass the given {@code filter},
* while as an optimization, memoizing the result under given
@@ -119,9 +124,10 @@ public final class _ClassCache implements AutoCloseable {
@RequiredArgsConstructor
private static class ClassModel {
+ private final Can<Field> declaredFields;
+ private final Can<Method> declaredMethods;
private final Map<MethodKey, Method> publicMethodsByKey = new HashMap<>();
private final Map<MethodKey, Method> nonPublicDeclaredMethodsByKey = new HashMap<>();
- private final Can<Method> declaredMethods;
private final Map<String, Can<Method>> declaredMethodsByAttribute = new HashMap<>();
}
@@ -152,21 +158,24 @@ public final class _ClassCache implements AutoCloseable {
return inspectedTypes.computeIfAbsent(type, __->{
+ val declaredFields = type.getDeclaredFields();
val declaredMethods = type.getDeclaredMethods();
- val methods = new ClassModel(Can.ofArray(declaredMethods));
+ val model = new ClassModel(
+ Can.ofArray(declaredFields),
+ Can.ofArray(declaredMethods));
for(val method : declaredMethods) {
- methods.nonPublicDeclaredMethodsByKey.put(MethodKey.of(type, method), method);
+ model.nonPublicDeclaredMethodsByKey.put(MethodKey.of(type, method), method);
}
for(val method : type.getMethods()) {
val key = MethodKey.of(type, method);
- methods.publicMethodsByKey.put(key, method);
- methods.nonPublicDeclaredMethodsByKey.remove(key);
+ model.publicMethodsByKey.put(key, method);
+ model.nonPublicDeclaredMethodsByKey.remove(key);
}
- return methods;
+ return model;
});
}
@@ -193,4 +202,6 @@ public final class _ClassCache implements AutoCloseable {
}
+
+
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Evaluators.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Evaluators.java
index e859a06..52b8ed6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Evaluators.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Evaluators.java
@@ -66,16 +66,17 @@ public final class Evaluators {
final Class<?> cls,
final Class<T> annotationType) {
+ val classCache = _ClassCache.getInstance();
+
return Stream.concat(
- streamMethodEvaluators(cls, annotationType),
- streamFieldEvaluators(cls, annotationType));
+ streamMethodEvaluators(cls, annotationType, classCache),
+ streamFieldEvaluators(cls, annotationType, classCache));
}
private static <T extends Annotation> Stream<Evaluator<T>> streamMethodEvaluators(
final Class<?> cls,
- final Class<T> annotationType) {
-
- val classCache = _ClassCache.getInstance();
+ final Class<T> annotationType,
+ final _ClassCache classCache) {
return classCache
.streamDeclaredMethods(cls)
@@ -87,9 +88,11 @@ public final class Evaluators {
private static <T extends Annotation> Stream<Evaluator<T>> streamFieldEvaluators(
final Class<?> cls,
- final Class<T> annotationType) {
+ final Class<T> annotationType,
+ final _ClassCache classCache) {
- return Stream.<Field>of(cls.getDeclaredFields())
+ return classCache
+ .streamDeclaredFields(cls)
.map(field->FieldEvaluator.create(field, annotationType))
.flatMap(Optional::stream);
}