You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2015/02/06 19:12:47 UTC

[06/26] isis git commit: ISIS-1027: more stuff...

ISIS-1027: more stuff...

... undeprecating Isis' own services (eg EventBusServiceJdo)
... adding in validators for XxxAnnotationFacetFactory
... moving Bounded and ObjectType annotation processing into DomainObjectAnnotationFacetFactory


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/b5f73ec3
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/b5f73ec3
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/b5f73ec3

Branch: refs/heads/master
Commit: b5f73ec3dcae8015d11004915c15dd81c2945238
Parents: 128f23c
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Feb 5 18:59:38 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Feb 5 18:59:38 2015 +0000

----------------------------------------------------------------------
 .../applib/WicketDeveloperUtilitiesService.java | 15 ++--
 .../isis/applib/AbstractContainedObject.java    | 12 +--
 .../org/apache/isis/applib/AbstractService.java |  4 +-
 .../applib/fixturescripts/FixtureResult.java    |  2 +-
 .../applib/fixturescripts/FixtureScript.java    | 13 +--
 .../applib/fixturescripts/FixtureScripts.java   |  6 +-
 .../BookmarkHolderActionContributions.java      | 10 ++-
 .../services/eventbus/EventBusService.java      |  2 -
 .../exceprecog/ExceptionRecognizerAbstract.java |  9 +-
 .../ExceptionRecognizerComposite.java           |  5 --
 .../exceprecog/ExceptionRecognizerForType.java  |  2 -
 .../AbstractHomePageDashboardService.java       | 12 +--
 .../applib/services/wrapper/WrapperFactory.java |  1 -
 ...ionRecognizerCompositeForJdoObjectStore.java |  5 +-
 .../core/metamodel/facets/FacetedMethod.java    |  6 +-
 .../facets/FacetedMethodParameter.java          | 16 +++-
 .../action/ActionAnnotationFacetFactory.java    | 72 ++++++++++++----
 .../action/bulk/BulkFacetForBulkAnnotation.java |  4 +
 ...cetForPostsActionInvokedEventAnnotation.java |  4 +
 ...nSemanticsFacetFromIdempotentAnnotation.java |  4 +
 ...onSemanticsFacetFromQueryOnlyAnnotation.java |  4 +
 .../annotation/PagedFacetOnActionFactory.java   |  2 +-
 .../CollectionAnnotationFacetFactory.java       | 56 ++++++++++---
 .../PagedFacetOnCollectionFactory.java          |  2 +-
 .../annotprop/CssClassFacetOnMemberFactory.java |  2 +-
 .../CssClassFaFacetOnMemberFactory.java         |  2 +-
 .../DescribedAsFacetOnMemberFactory.java        |  2 +-
 .../annotprop/DisabledFacetFactory.java         |  2 +-
 .../annotprop/HiddenFacetOnMemberFactory.java   |  2 +-
 .../annotprop/NamedFacetOnMemberFactory.java    |  2 +-
 .../annotprop/RenderFacetOrResolveFactory.java  |  4 +-
 .../annotation/AutoCompleteFacetAnnotation.java | 37 ---------
 .../AutoCompleteFacetAnnotationFactory.java     | 87 --------------------
 ...cyFacetViaBookmarkableAnnotationFactory.java |  7 +-
 .../ChoicesFacetFromBoundedAnnotation.java      | 33 --------
 ...hoicesFacetFromBoundedAnnotationFactory.java | 55 -------------
 .../DomainObjectAnnotationFacetFactory.java     | 86 ++++++++++++++++---
 ...oCompleteFacetForAutoCompleteAnnotation.java | 56 +++++++++++++
 .../ChoicesFacetFromBoundedAnnotation.java      | 44 ++++++++++
 ...jectSpecIdFacetFromObjectTypeAnnotation.java | 41 +++++++++
 .../annotation/ObjectSpecIdFacetAnnotation.java | 31 -------
 ...ecIdFacetForObjectTypeAnnotationFactory.java | 64 --------------
 ...tiLineFacetOnParameterAnnotationFactory.java |  2 +-
 .../MaskFacetOnParameterAnnotationFactory.java  |  2 +-
 ...xFacetFacetOnParameterAnnotationFactory.java |  2 +-
 .../MultiLineFacetOnPropertyFactory.java        |  2 +-
 .../PropertyAnnotationFacetFactory.java         | 39 +++++++--
 .../TypicalLengthOnPropertyFacetFactory.java    |  2 +-
 .../MaskFacetOnPropertyAnnotationFactory.java   |  2 +-
 ...ExFacetFacetOnPropertyAnnotationFactory.java |  2 +-
 .../container/DomainObjectContainerDefault.java |  3 +-
 ...MetaModelValidatorForDeprecatedAbstract.java |  4 +-
 ...taModelValidatorForDeprecatedAnnotation.java |  7 +-
 .../dflt/ProgrammingModelFacetsJava5.java       |  6 --
 .../AbstractFacetFactoryJUnit4TestCase.java     |  2 +-
 .../facets/AbstractFacetFactoryTest.java        |  7 +-
 ...esFacetFromBoundedAnnotationFactoryTest.java | 61 --------------
 ...esFacetFromBoundedAnnotationFactoryTest.java | 59 +++++++++++++
 .../ObjectTypeAnnotationFacetFactoryTest.java   | 64 ++++++++++++++
 .../ObjectTypeAnnotationFacetFactoryTest.java   | 65 ---------------
 .../eventbus/EventBusServiceDefault.java        |  2 +
 .../service/eventbus/EventBusServiceJdo.java    |  5 +-
 .../service/support/IsisJdoSupportImpl.java     | 10 +--
 .../core/wrapper/WrapperFactoryDefault.java     |  3 +-
 .../java/dom/todo/ToDoItemContributions.java    | 11 ++-
 .../src/main/webapp/WEB-INF/isis.properties     |  2 +-
 66 files changed, 603 insertions(+), 586 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/component/viewer/wicket/applib/src/main/java/org/apache/isis/viewer/wicket/viewer/applib/WicketDeveloperUtilitiesService.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/applib/src/main/java/org/apache/isis/viewer/wicket/viewer/applib/WicketDeveloperUtilitiesService.java b/component/viewer/wicket/applib/src/main/java/org/apache/isis/viewer/wicket/viewer/applib/WicketDeveloperUtilitiesService.java
index d2d1929..83d03cc 100644
--- a/component/viewer/wicket/applib/src/main/java/org/apache/isis/viewer/wicket/viewer/applib/WicketDeveloperUtilitiesService.java
+++ b/component/viewer/wicket/applib/src/main/java/org/apache/isis/viewer/wicket/viewer/applib/WicketDeveloperUtilitiesService.java
@@ -20,9 +20,10 @@
 package org.apache.isis.viewer.wicket.viewer.applib;
 
 import org.apache.wicket.Application;
