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 2019/12/15 14:16:41 UTC

[isis] 02/02: ISIS-2228: fixes property specific facets with mixins

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

commit 45873d390e74299a45a67148cbcb3a1ddc5ecedb
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sun Dec 15 15:16:29 2019 +0100

    ISIS-2228: fixes property specific facets with mixins
---
 .../metamodel/facets/FacetFactoryAbstract.java     |  4 ++-
 .../metamodel/facets/MethodLiteralConstants.java   | 16 +++++++-----
 .../MethodPrefixBasedFacetFactoryAbstract.java     |  8 ++++++
 .../HideForContextFacetViaMethodFactory.java       | 10 ++------
 .../callbacks/CreatedCallbackFacetFactory.java     |  2 +-
 .../object/callbacks/LoadCallbackFacetFactory.java |  4 +--
 .../callbacks/PersistCallbackFacetFactory.java     |  4 +--
 .../PersistCallbackViaSaveMethodFacetFactory.java  |  4 +--
 .../callbacks/RemoveCallbackFacetFactory.java      |  4 +--
 .../RemoveCallbackViaDeleteMethodFacetFactory.java |  4 +--
 .../callbacks/UpdateCallbackFacetFactory.java      |  4 +--
 .../method/CssClassFacetMethodFactory.java         |  2 +-
 .../method/HiddenObjectFacetViaMethodFactory.java  |  2 +-
 .../object/icon/method/IconFacetMethodFactory.java |  2 +-
 .../facets/object/layout/LayoutFacetFactory.java   |  2 +-
 .../title/methods/TitleFacetViaMethodsFactory.java |  2 +-
 .../method/ValidateObjectFacetMethodFactory.java   |  2 +-
 ...ParameterAutoCompleteFacetViaMethodFactory.java |  2 +-
 ...tionParameterDisabledFacetViaMethodFactory.java |  2 +-
 ...ActionParameterHiddenFacetViaMethodFactory.java |  2 +-
 .../PropertyAutoCompleteFacetMethodFactory.java    | 30 ++++++++++++----------
 .../PropertyChoicesFacetViaMethodFactory.java      | 29 +++++++++++++++------
 .../PropertyDefaultFacetViaMethodFactory.java      | 29 +++++++++++++++------
 .../update/PropertySetAndClearFacetFactory.java    |  2 +-
 .../PropertyMethodsFacetFactoryTest.java           | 17 +++++++-----
 .../DomainModelTest_usingGoodDomain.java           |  2 +-
 26 files changed, 115 insertions(+), 76 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/FacetFactoryAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/FacetFactoryAbstract.java
