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 2014/10/30 14:59:19 UTC

[3/8] git commit: ISIS-939: simplified CollectionTypeRegistry hierarchy (to single implementation).

ISIS-939: simplified CollectionTypeRegistry hierarchy (to single implementation).


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

Branch: refs/heads/master
Commit: 51562c548660a220b74738ffdb500ab29bd4ae7b
Parents: a22b88f
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Oct 28 17:24:16 2014 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Tue Oct 28 17:24:16 2014 +0000

----------------------------------------------------------------------
 .../integtestsupport/IsisSystemDefault.java     |  9 ---
 .../isis/core/metamodel/app/IsisMetaModel.java  |  6 +-
 ...llectionIdentifyingFacetFactoryAbstract.java | 19 +----
 .../TypeOfFacetOnActionAnnotationFactory.java   | 18 +----
 .../collection/CollectionFacetFactory.java      | 13 +---
 ...ypeOfFacetOnCollectionAnnotationFactory.java | 12 +--
 .../spec/feature/ObjectMemberContext.java       | 16 ++--
 .../specloader/ObjectReflectorDefault.java      | 47 +++---------
 .../CollectionTypeRegistry.java                 | 59 +++++++++++---
 .../CollectionTypeRegistryAbstract.java         | 46 -----------
 .../CollectionTypeRegistryAware.java            | 25 ------
 .../CollectionTypeRegistryDefault.java          | 81 --------------------
 .../facetprocessor/FacetProcessor.java          | 54 ++++---------
 .../specimpl/IntrospectionContext.java          | 31 --------
 .../dflt/ObjectSpecificationDefault.java        | 20 +----
 .../progmodels/dflt/JavaReflectorHelper.java    | 12 +--
 .../TypeOfAnnotationFacetFactoryTest.java       |  5 +-
 .../ObjectReflectorDefaultTestAbstract.java     |  8 +-
 .../specimpl/ObjectAssociationAbstractTest.java |  2 +-
 ...ectAssociationAbstractTest_alwaysHidden.java |  2 +-
 .../runtime/system/ObjectActionImplTest.java    |  2 +-
 .../system/ObjectMemberAbstractTest.java        |  2 +-
 .../system/OneToManyAssociationImplTest.java    |  2 +-
 ...rapperFactoryAbstractTest_wrappedObject.java |  3 +-
 24 files changed, 111 insertions(+), 383 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemDefault.java
----------------------------------------------------------------------
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemDefault.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemDefault.java
index 4b3b348..8f8a05c 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemDefault.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemDefault.java
@@ -32,8 +32,6 @@ import org.apache.isis.core.metamodel.facetdecorator.FacetDecorator;
 import org.apache.isis.core.metamodel.metamodelvalidator.dflt.MetaModelValidatorDefault;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
-import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistry;
-import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistryDefault;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
 import org.apache.isis.core.objectstore.InMemoryPersistenceMechanismInstaller;
 import org.apache.isis.core.runtime.authentication.AuthenticationManager;
@@ -135,13 +133,6 @@ public class IsisSystemDefault extends IsisSystemAbstract {
     }
 
  
-    /**
-     * Optional hook method.
-     */
-    protected CollectionTypeRegistry obtainReflectorCollectionTypeRegistry() {
-        return new CollectionTypeRegistryDefault();
-    }
-
 
     /**
      * Optional hook method.

http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java
index 404ad60..3615b45 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java
@@ -35,7 +35,6 @@ import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
 import org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault;
 import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
 import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistry;
-import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistryDefault;
 import org.apache.isis.core.metamodel.specloader.traverser.SpecificationTraverser;
 import org.apache.isis.core.metamodel.specloader.traverser.SpecificationTraverserDefault;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
@@ -119,8 +118,9 @@ public class IsisMetaModel implements ApplicationScopedComponent {
 
         this.classSubstitutor = new ClassSubstitutor();
 
-        setCollectionTypeRegistry(new CollectionTypeRegistryDefault());
+        this.collectionTypeRegistry = new CollectionTypeRegistry();
         setSpecificationTraverser(new SpecificationTraverserDefault());
+
         setFacetDecorators(new TreeSet<FacetDecorator>());
         setProgrammingModelFacets(programmingModel);
 
@@ -141,7 +141,7 @@ public class IsisMetaModel implements ApplicationScopedComponent {
     @Override
     public void init() {
         ensureNotInitialized();
-        reflector = new ObjectReflectorDefault(configuration, classSubstitutor, collectionTypeRegistry, specificationTraverser, programmingModel, facetDecorators, metaModelValidator);
+        reflector = new ObjectReflectorDefault(configuration, specificationTraverser, programmingModel, facetDecorators, metaModelValidator);
 
         reflector.setServices(services);
         

http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/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 a98d2be..c7174c3 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
@@ -20,14 +20,12 @@
 package org.apache.isis.core.metamodel.facets;
 
 import java.util.List;
-
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistry;
-import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistryAware;
 
-public abstract class PropertyOrCollectionIdentifyingFacetFactoryAbstract extends MethodPrefixBasedFacetFactoryAbstract implements PropertyOrCollectionIdentifyingFacetFactory, CollectionTypeRegistryAware {
+public abstract class PropertyOrCollectionIdentifyingFacetFactoryAbstract extends MethodPrefixBasedFacetFactoryAbstract implements PropertyOrCollectionIdentifyingFacetFactory {
 
-    private CollectionTypeRegistry collectionTypeRegistry;
+    private final CollectionTypeRegistry collectionTypeRegistry = new CollectionTypeRegistry();
 
     public PropertyOrCollectionIdentifyingFacetFactoryAbstract(final List<FeatureType> featureTypes, final String... prefixes) {
         super(featureTypes, OrphanValidation.DONT_VALIDATE, prefixes);
@@ -37,22 +35,9 @@ public abstract class PropertyOrCollectionIdentifyingFacetFactoryAbstract extend
         return getCollectionTypeRepository().isCollectionType(cls) || getCollectionTypeRepository().isArrayType(cls);
     }
 
-    // /////////////////////////////////////////////////////////////////////////
-    // Injected: CollectionTypeRegistry
-    // /////////////////////////////////////////////////////////////////////////
-
     protected CollectionTypeRegistry getCollectionTypeRepository() {
         return collectionTypeRegistry;
     }
 
-    /**
-     * Injected so can propogate to any {@link #registerFactory(FacetFactory)
-     * registered} {@link FacetFactory} s that are also
-     * {@link CollectionTypeRegistryAware}.
-     */
-    @Override
-    public void setCollectionTypeRegistry(final CollectionTypeRegistry collectionTypeRegistry) {
-        this.collectionTypeRegistry = collectionTypeRegistry;
-    }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetOnActionAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetOnActionAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetOnActionAnnotationFactory.java
index ac6b099..e7f40e8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetOnActionAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/typeof/annotation/TypeOfFacetOnActionAnnotationFactory.java
@@ -19,12 +19,7 @@
 
 package org.apache.isis.core.metamodel.facets.actions.typeof.annotation;
 
