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 2017/01/19 11:09:21 UTC

[15/24] isis git commit: ISIS-785: extends FacetedMethod#getParameters to also add the TypeOfFacet to the FacetedMethodParameter if it represents a parameter of type Collection. Calls new SpecificationLoader#inferFromGenericParamType

ISIS-785: extends FacetedMethod#getParameters to also add the TypeOfFacet to the FacetedMethodParameter if it represents a parameter of type Collection<T>.  Calls new SpecificationLoader#inferFromGenericParamType

Along the way, added SpecificationLoader to FacetedMethod#createForAction (so can delegate across to SpecificationLoader#infer... methods).


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

Branch: refs/heads/maint-1.13.3
Commit: b993efe4628552d7f974d5dbf34eaff1e263db4b
Parents: 31d0a72
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Jan 18 12:44:43 2017 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Jan 18 12:44:43 2017 +0000

----------------------------------------------------------------------
 .../core/metamodel/facets/FacetedMethod.java    | 50 +++++++++++++++-----
 .../action/ActionAnnotationFacetFactory.java    | 18 +++----
 .../specloader/SpecificationLoader.java         | 42 ++++++++++++++--
 .../specimpl/FacetedMethodsBuilder.java         |  2 +-
 .../actions/ActionMethodsFacetFactoryTest.java  | 15 ++++--
 ...tationFacetFactoryTest_actionInvocation.java |  8 ++--
 ...nLayoutAnnotationFacetFactoryJunit4Test.java | 18 +++----
 ...erivedFromDomainServiceFacetFactoryTest.java | 10 ++--
 ...erivedFromDomainServiceFacetFactoryTest.java | 10 ++--
 9 files changed, 120 insertions(+), 53 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/b993efe4/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java
index cae44d3..e4b165d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethod.java
@@ -20,6 +20,7 @@
 package org.apache.isis.core.metamodel.facets;
 
 import java.lang.reflect.Method;
+import java.lang.reflect.Type;
 import java.util.Collections;
 import java.util.List;
 
@@ -27,8 +28,11 @@ import com.google.common.collect.Lists;
 
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.core.commons.lang.StringExtensions;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
+import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 
 /**
  * non-final only so it can be mocked if need be.
@@ -66,10 +70,14 @@ public class FacetedMethod extends TypedHolderDefault implements IdentifiedHolde
     /**
      * Principally for testing purposes.
      */