index 8ce0048..ddb88c6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/FacetFactoryAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/FacetFactoryAbstract.java
@@ -63,7 +63,9 @@ implements FacetFactory, MetaModelContextAware, MetaModelContext.Delegating {
     
     // -- METHOD UTILITITES
     
-    protected static final Class<?>[] NO_PARAMETERS_TYPES = new Class<?>[0];
+    protected static final Class<?> NO_RETURN = (Class<?>)null;
+    protected static final Class<?>[] NO_ARG = new Class<?>[0];
+    protected static final Class<?>[] STRING_ARG = new Class<?>[] {String.class};
 
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/MethodLiteralConstants.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/MethodLiteralConstants.java
index fa6f7a0..eb37661 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/MethodLiteralConstants.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/MethodLiteralConstants.java
@@ -29,10 +29,6 @@ public final class MethodLiteralConstants {
     public static final String GET_PREFIX = "get";
     public static final String IS_PREFIX = "is";
     public static final String SET_PREFIX = "set";
-    public static final String CLEAR_PREFIX = "clear";
-    public static final String MODIFY_PREFIX = "modify";
-    public static final String ADD_TO_PREFIX = "addTo";
-    public static final String REMOVE_FROM_PREFIX = "removeFrom";
 
     public static final String DEFAULT_PREFIX = "default";
     public static final String CHOICES_PREFIX = "choices";
@@ -43,9 +39,6 @@ public final class MethodLiteralConstants {
     public static final String DISABLE_PREFIX = "disable";
     public static final String VALIDATE_PREFIX = "validate";
     
-    public static final String VALIDATE_ADD_TO_PREFIX = "validateAddTo";
-    public static final String VALIDATE_REMOVE_FROM_PREFIX = "validateRemoveFrom";
-
     public static final String CREATED_PREFIX = "created";
     public static final String LOADED_PREFIX = "loaded";
     public static final String LOADING_PREFIX = "loading";
@@ -71,5 +64,14 @@ public final class MethodLiteralConstants {
     public static final String ICON_NAME_PREFIX = "iconName";
     public static final String LAYOUT_METHOD_NAME = "layout";
     
+    // -- DEPRECATIONS
+    
+    @Deprecated public static final String VALIDATE_ADD_TO_PREFIX = "validateAddTo";
+    @Deprecated public static final String VALIDATE_REMOVE_FROM_PREFIX = "validateRemoveFrom";
+    @Deprecated public static final String CLEAR_PREFIX = "clear";
+    @Deprecated public static final String MODIFY_PREFIX = "modify";
+    @Deprecated public static final String ADD_TO_PREFIX = "addTo";
+    @Deprecated public static final String REMOVE_FROM_PREFIX = "removeFrom";
+    
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java
index ddc75a3..59ec8af 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java
@@ -106,4 +106,12 @@ implements MethodPrefixBasedFacetFactory {
         });
     }
 
+    protected boolean isPropertyOrMixinMain(ProcessMethodContext processMethodContext) {
+        return processMethodContext.isMixinMain() 
+                || (
+                        processMethodContext.getFeatureType()!=null // yet to support some JUnit tests
+                        && processMethodContext.getFeatureType().isProperty()
+                   );
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/members/hidden/method/HideForContextFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/members/hidden/method/HideForContextFacetViaMethodFactory.java
index 0fd5f33..7980d8f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/members/hidden/method/HideForContextFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/members/hidden/method/HideForContextFacetViaMethodFactory.java
@@ -31,8 +31,6 @@ import org.apache.isis.metamodel.facets.MethodFinderUtils;
 import org.apache.isis.metamodel.facets.MethodLiteralConstants;
 import org.apache.isis.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract;
 
-import lombok.val;
-
 public class HideForContextFacetViaMethodFactory extends MethodPrefixBasedFacetFactoryAbstract {
 
     private static final Can<String> PREFIXES = Can.ofSingleton(MethodLiteralConstants.HIDE_PREFIX);
@@ -57,12 +55,8 @@ public class HideForContextFacetViaMethodFactory extends MethodPrefixBasedFacetF
     private void attachHideFacetIfHideMethodIsFound(final ProcessMethodContext processMethodContext) {
 
         final Method getter = processMethodContext.getMethod();
-        final String capitalizedName = StringExtensions.asJavaBaseNameStripAccessorPrefixIfRequired(getter.getName());
-
-        val getterName = getter.toString();
-        if(getterName.contains("ProperMemberSupport")) {
-            System.out.println("#hide# " + getter);
-        }
+        final String capitalizedName = 
+                StringExtensions.asJavaBaseNameStripAccessorPrefixIfRequired(getter.getName());
         
         final Class<?> cls = processMethodContext.getCls();
         Method hideMethod = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.HIDE_PREFIX + capitalizedName, boolean.class, new Class[] {});
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/CreatedCallbackFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/CreatedCallbackFacetFactory.java
index 9bd3ff7..2381722 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/CreatedCallbackFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/CreatedCallbackFacetFactory.java
@@ -40,7 +40,7 @@ public class CreatedCallbackFacetFactory extends MethodPrefixBasedFacetFactoryAb
         val cls = processClassContext.getCls();
         val facetHolder = processClassContext.getFacetHolder();
 
-        val method = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.CREATED_PREFIX, void.class, NO_PARAMETERS_TYPES);
+        val method = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.CREATED_PREFIX, void.class, NO_ARG);
         if (method != null) {
             super.addFacet(new CreatedCallbackFacetViaMethod(method, facetHolder));
             processClassContext.removeMethod(method);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/LoadCallbackFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/LoadCallbackFacetFactory.java
index da1131b..dc6f771 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/LoadCallbackFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/LoadCallbackFacetFactory.java
@@ -48,13 +48,13 @@ public class LoadCallbackFacetFactory extends MethodPrefixBasedFacetFactoryAbstr
         val facetHolder = processClassContext.getFacetHolder();
 
         Method method = null;
-        method = MethodFinderUtils.findMethod(cls, LOADING_PREFIX, void.class, NO_PARAMETERS_TYPES);
+        method = MethodFinderUtils.findMethod(cls, LOADING_PREFIX, void.class, NO_ARG);
         if (method != null) {
             processClassContext.removeMethod(method);
             super.addFacet(new LoadingCallbackFacetViaMethod(method, facetHolder));
         }
 
-        method = MethodFinderUtils.findMethod(cls, LOADED_PREFIX, void.class, NO_PARAMETERS_TYPES);
+        method = MethodFinderUtils.findMethod(cls, LOADED_PREFIX, void.class, NO_ARG);
         if (method != null) {
             processClassContext.removeMethod(method);
             super.addFacet(new LoadedCallbackFacetViaMethod(method, facetHolder));
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/PersistCallbackFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/PersistCallbackFacetFactory.java
index b1f1f45..0b99dd2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/PersistCallbackFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/PersistCallbackFacetFactory.java
@@ -50,7 +50,7 @@ public class PersistCallbackFacetFactory extends MethodPrefixBasedFacetFactoryAb
         val facets = new ArrayList<Facet>();
 
         Method method = null;
-        method = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.PERSISTING_PREFIX, void.class, NO_PARAMETERS_TYPES);
+        method = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.PERSISTING_PREFIX, void.class, NO_ARG);
         if (method != null) {
             processClassContext.removeMethod(method);
             val facet = facetHolder.getFacet(PersistingCallbackFacet.class);
@@ -61,7 +61,7 @@ public class PersistCallbackFacetFactory extends MethodPrefixBasedFacetFactoryAb
             }
         }
 
-        method = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.PERSISTED_PREFIX, void.class, NO_PARAMETERS_TYPES);
+        method = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.PERSISTED_PREFIX, void.class, NO_ARG);
         if (method != null) {
             processClassContext.removeMethod(method);
             val facet = facetHolder.getFacet(PersistedCallbackFacet.class);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/PersistCallbackViaSaveMethodFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/PersistCallbackViaSaveMethodFacetFactory.java
index 97ed2bc..6c6e976 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/PersistCallbackViaSaveMethodFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/PersistCallbackViaSaveMethodFacetFactory.java
@@ -50,7 +50,7 @@ public class PersistCallbackViaSaveMethodFacetFactory extends MethodPrefixBasedF
         val facets = new ArrayList<Facet>();
 
         Method method = null;
-        method = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.SAVING_PREFIX, void.class, NO_PARAMETERS_TYPES);
+        method = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.SAVING_PREFIX, void.class, NO_ARG);
         if (method != null) {
             processClassContext.removeMethod(method);
             val facet = facetHolder.getFacet(PersistingCallbackFacet.class);
@@ -61,7 +61,7 @@ public class PersistCallbackViaSaveMethodFacetFactory extends MethodPrefixBasedF
             }
         }
 
