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/14 11:33:48 UTC

[isis] branch master updated: ISIS-2226: fixes incubator:model not considering action-parameter facets

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 d0a24e0  ISIS-2226: fixes incubator:model not considering action-parameter facets
d0a24e0 is described below

commit d0a24e0a622f43379bbee86ee0371dc6575069ca
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Dec 14 12:33:39 2019 +0100

    ISIS-2226: fixes incubator:model not considering action-parameter facets
    
    also reverts annotation @Supporting -> @Model, because for the moment,
    using the more generic idea of @Model being the opposite of
    @Programmatic is much simpler to implement when it comes to meta-model
    validation
---
 .../ActionParameterChoicesFacetAbstract.java       |  4 +-
 .../ActionParameterChoicesFacetViaMethod.java      |  7 +++-
 .../metamodel/interactions/InteractionUtils.java   | 10 +++--
 .../services/grid/GridSystemServiceAbstract.java   |  7 ++--
 .../grid/bootstrap3/GridSystemServiceBS3.java      | 10 ++---
 .../isis/metamodel/spec/ObjectSpecification.java   | 16 +++-----
 .../isis/metamodel/spec/feature/ObjectMember.java  | 45 ++++++++-------------
 .../specimpl/dflt/ObjectSpecificationDefault.java  | 41 +++++++++++--------
 .../metamodel/JdoProgrammingModelPlugin.java       |  2 +-
 ...actoryDefault_wrappedObject_transient_Test.java |  6 ---
 .../handlers/DomainObjectInvocationHandler.java    |  9 +++--
 .../viewer/integration/WebRequestCycleForIsis.java |  4 +-
 .../actions/depargs/DependentArgsActionDemo.java   | 46 ++++++++++++++++++++++
 .../DependentArgsActionDemo_useAutoComplete.java   |  2 +-
 .../DependentArgsActionDemo_useChoices.java        |  2 +-
 .../DependentArgsActionDemo_useDefault.java        |  2 +-
 .../DependentArgsActionDemo_useDisable.java        |  2 +-
 .../depargs/DependentArgsActionDemo_useHide.java   |  2 +-
 .../main/java/demoapp/dom/tooltip/TooltipDemo.java |  6 +--
 .../bad/Configuration_usingInvalidDomain.java      |  6 +++
 .../model/bad/InvalidOrphanedActionSupport.java    |  4 +-
 .../bad/InvalidOrphanedCollectionSupport.java      |  4 +-
 .../model/bad/InvalidOrphanedPropertySupport.java  |  4 +-
 .../model/good/Configuration_usingValidDomain.java |  6 +++
 .../testdomain/model/good/ProperActionSupport.java |  6 +--
 .../model/good/ProperActionSupport_action.java     |  6 +--
 .../model/good/ProperActionSupport_collection.java |  6 +--
 .../good/ProperActionSupport_collection2.java      |  4 +-
 .../model/good/ProperActionSupport_mixin.java      |  4 +-
 .../model/good/ProperActionSupport_property.java   |  6 +--
 .../model/good/ProperActionSupport_property2.java  |  4 +-
 .../model/good/ProperCollectionSupport.java        |  4 +-
 .../model/good/ProperPrefixedMember.java           |  4 +-
 .../model/good/ProperPropertySupport.java          |  4 +-
 .../DomainModelTest_usingGoodDomain.java           |  2 +-
 .../annotation/{Supporting.java => Model.java}     |  4 +-
 .../SupportingMethodValidatorRefinerFactory.java   | 30 ++++++++++----
 37 files changed, 197 insertions(+), 134 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacetAbstract.java