-import org.apache.isis.applib.annotation.ActionSemantics;
-import org.apache.isis.applib.annotation.Hidden;
-import org.apache.isis.applib.annotation.Prototype;
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.RestrictTo;
+import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Where;
 
 public class WicketDeveloperUtilitiesService {
 
@@ -34,9 +35,11 @@ public class WicketDeveloperUtilitiesService {
      * the resource cache anyway if running in development/prototype mode.
      * </p>
      */
-    @Hidden
-    @Prototype
-    @ActionSemantics(ActionSemantics.Of.IDEMPOTENT)
+    @Action(
+            restrictTo = RestrictTo.PROTOTYPING,
+            hidden = Where.EVERYWHERE,
+            semantics = SemanticsOf.IDEMPOTENT
+    )
     public void resetI18nCache() {
         Application.get()
                 .getResourceSettings()

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/AbstractContainedObject.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/AbstractContainedObject.java b/core/applib/src/main/java/org/apache/isis/applib/AbstractContainedObject.java
index 644f828..d71ad11 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/AbstractContainedObject.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/AbstractContainedObject.java
@@ -20,11 +20,9 @@
 package org.apache.isis.applib;
 
 import java.util.List;
-
 import com.google.common.base.Predicate;
-
 import org.apache.isis.applib.annotation.Aggregated;
-import org.apache.isis.applib.annotation.Hidden;
+import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.filter.Filter;
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.security.UserMemento;
@@ -69,7 +67,6 @@ public abstract class AbstractContainedObject {
      * 
      * @see #newAggregatedInstance(Object, Class)
      */
-    @Hidden
     protected <T> T newTransientInstance(final Class<T> ofType) {
         return getContainer().newTransientInstance(ofType);
     }
@@ -94,7 +91,6 @@ public abstract class AbstractContainedObject {
      * 
      *  @see #newAggregatedInstance(Object, Class)
      */
-    @Hidden
     protected <T> T newAggregatedInstance(final Class<T> ofType) {
         return newAggregatedInstance(this, ofType);
     }
@@ -108,7 +104,6 @@ public abstract class AbstractContainedObject {
      * 
      *  @see #newAggregatedInstance(Class)
      */
-    @Hidden
     protected <T> T newAggregatedInstance(final Object parent, final Class<T> ofType) {
         return getContainer().newAggregatedInstance(parent, ofType);
     }
@@ -302,7 +297,6 @@ public abstract class AbstractContainedObject {
      * Determines if the specified object is persistent (that it is stored
      * permanently outside of the virtual machine).
      */
-    @Hidden
     protected boolean isPersistent(final Object domainObject) {
         return getContainer().isPersistent(domainObject);
     }
@@ -324,7 +318,6 @@ public abstract class AbstractContainedObject {
      * @see #isPersistent(Object)
      * @see #persistIfNotAlready(Object)
      */
-    @Hidden
     protected <T> T persist(final T transientDomainObject) {
         getContainer().persist(transientDomainObject);
         return transientDomainObject;
@@ -343,7 +336,6 @@ public abstract class AbstractContainedObject {
      * @see #isPersistent(Object)
      * @see #persist(Object)
      */
-    @Hidden
     protected <T> T persistIfNotAlready(final T domainObject) {
         getContainer().persistIfNotAlready(domainObject);
         return domainObject;
@@ -403,7 +395,6 @@ public abstract class AbstractContainedObject {
     /**
      * This field is not persisted, nor displayed to the user.
      */
-    @Hidden
     protected DomainObjectContainer getContainer() {
         return this.container;
     }
@@ -411,6 +402,7 @@ public abstract class AbstractContainedObject {
     /**
      * Injected by the application container itself.
      */
+    @Programmatic
     public void setContainer(final DomainObjectContainer container) {
         this.container = container;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/AbstractService.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/AbstractService.java b/core/applib/src/main/java/org/apache/isis/applib/AbstractService.java
index fa65b82..91b2f3f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/AbstractService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/AbstractService.java
@@ -19,11 +19,11 @@
 
 package org.apache.isis.applib;
 
-import org.apache.isis.applib.annotation.Hidden;
+import org.apache.isis.applib.annotation.Programmatic;
 
 public abstract class AbstractService extends AbstractContainedObject {
 
-    @Hidden
+    @Programmatic
     public String getId() {
         return getClassName();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResult.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResult.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResult.java
index 5b1dfc6..7c3fd89 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResult.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResult.java
@@ -30,7 +30,7 @@ public class FixtureResult {
     private String fixtureScriptClassName;
 
     @PropertyLayout(named="Fixture script")
-    @Optional
+    @Property(optional = Optionality.TRUE)
     @MemberOrder(sequence="1")
     public String getFixtureScriptClassName() {
         return fixtureScriptClassName;

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
index c1d7561..33a5e1f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
@@ -31,10 +31,11 @@ import com.google.common.collect.Maps;
 import com.google.common.io.CharSource;
 import org.apache.isis.applib.AbstractViewModel;
 import org.apache.isis.applib.DomainObjectContainer;
-import org.apache.isis.applib.annotation.Hidden;
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.ViewModelLayout;
+import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.fixtures.FixtureType;
 import org.apache.isis.applib.fixtures.InstallableFixture;
 
@@ -139,7 +140,7 @@ public abstract class FixtureScript
 
     //region > qualifiedName
 
-    @Hidden
+    @Programmatic
     public String getQualifiedName() {
         return getParentPath() + getLocalName();
     }
@@ -151,7 +152,7 @@ public abstract class FixtureScript
     private String friendlyName;
     
     @Title
-    @Hidden
+    @PropertyLayout(hidden = Where.EVERYWHERE)
     public String getFriendlyName() {
         return friendlyName;
     }
@@ -168,7 +169,7 @@ public abstract class FixtureScript
      * Will always be populated, initially by the default name, but can be
      * {@link #setLocalName(String) overridden}.
      */
-    @Hidden
+    @PropertyLayout(hidden = Where.EVERYWHERE)
     public String getLocalName() {
         return localName;
     }
@@ -185,7 +186,7 @@ public abstract class FixtureScript
     /**
      * Path of the parent of this script (if any), with trailing {@value #PATH_SEPARATOR}.
      */
-    @Hidden
+    @PropertyLayout(hidden = Where.EVERYWHERE)
     public String getParentPath() {
         return parentPath;
     }
@@ -226,7 +227,7 @@ public abstract class FixtureScript
      * {@link FixtureScript}s are {@link Discoverability#NON_DISCOVERABLE not}.  This can be overridden in the
      * constructor, however or by calling the {@link #withDiscoverability(org.apache.isis.applib.fixturescripts.FixtureScript.Discoverability) setter}.
      */
-    @Hidden
+    @PropertyLayout(hidden = Where.EVERYWHERE)
     public boolean isDiscoverable() {
         return discoverability == Discoverability.DISCOVERABLE;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
index 8044277..302f1a4 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
@@ -39,7 +39,6 @@ import org.apache.isis.applib.util.ObjectContracts;
 
 public abstract class FixtureScripts extends AbstractService {
 
-
     //region > nonPersistedObjectsStrategy, multipleExecutionStrategy enums
 
     /**
@@ -186,7 +185,8 @@ public abstract class FixtureScripts extends AbstractService {
     //region > init
 
     private final List<FixtureScript> fixtureScriptList = Lists.newArrayList();
-    
+
+    @Programmatic
     @PostConstruct
     public void init() {
         findAndInstantiateFixtureScripts(fixtureScriptList);
@@ -255,7 +255,7 @@ public abstract class FixtureScripts extends AbstractService {
                     describedAs="Script-specific parameters (if any).  The format depends on the script implementation (eg key=value, CSV, JSON, XML etc)",
                     multiLine = 10
             )
-            @Optional
+            @Parameter(optional = Optionality.TRUE)
             final String parameters) {
 
         // if this method is called programmatically, the caller may have simply new'd up the fixture script

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolderActionContributions.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolderActionContributions.java b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolderActionContributions.java
index 461c5fc..7f967e0 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolderActionContributions.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkHolderActionContributions.java
@@ -20,9 +20,11 @@ package org.apache.isis.applib.services.bookmark;
 
 import java.util.Map;
 import javax.annotation.PostConstruct;
-import org.apache.isis.applib.annotation.NotContributed;
-import org.apache.isis.applib.annotation.NotInServiceMenu;
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.Contributed;
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.annotation.SemanticsOf;
 
 /**
  * Domain service that contributes an action (named '<tt>lookup</tt>') to
@@ -53,8 +55,8 @@ public class BookmarkHolderActionContributions  {
     //endregion
 
 
-    @NotInServiceMenu
-    @NotContributed(NotContributed.As.ASSOCIATION)
+    @Action(semantics = SemanticsOf.SAFE)
+    @ActionLayout(contributed = Contributed.AS_ACTION, cssClassFa = "fa-bookmark")
     public Object lookup(final BookmarkHolder bookmarkHolder) {
         return bookmarkService.lookup(bookmarkHolder);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java
index 8a994a1..52d1c4e 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java
@@ -22,7 +22,6 @@ import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import com.google.common.collect.Sets;
 import com.google.common.eventbus.EventBus;
-import org.apache.isis.applib.annotation.Hidden;
 import org.apache.isis.applib.annotation.Programmatic;
 
 /**
@@ -41,7 +40,6 @@ import org.apache.isis.applib.annotation.Programmatic;
  *     (keeps things nice and symmetrical).
  * </p>
  */
-@Hidden
 public abstract class EventBusService {
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
index 8c9c98c..a4658b1 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
@@ -20,19 +20,15 @@ package org.apache.isis.applib.services.exceprecog;
 
 import java.util.List;
 import java.util.Map;
-
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
-
 import com.google.common.base.Function;
 import com.google.common.base.Functions;
 import com.google.common.base.Predicate;
 import com.google.common.base.Throwables;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
-import org.apache.isis.applib.annotation.Hidden;
+import org.apache.isis.applib.annotation.Programmatic;
 
 /**
  * Abstract implementation of {@link ExceptionRecognizer} that looks 
@@ -44,7 +40,6 @@ import org.apache.isis.applib.annotation.Hidden;
  * If a messaging-parsing {@link Function} is provided through the constructor,
  * then the message can be altered.  Otherwise the exception's {@link Throwable#getMessage() message} is returned as-is.
  */
-@Hidden
 public abstract class ExceptionRecognizerAbstract implements ExceptionRecognizer2 {
 
     public static final Logger LOG = LoggerFactory.getLogger(ExceptionRecognizerAbstract.class);
@@ -127,6 +122,7 @@ public abstract class ExceptionRecognizerAbstract implements ExceptionRecognizer
 
     // //////////////////////////////////////
 
+    @Programmatic
     public String recognize(Throwable ex) {
         List<Throwable> causalChain = Throwables.getCausalChain(ex);
         for (Throwable throwable : causalChain) {
@@ -143,6 +139,7 @@ public abstract class ExceptionRecognizerAbstract implements ExceptionRecognizer
         return null;
     }
 
+    @Programmatic
     @Override
     public Recognition recognize2(Throwable ex) {
         return Recognition.of(category, recognize(ex));

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java
index f3b6a63..fda96b6 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java
@@ -21,13 +21,9 @@ package org.apache.isis.applib.services.exceprecog;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
-
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
-
 import com.google.common.collect.Lists;
-
-import org.apache.isis.applib.annotation.Hidden;
 import org.apache.isis.applib.annotation.Programmatic;
 
 /**
@@ -43,7 +39,6 @@ import org.apache.isis.applib.annotation.Programmatic;
  * recognize various types of constraint violations.  These are grouped together as a single
  * set through the use of this class.
  */
-@Hidden
 public class ExceptionRecognizerComposite implements ExceptionRecognizer2 {
 
     private final List<ExceptionRecognizer> services = Lists.newArrayList();

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java
index 3bb34ba..fa5b652 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java
@@ -24,7 +24,6 @@ import com.google.common.base.Function;
 import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 import com.google.common.base.Throwables;
-import org.apache.isis.applib.annotation.Hidden;
 
 /**
  * An specific implementation of {@link ExceptionRecognizer} that looks for an
@@ -36,7 +35,6 @@ import org.apache.isis.applib.annotation.Hidden;
  * If a messaging-parsing {@link Function} is provided through the constructor,
  * then the message can be altered.  Otherwise the exception's {@link Throwable#getMessage() message} is returned as-is.
  */
-@Hidden
 public class ExceptionRecognizerForType extends ExceptionRecognizerAbstract {
 
     protected final static Predicate<Throwable> ofTypeExcluding(final Class<? extends Throwable> exceptionType, final String... messages) {

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/services/homepage/AbstractHomePageDashboardService.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/homepage/AbstractHomePageDashboardService.java b/core/applib/src/main/java/org/apache/isis/applib/services/homepage/AbstractHomePageDashboardService.java
index ac06563..e10835f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/homepage/AbstractHomePageDashboardService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/homepage/AbstractHomePageDashboardService.java
@@ -20,10 +20,10 @@ package org.apache.isis.applib.services.homepage;
 
 import org.apache.isis.applib.AbstractService;
 import org.apache.isis.applib.ViewModel;
-import org.apache.isis.applib.annotation.ActionSemantics;
-import org.apache.isis.applib.annotation.ActionSemantics.Of;
-import org.apache.isis.applib.annotation.Hidden;
+import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.HomePage;
+import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Where;
 
 /**
  * Convenience domain service to create a view model (eg a dashboard) to be rendered automatically
@@ -46,7 +46,6 @@ import org.apache.isis.applib.annotation.HomePage;
  * for different users), then do <i>not</i> subclass from this service; instead write your own service
  * with a no-arg action with the {@link HomePage} annotation.
  */
-@Hidden
 public abstract class AbstractHomePageDashboardService<T extends ViewModel> extends AbstractService {
     
     /**
@@ -84,7 +83,10 @@ public abstract class AbstractHomePageDashboardService<T extends ViewModel> exte
 
     // //////////////////////////////////////
 
-    @ActionSemantics(Of.SAFE)
+    @Action(
+            semantics = SemanticsOf.SAFE,
+            hidden = Where.EVERYWHERE
+    )
     @HomePage
     public T lookup() {
         return newViewModelInstance(viewModel, id);

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java b/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java
index 9a2f187..b153931 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java
@@ -65,7 +65,6 @@ import org.apache.isis.applib.services.wrapper.listeners.InteractionListener;
  * <tt>o.a.i.core:isis-core-wrapper</tt> on the classpath; no further configuration is required.
  * </p>
  */
-@Hidden
 public interface WrapperFactory {
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/exceprecog/ExceptionRecognizerCompositeForJdoObjectStore.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/exceprecog/ExceptionRecognizerCompositeForJdoObjectStore.java b/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/exceprecog/ExceptionRecognizerCompositeForJdoObjectStore.java
index 3abe518..9ef69e6 100644
--- a/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/exceprecog/ExceptionRecognizerCompositeForJdoObjectStore.java
+++ b/core/applib/src/main/java/org/apache/isis/objectstore/jdo/applib/service/exceprecog/ExceptionRecognizerCompositeForJdoObjectStore.java
@@ -18,7 +18,6 @@
  */
 package org.apache.isis.objectstore.jdo.applib.service.exceprecog;
 
-import org.apache.isis.applib.annotation.Hidden;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerComposite;
 
@@ -31,10 +30,8 @@ import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerComposite;
  * If using the JDO Object store, either register in <tt>isis.properties</tt>, or
  * compose your own, out of the underlying more fine-grained {@link ExceptionRecognizer} implementations. 
  */
-@Hidden
 public class ExceptionRecognizerCompositeForJdoObjectStore extends ExceptionRecognizerComposite {
-    
-    
+
     public ExceptionRecognizerCompositeForJdoObjectStore() {
         // most specific ones first
         add(new ExceptionRecognizerForSQLIntegrityConstraintViolationUniqueOrIndexException());

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java
index 906b732..920867d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java
@@ -87,14 +87,14 @@ public class FacetedMethod extends TypedHolderDefault implements IdentifiedHolde
     }
 
     public static FacetedMethod createForAction(final Class<?> declaringType, final Method method) {
-        return new FacetedMethod(FeatureType.ACTION, declaringType, method, method.getReturnType(), getParameters(method));
+        return new FacetedMethod(FeatureType.ACTION, declaringType, method, method.getReturnType(), getParameters(declaringType, method));
     }
 
-    private static List<FacetedMethodParameter> getParameters(final Method actionMethod) {
+    private static List<FacetedMethodParameter> getParameters(final Class<?> declaringType, final Method actionMethod) {
         final Class<?>[] parameterTypes = actionMethod.getParameterTypes();
         final List<FacetedMethodParameter> actionParams = Lists.newArrayList();
         for (final Class<?> parameterType : parameterTypes) {
-            actionParams.add(new FacetedMethodParameter(parameterType));
+            actionParams.add(new FacetedMethodParameter(declaringType, actionMethod, parameterType));
         }
         return Collections.unmodifiableList(actionParams);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethodParameter.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethodParameter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethodParameter.java
index bd9327b..077e990 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethodParameter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethodParameter.java
@@ -16,12 +16,24 @@
  */
 package org.apache.isis.core.metamodel.facets;
 
+import java.lang.reflect.Method;
+import org.apache.isis.applib.Identifier;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 
-public class FacetedMethodParameter extends TypedHolderDefault {
+public class FacetedMethodParameter extends TypedHolderDefault implements IdentifiedHolder {
 
-    public FacetedMethodParameter(final Class<?> type) {
+    private final Identifier identifier;
+
+    public FacetedMethodParameter(final Class<?> declaringType, final Method method, final Class<?> type) {
         super(FeatureType.ACTION_PARAMETER, type);
+
+        // best we can do...
+        this.identifier = FeatureType.ACTION.identifierFor(declaringType, method);
     }
 
+    @Override
+    public Identifier getIdentifier() {
+        return identifier;
+    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
index 29a6e5a..2d83c2b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
@@ -44,6 +44,7 @@ import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
 import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
@@ -86,8 +87,21 @@ import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistry;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
+
+public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implements ServicesInjectorAware, IsisConfigurationAware, AdapterManagerAware, RuntimeContextAware, MetaModelValidatorRefiner {
+
+    private final MetaModelValidatorForDeprecatedAnnotation actionSemanticsValidator = new MetaModelValidatorForDeprecatedAnnotation(ActionSemantics.class);
+    private final MetaModelValidatorForDeprecatedAnnotation actionInteractionValidator = new MetaModelValidatorForDeprecatedAnnotation(ActionInteraction.class);
+    private final MetaModelValidatorForDeprecatedAnnotation postsActionInvokedEventValidator = new MetaModelValidatorForDeprecatedAnnotation(PostsActionInvokedEvent.class);
+    private final MetaModelValidatorForDeprecatedAnnotation bulkValidator = new MetaModelValidatorForDeprecatedAnnotation(Bulk.class);
+    private final MetaModelValidatorForDeprecatedAnnotation commandValidator = new MetaModelValidatorForDeprecatedAnnotation(Command.class);
+    private final MetaModelValidatorForDeprecatedAnnotation queryOnlyValidator = new MetaModelValidatorForDeprecatedAnnotation(QueryOnly.class);
+    private final MetaModelValidatorForDeprecatedAnnotation idempotentValidator = new MetaModelValidatorForDeprecatedAnnotation(Idempotent.class);
+    private final MetaModelValidatorForDeprecatedAnnotation publishedActionValidator = new MetaModelValidatorForDeprecatedAnnotation(PublishedAction.class);
+    private final MetaModelValidatorForDeprecatedAnnotation typeOfValidator = new MetaModelValidatorForDeprecatedAnnotation(TypeOf.class);
 
-public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implements ServicesInjectorAware, IsisConfigurationAware, AdapterManagerAware, RuntimeContextAware {
 
     private ServicesInjector servicesInjector;
     private IsisConfiguration configuration;
@@ -177,15 +191,17 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
             // deprecated
             if (postsActionInvokedEvent != null) {
                 final Class<? extends ActionInvokedEvent<?>> actionInvokedEventType = postsActionInvokedEvent.value();
-                actionInvocationFacet = new ActionInvocationFacetForPostsActionInvokedEventAnnotation(
-                        actionInvokedEventType, actionMethod, typeSpec, returnSpec, actionDomainEventFacet, holder,
-                        getRuntimeContext(), getAdapterManager(), getServicesInjector());
+                actionInvocationFacet = actionInteractionValidator.flagIfPresent(
+                        new ActionInvocationFacetForPostsActionInvokedEventAnnotation(
+                                actionInvokedEventType, actionMethod, typeSpec, returnSpec, actionDomainEventFacet, holder,
+                                getRuntimeContext(), getAdapterManager(), getServicesInjector()));
             } else
             // deprecated (but more recently)
             if (actionInteraction != null) {
-                actionInvocationFacet = new ActionInvocationFacetForDomainEventFromActionInteractionAnnotation(
-                        actionDomainEventType, actionMethod, typeSpec, returnSpec, actionDomainEventFacet, holder,
-                        getRuntimeContext(), getAdapterManager(), getServicesInjector());
+                actionInvocationFacet = actionInteractionValidator.flagIfPresent(
+                        new ActionInvocationFacetForDomainEventFromActionInteractionAnnotation(
+                                actionDomainEventType, actionMethod, typeSpec, returnSpec, actionDomainEventFacet, holder,
+                                getRuntimeContext(), getAdapterManager(), getServicesInjector()));
             } else
             // current
             if (action != null) {
@@ -231,18 +247,18 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
 
         // check for the deprecated @QueryOnly...
         final QueryOnly queryOnly = Annotations.getAnnotation(processMethodContext.getMethod(), QueryOnly.class);
-        facet = ActionSemanticsFacetFromQueryOnlyAnnotation.create(queryOnly, holder);
+        facet = queryOnlyValidator.flagIfPresent(ActionSemanticsFacetFromQueryOnlyAnnotation.create(queryOnly, holder));
 
         // else check for the deprecated @Idempotent...
         if(facet == null) {
             final Idempotent idempotent = Annotations.getAnnotation(processMethodContext.getMethod(), Idempotent.class);
-            facet = ActionSemanticsFacetFromIdempotentAnnotation.create(idempotent, holder);
+            facet = idempotentValidator.flagIfPresent(ActionSemanticsFacetFromIdempotentAnnotation.create(idempotent, holder));
         }
 
         // else check for the deprecated @ActionSemantics ...
         if(facet == null) {
             final ActionSemantics actionSemantics = Annotations.getAnnotation(method, ActionSemantics.class);
-            facet = ActionSemanticsFacetForActionSemanticsAnnotation.create(actionSemantics, holder);
+            facet = actionSemanticsValidator.flagIfPresent(ActionSemanticsFacetForActionSemanticsAnnotation.create(actionSemantics, holder));
         }
 
         // else check for @Action(semantics=...)
@@ -268,7 +284,7 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
 
         // check for the deprecated @Bulk annotation first
         final Bulk annotation = Annotations.getAnnotation(method, Bulk.class);
-        facet = BulkFacetForBulkAnnotation.create(annotation, holder);
+        facet = bulkValidator.flagIfPresent(BulkFacetForBulkAnnotation.create(annotation, holder));
 
         // else check for @Action(invokeOn=...)
         if(facet == null) {
@@ -300,7 +316,8 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
 
         // check for deprecated @Command annotation first
         final Command annotation = Annotations.getAnnotation(method, Command.class);
-        commandFacet = CommandFacetForCommandAnnotation.create(annotation, processMethodContext.getFacetHolder());
+        commandFacet = commandValidator.flagIfPresent(
+                CommandFacetForCommandAnnotation.create(annotation, processMethodContext.getFacetHolder()));
 
         // else check for @Action(command=...)
         if(commandFacet == null) {
@@ -330,7 +347,8 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
 
         // check for deprecated @PublishedAction annotation first
         final PublishedAction annotation = Annotations.getAnnotation(processMethodContext.getMethod(), PublishedAction.class);
-        facet = PublishedActionFacetForPublishedActionAnnotation.create(annotation, holder);
+        facet = publishedActionValidator.flagIfPresent(
+                PublishedActionFacetForPublishedActionAnnotation.create(annotation, holder));
 
         // else check for @Action(publishing=...)
         if(facet == null) {
@@ -354,7 +372,8 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
 
         // check for deprecated @TypeOf
         final TypeOf annotation = Annotations.getAnnotation(method, TypeOf.class);
-        facet = TypeOfFacetOnActionForTypeOfAnnotation.create(annotation, getSpecificationLoader(), holder);
+        facet = typeOfValidator.flagIfPresent(
+                TypeOfFacetOnActionForTypeOfAnnotation.create(annotation, getSpecificationLoader(), holder));
 
         // check for @Action(typeOf=...)
         if(facet == null) {
@@ -436,7 +455,20 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
     }
 
     // ///////////////////////////////////////////////////////////////
-    // Dependencies
+
+    @Override
+    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
+        metaModelValidator.add(actionSemanticsValidator);
+        metaModelValidator.add(actionInteractionValidator);
+        metaModelValidator.add(postsActionInvokedEventValidator);
+        metaModelValidator.add(bulkValidator);
+        metaModelValidator.add(commandValidator);
+        metaModelValidator.add(queryOnlyValidator);
+        metaModelValidator.add(idempotentValidator);
+        metaModelValidator.add(publishedActionValidator);
+        metaModelValidator.add(typeOfValidator);
+    }
+
     // ///////////////////////////////////////////////////////////////
 
     @Override
@@ -447,6 +479,16 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract implement
     @Override
     public void setConfiguration(final IsisConfiguration configuration) {
         this.configuration = configuration;
+
+        actionSemanticsValidator.setConfiguration(configuration);
+        actionInteractionValidator.setConfiguration(configuration);
+        postsActionInvokedEventValidator.setConfiguration(configuration);
+        bulkValidator.setConfiguration(configuration);
+        commandValidator.setConfiguration(configuration);
+        queryOnlyValidator.setConfiguration(configuration);
+        idempotentValidator.setConfiguration(configuration);
+        publishedActionValidator.setConfiguration(configuration);
+        typeOfValidator.setConfiguration(configuration);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/bulk/BulkFacetForBulkAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/bulk/BulkFacetForBulkAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/bulk/BulkFacetForBulkAnnotation.java
index 3ea6ff2..618a9ad 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/bulk/BulkFacetForBulkAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/bulk/BulkFacetForBulkAnnotation.java
@@ -24,6 +24,10 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
 import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacetAbstract;
 
+/**
+ * @deprecated
+ */
+@Deprecated
 public class BulkFacetForBulkAnnotation extends BulkFacetAbstract {
 
     public static BulkFacet create(

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForPostsActionInvokedEventAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForPostsActionInvokedEventAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForPostsActionInvokedEventAnnotation.java
index 20c1ed7..95f815f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForPostsActionInvokedEventAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForPostsActionInvokedEventAnnotation.java
@@ -27,6 +27,10 @@ import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
+/**
+ * @deprecated
+ */
+@Deprecated
 public class ActionInvocationFacetForPostsActionInvokedEventAnnotation
         extends ActionInvocationFacetForDomainEventAbstract {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/semantics/ActionSemanticsFacetFromIdempotentAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/semantics/ActionSemanticsFacetFromIdempotentAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/semantics/ActionSemanticsFacetFromIdempotentAnnotation.java
index 188f1c4..375374d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/semantics/ActionSemanticsFacetFromIdempotentAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/semantics/ActionSemanticsFacetFromIdempotentAnnotation.java
@@ -25,6 +25,10 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
 import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacetAbstract;
 
+/**
+ * @deprecated
+ */
+@Deprecated
 public class ActionSemanticsFacetFromIdempotentAnnotation extends ActionSemanticsFacetAbstract {
 
     private ActionSemanticsFacetFromIdempotentAnnotation(final FacetHolder holder) {

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/semantics/ActionSemanticsFacetFromQueryOnlyAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/semantics/ActionSemanticsFacetFromQueryOnlyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/semantics/ActionSemanticsFacetFromQueryOnlyAnnotation.java
index d015885..f52f3be 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/semantics/ActionSemanticsFacetFromQueryOnlyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/semantics/ActionSemanticsFacetFromQueryOnlyAnnotation.java
@@ -25,6 +25,10 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
 import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacetAbstract;
 
+/**
+ * @deprecated
+ */
+@Deprecated
 public class ActionSemanticsFacetFromQueryOnlyAnnotation extends ActionSemanticsFacetAbstract {
 
     private ActionSemanticsFacetFromQueryOnlyAnnotation(final FacetHolder holder) {

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/paged/annotation/PagedFacetOnActionFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/paged/annotation/PagedFacetOnActionFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/paged/annotation/PagedFacetOnActionFactory.java
index eef8f70..421049c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/paged/annotation/PagedFacetOnActionFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/paged/annotation/PagedFacetOnActionFactory.java
@@ -54,7 +54,7 @@ public class PagedFacetOnActionFactory extends FacetFactoryAbstract
         
         PagedFacet pagedFacet = createFromMetadataPropertiesIfPossible(processMethodContext);
         if(pagedFacet == null) {
-            pagedFacet = validator.invalidIfPresent(createFromPagedAnnotationIfPossible(processMethodContext));
+            pagedFacet = validator.flagIfPresent(createFromPagedAnnotationIfPossible(processMethodContext));
         }
         // no-op if null
         FacetUtil.addFacet(pagedFacet);

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
index 0e3b4f5..e4fcd65 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactory.java
@@ -29,9 +29,12 @@ import org.apache.isis.applib.annotation.PostsCollectionAddedToEvent;
 import org.apache.isis.applib.annotation.PostsCollectionRemovedFromEvent;
 import org.apache.isis.applib.annotation.TypeOf;
 import org.apache.isis.applib.services.eventbus.CollectionDomainEvent;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationAware;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
 import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.ContributeeMemberFacetFactory;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
@@ -40,6 +43,7 @@ import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
 import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacetInferredFromArray;
 import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacetInferredFromGenerics;
 import org.apache.isis.core.metamodel.facets.collections.collection.disabled.DisabledFacetForCollectionAnnotation;
+import org.apache.isis.core.metamodel.facets.collections.collection.hidden.HiddenFacetForCollectionAnnotation;
 import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionAddToFacetForDomainEventFromAbstract;
 import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionAddToFacetForDomainEventFromCollectionAnnotation;
 import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionAddToFacetForDomainEventFromCollectionInteractionAnnotation;
@@ -56,18 +60,24 @@ import org.apache.isis.core.metamodel.facets.collections.collection.modify.Colle
 import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionRemoveFromFacetForDomainEventFromCollectionInteractionAnnotation;
 import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionRemoveFromFacetForDomainEventFromDefault;
 import org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionRemoveFromFacetForPostsCollectionRemovedFromEventAnnotation;
-import org.apache.isis.core.metamodel.facets.collections.collection.hidden.HiddenFacetForCollectionAnnotation;
 import org.apache.isis.core.metamodel.facets.collections.collection.typeof.TypeOfFacetOnCollectionFromCollectionAnnotation;
+import org.apache.isis.core.metamodel.facets.collections.collection.typeof.TypeOfFacetOnCollectionFromTypeOfAnnotation;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacet;
-import org.apache.isis.core.metamodel.facets.collections.collection.typeof.TypeOfFacetOnCollectionFromTypeOfAnnotation;
 import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistry;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
+import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
+
+public class CollectionAnnotationFacetFactory extends FacetFactoryAbstract implements ServicesInjectorAware, ContributeeMemberFacetFactory, MetaModelValidatorRefiner, IsisConfigurationAware {
 
-public class CollectionAnnotationFacetFactory extends FacetFactoryAbstract implements ServicesInjectorAware, ContributeeMemberFacetFactory {
+    private final MetaModelValidatorForDeprecatedAnnotation postsCollectionAddedToEventValidator = new MetaModelValidatorForDeprecatedAnnotation(PostsCollectionAddedToEvent.class);
+    private final MetaModelValidatorForDeprecatedAnnotation postsCollectionRemovedFromEventValidator = new MetaModelValidatorForDeprecatedAnnotation(PostsCollectionRemovedFromEvent.class);
+    private final MetaModelValidatorForDeprecatedAnnotation collectionInteractionValidator = new MetaModelValidatorForDeprecatedAnnotation(CollectionInteraction.class);
+    private final MetaModelValidatorForDeprecatedAnnotation typeOfValidator = new MetaModelValidatorForDeprecatedAnnotation(TypeOf.class);
 
     private final CollectionTypeRegistry collectionTypeRegistry = new CollectionTypeRegistry();
 
@@ -117,21 +127,24 @@ public class CollectionAnnotationFacetFactory extends FacetFactoryAbstract imple
         // search for @PostsCollectionAddedToEvent(value=...)
         if(postsCollectionAddedToEvent != null) {
             collectionDomainEventType = postsCollectionAddedToEvent.value();
-            collectionDomainEventFacet = new CollectionDomainEventFacetForPostsCollectionAddedToEventAnnotation(
-                    collectionDomainEventType, servicesInjector, getSpecificationLoader(), holder);
+            collectionDomainEventFacet = postsCollectionAddedToEventValidator.flagIfPresent(
+                    new CollectionDomainEventFacetForPostsCollectionAddedToEventAnnotation(
+                        collectionDomainEventType, servicesInjector, getSpecificationLoader(), holder));
         } else
         // search for @PostsCollectionRemovedFromEvent(value=...)
         if(postsCollectionRemovedFromEvent != null) {
             collectionDomainEventType = postsCollectionRemovedFromEvent.value();
-            collectionDomainEventFacet = new CollectionDomainEventFacetForPostsCollectionRemovedFromEventAnnotation(
-                    collectionDomainEventType, servicesInjector, getSpecificationLoader(), holder);
+            collectionDomainEventFacet = postsCollectionRemovedFromEventValidator.flagIfPresent(
+                    new CollectionDomainEventFacetForPostsCollectionRemovedFromEventAnnotation(
+                        collectionDomainEventType, servicesInjector, getSpecificationLoader(), holder));
         } else
 
         // search for @CollectionInteraction(value=...)
         if(collectionInteraction != null) {
             collectionDomainEventType = collectionInteraction.value();
-            collectionDomainEventFacet = new CollectionDomainEventFacetForCollectionInteractionAnnotation(
-                    collectionDomainEventType, servicesInjector, getSpecificationLoader(), holder);
+            collectionDomainEventFacet = collectionInteractionValidator.flagIfPresent(
+                    new CollectionDomainEventFacetForCollectionInteractionAnnotation(
+                        collectionDomainEventType, servicesInjector, getSpecificationLoader(), holder));
         } else
         // search for @Collection(domainEvent=...)
         if(collection != null && collection.domainEvent() != null) {
@@ -243,7 +256,8 @@ public class CollectionAnnotationFacetFactory extends FacetFactoryAbstract imple
 
         // check for deprecated @TypeOf
         final TypeOf annotation = Annotations.getAnnotation(method, TypeOf.class);
-        facet = TypeOfFacetOnCollectionFromTypeOfAnnotation.create(annotation, facetHolder, getSpecificationLoader());
+        facet = typeOfValidator.flagIfPresent(
+                TypeOfFacetOnCollectionFromTypeOfAnnotation.create(annotation, facetHolder, getSpecificationLoader()));
 
         // check for @Collection(typeOf=...)
         if(facet == null) {
@@ -315,6 +329,28 @@ public class CollectionAnnotationFacetFactory extends FacetFactoryAbstract imple
 
     }
 
+
+    // //////////////////////////////////////
+
+    @Override
+    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
+        metaModelValidator.add(postsCollectionAddedToEventValidator);
+        metaModelValidator.add(postsCollectionRemovedFromEventValidator);
+        metaModelValidator.add(collectionInteractionValidator);
+        metaModelValidator.add(typeOfValidator);
+    }
+
+    // //////////////////////////////////////
+
+
+    @Override
+    public void setConfiguration(final IsisConfiguration configuration) {
+        postsCollectionAddedToEventValidator.setConfiguration(configuration);
+        postsCollectionRemovedFromEventValidator.setConfiguration(configuration);
+        collectionInteractionValidator.setConfiguration(configuration);
+        typeOfValidator.setConfiguration(configuration);
+    }
+
     @Override
     public void setServicesInjector(final ServicesInjector servicesInjector) {
         this.servicesInjector = servicesInjector;

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/paged/annotation/PagedFacetOnCollectionFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/paged/annotation/PagedFacetOnCollectionFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/paged/annotation/PagedFacetOnCollectionFactory.java
index 2d7f28f..4e8a844 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/paged/annotation/PagedFacetOnCollectionFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/paged/annotation/PagedFacetOnCollectionFactory.java
@@ -51,7 +51,7 @@ public class PagedFacetOnCollectionFactory extends FacetFactoryAbstract
         
         PagedFacet pagedFacet = createFromMetadataPropertiesIfPossible(processMethodContext);
         if(pagedFacet == null) {
-            pagedFacet = validator.invalidIfPresent(createFromPagedAnnotationIfPossible(processMethodContext));
+            pagedFacet = validator.flagIfPresent(createFromPagedAnnotationIfPossible(processMethodContext));
         }
         // no-op if null
         FacetUtil.addFacet(pagedFacet);

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnMemberFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnMemberFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnMemberFactory.java
index 33478a4..bfed8f7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnMemberFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnMemberFactory.java
@@ -46,7 +46,7 @@ public class CssClassFacetOnMemberFactory extends FacetFactoryAbstract implement
     public void process(final ProcessMethodContext processMethodContext) {
         CssClassFacet cssClassFacet = createFromMetadataPropertiesIfPossible(processMethodContext);
         if(cssClassFacet == null) {
-            cssClassFacet = validator.invalidIfPresent(createFromAnnotationIfPossible(processMethodContext));
+            cssClassFacet = validator.flagIfPresent(createFromAnnotationIfPossible(processMethodContext));
         }
 
         // no-op if null

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
index fb184bb..2bda368 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
@@ -56,7 +56,7 @@ public class CssClassFaFacetOnMemberFactory extends FacetFactoryAbstract impleme
     public void process(final ProcessMethodContext processMethodContext) {
         CssClassFaFacet cssClassFaFacet = createFromMetadataPropertiesIfPossible(processMethodContext);
         if(cssClassFaFacet == null) {
-            cssClassFaFacet = validator.invalidIfPresent(createFromAnnotationIfPossible(processMethodContext));
+            cssClassFaFacet = validator.flagIfPresent(createFromAnnotationIfPossible(processMethodContext));
         }
         if(cssClassFaFacet == null) {
             cssClassFaFacet = createFromConfiguredRegexIfPossible(processMethodContext);

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/describedas/annotprop/DescribedAsFacetOnMemberFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/describedas/annotprop/DescribedAsFacetOnMemberFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/describedas/annotprop/DescribedAsFacetOnMemberFactory.java
index edaf759..19b1646 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/describedas/annotprop/DescribedAsFacetOnMemberFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/describedas/annotprop/DescribedAsFacetOnMemberFactory.java
@@ -49,7 +49,7 @@ public class DescribedAsFacetOnMemberFactory extends FacetFactoryAbstract implem
         DescribedAsFacet facet = createFromMetadataPropertiesIfPossible(processMethodContext);
         
         if(facet == null) {
-            facet = validator.invalidIfPresent(createFromAnnotationIfPossible(processMethodContext));
+            facet = validator.flagIfPresent(createFromAnnotationIfPossible(processMethodContext));
         }
         if (facet == null) {
             facet = createFromAnnotationOnReturnTypeIfPossible(processMethodContext);

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetFactory.java
index 24c0fb4..b1ab3f2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/annotprop/DisabledFacetFactory.java
@@ -47,7 +47,7 @@ public class DisabledFacetFactory extends FacetFactoryAbstract
     public void process(final ProcessMethodContext processMethodContext) {
         DisabledFacet disabledFacet = createFromMetadataPropertiesIfPossible(processMethodContext);
         if(disabledFacet == null) {
-            disabledFacet = validator.invalidIfPresent(createFromAnnotationIfPossible(processMethodContext));
+            disabledFacet = validator.flagIfPresent(createFromAnnotationIfPossible(processMethodContext));
         }
         // no-op if null
         FacetUtil.addFacet(disabledFacet);

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberFactory.java
index 2eefa6a..795fcc3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/annotprop/HiddenFacetOnMemberFactory.java
@@ -47,7 +47,7 @@ public class HiddenFacetOnMemberFactory extends FacetFactoryAbstract
     public void process(final ProcessMethodContext processMethodContext) {
         HiddenFacet hiddenFacet = createFromMetadataPropertiesIfPossible(processMethodContext);
         if(hiddenFacet == null) {
-            hiddenFacet = validator.invalidIfPresent(createFromAnnotationIfPossible(processMethodContext));
+            hiddenFacet = validator.flagIfPresent(createFromAnnotationIfPossible(processMethodContext));
         }
         // no-op if null
         FacetUtil.addFacet(hiddenFacet);

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/annotprop/NamedFacetOnMemberFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/annotprop/NamedFacetOnMemberFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/annotprop/NamedFacetOnMemberFactory.java
index 8d27f74..a5aad10 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/annotprop/NamedFacetOnMemberFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/annotprop/NamedFacetOnMemberFactory.java
@@ -47,7 +47,7 @@ public class NamedFacetOnMemberFactory extends FacetFactoryAbstract implements C
     public void process(final ProcessMethodContext processMethodContext) {
         NamedFacet namedFacet = createFromMetadataPropertiesIfPossible(processMethodContext);
         if(namedFacet == null) {
-            namedFacet = validator.invalidIfPresent(createFromAnnotationIfPossible(processMethodContext));
+            namedFacet = validator.flagIfPresent(createFromAnnotationIfPossible(processMethodContext));
         }
         // no-op if null
         FacetUtil.addFacet(namedFacet);

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/render/annotprop/RenderFacetOrResolveFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/render/annotprop/RenderFacetOrResolveFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/render/annotprop/RenderFacetOrResolveFactory.java
index 9164319..6ab0b42 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/render/annotprop/RenderFacetOrResolveFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/render/annotprop/RenderFacetOrResolveFactory.java
@@ -50,10 +50,10 @@ public class RenderFacetOrResolveFactory extends FacetFactoryAbstract
         
         RenderFacet renderFacet = createFromMetadataPropertiesIfPossible(processMethodContext);
         if(renderFacet == null) {
-            renderFacet = renderValidator.invalidIfPresent(createFromRenderAnnotationIfPossible(processMethodContext));
+            renderFacet = renderValidator.flagIfPresent(createFromRenderAnnotationIfPossible(processMethodContext));
         }
         if(renderFacet == null) {
-            renderFacet = resolveValidator.invalidIfPresent(createFromResolveAnnotationIfPossible(processMethodContext));
+            renderFacet = resolveValidator.flagIfPresent(createFromResolveAnnotationIfPossible(processMethodContext));
         }
 
         // no-op if null

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/annotation/AutoCompleteFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/annotation/AutoCompleteFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/annotation/AutoCompleteFacetAnnotation.java
deleted file mode 100644
index 15d7f77..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/annotation/AutoCompleteFacetAnnotation.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.autocomplete.annotation;
-
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.autocomplete.AutoCompleteFacetAbstract;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
-
-public class AutoCompleteFacetAnnotation extends AutoCompleteFacetAbstract {
-
-    public AutoCompleteFacetAnnotation(FacetHolder holder, Class<?> repositoryClass, String actionName, SpecificationLoader specificationLoader, AdapterManager adapterManager, ServicesInjector servicesInjector) {
-        super(holder, repositoryClass, actionName, specificationLoader, adapterManager, servicesInjector);
-    }
-
-
-
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/annotation/AutoCompleteFacetAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/annotation/AutoCompleteFacetAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/annotation/AutoCompleteFacetAnnotationFactory.java
deleted file mode 100644
index 128968d..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/annotation/AutoCompleteFacetAnnotationFactory.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.autocomplete.annotation;
-
-import org.apache.isis.applib.annotation.AutoComplete;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationAware;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
-import org.apache.isis.core.metamodel.facets.Annotations;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.object.autocomplete.AutoCompleteFacet;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
-import org.apache.isis.core.metamodel.spec.SpecificationLoaderAware;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
-
-public class AutoCompleteFacetAnnotationFactory extends FacetFactoryAbstract implements AdapterManagerAware, ServicesInjectorAware, SpecificationLoaderAware, MetaModelValidatorRefiner, IsisConfigurationAware {
-
-    private final MetaModelValidatorForDeprecatedAnnotation validator = new MetaModelValidatorForDeprecatedAnnotation(AutoComplete.class);
-
-    private AdapterManager adapterManager;
-    private ServicesInjector servicesInjector;
-
-    public AutoCompleteFacetAnnotationFactory() {
-        super(FeatureType.OBJECTS_POST_PROCESSING_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        final AutoComplete annotation = Annotations.getAnnotation(processClassContext.getCls(), AutoComplete.class);
-        validator.addFacet(create(annotation, processClassContext.getFacetHolder()));
-    }
-
-    private AutoCompleteFacet create(final AutoComplete annotation, final FacetHolder holder) {
-        if(annotation == null) { return null; }
-
-        Class<?> repositoryClass = annotation.repository();
-        String actionName = annotation.action();
-        
-        return new AutoCompleteFacetAnnotation(holder, repositoryClass, actionName, getSpecificationLoader(), adapterManager, servicesInjector);
-    }
-
-    @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
-        metaModelValidator.add(validator);
-    }
-
-    // //////////////////////////////////////
-
-    @Override
-    public void setAdapterManager(AdapterManager adapterManager) {
-        this.adapterManager = adapterManager;
-    }
-
-    @Override
-    public void setServicesInjector(ServicesInjector servicesInjector) {
-        this.servicesInjector = servicesInjector;
-    }
-
-    @Override
-    public void setConfiguration(final IsisConfiguration configuration) {
-        validator.setConfiguration(configuration);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetViaBookmarkableAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetViaBookmarkableAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetViaBookmarkableAnnotationFactory.java
index be9ab8a..b301c00 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetViaBookmarkableAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetViaBookmarkableAnnotationFactory.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.Bookmarkable;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.config.IsisConfigurationAware;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
 import org.apache.isis.core.metamodel.facets.Annotations;
@@ -52,17 +53,17 @@ public class BookmarkPolicyFacetViaBookmarkableAnnotationFactory extends FacetFa
     @Override
     public void process(final ProcessClassContext processClassContext) {
         final Bookmarkable annotation = Annotations.getAnnotation(processClassContext.getCls(), Bookmarkable.class);
-        validator.addFacet(create(annotation, processClassContext.getFacetHolder()));
+        FacetUtil.addFacet(create(annotation, processClassContext.getFacetHolder()));
     }
 
     @Override
     public void process(final ProcessMethodContext processMethodContext) {
         final Bookmarkable annotation = Annotations.getAnnotation(processMethodContext.getMethod(), Bookmarkable.class);
-        validator.addFacet(create(annotation, processMethodContext.getFacetHolder()));
+        FacetUtil.addFacet(create(annotation, processMethodContext.getFacetHolder()));
     }
 
     private BookmarkPolicyFacet create(final Bookmarkable annotation, final FacetHolder holder) {
-        return annotation == null ? new BookmarkPolicyFacetFallback(holder) : new BookmarkPolicyFacetViaBookmarkableAnnotation(annotation.value(), holder);
+        return annotation == null ? new BookmarkPolicyFacetFallback(holder) : validator.flagIfPresent(new BookmarkPolicyFacetViaBookmarkableAnnotation(annotation.value(), holder));
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedannot/ChoicesFacetFromBoundedAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedannot/ChoicesFacetFromBoundedAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedannot/ChoicesFacetFromBoundedAnnotation.java
deleted file mode 100644
index 0181d13..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedannot/ChoicesFacetFromBoundedAnnotation.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.choices.boundedannot;
-
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.choices.ChoicesFacetFromBoundedAbstract;
-
-public class ChoicesFacetFromBoundedAnnotation extends ChoicesFacetFromBoundedAbstract {
-
-    public ChoicesFacetFromBoundedAnnotation(final FacetHolder holder, QuerySubmitter querySubmitter) {
-        super(holder, querySubmitter);
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/b5f73ec3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedannot/ChoicesFacetFromBoundedAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedannot/ChoicesFacetFromBoundedAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedannot/ChoicesFacetFromBoundedAnnotationFactory.java
deleted file mode 100644
index 784b6b7..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/boundedannot/ChoicesFacetFromBoundedAnnotationFactory.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.choices.boundedannot;
-
-import org.apache.isis.applib.annotation.Bounded;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
-import org.apache.isis.core.metamodel.adapter.QuerySubmitterAware;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.Annotations;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.propparam.choices.ChoicesFacet;
-
-public class ChoicesFacetFromBoundedAnnotationFactory extends FacetFactoryAbstract implements QuerySubmitterAware {
-
-    private QuerySubmitter querySubmitter;
-
-    public ChoicesFacetFromBoundedAnnotationFactory() {
-        super(FeatureType.OBJECTS_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        final Bounded annotation = Annotations.getAnnotation(processClassContext.getCls(), Bounded.class);
-        FacetUtil.addFacet(create(annotation, processClassContext.getFacetHolder()));
-    }
-
-    private ChoicesFacet create(final Bounded annotation, final FacetHolder holder) {
-        return annotation == null ? null : new ChoicesFacetFromBoundedAnnotation(holder, querySubmitter);
-    }
-
-    @Override
-    public void setQuerySubmitter(final QuerySubmitter querySubmitter) {
-        this.querySubmitter = querySubmitter;
-    }
-
-}