-        method = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.SAVED_PREFIX, void.class, NO_PARAMETERS_TYPES);
+        method = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.SAVED_PREFIX, void.class, NO_ARG);
         if (method != null) {
             processClassContext.removeMethod(method);
             val facet = facetHolder.getFacet(PersistedCallbackFacet.class);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/RemoveCallbackFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/RemoveCallbackFacetFactory.java
index 1d8fa23..8e9047d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/RemoveCallbackFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/RemoveCallbackFacetFactory.java
@@ -53,7 +53,7 @@ public class RemoveCallbackFacetFactory extends MethodPrefixBasedFacetFactoryAbs
 
         Method method = MethodFinderUtils
                 .findMethod(cls, REMOVING_PREFIX, void.class,
-                        NO_PARAMETERS_TYPES);
+                        NO_ARG);
         if (method != null) {
             processClassContext.removeMethod(method);
             val facet = facetHolder.getFacet(RemovingCallbackFacet.class);
@@ -64,7 +64,7 @@ public class RemoveCallbackFacetFactory extends MethodPrefixBasedFacetFactoryAbs
             }
         }
 
-        method = MethodFinderUtils.findMethod(cls, REMOVED_PREFIX, void.class, NO_PARAMETERS_TYPES);
+        method = MethodFinderUtils.findMethod(cls, REMOVED_PREFIX, void.class, NO_ARG);
         if (method != null) {
             processClassContext.removeMethod(method);
             val facet = facetHolder.getFacet(RemovedCallbackFacet.class);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/RemoveCallbackViaDeleteMethodFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/RemoveCallbackViaDeleteMethodFacetFactory.java
index 0024dab..174b731 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/RemoveCallbackViaDeleteMethodFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/RemoveCallbackViaDeleteMethodFacetFactory.java
@@ -53,7 +53,7 @@ public class RemoveCallbackViaDeleteMethodFacetFactory extends MethodPrefixBased
         val facets = new ArrayList<Facet>();
 
         Method method = null;
-        method = MethodFinderUtils.findMethod(cls, DELETING_PREFIX, void.class, NO_PARAMETERS_TYPES);
+        method = MethodFinderUtils.findMethod(cls, DELETING_PREFIX, void.class, NO_ARG);
         if (method != null) {
             processClassContext.removeMethod(method);
             final RemovingCallbackFacet facet = facetHolder.getFacet(RemovingCallbackFacet.class);
@@ -64,7 +64,7 @@ public class RemoveCallbackViaDeleteMethodFacetFactory extends MethodPrefixBased
             }
         }
 
