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 2018/01/15 13:08:39 UTC
[isis] branch ISIS-1740-where-am-i updated: ISIS-1816 Refactoring
names + simplify
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch ISIS-1740-where-am-i
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/ISIS-1740-where-am-i by this push:
new 2098daa ISIS-1816 Refactoring names + simplify
2098daa is described below
commit 2098daa10082374108f957833757ee04f5e07de1
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Jan 15 14:08:35 2018 +0100
ISIS-1816 Refactoring names + simplify
---
.../NavigableParentAnnotationFacetFactory.java | 46 +++++++++++++++-------
.../method/NavigableParentFacetMethod.java | 18 +--------
2 files changed, 34 insertions(+), 30 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java
index 7921bda..585228a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java
@@ -19,15 +19,12 @@
package org.apache.isis.core.metamodel.facets.object.navparent.annotation;
-import java.beans.IntrospectionException;
-import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.List;
import org.apache.isis.applib.annotation.Parent;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.commons.lang.NullSafe;
-import org.apache.isis.core.commons.reflection.Reflect;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -67,7 +64,7 @@ public class NavigableParentAnnotationFacetFactory extends FacetFactoryAbstract
// resolve the current domain-object's navigable parent.
final List<Annotations.Evaluator<Parent>> evaluators =
- Annotations.findFirstInHierarchyHaving(cls, Parent.class);
+ Annotations.firstEvaluatorsInHierarchyHaving(cls, Parent.class);
if (NullSafe.isEmpty(evaluators)) {
return; // no parent resolvable
@@ -85,13 +82,11 @@ public class NavigableParentAnnotationFacetFactory extends FacetFactoryAbstract
// we have a @Parent annotated method
method = ((Annotations.MethodEvaluator<Parent>) parentEvaluator).getMethod();
} else if(parentEvaluator instanceof Annotations.FieldEvaluator) {
- // we have a @Parent annotated field (occurs if one uses lombok's @Getter on a field)
- final Field field = ((Annotations.FieldEvaluator<Parent>) parentEvaluator).getField();
- try {
- method = Reflect.getGetter(cls, field.getName());
- } catch (IntrospectionException e) {
- return; // no parent resolvable
- }
+ // we have a @Parent annotated field (useful if one uses lombok's @Getter on a field)
+ method = ((Annotations.FieldEvaluator<Parent>) parentEvaluator).getGetter(cls).orElse(null);
+ if(method==null)
+ return; // code should not be reached, since case should be handled by meta-data validation
+
} else {
return; // no parent resolvable
}
@@ -117,10 +112,10 @@ public class NavigableParentAnnotationFacetFactory extends FacetFactoryAbstract
final Class<?> cls = objectSpec.getCorrespondingClass();
final List<Annotations.Evaluator<Parent>> evaluators =
- Annotations.findFirstInHierarchyHaving(cls, Parent.class);
+ Annotations.firstEvaluatorsInHierarchyHaving(cls, Parent.class);
if (NullSafe.isEmpty(evaluators)) {
- return true; // no conflict
+ return true; // no conflict, continue validation processing
} else if (evaluators.size()>1) {
validationFailures.add(
@@ -128,9 +123,32 @@ public class NavigableParentAnnotationFacetFactory extends FacetFactoryAbstract
+ "contains multiple annotations '@%s', while at most one is allowed.",
objectSpec.getIdentifier().getClassName(),
Parent.class.getName());
+
+ return true; // continue validation processing
+ }
+
+ final Annotations.Evaluator<Parent> parentEvaluator = evaluators.get(0);
+
+ if(parentEvaluator instanceof Annotations.FieldEvaluator) {
+ // we have a @Parent annotated field (useful if one uses lombok's @Getter on a field)
+
+ final Annotations.FieldEvaluator<Parent> fieldEvaluator =
+ (Annotations.FieldEvaluator<Parent>) parentEvaluator;
+
+ if(!fieldEvaluator.getGetter(cls).isPresent()) {
+
+ validationFailures.add(
+ "%s: unable to determine a strategy for retrieval of (navigable) parent for class, "
+ + "field '%s' annotated with '@%s' does not provide a getter.",
+ objectSpec.getIdentifier().getClassName(),
+ fieldEvaluator.getField().getName(),
+ Parent.class.getName());
+ }
+
}
- return true; // no conflict
+
+ return true; //continue validation processing
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/method/NavigableParentFacetMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/method/NavigableParentFacetMethod.java
index 167a048..f74b8df 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/method/NavigableParentFacetMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/method/NavigableParentFacetMethod.java
@@ -20,9 +20,9 @@
package org.apache.isis.core.metamodel.facets.object.navparent.method;
import java.lang.invoke.MethodHandle;
-import java.lang.invoke.MethodHandles;
import java.lang.reflect.Method;
+import org.apache.isis.core.commons.reflection.Reflect;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.object.navparent.NavigableParentFacetAbstract;
@@ -38,7 +38,7 @@ public class NavigableParentFacetMethod extends NavigableParentFacetAbstract {
public NavigableParentFacetMethod(final Method method, final FacetHolder holder) throws IllegalAccessException {
super(holder);
- this.methodHandle = handleOf(method);
+ this.methodHandle = Reflect.handleOf(method);
}
@Override
@@ -50,19 +50,5 @@ public class NavigableParentFacetMethod extends NavigableParentFacetAbstract {
}
}
- // -- HELPER
-
- private static MethodHandle handleOf(Method m) throws IllegalAccessException {
-
- if(!m.isAccessible()) {
- m.setAccessible(true);
- MethodHandle mh = MethodHandles.publicLookup().unreflect(m);
- m.setAccessible(false);
- return mh;
- }
-
- return MethodHandles.publicLookup().unreflect(m);
-
- }
}
--
To stop receiving notification emails like this one, please contact
['"commits@isis.apache.org" <co...@isis.apache.org>'].