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 2016/05/24 06:58:50 UTC

[2/3] isis git commit: ISIS-1410: instantiate FacetFactory's directly rather than reflectively; replace 3 RemoveXxx facet factories with just one; replace/simplify CollectionTypeRegistry (to CollectionUtils); minor reformattings.

ISIS-1410: instantiate FacetFactory's directly rather than reflectively; replace 3 RemoveXxx facet factories with just one; replace/simplify CollectionTypeRegistry (to CollectionUtils); minor reformattings.


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

Branch: refs/heads/master
Commit: ec38b4b05ee77bbc9db0fa40345c902c54b00fb9
Parents: 54f5f27
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue May 24 07:16:30 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Tue May 24 07:16:30 2016 +0100

----------------------------------------------------------------------
 .../isis/core/commons/lang/MethodUtil.java      |  41 +-
 .../isis/core/metamodel/facets/Annotations.java |  12 +-
 ...llectionIdentifyingFacetFactoryAbstract.java |   9 +-
 .../action/ActionAnnotationFacetFactory.java    |   6 +-
 ...llectionAccessorFacetViaAccessorFactory.java |  15 +-
 .../CollectionAnnotationFacetFactory.java       |   6 +-
 .../CollectionFacetFactory.java                 |   8 +-
 .../ParentedFacetSinceCollectionFactory.java    |   4 +-
 .../callbacks/RemoveCallbackFacetFactory.java   |   5 +-
 .../RemoveAnnotatedMethodsFacetFactory.java     |  88 ++++
 ...PreDestroyAnnotationMethodsFacetFactory.java |  64 ---
 ...icOrIgnoreAnnotationMethodsFacetFactory.java |  63 ---
 .../RemoveSubscriberMethodsFacetFactory.java    |  70 ---
 .../core/metamodel/services/ServiceUtil.java    |  12 +-
 .../metamodel/specloader/CollectionUtils.java   |  45 ++
 .../CollectionTypeRegistry.java                 |  85 ----
 .../specimpl/FacetedMethodsBuilder.java         |  13 +-
 .../specimpl/ObjectMemberAbstract.java          |  11 +-
 .../specimpl/OneToManyAssociationDefault.java   |  19 +-
 .../dflt/ProgrammingModelFacetsJava5.java       | 471 ++++++++++---------
 .../testspec/ObjectSpecificationStub.java       |   3 +-
 ...rsistenceSessionFactoryMetamodelRefiner.java |  24 +-
 .../system/ObjectMemberAbstractTest.java        |   3 +-
 .../system/OneToManyAssociationDefaultTest.java |   3 +-
 24 files changed, 474 insertions(+), 606 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/MethodUtil.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/MethodUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/MethodUtil.java