-import java.lang.reflect.GenericDeclaration;
-import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-
+import java.lang.reflect.*;
 import org.apache.isis.applib.annotation.TypeOf;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -33,10 +28,10 @@ import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 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.specloader.collectiontyperegistry.CollectionTypeRegistry;
-import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistryAware;
 
-public class TypeOfFacetOnActionAnnotationFactory extends FacetFactoryAbstract implements CollectionTypeRegistryAware {
-    private CollectionTypeRegistry collectionTypeRegistry;
+public class TypeOfFacetOnActionAnnotationFactory extends FacetFactoryAbstract {
+
+    private final CollectionTypeRegistry collectionTypeRegistry = new CollectionTypeRegistry();
 
     public TypeOfFacetOnActionAnnotationFactory() {
         super(FeatureType.ACTIONS_ONLY);
@@ -112,9 +107,4 @@ public class TypeOfFacetOnActionAnnotationFactory extends FacetFactoryAbstract i
 
     }
 
-    @Override
-    public void setCollectionTypeRegistry(final CollectionTypeRegistry collectionTypeRegistry) {
-        this.collectionTypeRegistry = collectionTypeRegistry;
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionFacetFactory.java
index ec6105f..0891063 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionFacetFactory.java
@@ -29,11 +29,10 @@ import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacetDefaultTo
 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.specloader.collectiontyperegistry.CollectionTypeRegistry;
-import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistryAware;
 
-public class CollectionFacetFactory extends FacetFactoryAbstract implements CollectionTypeRegistryAware, AdapterManagerAware {
+public class CollectionFacetFactory extends FacetFactoryAbstract implements AdapterManagerAware {
 
-    private CollectionTypeRegistry collectionTypeRegistry;
+    private final CollectionTypeRegistry collectionTypeRegistry = new CollectionTypeRegistry();
     private AdapterManager adapterManager;
 
     public CollectionFacetFactory() {
@@ -78,14 +77,6 @@ public class CollectionFacetFactory extends FacetFactoryAbstract implements Coll
     // Dependencies (injected)
     // //////////////////////////////////////////////////////////////
 
-    /**
-     * Injected since {@link CollectionTypeRegistryAware}.
-     */
-    @Override
-    public void setCollectionTypeRegistry(final CollectionTypeRegistry collectionTypeRegistry) {
-        this.collectionTypeRegistry = collectionTypeRegistry;
-    }
-
     public AdapterManager getAdapterManager() {
         return adapterManager;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/typeof/annotation/TypeOfFacetOnCollectionAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/typeof/annotation/TypeOfFacetOnCollectionAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/typeof/annotation/TypeOfFacetOnCollectionAnnotationFactory.java
index 6bcfb18..43eca17 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/typeof/annotation/TypeOfFacetOnCollectionAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/typeof/annotation/TypeOfFacetOnCollectionAnnotationFactory.java
@@ -23,7 +23,6 @@ import java.lang.reflect.Method;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
-
 import org.apache.isis.applib.annotation.TypeOf;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -32,10 +31,9 @@ import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 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.specloader.collectiontyperegistry.CollectionTypeRegistry;
-import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistryAware;
 
-public class TypeOfFacetOnCollectionAnnotationFactory extends FacetFactoryAbstract implements CollectionTypeRegistryAware {
-    private CollectionTypeRegistry collectionTypeRegistry;
+public class TypeOfFacetOnCollectionAnnotationFactory extends FacetFactoryAbstract {
+    private final CollectionTypeRegistry collectionTypeRegistry = new CollectionTypeRegistry();
 
     public TypeOfFacetOnCollectionAnnotationFactory() {
         super(FeatureType.COLLECTIONS_ONLY);
@@ -86,12 +84,6 @@ public class TypeOfFacetOnCollectionAnnotationFactory extends FacetFactoryAbstra
             // TODO: what to do here?
             return;
         }
-
-    }
-
-    @Override
-    public void setCollectionTypeRegistry(final CollectionTypeRegistry collectionTypeRegistry) {
-        this.collectionTypeRegistry = collectionTypeRegistry;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberContext.java
index 2aef1e1..b26f81c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberContext.java
@@ -31,16 +31,16 @@ public class ObjectMemberContext {
     private final SpecificationLoader specificationLookup;
     private final AdapterManager adapterManager;
     private final QuerySubmitter querySubmitter;
-    private final CollectionTypeRegistry collectionTypeRegistry;
     private final ServicesProvider servicesProvider;
 
+    private final CollectionTypeRegistry collectionTypeRegistry = new CollectionTypeRegistry();
+
     public ObjectMemberContext(
-            final DeploymentCategory deploymentCategory, 
-            final AuthenticationSessionProvider authenticationSessionProvider, 
-            final SpecificationLoader specificationLookup, 
-            final AdapterManager adapterManager, 
-            final QuerySubmitter querySubmitter, 
-            final CollectionTypeRegistry collectionTypeRegistry,
+            final DeploymentCategory deploymentCategory,
+            final AuthenticationSessionProvider authenticationSessionProvider,
+            final SpecificationLoader specificationLookup,
+            final AdapterManager adapterManager,
+            final QuerySubmitter querySubmitter,
             final ServicesProvider servicesProvider) {
 
         this.deploymentCategory = deploymentCategory;
@@ -48,7 +48,7 @@ public class ObjectMemberContext {
         this.specificationLookup = specificationLookup;
         this.adapterManager = adapterManager;
         this.querySubmitter = querySubmitter;
-        this.collectionTypeRegistry = collectionTypeRegistry;
+
         this.servicesProvider = servicesProvider;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
index 333f0fd..5af8824 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
@@ -52,11 +52,9 @@ import org.apache.isis.core.metamodel.spec.*;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMemberContext;
 import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
 import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistry;
-import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistryDefault;
 import org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor;
 import org.apache.isis.core.metamodel.specloader.specimpl.CreateObjectContext;
 import org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilderContext;
-import org.apache.isis.core.metamodel.specloader.specimpl.IntrospectionContext;
 import org.apache.isis.core.metamodel.specloader.specimpl.ObjectSpecificationAbstract;
 import org.apache.isis.core.metamodel.specloader.specimpl.ObjectSpecificationAbstract.IntrospectionState;
 import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
@@ -84,12 +82,6 @@ import static org.hamcrest.CoreMatchers.notNullValue;
  * allows the class to be loaded to be substituted if required. This is used in
  * conjunction with some <tt>PersistenceMechanism</tt>s that do class
  * enhancement.
- * <li>The {@link CollectionTypeRegistry} specifies the types that should be
- * considered as collections. If not specified then will
- * {@link CollectionTypeRegistryDefault default}. (Note: this extension point
- * has not been tested, so should be considered more of a &quot;statement of
- * intent&quot; than actual API. Also, we may use annotations (similar to the
- * way in which Values are specified) as an alternative mechanism).
  * </ul>
  * 
  * <p>
@@ -109,6 +101,9 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
 
     private final static Logger LOG = LoggerFactory.getLogger(ObjectReflectorDefault.class);
 
+    private final ClassSubstitutor classSubstitutor = new ClassSubstitutor();
+    private final CollectionTypeRegistry collectionTypeRegistry = new CollectionTypeRegistry();
+
     /**
      * Injected in the constructor.
      */
@@ -116,14 +111,6 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
     /**
      * Injected in the constructor.
      */
-    private final ClassSubstitutor classSubstitutor;
-    /**
-     * Injected in the constructor.
-     */
-    private final CollectionTypeRegistry collectionTypeRegistry;
-    /**
-     * Injected in the constructor.
-     */
     private final ProgrammingModel programmingModel;
 
     /**
@@ -169,25 +156,19 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
     // /////////////////////////////////////////////////////////////
 
     public ObjectReflectorDefault(
-            final IsisConfiguration configuration, 
-            final ClassSubstitutor classSubstitutor, 
-            final CollectionTypeRegistry collectionTypeRegistry, 
+            final IsisConfiguration configuration,
             final SpecificationTraverser specificationTraverser,
-            final ProgrammingModel programmingModel, 
-            final Set<FacetDecorator> facetDecorators, 
+            final ProgrammingModel programmingModel,
+            final Set<FacetDecorator> facetDecorators,
             final MetaModelValidator metaModelValidator) {
 
         ensureThatArg(configuration, is(notNullValue()));
-        ensureThatArg(classSubstitutor, is(notNullValue()));
-        ensureThatArg(collectionTypeRegistry, is(notNullValue()));
         ensureThatArg(specificationTraverser, is(notNullValue()));
         ensureThatArg(programmingModel, is(notNullValue()));
         ensureThatArg(facetDecorators, is(notNullValue()));
         ensureThatArg(metaModelValidator, is(notNullValue()));
 
         this.configuration = configuration;
-        this.classSubstitutor = classSubstitutor;
-        this.collectionTypeRegistry = collectionTypeRegistry;
         this.programmingModel = programmingModel;
         this.specificationTraverser = specificationTraverser;
 
@@ -197,7 +178,7 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
         }
 
         this.metaModelValidator = metaModelValidator;
-        this.facetProcessor = new FacetProcessor(configuration, collectionTypeRegistry, programmingModel);
+        this.facetProcessor = new FacetProcessor(configuration, programmingModel);
     }
 
     @Override
@@ -252,7 +233,6 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
 
         // initialize subcomponents
         facetDecoratorSet.init();
-        collectionTypeRegistry.init();
         specificationTraverser.init();
         programmingModel.init();
         facetProcessor.init();
@@ -341,7 +321,7 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
             // just ignore.
             return;
         }
-        final Class<?> substitutedType = getClassSubstitutor().getClass(cls);
+        final Class<?> substitutedType = classSubstitutor.getClass(cls);
         
         if(substitutedType.isAnonymousClass()) {
             // JRebel plugin might call us... just ignore 'em.
@@ -420,7 +400,7 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
     }
 
     private ObjectSpecification internalLoadSpecification(final Class<?> type) {
-        final Class<?> substitutedType = getClassSubstitutor().getClass(type);
+        final Class<?> substitutedType = classSubstitutor.getClass(type);
         return substitutedType != null ? loadSpecificationForSubstitutedClass(substitutedType) : null;
     }
 
@@ -488,18 +468,17 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
         final SpecificationContext specContext = new SpecificationContext(getDeploymentCategory(), authenticationSessionProvider, servicesProvider, objectInstantiator, specificationLookup, facetProcessor);
 
         final AdapterManager adapterMap = getRuntimeContext().getAdapterManager();
-        final ObjectMemberContext objectMemberContext = new ObjectMemberContext(getDeploymentCategory(), authenticationSessionProvider, specificationLookup, adapterMap, getRuntimeContext().getQuerySubmitter(), collectionTypeRegistry, servicesProvider);
+        final ObjectMemberContext objectMemberContext = new ObjectMemberContext(getDeploymentCategory(), authenticationSessionProvider, specificationLookup, adapterMap, getRuntimeContext().getQuerySubmitter(), servicesProvider);
 
         // ... and create the specs
         if (FreeStandingList.class.isAssignableFrom(cls)) {
             return new ObjectSpecificationOnStandaloneList(specContext, objectMemberContext);
         } else {
             final SpecificationLoaderSpi specificationLoader = this;
-            final IntrospectionContext introspectionContext = new IntrospectionContext(getClassSubstitutor());
             final ServicesInjector dependencyInjector = getRuntimeContext().getDependencyInjector();
             final CreateObjectContext createObjectContext = new CreateObjectContext(adapterMap, dependencyInjector);
             final FacetedMethodsBuilderContext facetedMethodsBuilderContext = new FacetedMethodsBuilderContext(specificationLoader, classSubstitutor, specificationTraverser, facetProcessor);
-            return new ObjectSpecificationDefault(cls, facetedMethodsBuilderContext, introspectionContext, specContext, objectMemberContext, createObjectContext);
+            return new ObjectSpecificationDefault(cls, facetedMethodsBuilderContext, specContext, objectMemberContext, createObjectContext);
         }
     }
 
@@ -588,8 +567,6 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
             final SpecificationLoaderAware cast = SpecificationLoaderAware.class.cast(candidate);
             cast.setSpecificationLookup(this);
         }
-
-        getCollectionTypeRegistry().injectInto(candidate);
     }
 
     // /////////////////////////////////////////////////////////////
@@ -605,7 +582,7 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
         final List<ObjectSpecification> specs = Lists.newArrayList(allSpecifications());
         Collections.sort(specs, ObjectSpecification.COMPARATOR_SHORT_IDENTIFIER_IGNORE_CASE);
         for (final ObjectSpecification spec : specs) {
-            StringBuffer str = new StringBuffer();
+            StringBuilder str = new StringBuilder();
             str.append(spec.isAbstract() ? "A" : ".");
             str.append(spec.isService() ? "S" : ".");
             str.append(ChoicesFacetUtils.hasChoices(spec) ? "B" : ".");

http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/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
index 93cd815..1ba859e 100644
--- 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
@@ -19,8 +19,10 @@
 
 package org.apache.isis.core.metamodel.specloader.collectiontyperegistry;
 
-import org.apache.isis.core.commons.components.ApplicationScopedComponent;
-import org.apache.isis.core.commons.components.Injectable;
+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;
 
 /**
@@ -31,20 +33,53 @@ import org.apache.isis.core.metamodel.spec.feature.OneToManyFeature.CollectionSe
  * 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.
- * 
- * <p>
- * TODO: plan is to allow new collection types to be installed dynamically,
- * allowing the domain programmer to declare custom classes to have collection
- * semantics.
  */
-public interface CollectionTypeRegistry extends Injectable, ApplicationScopedComponent {
+public class CollectionTypeRegistry {
+
+    private final List<Class<?>> collectionTypes = new ArrayList<Class<?>>();
+    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(Class<?> cls);
+    public boolean isCollectionType(final Class<?> cls) {
+        return java.util.Collection.class.isAssignableFrom(cls);
+    }
 
-    public boolean isArrayType(Class<?> cls);
+    public boolean isArrayType(final Class<?> cls) {
+        return cls.isArray();
+    }
 
-    public Class<?>[] getCollectionType();
+    public Class<?>[] getCollectionType() {
+        return collectionTypesAsArray;
+    }
 
-    public CollectionSemantics semanticsOf(Class<?> cls);
+    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/51562c54/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/collectiontyperegistry/CollectionTypeRegistryAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/collectiontyperegistry/CollectionTypeRegistryAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/collectiontyperegistry/CollectionTypeRegistryAbstract.java
deleted file mode 100644
index be78336..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/collectiontyperegistry/CollectionTypeRegistryAbstract.java
+++ /dev/null
@@ -1,46 +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;
-
-public abstract class CollectionTypeRegistryAbstract implements CollectionTypeRegistry {
-
-    /**
-     * Default implementation does nothing.
-     */
-    @Override
-    public void init() {
-    }
-
-    /**
-     * Default implementation does nothing.
-     */
-    @Override
-    public void shutdown() {
-    }
-
-    @Override
-    public void injectInto(final Object candidate) {
-        if (CollectionTypeRegistryAware.class.isAssignableFrom(candidate.getClass())) {
-            final CollectionTypeRegistryAware cast = CollectionTypeRegistryAware.class.cast(candidate);
-            cast.setCollectionTypeRegistry(this);
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/collectiontyperegistry/CollectionTypeRegistryAware.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/collectiontyperegistry/CollectionTypeRegistryAware.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/collectiontyperegistry/CollectionTypeRegistryAware.java
deleted file mode 100644
index 52b0a3f..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/collectiontyperegistry/CollectionTypeRegistryAware.java
+++ /dev/null
@@ -1,25 +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;
-
-public interface CollectionTypeRegistryAware {
-
-    void setCollectionTypeRegistry(CollectionTypeRegistry collectionTypeRegistry);
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/collectiontyperegistry/CollectionTypeRegistryDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/collectiontyperegistry/CollectionTypeRegistryDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/collectiontyperegistry/CollectionTypeRegistryDefault.java
deleted file mode 100644
index 39ee1eb..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/collectiontyperegistry/CollectionTypeRegistryDefault.java
+++ /dev/null
@@ -1,81 +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;
-
-public class CollectionTypeRegistryDefault extends CollectionTypeRegistryAbstract {
-
-    private final List<Class<?>> collectionTypes = new ArrayList<Class<?>>();
-    private Class<?>[] collectionTypesAsArray = new Class[0];
-
-    /**
-     * Inbuilt support for {@link Collection} as a collection type.
-     * 
-     * <p>
-     * Note that this includes any subclasses.
-     */
-    public CollectionTypeRegistryDefault() {
-        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]);
-    }
-
-    @Override
-    public boolean isCollectionType(final Class<?> cls) {
-        return java.util.Collection.class.isAssignableFrom(cls);
-    }
-
-    @Override
-    public boolean isArrayType(final Class<?> cls) {
-        return cls.isArray();
-    }
-
-    @Override
-    public Class<?>[] getCollectionType() {
-        return collectionTypesAsArray;
-    }
-
-    @Override
-    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/51562c54/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java
index 4c22b67..d23f12b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java
@@ -19,48 +19,34 @@
 
 package org.apache.isis.core.metamodel.specloader.facetprocessor;
 
-import static org.apache.isis.core.commons.ensure.Ensure.ensureThatState;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.notNullValue;
-
 import java.lang.reflect.Method;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-
+import java.util.*;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
-
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.lang.ListExtensions;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facetapi.MethodRemover;
-import org.apache.isis.core.metamodel.facets.FacetFactory;
+import org.apache.isis.core.metamodel.facets.*;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessParameterContext;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
-import org.apache.isis.core.metamodel.facets.ContributeeMemberFacetFactory;
-import org.apache.isis.core.metamodel.facets.MethodFilteringFacetFactory;
-import org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactory;
-import org.apache.isis.core.metamodel.facets.MethodRemoverConstants;
-import org.apache.isis.core.metamodel.facets.PropertyOrCollectionIdentifyingFacetFactory;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
 import org.apache.isis.core.metamodel.runtimecontext.RuntimeContextAware;
 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.specimpl.ObjectActionContributee;
+
+import static org.apache.isis.core.commons.ensure.Ensure.ensureThatState;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
 
 public class FacetProcessor implements RuntimeContextAware {
 
+    private final CollectionTypeRegistry collectionTypeRegistry = new CollectionTypeRegistry();
+
     private final IsisConfiguration configuration;
-    private final CollectionTypeRegistry collectionTypeRegistry;
     private final ProgrammingModel programmingModel;
 
     private RuntimeContext runtimeContext;
@@ -130,14 +116,14 @@ public class FacetProcessor implements RuntimeContextAware {
      */
     private Map<FeatureType, List<FacetFactory>> factoryListByFeatureType = null;
 
-    public FacetProcessor(final IsisConfiguration configuration, final CollectionTypeRegistry collectionTypeRegistry, final ProgrammingModel programmingModel) {
+    public FacetProcessor(
+            final IsisConfiguration configuration,
+            final ProgrammingModel programmingModel) {
         ensureThatState(configuration, is(notNullValue()));
-        ensureThatState(collectionTypeRegistry, is(notNullValue()));
         ensureThatState(programmingModel, is(notNullValue()));
 
         this.configuration = configuration;
         this.programmingModel = programmingModel;
-        this.collectionTypeRegistry = collectionTypeRegistry;
     }
 
     // //////////////////////////////////////////////////
@@ -168,7 +154,6 @@ public class FacetProcessor implements RuntimeContextAware {
      * processing.
      */
     public void injectDependenciesInto(final FacetFactory factory) {
-        getCollectionTypeRepository().injectInto(factory);
         getIsisConfiguration().injectInto(factory);
 
         // cascades all the subcomponents also
@@ -208,12 +193,7 @@ public class FacetProcessor implements RuntimeContextAware {
      * property accessors, and append them to the supplied methodList.
      * 
      * <p>
-     * Intended to be called after
-     * {@link #findAndRemoveValuePropertyAccessors(MethodRemover, List)} once
-     * only reference properties remain.
-     * 
-     * @see PropertyOrCollectionIdentifyingFacetFactory#findAndRemoveValuePropertyAccessors(MethodRemover,
-     *      List)
+     * Intended to be called after {@link #findAndRemovePropertyAccessors(org.apache.isis.core.metamodel.facetapi.MethodRemover, java.util.List)} once only reference properties remain.
      */
     public void findAndRemovePropertyAccessors(final MethodRemover methodRemover, final List<Method> methodListToAppendTo) {
         cachePropertyOrCollectionIdentifyingFacetFactoriesIfRequired();
@@ -279,7 +259,7 @@ public class FacetProcessor implements RuntimeContextAware {
      * object}) to the supplied {@link FacetHolder}.
      * 
      * <p>
-     * Delegates to {@link FacetFactory#process(Class, FacetHolder)} for each
+     * Delegates to {@link FacetFactory#process(org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext)} for each
      * appropriate factory.
      * 
      * @see FacetFactory#process(ProcessClassContext)
@@ -316,11 +296,9 @@ public class FacetProcessor implements RuntimeContextAware {
      * feature} to the supplied {@link FacetHolder}.
      * 
      * <p>
-     * Delegates to {@link FacetFactory#process(Method, FacetHolder)} for each
+     * Delegates to {@link FacetFactory#process(org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext)} for each
      * appropriate factory.
      * 
-     * @see FacetFactory#process(Method, FacetHolder)
-     * 
      * @param cls
      *            - class in which introspect; allowing the helper methods to be
      *            found is subclasses of that which the method was originally
@@ -460,9 +438,7 @@ public class FacetProcessor implements RuntimeContextAware {
             return;
         }
         cachedPropertyOrCollectionIdentifyingFactories = Lists.newArrayList();
-        final Iterator<FacetFactory> iter = factories.iterator();
-        while (iter.hasNext()) {
-            final FacetFactory factory = iter.next();
+        for (FacetFactory factory : factories) {
             if (factory instanceof PropertyOrCollectionIdentifyingFacetFactory) {
                 final PropertyOrCollectionIdentifyingFacetFactory identifyingFacetFactory = (PropertyOrCollectionIdentifyingFacetFactory) factory;
                 cachedPropertyOrCollectionIdentifyingFactories.add(identifyingFacetFactory);

http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/IntrospectionContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/IntrospectionContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/IntrospectionContext.java
deleted file mode 100644
index 30eb273..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/IntrospectionContext.java
+++ /dev/null
@@ -1,31 +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.specimpl;
-
-import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
-
-public class IntrospectionContext {
-    private final ClassSubstitutor classSubstitutor;
-
-    public IntrospectionContext(final ClassSubstitutor classSubstitutor) {
-        this.classSubstitutor = classSubstitutor;
-    }
-
-    public ClassSubstitutor getClassSubstitutor() {
-        return classSubstitutor;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
index b448cef..94fbfff 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
@@ -37,7 +37,6 @@ import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.lang.StringExtensions;
 import org.apache.isis.core.commons.util.ToString;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
@@ -62,6 +61,7 @@ import org.apache.isis.core.metamodel.specloader.specimpl.*;
 public class ObjectSpecificationDefault extends ObjectSpecificationAbstract implements DebuggableWithTitle, FacetHolder {
 
     private final static Logger LOG = LoggerFactory.getLogger(ObjectSpecificationDefault.class);
+    private final ClassSubstitutor classSubstitutor = new ClassSubstitutor();
 
     private static String determineShortName(final Class<?> introspectedClass) {
         final String name = introspectedClass.getName();
@@ -79,7 +79,6 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
      */
     private Map<Method, ObjectMember> membersByMethod = null;
     
-    private final IntrospectionContext introspectionContext;
     private final CreateObjectContext createObjectContext;
 
     private final FacetedMethodsBuilder facetedMethodsBuilder;
@@ -91,16 +90,13 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
 
     public ObjectSpecificationDefault(
             final Class<?> correspondingClass,
-            final FacetedMethodsBuilderContext facetedMethodsBuilderContext, 
-            final IntrospectionContext introspectionContext, 
-            final SpecificationContext specContext, 
+            final FacetedMethodsBuilderContext facetedMethodsBuilderContext,
+            final SpecificationContext specContext,
             final ObjectMemberContext objectMemberContext,
             final CreateObjectContext createObjectContext) {
         super(correspondingClass, determineShortName(correspondingClass), specContext, objectMemberContext);
 
         this.facetedMethodsBuilder = new FacetedMethodsBuilder(this, facetedMethodsBuilderContext);
-
-        this.introspectionContext = introspectionContext;
         this.createObjectContext = createObjectContext;
     }
 
@@ -146,7 +142,7 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
         final Class<?>[] interfaceTypes = getCorrespondingClass().getInterfaces();
         final List<ObjectSpecification> interfaceSpecList = Lists.newArrayList();
         for (final Class<?> interfaceType : interfaceTypes) {
-            final Class<?> substitutedInterfaceType = getClassSubstitutor().getClass(interfaceType);
+            final Class<?> substitutedInterfaceType = classSubstitutor.getClass(interfaceType);
             if (substitutedInterfaceType != null) {
                 final ObjectSpecification interfaceSpec = getSpecificationLookup().loadSpecification(substitutedInterfaceType);
                 interfaceSpecList.add(interfaceSpec);
@@ -504,17 +500,9 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
     // Dependencies (from constructor)
     // //////////////////////////////////////////////////////////////////
 
-    protected AdapterManager getAdapterMap() {
-        return createObjectContext.getAdapterManager();
-    }
-
     protected ServicesInjector getDependencyInjector() {
         return createObjectContext.getDependencyInjector();
     }
 
-    private ClassSubstitutor getClassSubstitutor() {
-        return introspectionContext.getClassSubstitutor();
-    }
-
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
index 3a12dd2..30d8b32 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
@@ -21,19 +21,14 @@ package org.apache.isis.progmodels.dflt;
 
 import java.util.Collection;
 import java.util.Set;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
 import org.apache.isis.core.metamodel.facetdecorator.FacetDecorator;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
 import org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault;
-import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
-import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistry;
-import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistryDefault;
 import org.apache.isis.core.metamodel.specloader.traverser.SpecificationTraverser;
 import org.apache.isis.core.metamodel.specloader.traverser.SpecificationTraverserDefault;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
@@ -52,10 +47,9 @@ public final class JavaReflectorHelper  {
             final Set<FacetDecorator> facetDecorators,
             final MetaModelValidator mmv,
             final IsisConfiguration configuration) {
+
         final SpecificationTraverser specificationTraverser = new SpecificationTraverserDefault();
-        final CollectionTypeRegistry collectionTypeRegistry = new CollectionTypeRegistryDefault();
-        final ClassSubstitutor classSubstitutor = new ClassSubstitutor();
-        
+
         MetaModelValidatorComposite metaModelValidator = MetaModelValidatorComposite.asComposite(mmv);
         for (MetaModelRefiner metaModelRefiner : metaModelRefiners) {
             metaModelRefiner.refineProgrammingModel(programmingModel, configuration);
@@ -67,7 +61,7 @@ public final class JavaReflectorHelper  {
             programmingModel.refineMetaModelValidator(metaModelValidator, configuration);
         }
         
-        return new ObjectReflectorDefault(configuration, classSubstitutor, collectionTypeRegistry, specificationTraverser, programmingModel, facetDecorators, metaModelValidator);
+        return new ObjectReflectorDefault(configuration, specificationTraverser, programmingModel, facetDecorators, metaModelValidator);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/typeof/TypeOfAnnotationFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/typeof/TypeOfAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/typeof/TypeOfAnnotationFacetFactoryTest.java
index 9037b4b..de6701e 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/typeof/TypeOfAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/typeof/TypeOfAnnotationFacetFactoryTest.java
@@ -25,14 +25,13 @@ import java.util.List;
 import java.util.Set;
 import org.apache.isis.applib.annotation.TypeOf;
 import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
 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.typeof.annotation.TypeOfFacetOnCollectionAnnotation;
 import org.apache.isis.core.metamodel.facets.collections.typeof.annotation.TypeOfFacetOnCollectionAnnotationFactory;
-import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistryDefault;
-import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
 
 public class TypeOfAnnotationFacetFactoryTest extends AbstractFacetFactoryTest {
 
@@ -41,9 +40,7 @@ public class TypeOfAnnotationFacetFactoryTest extends AbstractFacetFactoryTest {
     @Override
     protected void setUp() throws Exception {
         super.setUp();
-
         facetFactory = new TypeOfFacetOnCollectionAnnotationFactory();
-        facetFactory.setCollectionTypeRegistry(new CollectionTypeRegistryDefault());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
index 6082cd8..038afc2 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
@@ -40,8 +40,6 @@ import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
 import org.apache.isis.core.metamodel.runtimecontext.noruntime.RuntimeContextNoRuntime;
 import org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
-import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistryDefault;
 import org.apache.isis.core.metamodel.specloader.traverser.SpecificationTraverserDefault;
 import org.apache.isis.core.unittestsupport.jmocking.InjectIntoJMockAction;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
@@ -77,10 +75,8 @@ public abstract class ObjectReflectorDefaultTestAbstract {
         runtimeContext = new RuntimeContextNoRuntime();
         final ObjectReflectorDefault reflector = 
                 new ObjectReflectorDefault(
-                        mockConfiguration, 
-                        new ClassSubstitutor(),
-                        new CollectionTypeRegistryDefault(), 
-                        new SpecificationTraverserDefault(), 
+                        mockConfiguration,
+                        new SpecificationTraverserDefault(),
                         new ProgrammingModelFacetsJava5(),
                         new HashSet<FacetDecorator>(),
                         new MetaModelValidatorDefault());

http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java
index 492a337..21ee9cf 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java
@@ -73,7 +73,7 @@ public class ObjectAssociationAbstractTest {
     public void setup() {
         facetedMethod = FacetedMethod.createForProperty(Customer.class, "firstName");
         
-        objectAssociation = new ObjectAssociationAbstract(facetedMethod, FeatureType.PROPERTY, objectSpecification, new ObjectMemberContext(DeploymentCategory.PRODUCTION, null, null, null, null, null, null)) {
+        objectAssociation = new ObjectAssociationAbstract(facetedMethod, FeatureType.PROPERTY, objectSpecification, new ObjectMemberContext(DeploymentCategory.PRODUCTION, null, null, null, null, null)) {
 
             @Override
             public ObjectAdapter get(final ObjectAdapter fromObject) {

http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java
index 6570145..d4ac220 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java
@@ -72,7 +72,7 @@ public class ObjectAssociationAbstractTest_alwaysHidden {
     public void setup() {
         facetedMethod = FacetedMethod.createForProperty(Customer.class, "firstName");
         
-        objectAssociation = new ObjectAssociationAbstract(facetedMethod, FeatureType.PROPERTY, objectSpecification, new ObjectMemberContext(DeploymentCategory.PRODUCTION, null, null, null, null, null, null)) {
+        objectAssociation = new ObjectAssociationAbstract(facetedMethod, FeatureType.PROPERTY, objectSpecification, new ObjectMemberContext(DeploymentCategory.PRODUCTION, null, null, null, null, null)) {
 
             @Override
             public ObjectAdapter get(final ObjectAdapter fromObject) {

http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionImplTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionImplTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionImplTest.java
index 4512af1..efb8aa6 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionImplTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionImplTest.java
@@ -77,7 +77,7 @@ public class ObjectActionImplTest {
             }
         });
 
-        action = new ObjectActionImpl(mockFacetedMethod, new ObjectMemberContext(DeploymentCategory.PRODUCTION, mockAuthenticationSessionProvider, mockSpecificationLookup, mockAdapterManager, mockQuerySubmitter, mockCollectionTypeRegistry, mockServicesProvider));
+        action = new ObjectActionImpl(mockFacetedMethod, new ObjectMemberContext(DeploymentCategory.PRODUCTION, mockAuthenticationSessionProvider, mockSpecificationLookup, mockAdapterManager, mockQuerySubmitter, mockServicesProvider));
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/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 d3e52c1..0e85b6c 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
@@ -205,7 +205,7 @@ class ObjectMemberAbstractImpl extends ObjectMemberAbstract {
     }
 
     protected ObjectMemberAbstractImpl(final String id) {
-        super(FacetedMethod.createForProperty(Customer.class, "firstName"), FeatureType.PROPERTY, new ObjectMemberContext(DeploymentCategory.PRODUCTION, null, null, null, null, null, null));
+        super(FacetedMethod.createForProperty(Customer.class, "firstName"), FeatureType.PROPERTY, new ObjectMemberContext(DeploymentCategory.PRODUCTION, null, null, null, null, null));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationImplTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationImplTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationImplTest.java
index 7b1422e..174103d 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationImplTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationImplTest.java
@@ -94,7 +94,7 @@ public class OneToManyAssociationImplTest {
         allowingPeerToReturnCollectionType();
         allowingPeerToReturnIdentifier();
         allowingSpecLoaderToReturnSpecs();
-        association = new OneToManyAssociationImpl(mockPeer, new ObjectMemberContext(DeploymentCategory.PRODUCTION, mockAuthenticationSessionProvider, mockSpecificationLookup, mockAdapterManager, mockQuerySubmitter, mockCollectionTypeRegistry, mockServicesProvider));
+        association = new OneToManyAssociationImpl(mockPeer, new ObjectMemberContext(DeploymentCategory.PRODUCTION, mockAuthenticationSessionProvider, mockSpecificationLookup, mockAdapterManager, mockQuerySubmitter, mockServicesProvider));
     }
 
     private void allowingSpecLoaderToReturnSpecs() {

http://git-wip-us.apache.org/repos/asf/isis/blob/51562c54/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject.java b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject.java
index c9f7427..ad033bd 100644
--- a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject.java
+++ b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryAbstractTest_wrappedObject.java
@@ -47,7 +47,6 @@ import org.apache.isis.core.metamodel.facets.properties.validating.method.Proper
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMemberContext;
-import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistryDefault;
 import org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationImpl;
 import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
 import org.apache.isis.core.runtime.authentication.standard.SimpleSession;
@@ -113,7 +112,7 @@ public abstract class WrapperFactoryAbstractTest_wrappedObject {
     @Before
     public void setUp() {
 
-        objectMemberContext = new ObjectMemberContext(DeploymentCategory.PRODUCTION, mockAuthenticationSessionProvider, mockSpecificationLookup, mockAdapterManager, mockQuerySubmitter, new CollectionTypeRegistryDefault(), mockServicesProvider);
+        objectMemberContext = new ObjectMemberContext(DeploymentCategory.PRODUCTION, mockAuthenticationSessionProvider, mockSpecificationLookup, mockAdapterManager, mockQuerySubmitter, mockServicesProvider);
         
         employeeRepository = new EmployeeRepositoryImpl();