-        method = MethodFinderUtils.findMethod(cls, DELETED_PREFIX, void.class, NO_PARAMETERS_TYPES);
+        method = MethodFinderUtils.findMethod(cls, DELETED_PREFIX, void.class, NO_ARG);
         if (method != null) {
             processClassContext.removeMethod(method);
             val facet = facetHolder.getFacet(RemovedCallbackFacet.class);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/UpdateCallbackFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/UpdateCallbackFacetFactory.java
index a64428d..6967839 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/UpdateCallbackFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/callbacks/UpdateCallbackFacetFactory.java
@@ -50,13 +50,13 @@ public class UpdateCallbackFacetFactory extends MethodPrefixBasedFacetFactoryAbs
         val facets = new ArrayList<Facet>();
 
         Method method = null;
-        method = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.UPDATING_PREFIX, void.class, NO_PARAMETERS_TYPES);
+        method = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.UPDATING_PREFIX, void.class, NO_ARG);
         if (method != null) {
             processClassContext.removeMethod(method);
             facets.add(new UpdatingCallbackFacetViaMethod(method, facetHolder));
         }
 
-        method = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.UPDATED_PREFIX, void.class, NO_PARAMETERS_TYPES);
+        method = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.UPDATED_PREFIX, void.class, NO_ARG);
         if (method != null) {
             processClassContext.removeMethod(method);
             facets.add(new UpdatedCallbackFacetViaMethod(method, facetHolder));
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/cssclass/method/CssClassFacetMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/cssclass/method/CssClassFacetMethodFactory.java
index 21d0301..d6a0ea1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/cssclass/method/CssClassFacetMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/cssclass/method/CssClassFacetMethodFactory.java
@@ -42,7 +42,7 @@ public class CssClassFacetMethodFactory extends MethodPrefixBasedFacetFactoryAbs
         final FacetHolder facetHolder = processClassContext.getFacetHolder();
 
         final Method method = MethodFinderUtils.findMethod(
-                cls, MethodLiteralConstants.CSS_CLASS_PREFIX, String.class, NO_PARAMETERS_TYPES);
+                cls, MethodLiteralConstants.CSS_CLASS_PREFIX, String.class, NO_ARG);
         if (method == null) {
             return;
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/hidden/method/HiddenObjectFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/hidden/method/HiddenObjectFacetViaMethodFactory.java
index 0ee479a..a7c859a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/hidden/method/HiddenObjectFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/hidden/method/HiddenObjectFacetViaMethodFactory.java
@@ -78,7 +78,7 @@ public class HiddenObjectFacetViaMethodFactory extends MethodPrefixBasedFacetFac
         final FacetHolder facetHolder = processClassContext.getFacetHolder();
 
         final Method method = MethodFinderUtils.findMethod(
-                cls, MethodLiteralConstants.HIDDEN_PREFIX, returnType, NO_PARAMETERS_TYPES);
+                cls, MethodLiteralConstants.HIDDEN_PREFIX, returnType, NO_ARG);
         if (method == null) {
             return false;
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/icon/method/IconFacetMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/icon/method/IconFacetMethodFactory.java
index be1159e..abf5a04 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/icon/method/IconFacetMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/icon/method/IconFacetMethodFactory.java
@@ -43,7 +43,7 @@ public class IconFacetMethodFactory extends MethodPrefixBasedFacetFactoryAbstrac
         final FacetHolder facetHolder = processClassContext.getFacetHolder();
 
         final Method method = MethodFinderUtils.findMethod(
-                cls, MethodLiteralConstants.ICON_NAME_PREFIX, String.class, NO_PARAMETERS_TYPES);
+                cls, MethodLiteralConstants.ICON_NAME_PREFIX, String.class, NO_ARG);
         if (method == null) {
             return;
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/layout/LayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/layout/LayoutFacetFactory.java
index e65cb43..d5fc851 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/layout/LayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/layout/LayoutFacetFactory.java
@@ -42,7 +42,7 @@ public class LayoutFacetFactory extends MethodPrefixBasedFacetFactoryAbstract {
         final FacetHolder facetHolder = processClassContext.getFacetHolder();
 
         final Method method = MethodFinderUtils.findMethod(
-                cls, MethodLiteralConstants.LAYOUT_METHOD_NAME, String.class, NO_PARAMETERS_TYPES);
+                cls, MethodLiteralConstants.LAYOUT_METHOD_NAME, String.class, NO_ARG);
 
         final LayoutFacet facet;
         if (method == null) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/title/methods/TitleFacetViaMethodsFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/title/methods/TitleFacetViaMethodsFactory.java
index 5051f55..da2bcfd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/title/methods/TitleFacetViaMethodsFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/title/methods/TitleFacetViaMethodsFactory.java
@@ -58,7 +58,7 @@ public class TitleFacetViaMethodsFactory extends MethodPrefixBasedFacetFactoryAb
         Method method = MethodFinderUtils.findMethod_returningText(
                 cls,
                 TITLE,
-                NO_PARAMETERS_TYPES);
+                NO_ARG);
         if (method != null) {
             processClassContext.removeMethod(method);
             final TranslationService translationService = getTranslationService();
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/validating/validateobject/method/ValidateObjectFacetMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/validating/validateobject/method/ValidateObjectFacetMethodFactory.java
index 98efe80..addc9bc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/validating/validateobject/method/ValidateObjectFacetMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/validating/validateobject/method/ValidateObjectFacetMethodFactory.java
@@ -48,7 +48,7 @@ public class ValidateObjectFacetMethodFactory extends MethodPrefixBasedFacetFact
         final Method method = MethodFinderUtils.findMethod_returningText(
                 cls,
                 VALIDATE_PREFIX,
-                NO_PARAMETERS_TYPES);
+                NO_ARG);
         if (method != null) {
             final TranslationService translationService = getTranslationService();
             // sadness: same as in TranslationFactory
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethodFactory.java
index 0debc33..cbba636 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethodFactory.java
@@ -99,7 +99,7 @@ public class ActionParameterAutoCompleteFacetViaMethodFactory extends MethodPref
                 returnTypes,
                 cls,
                 name,
-                new Class[]{String.class});
+                STRING_ARG);
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethodFactory.java
index a0eefe0..a1ed4eb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethodFactory.java
@@ -69,7 +69,7 @@ public class ActionParameterDisabledFacetViaMethodFactory extends MethodPrefixBa
             val disableMethod = MethodFinderUtils.findMethod_returningText(
                     cls,
                     hideName,
-                    NO_PARAMETERS_TYPES);
+                    NO_ARG);
 
             if (disableMethod != null) {
                 processParameterContext.removeMethod(disableMethod);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethodFactory.java
index aecaf64..b6b0b91 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethodFactory.java
@@ -67,7 +67,7 @@ public class ActionParameterHiddenFacetViaMethodFactory extends MethodPrefixBase
                     cls,
                     hideName,
                     boolean.class,
-                    NO_PARAMETERS_TYPES);
+                    NO_ARG);
 
             if (hideMethod != null) {
                 processParameterContext.removeMethod(hideMethod);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethodFactory.java
index 41bb625..2d127ee 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethodFactory.java
@@ -19,8 +19,6 @@
 
 package org.apache.isis.metamodel.facets.properties.autocomplete.method;
 
-import java.lang.reflect.Method;
-
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.commons.StringExtensions;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -37,7 +35,8 @@ public class PropertyAutoCompleteFacetMethodFactory extends MethodPrefixBasedFac
     private static final Can<String> PREFIXES = Can.ofSingleton(MethodLiteralConstants.AUTO_COMPLETE_PREFIX);
 
     public PropertyAutoCompleteFacetMethodFactory() {
-        super(FeatureType.PROPERTIES_ONLY, OrphanValidation.VALIDATE, PREFIXES);
+        // to also support properties from mixins, need to not only include properties but also actions
+        super(FeatureType.PROPERTIES_AND_ACTIONS, OrphanValidation.VALIDATE, PREFIXES);
     }
 
     @Override
@@ -48,22 +47,25 @@ public class PropertyAutoCompleteFacetMethodFactory extends MethodPrefixBasedFac
 
     private void attachPropertyAutoCompleteFacetIfChoicesMethodIsFound(
             final ProcessMethodContext processMethodContext) {
-
-        final Method getter = processMethodContext.getMethod();
-        final String capitalizedName = StringExtensions.asJavaBaseName(getter.getName());
-
-        val getterName = getter.toString();
-        if(getterName.contains("ProperMemberSupport")) {
-            System.out.println("#autoComplete# " + getter);
+        
+        // optimization step, not strictly required
+        if(!super.isPropertyOrMixinMain(processMethodContext)) {
+            return;
         }
+
+        val getterOrMixinMain = processMethodContext.getMethod();
+        val capitalizedName = processMethodContext.isMixinMain() 
+                ? StringExtensions.asCapitalizedName(getterOrMixinMain.getName())
+                        : StringExtensions.asJavaBaseName(getterOrMixinMain.getName());
         
-        final Class<?> cls = processMethodContext.getCls();
-        final Class<?> returnType = getter.getReturnType();
-        final Method autoCompleteMethod = MethodFinderUtils
+        val cls = processMethodContext.getCls();
+        val returnType = getterOrMixinMain.getReturnType();
+        val autoCompleteMethod = MethodFinderUtils
                 .findMethod(
                         cls, 
                         MethodLiteralConstants.AUTO_COMPLETE_PREFIX + capitalizedName, 
-                        (Class<?>)null, new Class[]{String.class});
+                        NO_RETURN, 
+                        STRING_ARG);
         if (autoCompleteMethod == null) {
             return;
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethodFactory.java
index 368e8dc..789d518 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethodFactory.java
@@ -19,8 +19,6 @@
 
 package org.apache.isis.metamodel.facets.properties.choices.method;
 
-import java.lang.reflect.Method;
-
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.commons.StringExtensions;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -30,12 +28,15 @@ import org.apache.isis.metamodel.facets.MethodFinderUtils;
 import org.apache.isis.metamodel.facets.MethodLiteralConstants;
 import org.apache.isis.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract;
 
+import lombok.val;
+
 public class PropertyChoicesFacetViaMethodFactory extends MethodPrefixBasedFacetFactoryAbstract {
 
     private static final Can<String> PREFIXES = Can.ofSingleton(MethodLiteralConstants.CHOICES_PREFIX);
 
     public PropertyChoicesFacetViaMethodFactory() {
-        super(FeatureType.PROPERTIES_ONLY, OrphanValidation.VALIDATE, PREFIXES);
+     // to also support properties from mixins, need to not only include properties but also actions
+        super(FeatureType.PROPERTIES_AND_ACTIONS, OrphanValidation.VALIDATE, PREFIXES);
     }
 
     @Override
@@ -46,12 +47,24 @@ public class PropertyChoicesFacetViaMethodFactory extends MethodPrefixBasedFacet
 
     private void attachPropertyChoicesFacetIfChoicesMethodIsFound(final ProcessMethodContext processMethodContext) {
 
-        final Method getMethod = processMethodContext.getMethod();
-        final String capitalizedName = StringExtensions.asJavaBaseName(getMethod.getName());
+        // optimization step, not strictly required
+        if(!super.isPropertyOrMixinMain(processMethodContext)) {
+            return;
+        }
+
+        val getterOrMixinMain = processMethodContext.getMethod();
+        val capitalizedName = processMethodContext.isMixinMain() 
+                ? StringExtensions.asCapitalizedName(getterOrMixinMain.getName())
+                        : StringExtensions.asJavaBaseName(getterOrMixinMain.getName());
 
-        final Class<?> cls = processMethodContext.getCls();
-        final Class<?> returnType = getMethod.getReturnType();
-        final Method choicesMethod = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.CHOICES_PREFIX + capitalizedName, (Class<?>)null, NO_PARAMETERS_TYPES);
+        val cls = processMethodContext.getCls();
+        val returnType = getterOrMixinMain.getReturnType();
+        val choicesMethod = MethodFinderUtils
+                .findMethod(
+                    cls, 
+                    MethodLiteralConstants.CHOICES_PREFIX + capitalizedName, 
+                    NO_RETURN, 
+                    NO_ARG);
         if (choicesMethod == null) {
             return;
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethodFactory.java
index d9298a0..052010b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethodFactory.java
@@ -19,8 +19,6 @@
 
 package org.apache.isis.metamodel.facets.properties.defaults.method;
 
-import java.lang.reflect.Method;
-
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.commons.StringExtensions;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -30,12 +28,15 @@ import org.apache.isis.metamodel.facets.MethodFinderUtils;
 import org.apache.isis.metamodel.facets.MethodLiteralConstants;
 import org.apache.isis.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract;
 
+import lombok.val;
+
 public class PropertyDefaultFacetViaMethodFactory extends MethodPrefixBasedFacetFactoryAbstract {
 
     private static final Can<String> PREFIXES = Can.ofSingleton(MethodLiteralConstants.DEFAULT_PREFIX);
 
     public PropertyDefaultFacetViaMethodFactory() {
-        super(FeatureType.PROPERTIES_ONLY, OrphanValidation.VALIDATE, PREFIXES);
+     // to also support properties from mixins, need to not only include properties but also actions
+        super(FeatureType.PROPERTIES_AND_ACTIONS, OrphanValidation.VALIDATE, PREFIXES);
     }
 
     @Override
@@ -46,12 +47,24 @@ public class PropertyDefaultFacetViaMethodFactory extends MethodPrefixBasedFacet
 
     private void attachPropertyDefaultFacetIfDefaultMethodIsFound(final ProcessMethodContext processMethodContext) {
 
-        final Method getMethod = processMethodContext.getMethod();
-        final String capitalizedName = StringExtensions.asJavaBaseName(getMethod.getName());
+        // optimization step, not strictly required
+        if(!super.isPropertyOrMixinMain(processMethodContext)) {
+            return;
+        }
+
+        val getterOrMixinMain = processMethodContext.getMethod();
+        val capitalizedName = processMethodContext.isMixinMain() 
+                ? StringExtensions.asCapitalizedName(getterOrMixinMain.getName())
+                        : StringExtensions.asJavaBaseName(getterOrMixinMain.getName());
 
-        final Class<?> cls = processMethodContext.getCls();
-        final Class<?> returnType = getMethod.getReturnType();
-        final Method method = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.DEFAULT_PREFIX + capitalizedName, returnType, NO_PARAMETERS_TYPES);
+        val cls = processMethodContext.getCls();
+        val returnType = getterOrMixinMain.getReturnType();
+        val method = MethodFinderUtils
+                .findMethod(
+                    cls,
+                    MethodLiteralConstants.DEFAULT_PREFIX + capitalizedName, 
+                    returnType, 
+                    NO_ARG);
         if (method == null) {
             return;
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/PropertySetAndClearFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/PropertySetAndClearFacetFactory.java
index 1d7ab0b..38e1982 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/PropertySetAndClearFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/PropertySetAndClearFacetFactory.java
@@ -95,7 +95,7 @@ public class PropertySetAndClearFacetFactory extends MethodPrefixBasedFacetFacto
         final FacetHolder property = processMethodContext.getFacetHolder();
 
         final String capitalizedName = StringExtensions.asJavaBaseName(getMethod.getName());
-        final Method clearMethod = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.CLEAR_PREFIX + capitalizedName, void.class, NO_PARAMETERS_TYPES);
+        final Method clearMethod = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.CLEAR_PREFIX + capitalizedName, void.class, NO_ARG);
 
         if (clearMethod == null) {
             return null;
diff --git a/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java
index 04eaf1d..23d4314 100644
--- a/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java
@@ -19,11 +19,12 @@
 
 package org.apache.isis.metamodel.facets.properties;
 
-import lombok.val;
-
 import java.lang.reflect.Method;
 
+import org.jmock.auto.Mock;
+
 import org.apache.isis.metamodel.facetapi.Facet;
+import org.apache.isis.metamodel.facetapi.FeatureType;
 import org.apache.isis.metamodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.metamodel.facets.FacetFactory.ProcessMethodContext;
 import org.apache.isis.metamodel.facets.members.disabled.DisabledFacet;
@@ -63,7 +64,8 @@ import org.apache.isis.metamodel.facets.properties.validating.method.PropertyVal
 import org.apache.isis.metamodel.facets.properties.validating.method.PropertyValidateFacetViaMethodFactory;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.jmock.auto.Mock;
+
+import lombok.val;
 
 public class PropertyMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
 
@@ -362,7 +364,8 @@ public class PropertyMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
         final Method propertyAccessorMethod = findMethod(Customer.class, "getFirstName");
         final Method propertyChoicesMethod = findMethod(Customer.class, "choicesFirstName");
 
-        facetFactory.process(new ProcessMethodContext(Customer.class, null, propertyAccessorMethod, methodRemover, facetedMethod));
+        facetFactory.process(new ProcessMethodContext(
+                Customer.class, FeatureType.PROPERTY, propertyAccessorMethod, methodRemover, facetedMethod));
 
         final Facet facet = facetedMethod.getFacet(PropertyChoicesFacet.class);
         assertNotNull(facet);
@@ -403,7 +406,8 @@ public class PropertyMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
         final Method propertyAccessorMethod = findMethod(Customer.class, "getFirstName");
         final Method propertyAutoCompleteMethod = findMethod(Customer.class, "autoCompleteFirstName", new Class[]{String.class});
 
-        facetFactory.process(new ProcessMethodContext(Customer.class, null, propertyAccessorMethod, methodRemover, facetedMethod));
+        facetFactory.process(new ProcessMethodContext(
+                Customer.class, FeatureType.PROPERTY, propertyAccessorMethod, methodRemover, facetedMethod));
 
         final Facet facet = facetedMethod.getFacet(PropertyAutoCompleteFacet.class);
         assertNotNull(facet);
@@ -432,7 +436,8 @@ public class PropertyMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
         final Method propertyAccessorMethod = findMethod(Customer.class, "getFirstName");
         final Method propertyDefaultMethod = findMethod(Customer.class, "defaultFirstName");
 
-        facetFactory.process(new ProcessMethodContext(Customer.class, null, propertyAccessorMethod, methodRemover, facetedMethod));
+        facetFactory.process(new ProcessMethodContext(
+                Customer.class, FeatureType.PROPERTY, propertyAccessorMethod, methodRemover, facetedMethod));
 
         final Facet facet = facetedMethod.getFacet(PropertyDefaultFacet.class);
         assertNotNull(facet);
diff --git a/examples/smoketests/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java b/examples/smoketests/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
index de6ce62..12dbed3 100644
--- a/examples/smoketests/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
+++ b/examples/smoketests/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
@@ -91,7 +91,7 @@ class DomainModelTest_usingGoodDomain {
     
     @Test
     void goodDomain_shouldPassValidation() {
-        debug();
+        //debug();
         assertFalse(specificationLoader.snapshotSpecifications().isEmpty());
         
         val validateDomainModel = new ValidateDomainModel(specificationLoader);