index f526c64..539b39a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/MethodUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/MethodUtil.java
@@ -73,7 +73,7 @@ public class MethodUtil {
      * </ul>
      * If the returnType is specified as null then the return type is ignored.
      */
-    public static int findMethodIndex(final List<Method> methods, final MethodScope methodScope, final String name, final Class<?> returnType, final Class<?>[] paramTypes) {
+    private static int findMethodIndex(final List<Method> methods, final MethodScope methodScope, final String name, final Class<?> returnType, final Class<?>[] paramTypes) {
         int idx = -1;
         method: for (int i = 0; i < methods.size(); i++) {
             if (methods.get(i) == null) {
@@ -153,17 +153,22 @@ public class MethodUtil {
      *            ignored
      * @return Method
      */
-    public static List<Method> removeMethods(final List<Method> methods, final MethodScope forClass, final String prefix, final Class<?> returnType, final boolean canBeVoid, final int paramCount) {
+    public static List<Method> removeMethods(
+            final List<Method> methods,
+            final MethodScope forClass,
+            final String prefix,
+            final Class<?> returnType,
+            final boolean canBeVoid,
+            final int paramCount) {
     
         final List<Method> validMethods = new ArrayList<Method>();
     
         for (int i = 0; i < methods.size(); i++) {
-            if (methods.get(i) == null) {
+            final Method method = methods.get(i);
+            if (method == null) {
                 continue;
             }
-    
-            final Method method = methods.get(i);
-    
+
             if (!inScope(method, forClass)) {
                 continue;
             }
@@ -182,28 +187,6 @@ public class MethodUtil {
         return validMethods;
     }
 
-    /**
-     * From the supplied method array, finds but <i>does not remove</i> methods
-     * that have the required prefix, and adds to the supplied candidates
-     * vector.
-     */
-    public static void findPrefixedInstanceMethods(final Method[] methods, final String prefix, final List<Method> candidates) {
-        for (final Method method : methods) {
-            if (method == null) {
-                continue;
-            }
-    
-            if (MethodExtensions.isStatic(method)) {
-                continue;
-            }
-    
-            final boolean goodPrefix = method.getName().startsWith(prefix);
-            final boolean goodCount = method.getParameterTypes().length == 0;
-    
-            if (goodPrefix && goodCount) {
-                candidates.add(method);
-            }
-        }
-    }
+
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
index 23dac17..aa17a4c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
@@ -348,9 +348,7 @@ public final class Annotations  {
             try {
                 final Method ifaceMethod = iface.getMethod(method.getName(), method.getParameterTypes());
                 return isAnnotationPresent(ifaceMethod, annotationClass);
-            } catch (final SecurityException e) {
-                // fall through
-            } catch (final NoSuchMethodException e) {
+            } catch (final SecurityException | NoSuchMethodException e) {
                 // fall through
             }
         }
@@ -389,9 +387,7 @@ public final class Annotations  {
             try {
                 final Method parentClassMethod = superclass.getMethod(method.getName(), method.getParameterTypes());
                 return getParameterAnnotations(parentClassMethod);
-            } catch (final SecurityException e) {
-                // fall through
-            } catch (final NoSuchMethodException e) {
+            } catch (final SecurityException | NoSuchMethodException e) {
                 // fall through
             }
         }
@@ -402,9 +398,7 @@ public final class Annotations  {
             try {
                 final Method ifaceMethod = iface.getMethod(method.getName(), method.getParameterTypes());
                 return getParameterAnnotations(ifaceMethod);
-            } catch (final SecurityException e) {
-                // fall through
-            } catch (final NoSuchMethodException e) {
+            } catch (final SecurityException | NoSuchMethodException e) {
                 // fall through
             }
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/PropertyOrCollectionIdentifyingFacetFactoryAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/PropertyOrCollectionIdentifyingFacetFactoryAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/PropertyOrCollectionIdentifyingFacetFactoryAbstract.java
index 089f5dc..ae8b794 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/PropertyOrCollectionIdentifyingFacetFactoryAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/PropertyOrCollectionIdentifyingFacetFactoryAbstract.java
@@ -24,7 +24,7 @@ import java.util.List;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
-import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistry;
+import org.apache.isis.core.metamodel.specloader.CollectionUtils;
 
 public abstract class PropertyOrCollectionIdentifyingFacetFactoryAbstract
         extends MethodPrefixBasedFacetFactoryAbstract
@@ -38,15 +38,10 @@ public abstract class PropertyOrCollectionIdentifyingFacetFactoryAbstract
 
     // //////////////////////////////////////
 
-    private final CollectionTypeRegistry collectionTypeRegistry = new CollectionTypeRegistry();
-
     protected boolean isCollectionOrArray(final Class<?> cls) {
-        return getCollectionTypeRepository().isCollectionType(cls) || getCollectionTypeRepository().isArrayType(cls);
+        return CollectionUtils.isCollectionType(cls) || CollectionUtils.isArrayType(cls);
     }
 
-    protected CollectionTypeRegistry getCollectionTypeRepository() {
-        return collectionTypeRegistry;
-    }
 
     // //////////////////////////////////////
 

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/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 85f9130..f21de76 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
@@ -90,7 +90,7 @@ import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
 import org.apache.isis.core.metamodel.services.transtate.TransactionStateProviderInternal;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistry;
+import org.apache.isis.core.metamodel.specloader.CollectionUtils;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
 import org.apache.isis.core.metamodel.util.EventUtil;
@@ -113,8 +113,6 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract
 
 
 
-    private final CollectionTypeRegistry collectionTypeRegistry = new CollectionTypeRegistry();
-
     public ActionAnnotationFacetFactory() {
         super(FeatureType.ACTIONS_ONLY);
     }
@@ -428,7 +426,7 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract
         final FacetedMethod holder = processMethodContext.getFacetHolder();
 
         final Class<?> methodReturnType = method.getReturnType();
-        if (!collectionTypeRegistry.isCollectionType(methodReturnType) && !collectionTypeRegistry.isArrayType(methodReturnType)) {
+        if (!CollectionUtils.isCollectionType(methodReturnType) && !CollectionUtils.isArrayType(methodReturnType)) {
             return;
         }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java
index 182045e..2b63b52 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java
@@ -20,6 +20,7 @@
 package org.apache.isis.core.metamodel.facets.collections.accessor;
 
 import java.lang.reflect.Method;
+import java.util.Collection;
 import java.util.List;
 
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -88,12 +89,14 @@ public class CollectionAccessorFacetViaAccessorFactory
     }
 
     @Override
-    public void findAndRemoveCollectionAccessors(final MethodRemover methodRemover, final List<Method> methodListToAppendTo) {
-        final Class<?>[] collectionClasses = getCollectionTypeRepository().getCollectionType();
-        for (final Class<?> returnType : collectionClasses) {
-            final List<Method> list = methodRemover.removeMethods(MethodScope.OBJECT, MethodPrefixConstants.GET_PREFIX, returnType, false, 0);
-            methodListToAppendTo.addAll(list);
-        }
+    public void findAndRemoveCollectionAccessors(
+            final MethodRemover methodRemover,
+            final List<Method> methodListToAppendTo) {
+
+        final List<Method> list =
+                methodRemover.removeMethods(MethodScope.OBJECT, MethodPrefixConstants.GET_PREFIX,
+                Collection.class, false, 0);
+        methodListToAppendTo.addAll(list);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/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 da91149..55e1fc1 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
@@ -73,7 +73,7 @@ import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
 import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
 import org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
-import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistry;
+import org.apache.isis.core.metamodel.specloader.CollectionUtils;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
 import org.apache.isis.core.metamodel.util.EventUtil;
@@ -88,8 +88,6 @@ public class CollectionAnnotationFacetFactory extends FacetFactoryAbstract imple
     private final MetaModelValidatorForDeprecatedAnnotation notPersistedValidator = new MetaModelValidatorForDeprecatedAnnotation(NotPersisted.class);
     private final MetaModelValidatorForDeprecatedAnnotation typeOfValidator = new MetaModelValidatorForDeprecatedAnnotation(TypeOf.class);
 
-    private final CollectionTypeRegistry collectionTypeRegistry = new CollectionTypeRegistry();
-
 
     public CollectionAnnotationFacetFactory() {
         super(FeatureType.COLLECTIONS_AND_ACTIONS);
@@ -299,7 +297,7 @@ public class CollectionAnnotationFacetFactory extends FacetFactoryAbstract imple
         final Method method = processMethodContext.getMethod();
 
         final Class<?> methodReturnType = method.getReturnType();
-        if (!collectionTypeRegistry.isCollectionType(methodReturnType) && !collectionTypeRegistry.isArrayType(methodReturnType)) {
+        if (!CollectionUtils.isCollectionType(methodReturnType) && !CollectionUtils.isArrayType(methodReturnType)) {
             return;
         }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/CollectionFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/CollectionFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/CollectionFacetFactory.java
index d3b073a..39e7619 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/CollectionFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/CollectionFacetFactory.java
@@ -29,12 +29,10 @@ import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacetInferredF
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
-import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistry;
+import org.apache.isis.core.metamodel.specloader.CollectionUtils;
 
 public class CollectionFacetFactory extends FacetFactoryAbstract {
 
-    private final CollectionTypeRegistry collectionTypeRegistry = new CollectionTypeRegistry();
-
     public CollectionFacetFactory() {
         super(FeatureType.OBJECTS_ONLY);
     }
@@ -42,9 +40,9 @@ public class CollectionFacetFactory extends FacetFactoryAbstract {
     @Override
     public void process(final ProcessClassContext processClassContaxt) {
 
-        if (collectionTypeRegistry.isCollectionType(processClassContaxt.getCls())) {
+        if (CollectionUtils.isCollectionType(processClassContaxt.getCls())) {
             processCollectionType(processClassContaxt);
-        } else if (collectionTypeRegistry.isArrayType(processClassContaxt.getCls())) {
+        } else if (CollectionUtils.isArrayType(processClassContaxt.getCls())) {
             processAsArrayType(processClassContaxt);
         }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/parented/ParentedFacetSinceCollectionFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/parented/ParentedFacetSinceCollectionFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/parented/ParentedFacetSinceCollectionFactory.java
index 8ff1aa9..9c7c22a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/parented/ParentedFacetSinceCollectionFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/parented/ParentedFacetSinceCollectionFactory.java
@@ -25,11 +25,11 @@ import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.object.parented.ParentedCollectionFacet;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
-import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistry;
+import org.apache.isis.core.metamodel.specloader.CollectionUtils;
 import org.apache.isis.core.metamodel.facets.collections.javautilcollection.CollectionFacetFactory;
 
 /**
- * All {@link CollectionTypeRegistry collection types} are intrinsically
+ * All {@link CollectionUtils collection types} are intrinsically
  * {@link ParentedCollectionFacet parented}.
  * 
  * <p> 

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/RemoveCallbackFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/RemoveCallbackFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/RemoveCallbackFacetFactory.java
index f084f90..3b5d72e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/RemoveCallbackFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/RemoveCallbackFacetFactory.java
@@ -48,8 +48,9 @@ public class RemoveCallbackFacetFactory extends MethodPrefixBasedFacetFactoryAbs
         final List<Facet> facets = new ArrayList<Facet>();
         final List<Method> methods = new ArrayList<Method>();
 
-        Method method = null;
-        method = MethodFinderUtils.findMethod(cls, MethodScope.OBJECT, MethodPrefixConstants.REMOVING_PREFIX, void.class, NO_PARAMETERS_TYPES);
+        Method method = MethodFinderUtils
+                .findMethod(cls, MethodScope.OBJECT, MethodPrefixConstants.REMOVING_PREFIX, void.class,
+                        NO_PARAMETERS_TYPES);
         if (method != null) {
             methods.add(method);
             final RemovingCallbackFacet facet = facetHolder.getFacet(RemovingCallbackFacet.class);

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemoveAnnotatedMethodsFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemoveAnnotatedMethodsFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemoveAnnotatedMethodsFacetFactory.java
new file mode 100644
index 0000000..209a55c
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemoveAnnotatedMethodsFacetFactory.java
@@ -0,0 +1,88 @@
+/*
+ *  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.ignore.annotation;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+
+import com.google.common.eventbus.Subscribe;
+
+import org.apache.isis.applib.annotation.Ignore;
+import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.core.commons.lang.ClassUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facetapi.MethodRemover;
+import org.apache.isis.core.metamodel.facets.Annotations;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+
+public class RemoveAnnotatedMethodsFacetFactory extends FacetFactoryAbstract {
+
+    private Class<? extends Annotation> eventHandlerClass;
+
+    public RemoveAnnotatedMethodsFacetFactory() {
+        super(FeatureType.OBJECTS_ONLY);
+
+        try {
+            // doing this reflectively so that don't bring in a dependency on axon.
+            Class cls = (Class) ClassUtil.forName("org.axonframework.eventhandling.annotation.EventHandler");
+            eventHandlerClass = cls;
+
+        } catch(Exception ignore) {
+            // ignore
+            eventHandlerClass = null;
+        }
+    }
+
+    @Override
+    public void process(final ProcessClassContext processClassContext) {
+        removeIgnoredMethods(processClassContext.getCls(), processClassContext);
+    }
+
+    @SuppressWarnings("deprecation")
+    private void removeIgnoredMethods(final Class<?> cls, final MethodRemover methodRemover) {
+        if (cls == null) {
+            return;
+        }
+
+        final Method[] methods = cls.getMethods();
+        for (final Method method : methods) {
+            removeAnnotatedMethods(methodRemover, method, PreDestroy.class);
+            removeAnnotatedMethods(methodRemover, method, PostConstruct.class);
+            removeAnnotatedMethods(methodRemover, method, Ignore.class);
+            removeAnnotatedMethods(methodRemover, method, Programmatic.class);
+            removeAnnotatedMethods(methodRemover, method, Subscribe.class);
+            if(eventHandlerClass != null) {
+                removeAnnotatedMethods(methodRemover, method, eventHandlerClass);
+            }
+        }
+    }
+
+    private static <T extends Annotation> void removeAnnotatedMethods(final MethodRemover methodRemover, final Method method, Class<T> annotationClass) {
+        if (!Annotations.isAnnotationPresent(method, annotationClass)) {
+            return;
+        }
+        methodRemover.removeMethod(method);
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemovePostConstructOrPreDestroyAnnotationMethodsFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemovePostConstructOrPreDestroyAnnotationMethodsFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemovePostConstructOrPreDestroyAnnotationMethodsFacetFactory.java
deleted file mode 100644
index e739ed6..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemovePostConstructOrPreDestroyAnnotationMethodsFacetFactory.java
+++ /dev/null
@@ -1,64 +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.ignore.annotation;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facetapi.MethodRemover;
-import org.apache.isis.core.metamodel.facets.Annotations;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-
-public class RemovePostConstructOrPreDestroyAnnotationMethodsFacetFactory extends FacetFactoryAbstract {
-
-    public RemovePostConstructOrPreDestroyAnnotationMethodsFacetFactory() {
-        super(FeatureType.OBJECTS_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        removeIgnoredMethods(processClassContext.getCls(), processClassContext);
-    }
-
-    @SuppressWarnings("deprecation")
-    private void removeIgnoredMethods(final Class<?> cls, final MethodRemover methodRemover) {
-        if (cls == null) {
-            return;
-        }
-
-        final Method[] methods = cls.getMethods();
-        for (final Method method : methods) {
-            removeAnnotatedMethods(methodRemover, method, PreDestroy.class);
-            removeAnnotatedMethods(methodRemover, method, PostConstruct.class);
-        }
-    }
-
-    private static <T extends Annotation> void removeAnnotatedMethods(final MethodRemover methodRemover, final Method method, Class<T> annotationClass) {
-        if (!Annotations.isAnnotationPresent(method, annotationClass)) {
-            return;
-        } 
-        methodRemover.removeMethod(method);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemoveProgrammaticOrIgnoreAnnotationMethodsFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemoveProgrammaticOrIgnoreAnnotationMethodsFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemoveProgrammaticOrIgnoreAnnotationMethodsFacetFactory.java
deleted file mode 100644
index 5dc7d32..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemoveProgrammaticOrIgnoreAnnotationMethodsFacetFactory.java
+++ /dev/null
@@ -1,63 +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.ignore.annotation;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-
-import org.apache.isis.applib.annotation.Ignore;
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facetapi.MethodRemover;
-import org.apache.isis.core.metamodel.facets.Annotations;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-
-public class RemoveProgrammaticOrIgnoreAnnotationMethodsFacetFactory extends FacetFactoryAbstract {
-
-    public RemoveProgrammaticOrIgnoreAnnotationMethodsFacetFactory() {
-        super(FeatureType.OBJECTS_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        removeIgnoredMethods(processClassContext.getCls(), processClassContext);
-    }
-
-    @SuppressWarnings("deprecation")
-    private void removeIgnoredMethods(final Class<?> cls, final MethodRemover methodRemover) {
-        if (cls == null) {
-            return;
-        }
-
-        final Method[] methods = cls.getMethods();
-        for (final Method method : methods) {
-            removeAnnotatedMethods(methodRemover, method, Ignore.class);
-            removeAnnotatedMethods(methodRemover, method, Programmatic.class);
-        }
-    }
-
-    private static <T extends Annotation> void removeAnnotatedMethods(final MethodRemover methodRemover, final Method method, Class<T> annotationClass) {
-        if (!Annotations.isAnnotationPresent(method, annotationClass)) {
-            return;
-        } 
-        methodRemover.removeMethod(method);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemoveSubscriberMethodsFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemoveSubscriberMethodsFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemoveSubscriberMethodsFacetFactory.java
deleted file mode 100644
index 76c508c..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ignore/annotation/RemoveSubscriberMethodsFacetFactory.java
+++ /dev/null
@@ -1,70 +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.ignore.annotation;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-
-import com.google.common.eventbus.Subscribe;
-
-import org.apache.isis.core.commons.lang.ClassUtil;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facetapi.MethodRemover;
-import org.apache.isis.core.metamodel.facets.Annotations;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-
-public class RemoveSubscriberMethodsFacetFactory extends FacetFactoryAbstract {
-
-    public RemoveSubscriberMethodsFacetFactory() {
-        super(FeatureType.OBJECTS_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        removeIgnoredMethods(processClassContext.getCls(), processClassContext);
-    }
-
-    @SuppressWarnings("deprecation")
-    private void removeIgnoredMethods(final Class<?> cls, final MethodRemover methodRemover) {
-        if (cls == null) {
-            return;
-        }
-
-        final Method[] methods = cls.getMethods();
-        for (final Method method : methods) {
-            removeAnnotatedMethods(methodRemover, method, Subscribe.class);
-            try {
-                // doing this reflectively so that don't bring in a dependency on axon.
-                final Class annotationClass = ClassUtil.forName("org.axonframework.eventhandling.annotation.EventHandler");
-                removeAnnotatedMethods(methodRemover, method, annotationClass);
-            } catch(Exception ignore) {
-                // iignore
-            }
-        }
-    }
-
-    private static <T extends Annotation> void removeAnnotatedMethods(final MethodRemover methodRemover, final Method method, Class<T> annotationClass) {
-        if (!Annotations.isAnnotationPresent(method, annotationClass)) {
-            return;
-        } 
-        methodRemover.removeMethod(method);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceUtil.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceUtil.java
index 937a352..0fc6991 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceUtil.java
@@ -32,19 +32,13 @@ public final class ServiceUtil {
     public static String id(final Object object) {
         final Class<?> cls = object.getClass();
         try {
-            final Method m = cls.getMethod("getId", new Class[0]);
-            return (String) m.invoke(object, new Object[0]);
-        } catch (final SecurityException e) {
+            final Method m = cls.getMethod("getId");
+            return (String) m.invoke(object);
+        } catch (final SecurityException | IllegalArgumentException | IllegalAccessException | InvocationTargetException e) {
             throw new IsisException(e);
         } catch (final NoSuchMethodException e) {
             final String id = object.getClass().getName();
             return id.substring(id.lastIndexOf('.') + 1);
-        } catch (final IllegalArgumentException e) {
-            throw new IsisException(e);
-        } catch (final IllegalAccessException e) {
-            throw new IsisException(e);
-        } catch (final InvocationTargetException e) {
-            throw new IsisException(e);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/CollectionUtils.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/CollectionUtils.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/CollectionUtils.java
new file mode 100644
index 0000000..29098eb
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/CollectionUtils.java
@@ -0,0 +1,45 @@
+/*
+ *  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.specloader;
+
+/**
+ * Defines the types which are considered to be collections.
+ * 
+ * <p>
+ * In this way there are similarities with the way in which value types are
+ * specified using <tt>@Value</tt>. However, we need to maintain a repository of
+ * these collection types once nominated so that when we introspect classes we
+ * look for collections first, and then properties second.
+ */
+public final class CollectionUtils {
+
+    private CollectionUtils() {}
+
+    public static boolean isCollectionType(final Class<?> cls) {
+        return java.util.Collection.class.isAssignableFrom(cls);
+    }
+
+    public static boolean isArrayType(final Class<?> cls) {
+        return cls.isArray();
+    }
+
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/collectiontyperegistry/CollectionTypeRegistry.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/collectiontyperegistry/CollectionTypeRegistry.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/collectiontyperegistry/CollectionTypeRegistry.java
deleted file mode 100644
index b3d953f..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/collectiontyperegistry/CollectionTypeRegistry.java
+++ /dev/null
@@ -1,85 +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.specloader.collectiontyperegistry;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyFeature.CollectionSemantics;
-
-/**
- * Defines the types which are considered to be collections.
- * 
- * <p>
- * In this way there are similarities with the way in which value types are
- * specified using <tt>@Value</tt>. However, we need to maintain a repository of
- * these collection types once nominated so that when we introspect classes we
- * look for collections first, and then properties second.
- */
-public class CollectionTypeRegistry {
-
-    private final List<Class<?>> collectionTypes = new ArrayList<>();
-    private Class<?>[] collectionTypesAsArray = new Class[0];
-
-    /**
-     * Inbuilt support for {@link java.util.Collection} as a collection type.
-     *
-     * <p>
-     * Note that this includes any subclasses.
-     */
-    public CollectionTypeRegistry() {
-        addCollectionType(Collection.class);
-    }
-
-    /**
-     * Plan is for this to be promoted to API at some stage.
-     */
-    private void addCollectionType(final Class<?> collectionType) {
-        collectionTypes.add(collectionType);
-        collectionTypesAsArray = collectionTypes.toArray(new Class[0]);
-    }
-
-    public boolean isCollectionType(final Class<?> cls) {
-        return java.util.Collection.class.isAssignableFrom(cls);
-    }
-
-    public boolean isArrayType(final Class<?> cls) {
-        return cls.isArray();
-    }
-
-    public Class<?>[] getCollectionType() {
-        return collectionTypesAsArray;
-    }
-
-    public CollectionSemantics semanticsOf(final Class<?> underlyingClass) {
-        if (!Collection.class.isAssignableFrom(underlyingClass)) {
-            return CollectionSemantics.ARRAY;
-        }
-        if (List.class.isAssignableFrom(underlyingClass)) {
-            return CollectionSemantics.LIST;
-        }
-        if (Set.class.isAssignableFrom(underlyingClass)) {
-            return CollectionSemantics.SET;
-        }
-        return CollectionSemantics.OTHER;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
index 3517aa0..805ee62 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
@@ -74,12 +74,21 @@ public class FacetedMethodsBuilder {
         }
 
         @Override
-        public void removeMethod(final MethodScope methodScope, final String methodName, final Class<?> returnType, final Class<?>[] parameterTypes) {
+        public void removeMethod(
+                final MethodScope methodScope,
+                final String methodName,
+                final Class<?> returnType,
+                final Class<?>[] parameterTypes) {
             MethodUtil.removeMethod(methods, methodScope, methodName, returnType, parameterTypes);
         }
 
         @Override
-        public List<Method> removeMethods(final MethodScope methodScope, final String prefix, final Class<?> returnType, final boolean canBeVoid, final int paramCount) {
+        public List<Method> removeMethods(
+                final MethodScope methodScope,
+                final String prefix,
+                final Class<?> returnType,
+                final boolean canBeVoid,
+                final int paramCount) {
             return MethodUtil.removeMethods(methods, methodScope, prefix, returnType, canBeVoid, paramCount);
         }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
index e29dd07..d45479f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
@@ -54,14 +54,13 @@ import org.apache.isis.core.metamodel.interactions.InteractionContext;
 import org.apache.isis.core.metamodel.interactions.InteractionUtils;
 import org.apache.isis.core.metamodel.interactions.UsabilityContext;
 import org.apache.isis.core.metamodel.interactions.VisibilityContext;
-import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.services.command.CommandDtoServiceInternal;
+import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 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.SpecificationLoader;
 import org.apache.isis.schema.cmd.v1.CommandDto;
 import org.apache.isis.schema.utils.CommandDtoUtils;
 
@@ -72,8 +71,6 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
     }
 
     //region > fields
-    private final CollectionTypeRegistry collectionTypeRegistry = new CollectionTypeRegistry();
-
     private final String id;
     private final FacetedMethod facetedMethod;
     private final FeatureType featureType;
@@ -389,10 +386,6 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
         return persistenceSessionServiceInternal;
     }
 
-    public CollectionTypeRegistry getCollectionTypeRegistry() {
-        return collectionTypeRegistry;
-    }
-
     protected <T> T lookupService(final Class<T> serviceClass) {
         return getServicesInjector().lookupService(serviceClass);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
index f7cc6c4..c9648cb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
@@ -19,6 +19,10 @@
 
 package org.apache.isis.core.metamodel.specloader.specimpl;
 
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.util.ToString;
@@ -65,7 +69,20 @@ public class OneToManyAssociationDefault extends ObjectAssociationAbstract imple
     @Override
     public CollectionSemantics getCollectionSemantics() {
         final Class<?> underlyingClass = getSpecification().getCorrespondingClass();
-        return getCollectionTypeRegistry().semanticsOf(underlyingClass);
+        return semanticsOf(underlyingClass);
+    }
+
+    private static CollectionSemantics semanticsOf(final Class<?> underlyingClass) {
+        if (!Collection.class.isAssignableFrom(underlyingClass)) {
+            return CollectionSemantics.ARRAY;
+        }
+        if (List.class.isAssignableFrom(underlyingClass)) {
+            return CollectionSemantics.LIST;
+        }
+        if (Set.class.isAssignableFrom(underlyingClass)) {
+            return CollectionSemantics.SET;
+        }
+        return CollectionSemantics.OTHER;
     }
 
     //region > visible, usable

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index e730939..cf0f00a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@ -86,12 +86,11 @@ import org.apache.isis.core.metamodel.facets.object.domainservicelayout.DomainSe
 import org.apache.isis.core.metamodel.facets.object.encodeable.annotcfg.EncodableFacetAnnotationElseConfigurationFactory;
 import org.apache.isis.core.metamodel.facets.object.facets.annotation.FacetsFacetAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.object.fieldorder.annotation.FieldOrderFacetAnnotationFactory;
+import org.apache.isis.core.metamodel.facets.object.grid.GridFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.hidden.annotation.HiddenFacetOnTypeAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.object.hidden.method.HiddenObjectFacetViaMethodFactory;
 import org.apache.isis.core.metamodel.facets.object.icon.method.IconFacetMethodFactory;
-import org.apache.isis.core.metamodel.facets.object.ignore.annotation.RemovePostConstructOrPreDestroyAnnotationMethodsFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.ignore.annotation.RemoveProgrammaticOrIgnoreAnnotationMethodsFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.ignore.annotation.RemoveSubscriberMethodsFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.ignore.annotation.RemoveAnnotatedMethodsFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.ignore.datanucleus.RemoveDatanucleusPersistableTypesFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.ignore.datanucleus.RemoveDnPrefixedMethodsFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.ignore.isis.RemoveSetDomainObjectContainerMethodFacetFactory;
@@ -108,7 +107,6 @@ import org.apache.isis.core.metamodel.facets.object.ignore.jdo.RemoveJdoEnhancem
 import org.apache.isis.core.metamodel.facets.object.ignore.jdo.RemoveJdoPrefixedMethodsFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.immutable.immutableannot.CopyImmutableFacetOntoMembersFactory;
 import org.apache.isis.core.metamodel.facets.object.immutable.immutablemarkerifc.ImmutableFacetMarkerInterfaceFactory;
-import org.apache.isis.core.metamodel.facets.object.grid.GridFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.mask.annotation.MaskFacetOnTypeAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.object.maxlen.annotation.MaxLengthFacetOnTypeAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.object.membergroups.annotprop.MemberGroupLayoutFacetFactory;
@@ -221,291 +219,330 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
 
         // must be first, so any Facets created can be replaced by other
         // FacetFactorys later.
-        addFactory(FallbackFacetFactory.class);
-
-        addFactory(ObjectSpecIdFacetDerivedFromClassNameFactory.class);
-        addFactory(DomainServiceFacetAnnotationFactory.class);
-
-        addFactory(IteratorFilteringFacetFactory.class);
-        addFactory(RemoveSyntheticOrAbstractMethodsFacetFactory.class);
-        addFactory(RemoveSuperclassMethodsFacetFactory.class);
-        addFactory(RemoveJavaLangObjectMethodsFacetFactory.class);
-        addFactory(RemoveJavaLangComparableMethodsFacetFactory.class);
-        addFactory(RemoveSetDomainObjectContainerMethodFacetFactory.class);
-        addFactory(RemoveInitMethodFacetFactory.class);
-        addFactory(RemoveInjectMethodsFacetFactory.class);
-        addFactory(RemoveStaticGettersAndSettersFacetFactory.class);
-        addFactory(RemoveGetClassMethodFacetFactory.class);
-        addFactory(RemovePostConstructOrPreDestroyAnnotationMethodsFacetFactory.class);
-        addFactory(RemoveProgrammaticOrIgnoreAnnotationMethodsFacetFactory.class);
-        addFactory(RemoveSubscriberMethodsFacetFactory.class);
+        addFactory(new FallbackFacetFactory());
+
+        addFactory(new ObjectSpecIdFacetDerivedFromClassNameFactory());
+        addFactory(new DomainServiceFacetAnnotationFactory());
+
+        addFactory(new IteratorFilteringFacetFactory());
+
+        addFactory(new RemoveSyntheticOrAbstractMethodsFacetFactory());
+        addFactory(new RemoveSuperclassMethodsFacetFactory());
+        addFactory(new RemoveJavaLangObjectMethodsFacetFactory());
+        addFactory(new RemoveJavaLangComparableMethodsFacetFactory());
+        addFactory(new RemoveSetDomainObjectContainerMethodFacetFactory());
+
+        addFactory(new RemoveInitMethodFacetFactory());
+        addFactory(new RemoveInjectMethodsFacetFactory());
+        addFactory(new RemoveStaticGettersAndSettersFacetFactory());
+        addFactory(new RemoveGetClassMethodFacetFactory());
+
+        addFactory(new RemoveAnnotatedMethodsFacetFactory());
 
         // come what may, we have to ignore the PersistenceCapable supertype.
-        addFactory(RemoveJdoEnhancementTypesFacetFactory.class);
+        addFactory(new RemoveJdoEnhancementTypesFacetFactory());
         // so we may as well also just ignore any 'jdo' prefixed methods here also.
-        addFactory(RemoveJdoPrefixedMethodsFacetFactory.class);
+        addFactory(new RemoveJdoPrefixedMethodsFacetFactory());
         // DN 4.x
-        addFactory(RemoveDatanucleusPersistableTypesFacetFactory.class);
-        addFactory(RemoveDnPrefixedMethodsFacetFactory.class);
+        addFactory(new RemoveDatanucleusPersistableTypesFacetFactory());
+        addFactory(new RemoveDnPrefixedMethodsFacetFactory());
 
         // must be before any other FacetFactories that install
         // MandatoryFacet.class facets
-        addFactory(MandatoryFacetOnProperyDefaultFactory.class);
-        addFactory(MandatoryFacetOnParametersDefaultFactory.class);
+        addFactory(new MandatoryFacetOnProperyDefaultFactory());
+        addFactory(new MandatoryFacetOnParametersDefaultFactory());
 
-        addFactory(PropertyValidateFacetDefaultFactory.class);
+        addFactory(new PropertyValidateFacetDefaultFactory());
 
         // enum support
-        addFactory(EnumFacetUsingValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(ActionParameterChoicesFacetDerivedFromChoicesFacetFactory.class);
-        addFactory(PropertyChoicesFacetDerivedFromChoicesFacetFactory.class);
+        addFactory(new EnumFacetUsingValueFacetUsingSemanticsProviderFactory());
+        addFactory(new ActionParameterChoicesFacetDerivedFromChoicesFacetFactory());
+        addFactory(new PropertyChoicesFacetDerivedFromChoicesFacetFactory());
 
         // properties
-        addFactory(PropertyAccessorFacetViaAccessorFactory.class);
-        addFactory(PropertySetAndClearFacetFactory.class);
+        addFactory(new PropertyAccessorFacetViaAccessorFactory());
+        addFactory(new PropertySetAndClearFacetFactory());
         // must come after PropertySetAndClearFacetFactory (replaces setter facet with modify if need be)
-        addFactory(PropertyModifyFacetFactory.class);
+        addFactory(new PropertyModifyFacetFactory());
 
-        addFactory(PropertyValidateFacetViaMethodFactory.class);
-        addFactory(PropertyChoicesFacetViaMethodFactory.class);
-        addFactory(PropertyAutoCompleteFacetMethodFactory.class);
-        addFactory(PropertyDefaultFacetViaMethodFactory.class);
-        addFactory(MandatoryFacetOnPropertyStaticMethodFactory.class);
+        addFactory(new PropertyValidateFacetViaMethodFactory());
+        addFactory(new PropertyChoicesFacetViaMethodFactory());
+        addFactory(new PropertyAutoCompleteFacetMethodFactory());
+        addFactory(new PropertyDefaultFacetViaMethodFactory());
+        
+        addFactory(new MandatoryFacetOnPropertyStaticMethodFactory());
 
         // collections
-        addFactory(CollectionAccessorFacetViaAccessorFactory.class);
-        addFactory(CollectionClearFacetFactory.class);
-        addFactory(CollectionAddToRemoveFromAndValidateFacetFactory.class);
-        addFactory(SortedByFacetAnnotationFactory.class);
+        addFactory(new CollectionAccessorFacetViaAccessorFactory());
+        addFactory(new CollectionClearFacetFactory());
+        addFactory(new CollectionAddToRemoveFromAndValidateFacetFactory());
+        
+        addFactory(new SortedByFacetAnnotationFactory());
 
         // actions
-        addFactory(ActionNamedDebugExplorationFacetFactory.class);
-        addFactory(ActionValidationFacetViaMethodFactory.class);
-        addFactory(ActionChoicesFacetViaMethodFactory.class);
-        addFactory(ActionParameterChoicesFacetViaMethodFactory.class);
-        addFactory(ActionParameterAutoCompleteFacetViaMethodFactory.class);
-        addFactory(ActionDefaultsFacetViaMethodFactory.class);
-        addFactory(ActionParameterDefaultsFacetViaMethodFactory.class);
+        
+        addFactory(new ActionNamedDebugExplorationFacetFactory());
+        addFactory(new ActionValidationFacetViaMethodFactory());
+        addFactory(new ActionChoicesFacetViaMethodFactory());
+        addFactory(new ActionParameterChoicesFacetViaMethodFactory());
+        addFactory(new ActionParameterAutoCompleteFacetViaMethodFactory());
+        addFactory(new ActionDefaultsFacetViaMethodFactory());
+        addFactory(new ActionParameterDefaultsFacetViaMethodFactory());
 
         // members in general
-        addFactory(NamedFacetStaticMethodFactory.class);
-        addFactory(DescribedAsFacetStaticMethodFactory.class);
-        addFactory(DisableForSessionFacetViaMethodFactory.class);
-        addFactory(DisableForContextFacetViaMethodFactory.class);
-        addFactory(DisabledFacetStaticMethodFacetFactory.class);
-        addFactory(HideForSessionFacetViaMethodFactory.class);
-        addFactory(HiddenFacetStaticMethodFactory.class);
-        addFactory(HideForContextFacetViaMethodFactory.class);
-        addFactory(RenderFacetOrResolveFactory.class);
-
-        addFactory(CreatedCallbackFacetFactory.class);
-        addFactory(LoadCallbackFacetFactory.class);
-        addFactory(PersistCallbackViaSaveMethodFacetFactory.class);
-        addFactory(PersistCallbackFacetFactory.class);
-        addFactory(UpdateCallbackFacetFactory.class);
-        addFactory(RemoveCallbackFacetFactory.class);
-
-        addFactory(ValidateObjectFacetMethodFactory.class);
-        addFactory(ObjectValidPropertiesFacetImplFactory.class);
-        addFactory(PluralFacetStaticMethodFactory.class);
-        addFactory(org.apache.isis.core.metamodel.facets.object.named.staticmethod.NamedFacetStaticMethodFactory.class);
-
-        addFactory(MemberOrderFacetFactory.class);
-        addFactory(ActionOrderFacetAnnotationFactory.class);
-        addFactory(FieldOrderFacetAnnotationFactory.class);
-        addFactory(MemberGroupLayoutFacetFactory.class);
-
-        addFactory(AggregatedAnnotationFactory.class);
-        addFactory(BookmarkPolicyFacetViaBookmarkableAnnotationFactory.class);
-        addFactory(HomePageFacetAnnotationFactory.class);
-        addFactory(ChoicesFacetFromBoundedMarkerInterfaceFactory.class);
-        addFactory(DebugFacetAnnotationFactory.class);
-
-        addFactory(DefaultedFacetAnnotationElseConfigurationFactory.class);
-        addFactory(PropertyDefaultFacetDerivedFromTypeFactory.class);
-        addFactory(ActionParameterDefaultFacetDerivedFromTypeFactory.class);
-
-        addFactory(DescribedAsFacetOnTypeAnnotationFactory.class);
-        addFactory(DescribedAsFacetOnMemberFactory.class);
-        addFactory(DescribedAsFacetOnParameterAnnotationElseDerivedFromTypeFactory.class);
-
-        addFactory(BigDecimalFacetOnParameterFromJavaxValidationAnnotationFactory.class);
-        addFactory(BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory.class);
-
-        addFactory(DisabledFacetOnMemberFromPropertiesFactory.class);
-        addFactory(EncodableFacetAnnotationElseConfigurationFactory.class);
-        addFactory(ExplorationFacetAnnotationFactory.class);
-        addFactory(NotContributedFacetAnnotationFactory.class);
-        addFactory(NotInServiceMenuFacetAnnotationFactory.class);
-        addFactory(NotInServiceMenuFacetViaMethodFactory.class);
-
-        addFactory(NotContributedFacetDerivedFromDomainServiceFacetFactory.class);
-        addFactory(NotInServiceMenuFacetDerivedFromDomainServiceFacetFactory.class);
-
-        addFactory(HiddenFacetOnTypeAnnotationFactory.class);
+        
+        addFactory(new NamedFacetStaticMethodFactory());
+        
+        addFactory(new DescribedAsFacetStaticMethodFactory());
+        addFactory(new DisableForSessionFacetViaMethodFactory());
+        addFactory(new DisableForContextFacetViaMethodFactory());
+        
+        addFactory(new DisabledFacetStaticMethodFacetFactory());
+        addFactory(new HideForSessionFacetViaMethodFactory());
+        
+        addFactory(new HiddenFacetStaticMethodFactory());
+        addFactory(new HideForContextFacetViaMethodFactory());
+        addFactory(new RenderFacetOrResolveFactory());
+
+        addFactory(new CreatedCallbackFacetFactory());
+        addFactory(new LoadCallbackFacetFactory());
+        addFactory(new PersistCallbackViaSaveMethodFacetFactory());
+        addFactory(new PersistCallbackFacetFactory());
+        addFactory(new UpdateCallbackFacetFactory());
+        addFactory(new RemoveCallbackFacetFactory());
+
+        addFactory(new ValidateObjectFacetMethodFactory());
+        addFactory(new ObjectValidPropertiesFacetImplFactory());
+        
+        addFactory(new PluralFacetStaticMethodFactory());
+        
+        addFactory(new org.apache.isis.core.metamodel.facets.object.named.staticmethod.NamedFacetStaticMethodFactory());
+
+        addFactory(new MemberOrderFacetFactory());
+        
+        addFactory(new ActionOrderFacetAnnotationFactory());
+        
+        addFactory(new FieldOrderFacetAnnotationFactory());
+        addFactory(new MemberGroupLayoutFacetFactory());
+
+        addFactory(new AggregatedAnnotationFactory());
+        
+        addFactory(new BookmarkPolicyFacetViaBookmarkableAnnotationFactory());
+        addFactory(new HomePageFacetAnnotationFactory());
+        addFactory(new ChoicesFacetFromBoundedMarkerInterfaceFactory());
+        addFactory(new DebugFacetAnnotationFactory());
+
+        addFactory(new DefaultedFacetAnnotationElseConfigurationFactory());
+        addFactory(new PropertyDefaultFacetDerivedFromTypeFactory());
+        addFactory(new ActionParameterDefaultFacetDerivedFromTypeFactory());
+
+        
+        addFactory(new DescribedAsFacetOnTypeAnnotationFactory());
+        addFactory(new DescribedAsFacetOnMemberFactory());
+        addFactory(new DescribedAsFacetOnParameterAnnotationElseDerivedFromTypeFactory());
+
+        addFactory(new BigDecimalFacetOnParameterFromJavaxValidationAnnotationFactory());
+        addFactory(new BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory());
+
+        addFactory(new DisabledFacetOnMemberFromPropertiesFactory());
+        addFactory(new EncodableFacetAnnotationElseConfigurationFactory());
+        
+        addFactory(new ExplorationFacetAnnotationFactory());
+
+        addFactory(new NotContributedFacetAnnotationFactory());
+
+        addFactory(new NotInServiceMenuFacetAnnotationFactory());
+
+        addFactory(new NotInServiceMenuFacetViaMethodFactory());
+
+        addFactory(new NotContributedFacetDerivedFromDomainServiceFacetFactory());
+        addFactory(new NotInServiceMenuFacetDerivedFromDomainServiceFacetFactory());
+
+        
+        addFactory(new HiddenFacetOnTypeAnnotationFactory());
         // must come after the TitleAnnotationFacetFactory, because can act as an override
-        addFactory(HiddenFacetOnMemberFromPropertiesFactory.class);
+        
+        addFactory(new HiddenFacetOnMemberFromPropertiesFactory());
 
-        addFactory(CssClassFacetOnTypeAnnotationFactory.class);
-        addFactory(CssClassFacetOnMemberFactory.class);
+        
+            addFactory(new CssClassFacetOnTypeAnnotationFactory());
+        addFactory(new CssClassFacetOnMemberFactory());
         // must come after CssClassFacetOnMemberFactory
-        addFactory(CssClassFacetOnActionFromConfiguredRegexFactory.class);
+        addFactory(new CssClassFacetOnActionFromConfiguredRegexFactory());
 
-        // addFactory(CssClassFaFacetOnTypeAnnotationFactory.class);
-        addFactory(CssClassFaFacetOnMemberFactory.class);
+        // addFactory(new CssClassFaFacetOnTypeAnnotationFactory());
+        addFactory(new CssClassFaFacetOnMemberFactory());
 
-        addFactory(HiddenObjectFacetViaMethodFactory.class);
-        addFactory(DisabledObjectFacetViaMethodFactory.class);
+        addFactory(new HiddenObjectFacetViaMethodFactory());
+        addFactory(new DisabledObjectFacetViaMethodFactory());
 
-        addFactory(CopyImmutableFacetOntoMembersFactory.class);
-        addFactory(ImmutableFacetMarkerInterfaceFactory.class);
+        addFactory(new CopyImmutableFacetOntoMembersFactory());
+        addFactory(new ImmutableFacetMarkerInterfaceFactory());
 
-        addFactory(RecreatableObjectFacetFactory.class);
-        addFactory(MixinFacetForMixinAnnotationFactory.class);
+        addFactory(new RecreatableObjectFacetFactory());
+        addFactory(new MixinFacetForMixinAnnotationFactory());
 
 
-        addFactory(MaxLengthFacetOnTypeAnnotationFactory.class);
-        addFactory(MaxLengthFacetOnActionAnnotationFactory.class);
+        
+        addFactory(new MaxLengthFacetOnTypeAnnotationFactory());
 
-        addFactory(MustSatisfySpecificationFromMustSatisfyAnnotationOnTypeFacetFactory.class);
+        addFactory(new MaxLengthFacetOnActionAnnotationFactory());
 
-        addFactory(MultiLineFacetOnTypeAnnotationFactory.class);
-        addFactory(MultiLineFacetOnPropertyFactory.class);
-        addFactory(MultiLineFacetOnParameterAnnotationFactory.class);
+
+        addFactory(new MustSatisfySpecificationFromMustSatisfyAnnotationOnTypeFacetFactory());
+
+        
+        addFactory(new MultiLineFacetOnTypeAnnotationFactory());
+        addFactory(new MultiLineFacetOnPropertyFactory());
+        addFactory(new MultiLineFacetOnParameterAnnotationFactory());
 
         // must come after RecreatableObjectFacetFactory
-        addFactory(DomainObjectAnnotationFacetFactory.class);
+        addFactory(new DomainObjectAnnotationFacetFactory());
 
         // must come after the property/collection accessor+mutator facet factories
-        addFactory(ActionAnnotationFacetFactory.class);
+        addFactory(new ActionAnnotationFacetFactory());
         // after the ActionAnnotationFacetFactory so that takes precedent for contributed associations
-        addFactory(PropertyAnnotationFacetFactory.class);
+        addFactory(new PropertyAnnotationFacetFactory());
         // after the ActionAnnotationFacetFactory so that takes precedent for contributed associations
-        addFactory(CollectionAnnotationFacetFactory.class);
+        addFactory(new CollectionAnnotationFacetFactory());
 
-        addFactory(ParameterAnnotationFacetFactory.class);
+        addFactory(new ParameterAnnotationFacetFactory());
 
         // must come after DomainObjectAnnotationFacetFactory
-        addFactory(DisabledFacetOnPropertyDerivedFromRecreatableObjectFacetFactory.class);
-        addFactory(DisabledFacetOnCollectionDerivedFromViewModelFacetFactory.class);
+        addFactory(new DisabledFacetOnPropertyDerivedFromRecreatableObjectFacetFactory());
+        addFactory(new DisabledFacetOnCollectionDerivedFromViewModelFacetFactory());
         // must come after DomainObjectAnnotationFacetFactory & MixinFacetFactory
-        addFactory(NotContributedFacetDerivedFromMixinFacetFactory.class);
+        addFactory(new NotContributedFacetDerivedFromMixinFacetFactory());
 
-        addFactory(GridFacetFactory.class);
+        addFactory(new GridFacetFactory());
 
-        addFactory(DomainServiceLayoutFacetFactory.class);
-        addFactory(DomainObjectLayoutFacetFactory.class);
+        addFactory(new DomainServiceLayoutFacetFactory());
+        addFactory(new DomainObjectLayoutFacetFactory());
         // must come after MultiLine
-        addFactory(PropertyLayoutFacetFactory.class);
-        addFactory(ParameterLayoutFacetFactory.class);
-        addFactory(ActionLayoutFacetFactory.class);
-        addFactory(CollectionLayoutFacetFactory.class);
+        addFactory(new PropertyLayoutFacetFactory());
+        addFactory(new ParameterLayoutFacetFactory());
+        addFactory(new ActionLayoutFacetFactory());
+        addFactory(new CollectionLayoutFacetFactory());
 
         // must come after DomainObjectLayoutFacetFactory
-        addFactory(TitleAnnotationFacetFactory.class);
-        addFactory(TitleFacetViaMethodsFactory.class);
-        addFactory(IconFacetMethodFactory.class);
-        addFactory(CssClassFacetMethodFactory.class);
+        addFactory(new TitleAnnotationFacetFactory());
+        addFactory(new TitleFacetViaMethodsFactory());
+        addFactory(new IconFacetMethodFactory());
+        addFactory(new CssClassFacetMethodFactory());
+
+        
+        addFactory(new NamedFacetOnTypeAnnotationFactory());
+        addFactory(new NamedFacetOnMemberFactory());
+        
+        addFactory(new NamedFacetOnParameterAnnotationFactory());
+
+        addFactory(new NotPersistableFacetAnnotationFactory());
+        addFactory(new NotPersistableFacetMarkerInterfaceFactory());
 
-        addFactory(NamedFacetOnTypeAnnotationFactory.class);
-        addFactory(NamedFacetOnMemberFactory.class);
-        addFactory(NamedFacetOnParameterAnnotationFactory.class);
+        addFactory(new ParseableFacetAnnotationElseConfigurationFactory());
+        
+        addFactory(new PluralAnnotationFacetFactory());
 
-        addFactory(NotPersistableFacetAnnotationFactory.class);
-        addFactory(NotPersistableFacetMarkerInterfaceFactory.class);
+        addFactory(new PagedFacetOnTypeAnnotationFactory());
 
-        addFactory(ParseableFacetAnnotationElseConfigurationFactory.class);
-        addFactory(PluralAnnotationFacetFactory.class);
-        addFactory(PagedFacetOnTypeAnnotationFactory.class);
-        addFactory(PagedFacetOnCollectionFactory.class);
-        addFactory(PagedFacetOnActionFactory.class);
+        addFactory(new PagedFacetOnCollectionFactory());
+
+        addFactory(new PagedFacetOnActionFactory());
 
         // must come after any facets that install titles
-        addFactory(MaskFacetOnTypeAnnotationFactory.class);
-        addFactory(MaskFacetOnPropertyAnnotationFactory.class);
-        addFactory(MaskFacetOnParameterAnnotationFactory.class);
+        
+        addFactory(new MaskFacetOnTypeAnnotationFactory());
+        addFactory(new MaskFacetOnPropertyAnnotationFactory());
+        
+        addFactory(new MaskFacetOnParameterAnnotationFactory());
 
         // must come after any facets that install titles, and after mask
         // if takes precedence over mask.
-        addFactory(RegExFacetOnTypeAnnotationFactory.class);
-
-        addFactory(TypicalLengthFacetOnPropertyDerivedFromTypeFacetFactory.class);
-        addFactory(TypicalLengthFacetOnParameterDerivedFromTypeFacetFactory.class);
-
-        addFactory(TypicalLengthFacetOnTypeAnnotationFactory.class);
-        addFactory(TypicalLengthOnPropertyFacetFactory.class);
-        addFactory(TypicalLengthFacetOnParameterAnnotationFactory.class);
-        addFactory(RenderedAsDayBeforeAnnotationOnPropertyFacetFactory.class);
-        addFactory(RenderedAsDayBeforeFacetOnParameterAnnotationFactory.class);
+        
+        addFactory(new RegExFacetOnTypeAnnotationFactory());
+
+        addFactory(new TypicalLengthFacetOnPropertyDerivedFromTypeFacetFactory());
+        addFactory(new TypicalLengthFacetOnParameterDerivedFromTypeFacetFactory());
+
+        
+        addFactory(new TypicalLengthFacetOnTypeAnnotationFactory());
+        addFactory(new TypicalLengthOnPropertyFacetFactory());
+        
+        addFactory(new TypicalLengthFacetOnParameterAnnotationFactory());
+        
+        addFactory(new RenderedAsDayBeforeAnnotationOnPropertyFacetFactory());
+        
+        addFactory(new RenderedAsDayBeforeFacetOnParameterAnnotationFactory());
 
         // built-in value types for Java language
-        addFactory(BooleanPrimitiveValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(BooleanWrapperValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(BytePrimitiveValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(ByteWrapperValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(ShortPrimitiveValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(ShortWrapperValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(IntPrimitiveValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(IntWrapperValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(LongPrimitiveValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(LongWrapperValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(FloatPrimitiveValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(FloatWrapperValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(DoublePrimitiveValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(DoubleWrapperValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(CharPrimitiveValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(CharWrapperValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(BigIntegerValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(BigDecimalValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(JavaSqlDateValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(JavaSqlTimeValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(JavaUtilDateValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(JavaSqlTimeStampValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(StringValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(URLValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(UUIDValueFacetUsingSemanticsProviderFactory.class);
-
-        addFactory(JavaAwtImageValueFacetUsingSemanticsProviderFactory.class);
+        addFactory(new BooleanPrimitiveValueFacetUsingSemanticsProviderFactory());
+        addFactory(new BooleanWrapperValueFacetUsingSemanticsProviderFactory());
+        addFactory(new BytePrimitiveValueFacetUsingSemanticsProviderFactory());
+        addFactory(new ByteWrapperValueFacetUsingSemanticsProviderFactory());
+        addFactory(new ShortPrimitiveValueFacetUsingSemanticsProviderFactory());
+        addFactory(new ShortWrapperValueFacetUsingSemanticsProviderFactory());
+        addFactory(new IntPrimitiveValueFacetUsingSemanticsProviderFactory());
+        addFactory(new IntWrapperValueFacetUsingSemanticsProviderFactory());
+        addFactory(new LongPrimitiveValueFacetUsingSemanticsProviderFactory());
+        addFactory(new LongWrapperValueFacetUsingSemanticsProviderFactory());
+        addFactory(new FloatPrimitiveValueFacetUsingSemanticsProviderFactory());
+        addFactory(new FloatWrapperValueFacetUsingSemanticsProviderFactory());
+        addFactory(new DoublePrimitiveValueFacetUsingSemanticsProviderFactory());
+        addFactory(new DoubleWrapperValueFacetUsingSemanticsProviderFactory());
+        addFactory(new CharPrimitiveValueFacetUsingSemanticsProviderFactory());
+        addFactory(new CharWrapperValueFacetUsingSemanticsProviderFactory());
+        addFactory(new BigIntegerValueFacetUsingSemanticsProviderFactory());
+        addFactory(new BigDecimalValueFacetUsingSemanticsProviderFactory());
+        addFactory(new JavaSqlDateValueFacetUsingSemanticsProviderFactory());
+        addFactory(new JavaSqlTimeValueFacetUsingSemanticsProviderFactory());
+        addFactory(new JavaUtilDateValueFacetUsingSemanticsProviderFactory());
+        addFactory(new JavaSqlTimeStampValueFacetUsingSemanticsProviderFactory());
+        addFactory(new StringValueFacetUsingSemanticsProviderFactory());
+        addFactory(new URLValueFacetUsingSemanticsProviderFactory());
+        addFactory(new UUIDValueFacetUsingSemanticsProviderFactory());
+
+        addFactory(new JavaAwtImageValueFacetUsingSemanticsProviderFactory());
 
         // applib values
-        addFactory(BlobValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(ClobValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(DateValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(DateTimeValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(ColorValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(MoneyValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(PasswordValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(PercentageValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(TimeStampValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(TimeValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(ImageValueFacetUsingSemanticsProviderFactory.class);
+        addFactory(new BlobValueFacetUsingSemanticsProviderFactory());
+        addFactory(new ClobValueFacetUsingSemanticsProviderFactory());
+        addFactory(new DateValueFacetUsingSemanticsProviderFactory());
+        addFactory(new DateTimeValueFacetUsingSemanticsProviderFactory());
+        addFactory(new ColorValueFacetUsingSemanticsProviderFactory());
+        addFactory(new MoneyValueFacetUsingSemanticsProviderFactory());
+        addFactory(new PasswordValueFacetUsingSemanticsProviderFactory());
+        addFactory(new PercentageValueFacetUsingSemanticsProviderFactory());
+        addFactory(new TimeStampValueFacetUsingSemanticsProviderFactory());
+        addFactory(new TimeValueFacetUsingSemanticsProviderFactory());
+        addFactory(new ImageValueFacetUsingSemanticsProviderFactory());
 
         // jodatime values
-        addFactory(JodaLocalDateValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(JodaLocalDateTimeValueFacetUsingSemanticsProviderFactory.class);
-        addFactory(JodaDateTimeValueFacetUsingSemanticsProviderFactory.class);
+        addFactory(new JodaLocalDateValueFacetUsingSemanticsProviderFactory());
+        addFactory(new JodaLocalDateTimeValueFacetUsingSemanticsProviderFactory());
+        addFactory(new JodaDateTimeValueFacetUsingSemanticsProviderFactory());
 
         // written to not trample over TypeOf if already installed
-        addFactory(CollectionFacetFactory.class);
+        addFactory(new CollectionFacetFactory());
         // must come after CollectionFacetFactory
-        addFactory(ParentedFacetSinceCollectionFactory.class);
+        addFactory(new ParentedFacetSinceCollectionFactory());
 
         // so we can dogfood the applib "value" types
-        addFactory(ValueFacetAnnotationOrConfigurationFactory.class);
+        addFactory(new ValueFacetAnnotationOrConfigurationFactory());
 
-        addFactory(DisabledFacetOnPropertyDerivedFromImmutableFactory.class);
-        addFactory(DisabledFacetOnCollectionDerivedFromImmutableFactory.class);
+        addFactory(new DisabledFacetOnPropertyDerivedFromImmutableFactory());
+        addFactory(new DisabledFacetOnCollectionDerivedFromImmutableFactory());
 
         // should come near the end, after any facets that install PropertySetterFacet have run.
-        addFactory(DisabledFacetOnPropertyInferredFactory.class);
+        addFactory(new DisabledFacetOnPropertyInferredFactory());
 
-        addFactory(AuditableFacetMarkerInterfaceFactory.class);
+        
+        addFactory(new AuditableFacetMarkerInterfaceFactory());
 
-        addFactory(FacetsFacetAnnotationFactory.class);
+        addFactory(new FacetsFacetAnnotationFactory());
 
         // must be after all named facets and description facets have been installed
-        addFactory(TranslationFacetFactory.class);
+        addFactory(new TranslationFacetFactory());
 
-        addFactory(ViewModelSemanticCheckingFacetFactory.class);
+        addFactory(new ViewModelSemanticCheckingFacetFactory());
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
index e995fb5..4c86911 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
@@ -66,7 +66,6 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
     private ObjectSpecId specId;
 
     private Persistability persistable;
-    private boolean isEncodeable;
 
     private ServicesInjector servicesInjector;
 
@@ -268,7 +267,7 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
 
     @Override
     public boolean isEncodeable() {
-        return isEncodeable;
+        return false;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactoryMetamodelRefiner.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactoryMetamodelRefiner.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactoryMetamodelRefiner.java
index 71a3f26..3933a98 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactoryMetamodelRefiner.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactoryMetamodelRefiner.java
@@ -41,25 +41,25 @@ public class PersistenceSessionFactoryMetamodelRefiner implements MetaModelRefin
     @Override
     public void refineProgrammingModel(ProgrammingModel programmingModel, IsisConfiguration configuration) {
         programmingModel.addFactory(
-                JdoPersistenceCapableAnnotationFacetFactory.class, ProgrammingModel.Position.BEGINNING);
-        programmingModel.addFactory(JdoDatastoreIdentityAnnotationFacetFactory.class);
+                new JdoPersistenceCapableAnnotationFacetFactory(), ProgrammingModel.Position.BEGINNING);
+        programmingModel.addFactory(new JdoDatastoreIdentityAnnotationFacetFactory());
 
-        programmingModel.addFactory(JdoPrimaryKeyAnnotationFacetFactory.class);
-        programmingModel.addFactory(JdoNotPersistentAnnotationFacetFactory.class);
-        programmingModel.addFactory(JdoDiscriminatorAnnotationFacetFactory.class);
-        programmingModel.addFactory(JdoVersionAnnotationFacetFactory.class);
+        programmingModel.addFactory(new JdoPrimaryKeyAnnotationFacetFactory());
+        programmingModel.addFactory(new JdoNotPersistentAnnotationFacetFactory());
+        programmingModel.addFactory(new JdoDiscriminatorAnnotationFacetFactory());
+        programmingModel.addFactory(new JdoVersionAnnotationFacetFactory());
 
-        programmingModel.addFactory(JdoQueryAnnotationFacetFactory.class);
+        programmingModel.addFactory(new JdoQueryAnnotationFacetFactory());
 
-        programmingModel.addFactory(BigDecimalDerivedFromJdoColumnAnnotationFacetFactory.class);
-        programmingModel.addFactory(MaxLengthDerivedFromJdoColumnAnnotationFacetFactory.class);
+        programmingModel.addFactory(new BigDecimalDerivedFromJdoColumnAnnotationFacetFactory());
+        programmingModel.addFactory(new MaxLengthDerivedFromJdoColumnAnnotationFacetFactory());
         // must appear after JdoPrimaryKeyAnnotationFacetFactory (above)
         // and also MandatoryFacetOnPropertyMandatoryAnnotationFactory
         // and also PropertyAnnotationFactory
-        programmingModel.addFactory(MandatoryFromJdoColumnAnnotationFacetFactory.class);
+        programmingModel.addFactory(new MandatoryFromJdoColumnAnnotationFacetFactory());
 
-        programmingModel.addFactory(AuditableAnnotationInJdoApplibFacetFactory.class);
-        programmingModel.addFactory(AuditableMarkerInterfaceInJdoApplibFacetFactory.class);
+        programmingModel.addFactory(new AuditableAnnotationInJdoApplibFacetFactory());
+        programmingModel.addFactory(new AuditableMarkerInterfaceInJdoApplibFacetFactory());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/ec38b4b0/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java
index ab56da7..1f52d76 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java
@@ -100,8 +100,7 @@ public class ObjectMemberAbstractTest {
         org.apache.log4j.Logger.getRootLogger().setLevel(org.apache.log4j.Level.OFF);
 
         stubServicesInjector = new ServicesInjector(Lists.<Object>newArrayList(
-                mockSpecificationLoader, mockSpecificationLoader
-        ));
+                mockSpecificationLoader, mockSpecificationLoader));
 
         context.checking(new Expectations() {{
             allowing(mockAuthenticationSessionProvider).getAuthenticationSession();