index a03b3ed..ac99551 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacetAbstract.java
@@ -23,7 +23,9 @@ import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 
-public abstract class ActionParameterChoicesFacetAbstract extends FacetAbstract implements ActionParameterChoicesFacet {
+public abstract class ActionParameterChoicesFacetAbstract 
+extends FacetAbstract 
+implements ActionParameterChoicesFacet {
 
     public static Class<? extends Facet> type() {
         return ActionParameterChoicesFacet.class;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
index bde1327..9bf1958 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
@@ -35,7 +35,9 @@ import org.apache.isis.metamodel.facets.param.choices.ActionParameterChoicesFace
 import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 
-public class ActionParameterChoicesFacetViaMethod extends ActionParameterChoicesFacetAbstract implements ImperativeFacet {
+public class ActionParameterChoicesFacetViaMethod 
+extends ActionParameterChoicesFacetAbstract 
+implements ImperativeFacet {
 
     private final Method method;
     private final Class<?> choicesType;
@@ -95,7 +97,8 @@ public class ActionParameterChoicesFacetViaMethod extends ActionParameterChoices
         return "method=" + method + ",type=" + choicesType;
     }
 
-    @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+    @Override 
+    public void appendAttributesTo(final Map<String, Object> attributeMap) {
         super.appendAttributesTo(attributeMap);
         ImperativeFacet.Util.appendAttributesTo(this, attributeMap);
         attributeMap.put("choicesType", choicesType);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/InteractionUtils.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/InteractionUtils.java
index 64901b2..65bedd5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/InteractionUtils.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/InteractionUtils.java
@@ -36,7 +36,8 @@ public final class InteractionUtils {
         
         facetHolder.streamFacets(HidingInteractionAdvisor.class)
         .forEach(advisor->{
-            iaResult.advise(advisor.hides(context), advisor);
+            val hidingReason = advisor.hides(context);
+            iaResult.advise(hidingReason, advisor);
         });
         
         return iaResult;
@@ -48,8 +49,8 @@ public final class InteractionUtils {
         
         facetHolder.streamFacets(DisablingInteractionAdvisor.class)
         .forEach(advisor->{
-            final String disables = advisor.disables(context);
-            isResult.advise(disables, advisor);
+            val disablingReason = advisor.disables(context);
+            isResult.advise(disablingReason, advisor);
         });
         
         return isResult;
@@ -61,7 +62,8 @@ public final class InteractionUtils {
         
         facetHolder.streamFacets(ValidatingInteractionAdvisor.class)
         .forEach(advisor->{
-            iaResult.advise(advisor.invalidates(context), advisor);
+            val invalidatingReason = advisor.invalidates(context); 
+            iaResult.advise(invalidatingReason, advisor);
         });
         
         return iaResult;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/GridSystemServiceAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/GridSystemServiceAbstract.java
index 2b71d7c..d4a9a34 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/GridSystemServiceAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/GridSystemServiceAbstract.java
@@ -54,7 +54,6 @@ import org.apache.isis.applib.services.message.MessageService;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -205,11 +204,11 @@ implements GridSystemService<G> {
         final ObjectSpecification objectSpec = specificationLoader.loadSpecification(domainClass);
 
         final Map<String, OneToOneAssociation> oneToOneAssociationById =
-                ObjectMember.Util.mapById(getOneToOneAssociations(objectSpec));
+                ObjectMember.mapById(getOneToOneAssociations(objectSpec));
         final Map<String, OneToManyAssociation> oneToManyAssociationById =
-                ObjectMember.Util.mapById(getOneToManyAssociations(objectSpec));
+                ObjectMember.mapById(getOneToManyAssociations(objectSpec));
         final Map<String, ObjectAction> objectActionById =
-                ObjectMember.Util.mapById(objectSpec.streamObjectActions(Contributed.INCLUDED));
+                ObjectMember.mapById(objectSpec.streamObjectActions(Contributed.INCLUDED));
 
 
         final AtomicInteger propertySequence = new AtomicInteger(0);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
index cb1f1d1..adbc039 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
@@ -29,13 +29,13 @@ import java.util.stream.Collectors;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.annotation.Primary;
 import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.applib.layout.component.ActionLayoutData;
 import org.apache.isis.applib.layout.component.ActionLayoutDataOwner;
 import org.apache.isis.applib.layout.component.CollectionLayoutData;
@@ -71,7 +71,6 @@ import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
 
 import static org.apache.isis.commons.internal.base._NullSafe.stream;
 
-import lombok.extern.log4j.Log4j2;
 import lombok.val;
 
 @Service
@@ -79,7 +78,6 @@ import lombok.val;
 @Order(OrderPrecedence.MIDPOINT)
 @Primary
 @Qualifier("BS3")
-@Log4j2
 public class GridSystemServiceBS3 extends GridSystemServiceAbstract<BS3Grid> {
 
     public static final String TNS = "http://isis.apache.org/applib/layout/grid/bootstrap3";
@@ -185,11 +183,11 @@ public class GridSystemServiceBS3 extends GridSystemServiceAbstract<BS3Grid> {
         final ObjectSpecification objectSpec = specificationLoader.loadSpecification(domainClass);
 
         final Map<String, OneToOneAssociation> oneToOneAssociationById =
-                ObjectMember.Util.mapById(getOneToOneAssociations(objectSpec));
+                ObjectMember.mapById(getOneToOneAssociations(objectSpec));
         final Map<String, OneToManyAssociation> oneToManyAssociationById =
-                ObjectMember.Util.mapById(getOneToManyAssociations(objectSpec));
+                ObjectMember.mapById(getOneToManyAssociations(objectSpec));
         final Map<String, ObjectAction> objectActionById =
-                ObjectMember.Util.mapById(
+                ObjectMember.mapById(
                         objectSpec.streamObjectActions(Contributed.INCLUDED));
 
         final BS3Grid bs3Grid = (BS3Grid) grid;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ObjectSpecification.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ObjectSpecification.java
index 5d58c63..3bb1afc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ObjectSpecification.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ObjectSpecification.java
@@ -23,7 +23,6 @@ import java.lang.reflect.Array;
 import java.lang.reflect.Modifier;
 import java.util.Comparator;
 import java.util.Optional;
-import java.util.function.Function;
 import java.util.stream.Stream;
 
 import org.apache.isis.applib.annotation.DomainObject;
@@ -51,12 +50,12 @@ import org.apache.isis.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.metamodel.interactions.InteractionContext;
 import org.apache.isis.metamodel.interactions.ObjectTitleContext;
 import org.apache.isis.metamodel.interactions.ObjectValidityContext;
+import org.apache.isis.metamodel.services.classsubstitutor.ClassSubstitutor;
 import org.apache.isis.metamodel.spec.feature.Contributed;
 import org.apache.isis.metamodel.spec.feature.ObjectActionContainer;
 import org.apache.isis.metamodel.spec.feature.ObjectAssociationContainer;
 import org.apache.isis.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.metamodel.services.classsubstitutor.ClassSubstitutor;
 import org.apache.isis.metamodel.specloader.specimpl.IntrospectionState;
 import org.apache.isis.metamodel.specloader.specimpl.MixedInMember;
 import org.apache.isis.security.api.authentication.AuthenticationSession;
@@ -88,13 +87,6 @@ ObjectAssociationContainer, Hierarchical,  DefaultProvider {
         s1.getShortIdentifier().compareToIgnoreCase(s2.getShortIdentifier());
     }
 
-    final class Functions {
-        private Functions(){}
-
-        public static final Function<ObjectSpecification, String> FULL_IDENTIFIER = 
-                ObjectSpecification::getFullIdentifier;
-    }
-
     ObjectMember getMember(String memberId);
 
     /**
@@ -428,10 +420,14 @@ ObjectAssociationContainer, Hierarchical,  DefaultProvider {
         
         val self = Stream.of(this);
         val actions = streamObjectActions(Contributed.EXCLUDED);
+        val actionParameters = streamObjectActions(Contributed.EXCLUDED)
+                .flatMap(action->action.getParameterCount()>0
+                        ? action.getParameters().stream()
+                                : Stream.empty());
         val properties = streamProperties(Contributed.EXCLUDED);
         val collections = streamCollections(Contributed.EXCLUDED);
 
-        return _Streams.concat(self, actions, properties, collections);
+        return _Streams.concat(self, actions, actionParameters, properties, collections);
         
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectMember.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectMember.java
index c2f08ad..71bccbd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectMember.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectMember.java
@@ -71,7 +71,7 @@ public interface ObjectMember extends ObjectFeature {
 
 
     /**
-     * Determines if this member is visible, represented as a {@link Consent}.
+     * Determines if this member is visible (not hidden), represented as a {@link Consent}.
      * @param target
      *            may be <tt>null</tt> if just checking for authorization.
      * @param interactionInitiatedBy
@@ -87,7 +87,7 @@ public interface ObjectMember extends ObjectFeature {
     // /////////////////////////////////////////////////////////////
 
     /**
-     * Determines whether this member is usable, represented as a
+     * Determines whether this member is usable (not disabled), represented as a
      * {@link Consent}.
      * @param target
      *            may be <tt>null</tt> if just checking for authorization.
@@ -176,15 +176,11 @@ public interface ObjectMember extends ObjectFeature {
         public HiddenException() {
             super(null);
         }
-
-        public static Predicate<Throwable> isInstanceOf() {
-            return new Predicate<Throwable>() {
-                @Override
-                public boolean test(@Nullable final Throwable throwable) {
-                    return throwable instanceof HiddenException;
-                }
-            };
+        
+        public static boolean isInstanceOf(Throwable throwable) {
+            return throwable instanceof HiddenException;
         }
+        
     }
 
     class DisabledException extends AuthorizationException {
@@ -194,31 +190,22 @@ public interface ObjectMember extends ObjectFeature {
             super(message, null);
         }
 
-        public static Predicate<Throwable> isInstanceOf() {
-            return new Predicate<Throwable>() {
-                @Override
-                public boolean test(@Nullable final Throwable throwable) {
-                    return throwable instanceof DisabledException;
-                }
-            };
+        public static boolean isInstanceOf(Throwable throwable) {
+            return throwable instanceof DisabledException;
         }
     }
 
-    class Util {
-
-        private Util(){}
-
-        public static <T extends ObjectMember> Map<String, T> mapById(final Stream<T> members) {
+    public static <T extends ObjectMember> Map<String, T> mapById(final Stream<T> members) {
 
-            val memberById = _Maps.<String, T>newLinkedHashMap();
-            members.forEach(member->{
-                // if there are multiple members with same id, just disregard
-                memberById.put(member.getId(), member);
-            });
-            return memberById;
-        }
+        val memberById = _Maps.<String, T>newLinkedHashMap();
+        members.forEach(member->{
+            // if there are multiple members with same id, just disregard
+            memberById.put(member.getId(), member);
+        });
+        return memberById;
     }
 
+
     // //////////////////////////////////////////////////////
     // Comparators
     // //////////////////////////////////////////////////////
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
index f19762b..e0ff358 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
@@ -20,19 +20,21 @@
 package org.apache.isis.metamodel.specloader.specimpl.dflt;
 
 import java.lang.reflect.Method;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.function.BiConsumer;
 import java.util.stream.Stream;
 
+import javax.annotation.Nullable;
+
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.metamodel.context.MetaModelContext;
 import org.apache.isis.metamodel.commons.StringExtensions;
 import org.apache.isis.metamodel.commons.ToString;
+import org.apache.isis.metamodel.context.MetaModelContext;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.FacetedMethod;
@@ -48,6 +50,7 @@ import org.apache.isis.metamodel.facets.object.plural.inferred.PluralFacetInferr
 import org.apache.isis.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.metamodel.facets.object.wizard.WizardFacet;
+import org.apache.isis.metamodel.services.classsubstitutor.ClassSubstitutor;
 import org.apache.isis.metamodel.spec.ActionType;
 import org.apache.isis.metamodel.spec.ElementSpecificationProvider;
 import org.apache.isis.metamodel.spec.ManagedObject;
@@ -57,7 +60,6 @@ import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.metamodel.spec.feature.ObjectMember;
-import org.apache.isis.metamodel.services.classsubstitutor.ClassSubstitutor;
 import org.apache.isis.metamodel.specloader.facetprocessor.FacetProcessor;
 import org.apache.isis.metamodel.specloader.postprocessor.PostProcessor;
 import org.apache.isis.metamodel.specloader.specimpl.FacetedMethodsBuilder;
@@ -363,8 +365,13 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
                 .orElse(null);
     }
 
-    // -- getMember, catalog... (not API)
-
+    /**
+     * @param method
+     * @return ObjectMember associated with given {@code method}, or else {@code null}
+     * @apiNote not API; refactoring result type to Optional<ObjectMember> would be desired, 
+     * but did not work with JMock tests on first attempt
+     */
+    @Nullable
     public ObjectMember getMember(final Method method) {
         introspectUpTo(IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED);
 
@@ -374,34 +381,34 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
         return membersByMethod.get(method);
     }
 
-    private HashMap<Method, ObjectMember> catalogueMembers() {
-        final HashMap<Method, ObjectMember> membersByMethod = _Maps.newHashMap();
-        cataloguePropertiesAndCollections(membersByMethod);
-        catalogueActions(membersByMethod);
+    private Map<Method, ObjectMember> catalogueMembers() {
+        val membersByMethod = _Maps.<Method, ObjectMember>newHashMap();
+        cataloguePropertiesAndCollections(membersByMethod::put);
+        catalogueActions(membersByMethod::put);
         return membersByMethod;
     }
 
-    private void cataloguePropertiesAndCollections(final Map<Method, ObjectMember> membersByMethod) {
-        final Stream<ObjectAssociation> fields = streamAssociations(Contributed.EXCLUDED);
-        fields.forEach(field->{
+    private void cataloguePropertiesAndCollections(BiConsumer<Method, ObjectMember> onMember) {
+        streamAssociations(Contributed.EXCLUDED)
+        .forEach(field->{
             final Stream<Facet> facets = field.streamFacets().filter(ImperativeFacet.PREDICATE);
             facets.forEach(facet->{
                 final ImperativeFacet imperativeFacet = ImperativeFacet.Util.getImperativeFacet(facet);
                 for (final Method imperativeFacetMethod : imperativeFacet.getMethods()) {
-                    membersByMethod.put(imperativeFacetMethod, field);
+                    onMember.accept(imperativeFacetMethod, field);
                 }
             });
         });
     }
 
-    private void catalogueActions(final Map<Method, ObjectMember> membersByMethod) {
-        final Stream<ObjectAction> userActions = streamObjectActions(Contributed.INCLUDED);
-        userActions.forEach(userAction->{
+    private void catalogueActions(BiConsumer<Method, ObjectMember> onMember) {
+        streamObjectActions(Contributed.INCLUDED)
+        .forEach(userAction->{
             final Stream<Facet> facets = userAction.streamFacets().filter(ImperativeFacet.PREDICATE);
             facets.forEach(facet->{
                 final ImperativeFacet imperativeFacet = ImperativeFacet.Util.getImperativeFacet(facet);
                 for (final Method imperativeFacetMethod : imperativeFacet.getMethods()) {
-                    membersByMethod.put(imperativeFacetMethod, userAction);
+                    onMember.accept(imperativeFacetMethod, userAction);
                 }
             });
         });
diff --git a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/metamodel/JdoProgrammingModelPlugin.java b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/metamodel/JdoProgrammingModelPlugin.java
index a57b146..f867f1a 100644
--- a/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/metamodel/JdoProgrammingModelPlugin.java
+++ b/core/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/metamodel/JdoProgrammingModelPlugin.java
@@ -209,7 +209,7 @@ public class JdoProgrammingModelPlugin implements MetaModelRefiner {
 
             private String asCsv(final List<ObjectSpecification> specList) {
                 return stream(specList)
-                        .map(ObjectSpecification.Functions.FULL_IDENTIFIER)
+                        .map(ObjectSpecification::getFullIdentifier)
                         .collect(Collectors.joining(","));
             }
 
diff --git a/core/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/runtime/services/wrapper/WrapperFactoryDefault_wrappedObject_transient_Test.java b/core/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/runtime/services/wrapper/WrapperFactoryDefault_wrappedObject_transient_Test.java
index 85c96f7..756198a 100644
--- a/core/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/runtime/services/wrapper/WrapperFactoryDefault_wrappedObject_transient_Test.java
+++ b/core/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/runtime/services/wrapper/WrapperFactoryDefault_wrappedObject_transient_Test.java
@@ -135,12 +135,6 @@ public class WrapperFactoryDefault_wrappedObject_transient_Test {
         context.checking(new Expectations() {
             {
 
-//                allowing(mockPersistenceSessionServiceInternal).adapterFor(employeeDO);
-//                will(returnValue(mockEmployeeAdapter));
-//                
-//                allowing(mockPersistenceSessionServiceInternal).adapterFor(passwordValue);
-//                will(returnValue(mockPasswordAdapter));
-
                 allowing(mockObjectManager).adapt(employeeDO);
                 will(returnValue(mockEmployeeAdapter));
 
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/wrapper/handlers/DomainObjectInvocationHandler.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/wrapper/handlers/DomainObjectInvocationHandler.java
index 73a5561..347df6b 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/wrapper/handlers/DomainObjectInvocationHandler.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/wrapper/handlers/DomainObjectInvocationHandler.java
@@ -753,10 +753,13 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
         val objectSpecificationDefault = getJavaSpecificationOfOwningClass(method);
         val member = objectSpecificationDefault.getMember(method);
 
-        if (member == null) {
-            final String methodName = method.getName();
-            throw new UnsupportedOperationException("Method '" + methodName + "' being invoked does not correspond to any of the object's fields or actions.");
+        if(member == null) {
+            val methodName = method.getName();
+            val msg = "Method '" + methodName + "' being invoked does not correspond "
+                    + "to any of the object's fields or actions.";
+            throw new UnsupportedOperationException(msg);
         }
+        
         return member;
     }
 
diff --git a/core/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/WebRequestCycleForIsis.java b/core/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/WebRequestCycleForIsis.java
index 1f72290..6ead0fd 100644
--- a/core/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/WebRequestCycleForIsis.java
+++ b/core/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/WebRequestCycleForIsis.java
@@ -239,13 +239,13 @@ public class WebRequestCycleForIsis implements IRequestCycleListener {
 
             final List<Throwable> causalChain = _Exceptions.getCausalChain(ex);
             final Optional<Throwable> hiddenIfAny = causalChain.stream()
-                    .filter(ObjectMember.HiddenException.isInstanceOf()).findFirst();
+                    .filter(ObjectMember.HiddenException::isInstanceOf).findFirst();
             if(hiddenIfAny.isPresent()) {
                 addMessage("hidden");
                 return respondGracefully(cycle);
             }
             final Optional<Throwable> disabledIfAny = causalChain.stream()
-                    .filter(ObjectMember.DisabledException.isInstanceOf()).findFirst();
+                    .filter(ObjectMember.DisabledException::isInstanceOf).findFirst();
             if(disabledIfAny.isPresent()) {
                 addTranslatedMessage(disabledIfAny.get().getMessage());
                 return respondGracefully(cycle);
diff --git a/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo.java b/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo.java
index 938714e..7d3fba8 100644
--- a/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo.java
+++ b/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo.java
@@ -18,20 +18,29 @@
  */
 package demoapp.dom.actions.depargs;
 
+import java.util.Collection;
 import java.util.LinkedHashSet;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.LabelPosition;
 import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.Optionality;
+import org.apache.isis.applib.annotation.Parameter;
+import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.value.Markup;
+import org.apache.isis.incubator.model.applib.annotation.Model;
 
 import demoapp.utils.DemoStub;
 import lombok.Getter;
@@ -59,6 +68,43 @@ public class DependentArgsActionDemo extends DemoStub {
         items.add(DemoItem.of("third", Parity.ODD));
         items.add(DemoItem.of("last", Parity.EVEN));
     }
+    
+    // -- DEBUG
+    
+//    @ActionLayout(named="Choices", promptStyle = PromptStyle.DIALOG_MODAL)
+//    @Action(semantics = SemanticsOf.SAFE)
+//    public DependentArgsActionDemo useChoices(
+//
+//            // PARAM 0
+//            @Parameter(optionality = Optionality.MANDATORY)
+//            Parity parity,
+//
+//            // PARAM 1
+//            @Parameter(optionality = Optionality.MANDATORY)
+//            DemoItem item
+//
+//            ) {
+//        
+//        return this;
+//    }
+//
+//    // -- PARAM 1 (DemoItem)
+//
+//    
+//    public Collection<DemoItem> choices1useChoices(
+//            
+//            Parity parity // <-- the refining parameter from the dialog above
+//            
+//            ) {
+//        
+//        if(parity == null) {
+//            return this.getItems();
+//        }
+//        return this.getItems()
+//                .stream()
+//                .filter(item->parity == item.getParity())
+//                .collect(Collectors.toList());
+//    }
 
 }
 
diff --git a/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_useAutoComplete.java b/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_useAutoComplete.java
index ec1e977..a0a2523 100644
--- a/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_useAutoComplete.java
+++ b/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_useAutoComplete.java
@@ -32,7 +32,7 @@ import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.message.MessageService;
-import org.apache.isis.incubator.model.applib.annotation.Supporting;
+import org.apache.isis.incubator.model.applib.annotation.Model;
 
 import lombok.RequiredArgsConstructor;
 
diff --git a/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_useChoices.java b/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_useChoices.java
index 033094a..b9ee525 100644
--- a/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_useChoices.java
+++ b/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_useChoices.java
@@ -31,7 +31,7 @@ import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.message.MessageService;
-import org.apache.isis.incubator.model.applib.annotation.Supporting;
+import org.apache.isis.incubator.model.applib.annotation.Model;
 
 import lombok.RequiredArgsConstructor;
 
diff --git a/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_useDefault.java b/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_useDefault.java
index 2994588..d9de12c 100644
--- a/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_useDefault.java
+++ b/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_useDefault.java
@@ -29,7 +29,7 @@ import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.message.MessageService;
-import org.apache.isis.incubator.model.applib.annotation.Supporting;
+import org.apache.isis.incubator.model.applib.annotation.Model;
 
 import lombok.RequiredArgsConstructor;
 
diff --git a/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_useDisable.java b/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_useDisable.java
index 7a3677e..5626209 100644
--- a/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_useDisable.java
+++ b/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_useDisable.java
@@ -29,7 +29,7 @@ import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.message.MessageService;
-import org.apache.isis.incubator.model.applib.annotation.Supporting;
+import org.apache.isis.incubator.model.applib.annotation.Model;
 
 import lombok.RequiredArgsConstructor;
 
diff --git a/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_useHide.java b/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_useHide.java
index e29618c..f6f7e7a 100644
--- a/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_useHide.java
+++ b/examples/demo/src/main/java/demoapp/dom/actions/depargs/DependentArgsActionDemo_useHide.java
@@ -29,7 +29,7 @@ import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.message.MessageService;
-import org.apache.isis.incubator.model.applib.annotation.Supporting;
+import org.apache.isis.incubator.model.applib.annotation.Model;
 
 import lombok.RequiredArgsConstructor;
 
diff --git a/examples/demo/src/main/java/demoapp/dom/tooltip/TooltipDemo.java b/examples/demo/src/main/java/demoapp/dom/tooltip/TooltipDemo.java
index 7aa693f..9fc0d2b 100644
--- a/examples/demo/src/main/java/demoapp/dom/tooltip/TooltipDemo.java
+++ b/examples/demo/src/main/java/demoapp/dom/tooltip/TooltipDemo.java
@@ -42,7 +42,7 @@ import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.value.Markup;
-import org.apache.isis.incubator.model.applib.annotation.Supporting;
+import org.apache.isis.incubator.model.applib.annotation.Model;
 
 import demoapp.dom.actions.assoc.DemoItem;
 import demoapp.utils.DemoStub;
@@ -110,7 +110,7 @@ public class TooltipDemo extends DemoStub {
         return this;
     }
 
-    @Supporting
+    @Model
     public String disableDisabledAction() {
         return "Disabled for demonstration.";
     }
@@ -125,7 +125,7 @@ public class TooltipDemo extends DemoStub {
         return this;
     }
 
-    @Supporting
+    @Model
     public String disableDisabledActionWithConfirmation() {
         return "Disabled for demonstration.";
     }
diff --git a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/bad/Configuration_usingInvalidDomain.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/bad/Configuration_usingInvalidDomain.java
index ab6c45e..9c5ec5e 100644
--- a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/bad/Configuration_usingInvalidDomain.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/bad/Configuration_usingInvalidDomain.java
@@ -20,8 +20,14 @@ package org.apache.isis.testdomain.model.bad;
 
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+
+import org.apache.isis.incubator.model.metamodel.IsisModuleIncModelMetaModel;
 
 @Configuration
+@Import({
+    IsisModuleIncModelMetaModel.class
+})
 @ComponentScan(
         basePackageClasses= {               
                 Configuration_usingInvalidDomain.class
diff --git a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/bad/InvalidOrphanedActionSupport.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/bad/InvalidOrphanedActionSupport.java
index ddb94e5..a5b88da 100644
--- a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/bad/InvalidOrphanedActionSupport.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/bad/InvalidOrphanedActionSupport.java
@@ -19,14 +19,14 @@
 package org.apache.isis.testdomain.model.bad;
 
 import org.apache.isis.applib.annotation.DomainObject;
-import org.apache.isis.incubator.model.applib.annotation.Supporting;
+import org.apache.isis.incubator.model.applib.annotation.Model;
 import org.apache.isis.applib.annotation.Nature;
 
 @DomainObject(nature = Nature.VIEW_MODEL)
 public class InvalidOrphanedActionSupport {
 
     // should fail
-    @Supporting
+    @Model
     public boolean hideOrphaned() {
         return false;
     }
diff --git a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/bad/InvalidOrphanedCollectionSupport.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/bad/InvalidOrphanedCollectionSupport.java
index 62f93b8..6a15f99 100644
--- a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/bad/InvalidOrphanedCollectionSupport.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/bad/InvalidOrphanedCollectionSupport.java
@@ -19,14 +19,14 @@
 package org.apache.isis.testdomain.model.bad;
 
 import org.apache.isis.applib.annotation.DomainObject;
-import org.apache.isis.incubator.model.applib.annotation.Supporting;
+import org.apache.isis.incubator.model.applib.annotation.Model;
 import org.apache.isis.applib.annotation.Nature;
 
 @DomainObject(nature = Nature.VIEW_MODEL)
 public class InvalidOrphanedCollectionSupport {
 
     // should fail
-    @Supporting
+    @Model
     public boolean hideMyCollection() {
         return false;
     }
diff --git a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/bad/InvalidOrphanedPropertySupport.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/bad/InvalidOrphanedPropertySupport.java
index 96eb8c9..3f29a80 100644
--- a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/bad/InvalidOrphanedPropertySupport.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/bad/InvalidOrphanedPropertySupport.java
@@ -19,14 +19,14 @@
 package org.apache.isis.testdomain.model.bad;
 
 import org.apache.isis.applib.annotation.DomainObject;
-import org.apache.isis.incubator.model.applib.annotation.Supporting;
+import org.apache.isis.incubator.model.applib.annotation.Model;
 import org.apache.isis.applib.annotation.Nature;
 
 @DomainObject(nature = Nature.VIEW_MODEL)
 public class InvalidOrphanedPropertySupport {
 
     // should fail
-    @Supporting
+    @Model
     public boolean hideMyProperty() {
         return false;
     }
diff --git a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/Configuration_usingValidDomain.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/Configuration_usingValidDomain.java
index 3917cf9..a839557 100644
--- a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/Configuration_usingValidDomain.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/Configuration_usingValidDomain.java
@@ -20,8 +20,14 @@ package org.apache.isis.testdomain.model.good;
 
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+
+import org.apache.isis.incubator.model.metamodel.IsisModuleIncModelMetaModel;
 
 @Configuration
+@Import({
+    IsisModuleIncModelMetaModel.class
+})
 @ComponentScan(
         basePackageClasses= {               
                 Configuration_usingValidDomain.class
diff --git a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport.java
index cf8899a..12ab5d9 100644
--- a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport.java
@@ -21,19 +21,19 @@ package org.apache.isis.testdomain.model.good;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
-import org.apache.isis.incubator.model.applib.annotation.Supporting;
+import org.apache.isis.incubator.model.applib.annotation.Model;
 
 @DomainObject(nature = Nature.VIEW_MODEL)
 public class ProperActionSupport {
 
     // proper action
     @Action
-    public void myAction() {
+    public void myAction(String param) {
 
     }
     
     // proper support
-    @Supporting
+    @Model
     public boolean hideMyAction() {
         return false;
     }
diff --git a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_action.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_action.java
index 2d7b542..08eb5b5 100644
--- a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_action.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_action.java
@@ -20,7 +20,7 @@ package org.apache.isis.testdomain.model.good;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
-import org.apache.isis.incubator.model.applib.annotation.Supporting;
+import org.apache.isis.incubator.model.applib.annotation.Model;
 
 import lombok.RequiredArgsConstructor;
 
@@ -38,8 +38,8 @@ public class ProperActionSupport_action {
     }
     
     // proper support
-    @Supporting
-    public boolean hide$$() {
+    @Model
+    public boolean hideAct() {
         return false;
     }
 
diff --git a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_collection.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_collection.java
index 77b6f45..11d4251 100644
--- a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_collection.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_collection.java
@@ -23,7 +23,7 @@ import java.util.List;
 
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.CollectionLayout;
-import org.apache.isis.incubator.model.applib.annotation.Supporting;
+import org.apache.isis.incubator.model.applib.annotation.Model;
 
 import lombok.RequiredArgsConstructor;
 
@@ -41,8 +41,8 @@ public class ProperActionSupport_collection {
     }
     
     // proper support
-    @Supporting
-    public boolean hide$$() {
+    @Model
+    public boolean hideColl() {
         return false;
     }
 
diff --git a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_collection2.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_collection2.java
index a276ba85..6344cdf 100644
--- a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_collection2.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_collection2.java
@@ -24,7 +24,7 @@ import java.util.List;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.applib.annotation.Mixin;
-import org.apache.isis.incubator.model.applib.annotation.Supporting;
+import org.apache.isis.incubator.model.applib.annotation.Model;
 
 import lombok.RequiredArgsConstructor;
 
@@ -42,7 +42,7 @@ public class ProperActionSupport_collection2 {
     }
     
     // proper support
-    @Supporting
+    @Model
     public boolean hide$$() {
         return false;
     }
diff --git a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_mixin.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_mixin.java
index 581c564..cac6cf8 100644
--- a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_mixin.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_mixin.java
@@ -20,7 +20,7 @@ package org.apache.isis.testdomain.model.good;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.Mixin;
-import org.apache.isis.incubator.model.applib.annotation.Supporting;
+import org.apache.isis.incubator.model.applib.annotation.Model;
 
 import lombok.RequiredArgsConstructor;
 
@@ -36,7 +36,7 @@ public class ProperActionSupport_mixin {
     }
     
     // proper support
-    @Supporting
+    @Model
     public boolean hide$$() {
         return false;
     }
diff --git a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_property.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_property.java
index 1e90ebe..88fdcf0 100644
--- a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_property.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_property.java
@@ -18,7 +18,7 @@
  */
 package org.apache.isis.testdomain.model.good;
 
-import org.apache.isis.incubator.model.applib.annotation.Supporting;
+import org.apache.isis.incubator.model.applib.annotation.Model;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 
@@ -38,8 +38,8 @@ public class ProperActionSupport_property {
     }
     
     // proper support
-    @Supporting
-    public boolean hide$$() {
+    @Model
+    public boolean hideProp() {
         return false;
     }
 
diff --git a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_property2.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_property2.java
index b28ba7a..09f4296 100644
--- a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_property2.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperActionSupport_property2.java
@@ -19,7 +19,7 @@
 package org.apache.isis.testdomain.model.good;
 
 import org.apache.isis.applib.annotation.Mixin;
-import org.apache.isis.incubator.model.applib.annotation.Supporting;
+import org.apache.isis.incubator.model.applib.annotation.Model;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 
@@ -39,7 +39,7 @@ public class ProperActionSupport_property2 {
     }
     
     // proper support
-    @Supporting
+    @Model
     public boolean hide$$() {
         return false;
     }
diff --git a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperCollectionSupport.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperCollectionSupport.java
index b78d581..7a93cd2 100644
--- a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperCollectionSupport.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperCollectionSupport.java
@@ -22,7 +22,7 @@ import java.util.List;
 
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
-import org.apache.isis.incubator.model.applib.annotation.Supporting;
+import org.apache.isis.incubator.model.applib.annotation.Model;
 import org.apache.isis.applib.annotation.Nature;
 
 import lombok.Getter;
@@ -36,7 +36,7 @@ public class ProperCollectionSupport {
     private List<String> myCollection;
     
     // proper support
-    @Supporting
+    @Model
     public boolean hideMyCollection() {
         return false;
     }
diff --git a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperPrefixedMember.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperPrefixedMember.java
index 345fa61..2f5e01b 100644
--- a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperPrefixedMember.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperPrefixedMember.java
@@ -2,7 +2,7 @@ package org.apache.isis.testdomain.model.good;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.DomainObject;
-import org.apache.isis.incubator.model.applib.annotation.Supporting;
+import org.apache.isis.incubator.model.applib.annotation.Model;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 
@@ -19,7 +19,7 @@ public class ProperPrefixedMember {
     }
     
     // should be identified as support
-    @Supporting
+    @Model
     public String disableDisableSomething() {
         return null;
     }
diff --git a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperPropertySupport.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperPropertySupport.java
index 8e97ba6..5f592a3 100644
--- a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperPropertySupport.java
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperPropertySupport.java
@@ -19,7 +19,7 @@
 package org.apache.isis.testdomain.model.good;
 
 import org.apache.isis.applib.annotation.DomainObject;
-import org.apache.isis.incubator.model.applib.annotation.Supporting;
+import org.apache.isis.incubator.model.applib.annotation.Model;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 
@@ -34,7 +34,7 @@ public class ProperPropertySupport {
     private String myProperty;
     
     // proper support
-    @Supporting
+    @Model
     public boolean hideMyProperty() {
         return false;
     }
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 9086d53..d4d04b2 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
@@ -100,7 +100,7 @@ class DomainModelTest_usingGoodDomain {
     void typeLevelAnnotations_shouldBeHonored_onMixins() {
         
         val holderSpec = specificationLoader.loadSpecification(ProperActionSupport.class, 
-                IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED);
+                        IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED);
         
         val mx_mixin = holderSpec.getObjectAction("mixin"); // proper mix-in support
         assertNotNull(mx_mixin);
diff --git a/incubator/core/model/src/main/java/org/apache/isis/incubator/model/applib/annotation/Supporting.java b/incubator/core/model/src/main/java/org/apache/isis/incubator/model/applib/annotation/Model.java
similarity index 91%
rename from incubator/core/model/src/main/java/org/apache/isis/incubator/model/applib/annotation/Supporting.java
rename to incubator/core/model/src/main/java/org/apache/isis/incubator/model/applib/annotation/Model.java
index 5d7d74a..e0443d4 100644
--- a/incubator/core/model/src/main/java/org/apache/isis/incubator/model/applib/annotation/Supporting.java
+++ b/incubator/core/model/src/main/java/org/apache/isis/incubator/model/applib/annotation/Model.java
@@ -29,7 +29,7 @@ import java.lang.annotation.Target;
  * Indicates that a method is a supporting-method, one that contributes (hide, validate, ...) 
  * to an <em>Action/</em>.
  * <p>
- * By placing the {@link Supporting} annotation on a method, a contract with the meta-model is enforced, 
+ * By placing the {@link Model} annotation on a method, a contract with the meta-model is enforced, 
  * such that this method must be recognized and cannot be ignored.
  *
  * @since 2.0
@@ -37,6 +37,6 @@ import java.lang.annotation.Target;
 @Inherited
 @Target({ ElementType.METHOD })
 @Retention(RetentionPolicy.RUNTIME)
-public @interface Supporting {
+public @interface Model {
 
 }
diff --git a/incubator/core/model/src/main/java/org/apache/isis/incubator/model/metamodel/facets/SupportingMethodValidatorRefinerFactory.java b/incubator/core/model/src/main/java/org/apache/isis/incubator/model/metamodel/facets/SupportingMethodValidatorRefinerFactory.java
index b903d2b..e587302 100644
--- a/incubator/core/model/src/main/java/org/apache/isis/incubator/model/metamodel/facets/SupportingMethodValidatorRefinerFactory.java
+++ b/incubator/core/model/src/main/java/org/apache/isis/incubator/model/metamodel/facets/SupportingMethodValidatorRefinerFactory.java
@@ -24,7 +24,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.stream.Collectors;
 
-import org.apache.isis.incubator.model.applib.annotation.Supporting;
+import org.apache.isis.incubator.model.applib.annotation.Model;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Sets;
 import org.apache.isis.metamodel.commons.MethodUtil;
@@ -61,7 +61,21 @@ implements MetaModelRefiner {
 
             val type = spec.getCorrespondingClass();
 
-            // methods known to the metamodel
+//XXX for debugging ...            
+//            if(spec.getSpecId().asString().contains("ProperActionSupport")) {
+//                
+//                val sb = new StringBuffer();
+//                
+//                sb.append("\n### debug " + spec.getSpecId().asString()).append("\n");
+//                
+//                spec.streamFacetHolders()
+//                .flatMap(FacetHolder::streamFacets)
+//                .forEach(facet->sb.append("facet: " + facet).append("\n"));
+//                
+//                System.out.println(sb);
+//            }
+
+            // methods known to the meta-model
             val recognizedMethods = spec.streamFacetHolders()
                     .flatMap(FacetHolder::streamFacets)
                     .filter(ImperativeFacet.class::isInstance)
@@ -69,16 +83,16 @@ implements MetaModelRefiner {
                     .map(ImperativeFacet::getMethods)
                     .flatMap(List::stream)
                     .collect(Collectors.toCollection(HashSet::new));
-
-            // methods intended by the coder to be known to the metamodel
+            
+            // methods intended to be included with the meta-model
             val intendedMethods = _Sets.<Method>newHashSet(); 
             for(val method: type.getDeclaredMethods()) {
-                if(method.getDeclaredAnnotation(Supporting.class)!=null) {
+                if(method.getDeclaredAnnotation(Model.class)!=null) {
                     intendedMethods.add(method);
                 }
             }
 
-            // methods intended by the coder but not known to the metamodel
+            // methods intended to be included with the meta-model but missing
             val notRecognizedMethods =
                     _Sets.minus(intendedMethods, recognizedMethods);
 
@@ -86,7 +100,7 @@ implements MetaModelRefiner {
             notRecognizedMethods.forEach(notRecognizedMethod->{
                 val unmetContraints = unmetContraints(spec, notRecognizedMethod);
 
-                val messageFormat = "%s#%s: has annotion %s, is assumed to support "
+                val messageFormat = "%s#%s: has annotation @%s, is assumed to support "
                         + "a property, collection or action. Unmet constraint(s): %s";
                 validationFailures.onFailure(
                         spec,
@@ -94,7 +108,7 @@ implements MetaModelRefiner {
                         messageFormat,
                         spec.getIdentifier().getClassName(),
                         notRecognizedMethod.getName(),
-                        Supporting.class.getSimpleName(),
+                        Model.class.getSimpleName(),
                         unmetContraints.stream()
                         .collect(Collectors.joining("; ")));
             });