This is an automated email from the ASF dual-hosted git repository. danhaywood pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/isis.git
commit 412606959ec63729a5d6451a519d86a3ad2708c7 Author: Andi Huber <ahu...@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 danhayw...@apache.org.