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/01/22 07:25:50 UTC

[isis] branch master updated: ISIS-2297: tiny readability improvements on MixinFacetAbstract

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 6ba69c0  ISIS-2297: tiny readability improvements on MixinFacetAbstract
6ba69c0 is described below

commit 6ba69c059bea61d933bf5814d9b3b65181dae637
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Jan 22 08:24:32 2021 +0100

    ISIS-2297: tiny readability improvements on MixinFacetAbstract
---
 .../facets/object/mixin/MixinFacetAbstract.java    | 29 +++++++++++++---------
 1 file changed, 17 insertions(+), 12 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract.java
index caff110..eecdca1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract.java
@@ -38,7 +38,7 @@ extends SingleValueFacetAbstract<String>
 implements MixinFacet {
 
     private final Class<?> mixinType;
-    private final Class<?> constructorType;
+    private final Class<?> holderType;
     private final Constructor<?> constructor;
 
     public static Class<? extends Facet> type() {
@@ -54,7 +54,8 @@ implements MixinFacet {
         super(type(), value, holder);
         this.mixinType = mixinType;
         this.constructor = constructor;
-        this.constructorType = constructor.getParameterTypes()[0];
+        // by mixin convention: first constructor argument is identified as the holder type
+        this.holderType = constructor.getParameterTypes()[0]; 
     }
 
     @Override
@@ -62,7 +63,7 @@ implements MixinFacet {
         if (candidateDomainType == null) {
             return false;
         }
-        return constructorType.isAssignableFrom(candidateDomainType);
+        return holderType.isAssignableFrom(candidateDomainType);
     }
 
     @Override
@@ -91,12 +92,8 @@ implements MixinFacet {
 
     @Override
     public boolean isCandidateForMain(Method method) {
-        if (method.getName().equals(super.value())) {
-            final Class<?> constructorDeclaringClass = constructor.getDeclaringClass();
-            final Class<?> methodDeclaringClass = method.getDeclaringClass();
-            if (methodDeclaringClass.isAssignableFrom(constructorDeclaringClass)) return true;
-        }
-        return false;
+        return method.getName().equals(getMainMethodName())
+                && method.getDeclaringClass().isAssignableFrom(constructor.getDeclaringClass());
     }
 
     @Override
@@ -105,22 +102,30 @@ implements MixinFacet {
         val holderPojo = holderPojoFor(mixinPojo, policy);
         return holderPojo!=null
                 ? getObjectManager().adapt(holderPojo)
-                        : null;
+                : null;
     }
 
     @Override
     public void appendAttributesTo(final Map<String, Object> attributeMap) {
         super.appendAttributesTo(attributeMap);
         attributeMap.put("mixinType", mixinType);
-        attributeMap.put("constructorType", constructorType);
+        attributeMap.put("holderType", holderType);
     }
 
+    /**
+     * The mixin's main method name.
+     * @implNote as stored in the SingleValueFacetAbstract's value field
+     */
+    public String getMainMethodName() {
+        return super.value();
+    }
+    
     // -- HELPER
 
     private Object holderPojoFor(Object mixinPojo, Policy policy) {
         val mixinFields = mixinType.getFields();
         for (val mixinField : mixinFields) {
-            if(mixinField.getType().isAssignableFrom(constructorType)) {
+            if(mixinField.getType().isAssignableFrom(holderType)) {
                 try {
                     val holderPojo = _Reflect.getFieldOn(mixinField, mixinPojo);
                     return holderPojo;