-    public static FacetedMethod createForAction(final Class<?> declaringType, final String actionName, final Class<?>... parameterTypes) {
+    public static FacetedMethod createForAction(
+            final Class<?> declaringType,
+            final String actionName,
+            final SpecificationLoader specificationLoader,
+            final Class<?>... parameterTypes) {
         try {
             final Method method = declaringType.getMethod(actionName, parameterTypes);
-            return FacetedMethod.createForAction(declaringType, method);
+            return FacetedMethod.createForAction(declaringType, method, specificationLoader);
         } catch (final SecurityException | NoSuchMethodException e) {
             throw new RuntimeException(e);
         }
@@ -84,25 +92,43 @@ public class FacetedMethod extends TypedHolderDefault implements IdentifiedHolde
         return new FacetedMethod(FeatureType.COLLECTION, declaringType, method, null, emptyParameterList());
     }
 
-    public static FacetedMethod createForAction(final Class<?> declaringType, final Method method) {
-        return new FacetedMethod(FeatureType.ACTION, declaringType, method, method.getReturnType(), getParameters(declaringType, method));
+    public static FacetedMethod createForAction(
+            final Class<?> declaringType,
+            final Method method,
+            final SpecificationLoader specificationLoader) {
+        return new FacetedMethod(FeatureType.ACTION, declaringType, method, method.getReturnType(), getParameters(declaringType, method,
+                specificationLoader));
     }
 
-    private static List<FacetedMethodParameter> getParameters(final Class<?> declaringType, final Method actionMethod) {
+    private static List<FacetedMethodParameter> getParameters(
+            final Class<?> declaringType,
+            final Method actionMethod,
+            final SpecificationLoader specificationLoader) {
+
         final Class<?>[] parameterTypes = actionMethod.getParameterTypes();
+        final Type[] genericParameterTypes = actionMethod.getGenericParameterTypes();
         final List<FacetedMethodParameter> actionParams = Lists.newArrayList();
-        for (final Class<?> parameterType : parameterTypes) {
-            actionParams.add(new FacetedMethodParameter(declaringType, actionMethod, parameterType));
 
-            // this is based on similar logic to ActionAnnotationFacetFactory#processTypeOf
-            if (org.apache.isis.core.metamodel.specloader.CollectionUtils.isCollectionType(parameterType)) {
+        for (int paramNum = 0; paramNum < parameterTypes.length; paramNum++) {
+
+            final Class<?> parameterType = parameterTypes[paramNum];
+            final Type genericParameterType = genericParameterTypes[paramNum];
 
-            } else if (org.apache.isis.core.metamodel.specloader.CollectionUtils.isArrayType(parameterType)) {
+            final FacetedMethodParameter fmp = new FacetedMethodParameter(declaringType, actionMethod, parameterType);
+            actionParams.add(fmp);
 
-            } else {
-                continue;
+            // this is based on similar logic to ActionAnnotationFacetFactory#processTypeOf
+            TypeOfFacet typeOfFacet = specificationLoader.inferFromGenericParamType(fmp, parameterType, genericParameterType);
+
+            if(typeOfFacet == null ) {
+                if (org.apache.isis.core.metamodel.specloader.CollectionUtils.isArrayType(parameterType)) {
+                    typeOfFacet = specificationLoader.inferFromArrayType(fmp, parameterType);
+                }
             }
 
+            FacetUtil.addFacet(typeOfFacet);
+            continue;
+
         }
         return Collections.unmodifiableList(actionParams);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/b993efe4/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 4912ba6..fdb6fb3 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
@@ -418,37 +418,37 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract
             return;
         }
 
-        TypeOfFacet facet;
+        TypeOfFacet typeOfFacet = null;
 
         // check for deprecated @TypeOf
         final TypeOf annotation = Annotations.getAnnotation(method, TypeOf.class);
-        facet = typeOfValidator.flagIfPresent(
+        typeOfFacet = typeOfValidator.flagIfPresent(
                 TypeOfFacetOnActionForTypeOfAnnotation.create(annotation, getSpecificationLoader(), holder), processMethodContext);
 
         // check for @Action(typeOf=...)
-        if(facet == null) {
+        if(typeOfFacet == null) {
             final Action action = Annotations.getAnnotation(method, Action.class);
             if (action != null) {
                 final Class<?> typeOf = action.typeOf();
                 if(typeOf != null && typeOf != Object.class) {
-                    facet = new TypeOfFacetForActionAnnotation(typeOf, getSpecificationLoader(), holder);
+                    typeOfFacet = new TypeOfFacetForActionAnnotation(typeOf, getSpecificationLoader(), holder);
                 }
             }
         }
 
         // infer from return type
-        if(facet == null) {
+        if(typeOfFacet == null) {
             final Class<?> returnType = method.getReturnType();
-            facet = getSpecificationLoader().inferForArray(holder, returnType);
+            typeOfFacet = getSpecificationLoader().inferFromArrayType(holder, returnType);
         }
 
         // infer from generic return type
-        if(facet == null) {
+        if(typeOfFacet == null) {
             final Class<?> cls = processMethodContext.getCls();
-            facet = getSpecificationLoader().inferFromGenericReturnType(cls, method, holder);
+            typeOfFacet = getSpecificationLoader().inferFromGenericReturnType(cls, method, holder);
         }
 
-        FacetUtil.addFacet(facet);
+        FacetUtil.addFacet(typeOfFacet);
     }
 
     // ///////////////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/b993efe4/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
index caf059b..757ad2d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
@@ -45,7 +45,6 @@ import org.apache.isis.core.commons.lang.ClassUtil;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.FacetFactory;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
 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;
@@ -530,13 +529,44 @@ public class SpecificationLoader implements ApplicationScopedComponent {
 
     //endregion
 
-    //region > inferFromGenericReturnType
+    //region > inferFromGenericParamType, inferFromGenericReturnType, inferFromArrayType
+
+    @Programmatic
+    public TypeOfFacet inferFromGenericParamType(
+            final FacetHolder holder,
+            final Class<?> parameterType,
+            final Type genericParameterType) {
+
+        if(!CollectionUtils.isCollectionType(parameterType)) {
+            return null;
+        }
+
+        if(genericParameterType instanceof ParameterizedType) {
+            System.out.println(genericParameterType);
+            final ParameterizedType parameterizedType = (ParameterizedType) genericParameterType;
+            final Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
+            if(actualTypeArguments.length == 1) {
+                final Type actualTypeArgument = actualTypeArguments[0];
+                if(actualTypeArgument instanceof Class) {
+                    final Class<?> actualType = (Class<?>) actualTypeArgument;
+                    return new TypeOfFacetInferredFromGenerics(actualType, holder, this);
+                }
+            }
+        }
+        return null;
+    }
 
     @Programmatic
     public TypeOfFacet inferFromGenericReturnType(
             final Class<?> cls,
             final Method method,
             final FacetHolder holder) {
+
+        final Class<?> methodReturnType = method.getReturnType();
+        if (!CollectionUtils.isCollectionType(methodReturnType)) {
+            return null;
+        }
+
         final Type type = method.getGenericReturnType();
         if (!(type instanceof ParameterizedType)) {
             return null;
@@ -583,15 +613,19 @@ public class SpecificationLoader implements ApplicationScopedComponent {
     }
 
     @Programmatic
-    public TypeOfFacet inferForArray(
-            final FacetedMethod holder,
+    public TypeOfFacet inferFromArrayType(
+            final FacetHolder holder,
             final Class<?> type) {
+        if(!org.apache.isis.core.metamodel.specloader.CollectionUtils.isArrayType(type)) {
+            return null;
+        }
         if (type.isArray()) {
             final Class<?> componentType = type.getComponentType();
             return new TypeOfFacetInferredFromArray(componentType, holder, this);
         }
         return null;
     }
+
     //endregion
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/b993efe4/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 805ee62..4c513d8 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
@@ -483,7 +483,7 @@ public class FacetedMethodsBuilder {
             return null;
         }
 
-        final FacetedMethod action = FacetedMethod.createForAction(introspectedClass, actionMethod);
+        final FacetedMethod action = FacetedMethod.createForAction(introspectedClass, actionMethod, getSpecificationLoader());
 
         // process facets on the action & parameters
         getFacetProcessor().process(introspectedClass, actionMethod, methodRemover, action, FeatureType.ACTION, metadataProperties);

http://git-wip-us.apache.org/repos/asf/isis/blob/b993efe4/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
index a4df50a..61b9a3a 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
@@ -606,7 +606,8 @@ public class ActionMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
         final Method default0Method = findMethod(Customer.class, "default0SomeAction", new Class[] {});
         final Method default1Method = findMethod(Customer.class, "default1SomeAction", new Class[]{});
 
-        final FacetedMethod facetHolderWithParms = FacetedMethod.createForAction(Customer.class, actionMethod);
+        final FacetedMethod facetHolderWithParms = FacetedMethod.createForAction(Customer.class, actionMethod,
+                mockSpecificationLoader);
 
         facetFactory.process(new ProcessMethodContext(Customer.class, null, null, actionMethod, methodRemover, facetHolderWithParms));
 
@@ -662,7 +663,8 @@ public class ActionMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
         final Method choices1Method = findMethod(Customer.class, "choices1SomeAction", new Class[] {});
         final Method choices2Method = findMethod(Customer.class, "choices2SomeAction", new Class[] {});
         
-        final FacetedMethod facetHolderWithParms = FacetedMethod.createForAction(Customer.class, actionMethod);
+        final FacetedMethod facetHolderWithParms = FacetedMethod.createForAction(Customer.class, actionMethod,
+                mockSpecificationLoader);
 
         facetFactory.process(new ProcessMethodContext(Customer.class, null, null, actionMethod, methodRemover, facetHolderWithParms));
 
@@ -715,7 +717,8 @@ public class ActionMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
         final Method actionMethod = findMethod(Customer.class, "someAction", new Class[] { int.class, long.class });
         final Method autoComplete0Method = findMethod(Customer.class, "autoComplete0SomeAction", new Class[] {String.class});
 
-        final FacetedMethod facetHolderWithParms = FacetedMethod.createForAction(Customer.class, actionMethod);
+        final FacetedMethod facetHolderWithParms = FacetedMethod.createForAction(Customer.class, actionMethod,
+                mockSpecificationLoader);
 
         facetFactory.process(new ProcessMethodContext(Customer.class, null, null, actionMethod, methodRemover, facetHolderWithParms));
 
@@ -764,7 +767,8 @@ public class ActionMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
         }
 
         final Method actionMethod = findMethod(Customer.class, "someAction", new Class[] { int.class, long.class });
-        final FacetedMethod facetHolderWithParms = FacetedMethod.createForAction(Customer.class, actionMethod);
+        final FacetedMethod facetHolderWithParms = FacetedMethod.createForAction(Customer.class, actionMethod,
+                mockSpecificationLoader);
 
         final ProcessMethodContext processMethodContext = new ProcessMethodContext(Customer.class, null, null, actionMethod, methodRemover, facetHolderWithParms);
         facetFactory.process(processMethodContext);
@@ -813,7 +817,8 @@ public class ActionMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
         }
 
         final Method actionMethod = findMethod(Customer.class, "someAction", new Class[] { int.class, long.class });
-        final FacetedMethod facetHolderWithParms = FacetedMethod.createForAction(Customer.class, actionMethod);
+        final FacetedMethod facetHolderWithParms = FacetedMethod.createForAction(Customer.class, actionMethod,
+                mockSpecificationLoader);
 
         final ProcessMethodContext processMethodContext = new ProcessMethodContext(Customer.class, null, null, actionMethod, methodRemover, facetHolderWithParms);
         facetFactory.process(processMethodContext);

http://git-wip-us.apache.org/repos/asf/isis/blob/b993efe4/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_actionInvocation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_actionInvocation.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_actionInvocation.java
index 7965f99..9b17f0f 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_actionInvocation.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_actionInvocation.java
@@ -45,7 +45,7 @@ public class ActionAnnotationFacetFactoryTest_actionInvocation extends AbstractF
 
     public void setUp() throws Exception {
         super.setUp();
-        this.facetFactory =  new ActionAnnotationFacetFactory();;
+        this.facetFactory =  new ActionAnnotationFacetFactory();
 
         facetFactory.setServicesInjector(stubServicesInjector);
 
@@ -144,7 +144,8 @@ public class ActionAnnotationFacetFactoryTest_actionInvocation extends AbstractF
 
         final Method actionMethod = findMethod(CustomerEx.class, "someAction", new Class[] { int.class, long.class });
 
-        final FacetedMethod facetHolderWithParms = FacetedMethod.createForAction(CustomerEx.class, actionMethod);
+        final FacetedMethod facetHolderWithParms = FacetedMethod.createForAction(CustomerEx.class, actionMethod,
+                mockSpecificationLoader);
 
         facetFactory.processInvocation(new ProcessMethodContext(CustomerEx.class, null, null, actionMethod, methodRemover, facetHolderWithParms));
 
@@ -200,7 +201,8 @@ public class ActionAnnotationFacetFactoryTest_actionInvocation extends AbstractF
         final Method choices1Method = findMethod(CustomerEx.class, "choices1SomeAction", new Class[] {});
         final Method disableMethod = findMethod(CustomerEx.class, "disableSomeAction", new Class[] { int.class, long.class });
 
-        final FacetedMethod facetHolderWithParms = FacetedMethod.createForAction(CustomerEx.class, actionMethod);
+        final FacetedMethod facetHolderWithParms = FacetedMethod.createForAction(CustomerEx.class, actionMethod,
+                mockSpecificationLoader);
 
         final ProcessMethodContext processMethodContext = new ProcessMethodContext(CustomerEx.class, null, null, actionMethod, methodRemover, facetHolderWithParms);
         facetFactory.processInvocation(processMethodContext);

http://git-wip-us.apache.org/repos/asf/isis/blob/b993efe4/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryJunit4Test.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryJunit4Test.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryJunit4Test.java
index d7860a2..07e3ba4 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryJunit4Test.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryJunit4Test.java
@@ -78,7 +78,7 @@ public class ActionLayoutAnnotationFacetFactoryJunit4Test extends AbstractFacetF
 
             expectNoMethodsRemoved();
 
-            facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name");
+            facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name", mockSpecificationLoader);
 
             // when
             facetFactory.process(new FacetFactory.ProcessMethodContext(CustomerService.class, null, null, facetedMethod.getMethod(), mockMethodRemover, facetedMethod));
@@ -112,7 +112,7 @@ public class ActionLayoutAnnotationFacetFactoryJunit4Test extends AbstractFacetF
 
             expectNoMethodsRemoved();
 
-            facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name");
+            facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name", mockSpecificationLoader);
 
             // when
             facetFactory.process(new FacetFactory.ProcessMethodContext(CustomerService.class, null, null, facetedMethod.getMethod(), mockMethodRemover, facetedMethod));
@@ -147,7 +147,7 @@ public class ActionLayoutAnnotationFacetFactoryJunit4Test extends AbstractFacetF
 
             expectNoMethodsRemoved();
 
-            facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name");
+            facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name", mockSpecificationLoader);
 
             // when
             facetFactory.process(new FacetFactory.ProcessMethodContext(CustomerService.class, null, null, facetedMethod.getMethod(), mockMethodRemover, facetedMethod));
@@ -185,7 +185,7 @@ public class ActionLayoutAnnotationFacetFactoryJunit4Test extends AbstractFacetF
 
             expectNoMethodsRemoved();
 
-            facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name");
+            facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name", mockSpecificationLoader);
 
             // when
             facetFactory.process(new FacetFactory.ProcessMethodContext(CustomerService.class, null, null, facetedMethod.getMethod(), mockMethodRemover, facetedMethod));
@@ -221,7 +221,7 @@ public class ActionLayoutAnnotationFacetFactoryJunit4Test extends AbstractFacetF
 
             expectNoMethodsRemoved();
 
-            facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name");
+            facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name", mockSpecificationLoader);
 
             // when
             facetFactory.process(new FacetFactory.ProcessMethodContext(CustomerService.class, null, null, facetedMethod.getMethod(), mockMethodRemover, facetedMethod));
@@ -258,7 +258,7 @@ public class ActionLayoutAnnotationFacetFactoryJunit4Test extends AbstractFacetF
 
             expectNoMethodsRemoved();
 
-            facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name");
+            facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name", mockSpecificationLoader);
 
             // when
             facetFactory.process(new FacetFactory.ProcessMethodContext(CustomerService.class, null, null, facetedMethod.getMethod(), mockMethodRemover, facetedMethod));
@@ -299,7 +299,7 @@ public class ActionLayoutAnnotationFacetFactoryJunit4Test extends AbstractFacetF
 
             expectNoMethodsRemoved();
 
-            facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name");
+            facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name", mockSpecificationLoader);
 
             // when
             facetFactory.process(new FacetFactory.ProcessMethodContext(CustomerService.class, null, null, facetedMethod.getMethod(), mockMethodRemover, facetedMethod));
@@ -337,7 +337,7 @@ public class ActionLayoutAnnotationFacetFactoryJunit4Test extends AbstractFacetF
 
             expectNoMethodsRemoved();
 
-            facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name");
+            facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name", mockSpecificationLoader);
 
             // when
             facetFactory.process(new FacetFactory.ProcessMethodContext(CustomerService.class, null, null, facetedMethod.getMethod(), mockMethodRemover, facetedMethod));
@@ -374,7 +374,7 @@ public class ActionLayoutAnnotationFacetFactoryJunit4Test extends AbstractFacetF
 
             expectNoMethodsRemoved();
 
-            facetedMethod = FacetedMethod.createForAction(Customer.class, "name");
+            facetedMethod = FacetedMethod.createForAction(Customer.class, "name", mockSpecificationLoader);
 
             // when
             facetFactory.process(new FacetFactory.ProcessMethodContext(Customer.class, null, null, facetedMethod.getMethod(), mockMethodRemover, facetedMethod));

http://git-wip-us.apache.org/repos/asf/isis/blob/b993efe4/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromDomainServiceFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromDomainServiceFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromDomainServiceFacetFactoryTest.java
index 8a7bd45..0ab88ba 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromDomainServiceFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromDomainServiceFacetFactoryTest.java
@@ -70,7 +70,7 @@ public class NotContributedFacetDerivedFromDomainServiceFacetFactoryTest extends
 
         expectNoMethodsRemoved();
 
-        facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name");
+        facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name", mockSpecificationLoader);
 
         // when
         facetFactory.process(new FacetFactory.ProcessMethodContext(CustomerService.class, null, null, facetedMethod.getMethod(), mockMethodRemover, facetedMethod));
@@ -106,7 +106,7 @@ public class NotContributedFacetDerivedFromDomainServiceFacetFactoryTest extends
 
         expectNoMethodsRemoved();
 
-        facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name");
+        facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name", mockSpecificationLoader);
 
         // when
         facetFactory.process(new FacetFactory.ProcessMethodContext(CustomerService.class, null, null, facetedMethod.getMethod(), mockMethodRemover, facetedMethod));
@@ -142,7 +142,7 @@ public class NotContributedFacetDerivedFromDomainServiceFacetFactoryTest extends
 
         expectNoMethodsRemoved();
 
-        facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name");
+        facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name", mockSpecificationLoader);
 
         // when
         facetFactory.process(new FacetFactory.ProcessMethodContext(CustomerService.class, null, null, facetedMethod.getMethod(), mockMethodRemover, facetedMethod));
@@ -175,7 +175,7 @@ public class NotContributedFacetDerivedFromDomainServiceFacetFactoryTest extends
 
         expectNoMethodsRemoved();
 
-        facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name");
+        facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name", mockSpecificationLoader);
 
         // when
         facetFactory.process(new FacetFactory.ProcessMethodContext(CustomerService.class, null, null, facetedMethod.getMethod(), mockMethodRemover, facetedMethod));
@@ -206,7 +206,7 @@ public class NotContributedFacetDerivedFromDomainServiceFacetFactoryTest extends
 
         expectNoMethodsRemoved();
 
-        facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name");
+        facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name", mockSpecificationLoader);
 
         // when
         facetFactory.process(new FacetFactory.ProcessMethodContext(CustomerService.class, null, null, facetedMethod.getMethod(), mockMethodRemover, facetedMethod));

http://git-wip-us.apache.org/repos/asf/isis/blob/b993efe4/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetDerivedFromDomainServiceFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetDerivedFromDomainServiceFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetDerivedFromDomainServiceFacetFactoryTest.java
index 0036429..cc504a9 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetDerivedFromDomainServiceFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetDerivedFromDomainServiceFacetFactoryTest.java
@@ -70,7 +70,7 @@ public class NotInServiceMenuFacetDerivedFromDomainServiceFacetFactoryTest exten
 
         expectNoMethodsRemoved();
 
-        facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name");
+        facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name", mockSpecificationLoader);
 
         // when
         facetFactory.process(new FacetFactory.ProcessMethodContext(CustomerService.class, null, null, facetedMethod.getMethod(), mockMethodRemover, facetedMethod));
@@ -106,7 +106,7 @@ public class NotInServiceMenuFacetDerivedFromDomainServiceFacetFactoryTest exten
 
         expectNoMethodsRemoved();
 
-        facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name");
+        facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name", mockSpecificationLoader);
 
         // when
         facetFactory.process(new FacetFactory.ProcessMethodContext(CustomerService.class, null, null, facetedMethod.getMethod(), mockMethodRemover, facetedMethod));
@@ -142,7 +142,7 @@ public class NotInServiceMenuFacetDerivedFromDomainServiceFacetFactoryTest exten
 
         expectNoMethodsRemoved();
 
-        facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name");
+        facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name", mockSpecificationLoader);
 
         // when
         facetFactory.process(new FacetFactory.ProcessMethodContext(CustomerService.class, null, null, facetedMethod.getMethod(), mockMethodRemover, facetedMethod));
@@ -175,7 +175,7 @@ public class NotInServiceMenuFacetDerivedFromDomainServiceFacetFactoryTest exten
 
         expectNoMethodsRemoved();
 
-        facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name");
+        facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name", mockSpecificationLoader);
 
         // when
         facetFactory.process(new FacetFactory.ProcessMethodContext(CustomerService.class, null, null, facetedMethod.getMethod(), mockMethodRemover, facetedMethod));
@@ -206,7 +206,7 @@ public class NotInServiceMenuFacetDerivedFromDomainServiceFacetFactoryTest exten
 
         expectNoMethodsRemoved();
 
-        facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name");
+        facetedMethod = FacetedMethod.createForAction(CustomerService.class, "name", mockSpecificationLoader);
 
         // when
         facetFactory.process(new FacetFactory.ProcessMethodContext(CustomerService.class, null, null, facetedMethod.getMethod(), mockMethodRemover, facetedMethod));