You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/09/14 06:31:35 UTC

[isis] branch ISIS-1976-rethink-object-adapters updated (00e9e00 -> d1e9015)

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a change to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git.


    from 00e9e00  ISIS-1976: removing guava Function idioms from MM
     new b12274e  ISIS-1976: refactor invocation utilities to use Instance instead of OA
     new d1e9015  ISIS-1976: further removing OAs where not required

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../isis/commons/internal/base/_NullSafe.java      |   5 +-
 .../_Comparators.java => base/_Tuples.java}        |  46 ++++----
 .../apache/isis/core/commons/lang/MethodUtil.java  |   7 +-
 .../isis/core/metamodel/adapter/ObjectAdapter.java | 119 +++++++++++----------
 .../core/metamodel/facets/ImperativeFacet.java     |   2 +-
 .../invocation/ActionDomainEventFacetAbstract.java |  29 +++--
 .../method/DisableForContextFacetViaMethod.java    |   4 +-
 .../method/HideForContextFacetViaMethod.java       |   4 +-
 .../facets/object/callbacks/CallbackFacet.java     |   6 +-
 .../object/callbacks/CallbackFacetAbstract.java    |   7 +-
 .../callbacks/CreatedCallbackFacetViaMethod.java   |   3 +-
 .../callbacks/LoadedCallbackFacetViaMethod.java    |   3 +-
 .../callbacks/LoadingCallbackFacetViaMethod.java   |   3 +-
 .../callbacks/PersistedCallbackFacetViaMethod.java |   3 +-
 .../PersistingCallbackFacetViaMethod.java          |   3 +-
 .../callbacks/RemovedCallbackFacetViaMethod.java   |   3 +-
 .../callbacks/RemovingCallbackFacetViaMethod.java  |   3 +-
 .../callbacks/UpdatedCallbackFacetViaMethod.java   |   3 +-
 .../callbacks/UpdatingCallbackFacetViaMethod.java  |  11 +-
 .../method/ActionChoicesFacetViaMethod.java        |   4 +-
 .../ActionParameterChoicesFacetViaMethod.java      |   2 +-
 .../ActionParameterDefaultsFacetViaMethod.java     |   4 +-
 .../metamodel/interactions/InteractionContext.java |  14 +--
 .../grid/bootstrap3/GridSystemServiceBS3.java      |   6 +-
 .../apache/isis/core/metamodel/spec/Instance.java  |  35 ++++++
 .../system/persistence/PersistenceSession4.java    |  21 ++--
 .../system/persistence/PersistenceSession5.java    |  24 ++---
 .../adaptermanager/ObjectAdapterContext.java       |  32 +++---
 ...ObjectAdapterContext_LifecycleEventSupport.java |   3 +-
 ...ObjectAdapterContext_ObjectAdapterProvider.java |   4 +-
 .../viewer/wicket/model/models/ScalarModel.java    |   2 +-
 31 files changed, 222 insertions(+), 193 deletions(-)
 copy core/commons/src/main/java/org/apache/isis/commons/internal/{compare/_Comparators.java => base/_Tuples.java} (60%)


[isis] 01/02: ISIS-1976: refactor invocation utilities to use Instance instead of OA

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit b12274efcbbe62444d72e19a3cc7c932a738352a
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Sep 14 06:39:59 2018 +0200

    ISIS-1976: refactor invocation utilities to use Instance instead of OA
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../isis/commons/internal/base/_NullSafe.java      |   5 +-
 .../apache/isis/commons/internal/base/_Tuples.java |  61 ++++++++++
 .../apache/isis/core/commons/lang/MethodUtil.java  |   7 +-
 .../isis/core/metamodel/adapter/ObjectAdapter.java | 131 ++++++++++++---------
 .../core/metamodel/facets/ImperativeFacet.java     |   2 +-
 .../invocation/ActionDomainEventFacetAbstract.java |  29 +++--
 .../method/DisableForContextFacetViaMethod.java    |   4 +-
 .../method/HideForContextFacetViaMethod.java       |   4 +-
 .../facets/object/callbacks/CallbackFacet.java     |   6 +-
 .../object/callbacks/CallbackFacetAbstract.java    |   7 +-
 .../callbacks/CreatedCallbackFacetViaMethod.java   |   3 +-
 .../callbacks/LoadedCallbackFacetViaMethod.java    |   3 +-
 .../callbacks/LoadingCallbackFacetViaMethod.java   |   3 +-
 .../callbacks/PersistedCallbackFacetViaMethod.java |   3 +-
 .../PersistingCallbackFacetViaMethod.java          |   3 +-
 .../callbacks/RemovedCallbackFacetViaMethod.java   |   3 +-
 .../callbacks/RemovingCallbackFacetViaMethod.java  |   3 +-
 .../callbacks/UpdatedCallbackFacetViaMethod.java   |   3 +-
 .../callbacks/UpdatingCallbackFacetViaMethod.java  |  11 +-
 .../method/ActionChoicesFacetViaMethod.java        |   4 +-
 .../ActionParameterChoicesFacetViaMethod.java      |   2 +-
 .../ActionParameterDefaultsFacetViaMethod.java     |   4 +-
 .../metamodel/interactions/InteractionContext.java |  14 +--
 .../grid/bootstrap3/GridSystemServiceBS3.java      |   6 +-
 .../system/persistence/PersistenceSession4.java    |   4 +-
 .../system/persistence/PersistenceSession5.java    |   5 +-
 .../adaptermanager/ObjectAdapterContext.java       |  29 ++---
 ...ObjectAdapterContext_ObjectAdapterProvider.java |   4 +-
 .../viewer/wicket/model/models/ScalarModel.java    |   2 +-
 29 files changed, 218 insertions(+), 147 deletions(-)

diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_NullSafe.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_NullSafe.java
index e28d83f..8d77315 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_NullSafe.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_NullSafe.java
@@ -63,14 +63,11 @@ public final class _NullSafe {
     /**
      * If {@code nullable} is {@code null} returns the empty stream,
      * otherwise returns a Stream containing the single element {@code nullable}.
-     * <p>
-     * Note: this method signature only matches if none of the other stream(?) methods match.
-     * </p>
      * 
      * @param nullable
      * @return non-null stream object
      */
-    public static <T> Stream<T> stream(final T nullable) {
+    public static <T> Stream<T> streamNullable(final T nullable) {
         return nullable != null ? Stream.of(nullable) : Stream.empty();
     }
 
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Tuples.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Tuples.java
new file mode 100644
index 0000000..6ae5d06
--- /dev/null
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Tuples.java
@@ -0,0 +1,61 @@
+/*
+ *  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.commons.internal.base;
+
+/**
+ * <h1>- internal use only -</h1>
+ * <p>
+ *      Provides Tuples of arity 2,
+ * </p>
+ * <p>
+ * <b>WARNING</b>: Do <b>NOT</b> use any of the classes provided by this package! <br/>
+ * These may be changed or removed without notice!
+ * </p>
+ *
+ * @since 2.0.0
+ */
+public final class _Tuples {
+
+    private _Tuples(){}
+    
+    public static class Tuple2<T1, T2>{
+        private final T1 _1;
+        private final T2 _2;
+        
+        private Tuple2(T1 _1, T2 _2) {
+            this._1 = _1;
+            this._2 = _2;
+        }
+        
+        /**
+         * @return first element of this tuple
+         */
+        public T1 get_1() { return _1; }
+        /**
+         * @return second element of this tuple
+         */
+        public T2 get_2() { return _2; }
+    }
+    
+    public static <T1, T2> Tuple2<T1, T2> pair(T1 _1, T2 _2) {
+        return new Tuple2<T1, T2>(_1, _2);
+    }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/MethodUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/MethodUtil.java
index 22022dd..b24cae9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/MethodUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/MethodUtil.java
@@ -22,6 +22,7 @@ package org.apache.isis.core.commons.lang;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
 import org.apache.isis.core.metamodel.methodutils.MethodScope;
@@ -30,10 +31,8 @@ public class MethodUtil {
 
     private MethodUtil(){}
 
-    public static void invoke(final List<Method> methods, final Object object) {
-        for (final Method method : methods) {
-            MethodExtensions.invoke(method, object);
-        }
+    public static void invoke(final Collection<Method> methods, final Object object) {
+        methods.forEach(method->MethodExtensions.invoke(method, object));
     }
 
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
index 52595a8..d005984 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
@@ -20,11 +20,13 @@
 package org.apache.isis.core.metamodel.adapter;
 
 import java.lang.reflect.Method;
+import java.util.Collection;
 import java.util.List;
-import java.util.Map;
 import java.util.function.Function;
+import java.util.stream.Stream;
 
 import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.commons.internal.base._Tuples.Tuple2;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.commons.lang.ClassExtensions;
 import org.apache.isis.core.commons.lang.ListExtensions;
@@ -193,32 +195,32 @@ public interface ObjectAdapter extends Instance {
 
         private Util() {}
 
-        public static Object unwrap(final ObjectAdapter adapter) {
+        public static Object unwrap(final Instance adapter) {
             return adapter != null ? adapter.getObject() : null;
         }
 
-        public static Object[] unwrap(final ObjectAdapter[] adapters) {
+        public static Object[] unwrap(final Instance[] adapters) {
             if (adapters == null) {
                 return null;
             }
             final Object[] unwrappedObjects = new Object[adapters.length];
             int i = 0;
-            for (final ObjectAdapter adapter : adapters) {
+            for (final Instance adapter : adapters) {
                 unwrappedObjects[i++] = unwrap(adapter);
             }
             return unwrappedObjects;
         }
 
-        public static List<Object> unwrap(final List<ObjectAdapter> adapters) {
+        public static List<Object> unwrap(final List<? extends Instance> adapters) {
             List<Object> objects = _Lists.newArrayList();
-            for (ObjectAdapter adapter : adapters) {
+            for (Instance adapter : adapters) {
                 objects.add(unwrap(adapter));
             }
             return objects;
         }
 
         @SuppressWarnings("unchecked")
-        public static <T> List<T> unwrapT(final List<ObjectAdapter> adapters) {
+        public static <T> List<T> unwrapT(final List<? extends Instance> adapters) {
             return (List<T>) unwrap(adapters);
         }
 
@@ -355,38 +357,39 @@ public interface ObjectAdapter extends Instance {
         private InvokeUtils() {
         }
 
-        public static void invokeAll(final List<Method> methods, final ObjectAdapter adapter) {
+        public static void invokeAll(final Collection<Method> methods, final Instance adapter) {
             MethodUtil.invoke(methods, Util.unwrap(adapter));
         }
 
-        public static Object invoke(final Method method, final ObjectAdapter adapter) {
+        public static Object invoke(final Method method, final Instance adapter) {
             return MethodExtensions.invoke(method, Util.unwrap(adapter));
         }
 
-        public static Object invoke(final Method method, final ObjectAdapter adapter, final Object arg0) {
+        public static Object invoke(final Method method, final Instance adapter, final Object arg0) {
             return MethodExtensions.invoke(method, Util.unwrap(adapter), new Object[] {arg0});
         }
 
-        public static Object invoke(final Method method, final ObjectAdapter adapter, final ObjectAdapter arg0Adapter) {
+        public static Object invoke(final Method method, final Instance adapter, final Instance arg0Adapter) {
             return invoke(method, adapter, Util.unwrap(arg0Adapter));
         }
 
-        public static Object invoke(final Method method, final ObjectAdapter adapter, final ObjectAdapter[] argumentAdapters) {
+        public static Object invoke(final Method method, final Instance adapter, final Instance[] argumentAdapters) {
             return MethodExtensions.invoke(method, Util.unwrap(adapter), Util.unwrap(argumentAdapters));
         }
 
-        public static Object invoke(final Method method, final ObjectAdapter adapter, final Map<Integer, ObjectAdapter> argumentAdapters) {
-            return invoke(method, adapter, asArray(argumentAdapters, method.getParameterTypes().length));
+        public static Object invokeC(final Method method, final Instance adapter, 
+                final Stream<Tuple2<Integer, ? extends Instance>> paramsAndIndexes) {
+            return invoke(method, adapter, asArray(paramsAndIndexes, method.getParameterTypes().length));
         }
 
-        private static ObjectAdapter[] asArray(Map<Integer, ObjectAdapter> argumentAdapters, int length) {
-            ObjectAdapter[] args = new ObjectAdapter[length];
-            for (final Map.Entry<Integer, ObjectAdapter> entry : argumentAdapters.entrySet()) {
-                final Integer paramNum = entry.getKey();
+        private static Instance[] asArray(final Stream<Tuple2<Integer, ? extends Instance>> paramsAndIndexes, int length) {
+            final Instance[] args = new Instance[length];
+            paramsAndIndexes.forEach(entry->{
+                final Integer paramNum = entry.get_1();
                 if(paramNum < length) {
-                    args[paramNum] = entry.getValue();
+                    args[paramNum] = entry.get_2();
                 }
-            }
+            });
             return args;
         }
 
@@ -402,23 +405,23 @@ public interface ObjectAdapter extends Instance {
          */
         public static Object invokeAutofit(
                 final Method method, 
-                final ObjectAdapter target, 
-                List<ObjectAdapter> argumentsIfAvailable, 
-                final ObjectAdapterProvider adapterProvider) {
+                final Instance target, 
+                List<? extends Instance> argumentsIfAvailable/*, 
+                final SpecificationLoader specLoader*/) {
             
-            final List<ObjectAdapter> args = _Lists.newArrayList();
+            final List<Instance> args = _Lists.newArrayList();
             if(argumentsIfAvailable != null) {
                 args.addAll(argumentsIfAvailable);
             }
 
-            adjust(method, args, adapterProvider);
+            adjust(method, args/*, specLoader*/);
 
-            final ObjectAdapter[] argArray = args.toArray(new ObjectAdapter[]{});
+            final Instance[] argArray = args.toArray(new Instance[]{});
             return invoke(method, target, argArray);
         }
 
         private static void adjust(
-                final Method method, final List<ObjectAdapter> args, final ObjectAdapterProvider adapterProvider) {
+                final Method method, final List<Instance> args /*, final SpecificationLoader specLoader*/) {
             
             final Class<?>[] parameterTypes = method.getParameterTypes();
             ListExtensions.adjust(args, parameterTypes.length);
@@ -427,42 +430,54 @@ public interface ObjectAdapter extends Instance {
                 final Class<?> cls = parameterTypes[i];
                 if(args.get(i) == null && cls.isPrimitive()) {
                     final Object object = ClassExtensions.toDefault(cls);
-                    final ObjectAdapter adapter = adapterProvider.adapterFor(object);
+                    
+                    final Instance adapter = new Instance() {
+                        
+                        @Override
+                        public Specification getSpecification() {
+                            return null; // not needed for primitives
+                        }
+                        
+                        @Override
+                        public Object getObject() {
+                            return object;
+                        }
+                    }; 
+                            
                     args.set(i, adapter);
                 }
             }
         }
 
-        /**
-         * Invokes the method, adjusting arguments as required.
-         *
-         * <p>
-         * That is:
-         * <ul>
-         * <li>if the method declares parameters but no arguments are provided, then will provide 'null' defaults for these.
-         * <li>if the method does not declare parameters but arguments were provided, then will ignore those argumens.
-         * </ul>
-         */
-        @SuppressWarnings("unused")
-        private static Object invokeWithDefaults(final Method method, final ObjectAdapter adapter, final ObjectAdapter[] argumentAdapters) {
-            final int numParams = method.getParameterTypes().length;
-            ObjectAdapter[] adapters;
-
-            if(argumentAdapters == null || argumentAdapters.length == 0) {
-                adapters = new ObjectAdapter[numParams];
-            } else if(numParams == 0) {
-                // ignore any arguments, even if they were supplied.
-                // eg used by contributee actions, but
-                // underlying service 'default' action declares no params
-                adapters = new ObjectAdapter[0];
-            } else if(argumentAdapters.length == numParams){
-                adapters = argumentAdapters;
-            } else {
-                throw new IllegalArgumentException("Method has " + numParams + " params but " + argumentAdapters.length + " arguments provided");
-            }
-
-            return invoke(method, adapter, adapters);
-        }
+//        /**
+//         * Invokes the method, adjusting arguments as required.
+//         *
+//         * <p>
+//         * That is:
+//         * <ul>
+//         * <li>if the method declares parameters but no arguments are provided, then will provide 'null' defaults for these.
+//         * <li>if the method does not declare parameters but arguments were provided, then will ignore those arguments.
+//         * </ul>
+//         */
+//        private static Object invokeWithDefaults(final Method method, final Instance adapter, final Instance[] argumentAdapters) {
+//            final int numParams = method.getParameterTypes().length;
+//            Instance[] adapters;
+//
+//            if(argumentAdapters == null || argumentAdapters.length == 0) {
+//                adapters = new Instance[numParams];
+//            } else if(numParams == 0) {
+//                // ignore any arguments, even if they were supplied.
+//                // eg used by contributee actions, but
+//                // underlying service 'default' action declares no params
+//                adapters = new Instance[0];
+//            } else if(argumentAdapters.length == numParams){
+//                adapters = argumentAdapters;
+//            } else {
+//                throw new IllegalArgumentException("Method has " + numParams + " params but " + argumentAdapters.length + " arguments provided");
+//            }
+//
+//            return invoke(method, adapter, adapters);
+//        }
     }
 
     public static class Functions {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ImperativeFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ImperativeFacet.java
index 8e95bd0..acfbf08 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ImperativeFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ImperativeFacet.java
@@ -70,7 +70,7 @@ public interface ImperativeFacet extends Facet {
      * </pre>
      */
     public List<Method> getMethods();
-
+    
     public static enum Intent {
         CHECK_IF_HIDDEN,
         CHECK_IF_DISABLED,
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java
index cbb857f..b0a1b48 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java
@@ -19,16 +19,16 @@
 
 package org.apache.isis.core.metamodel.facets.actions.action.invocation;
 
-import java.util.Map;
-
-import org.apache.isis.applib.services.wrapper.events.InteractionEvent;
-import org.apache.isis.applib.services.wrapper.events.UsabilityEvent;
-import org.apache.isis.applib.services.wrapper.events.ValidityEvent;
-import org.apache.isis.applib.services.wrapper.events.VisibilityEvent;
 import org.apache.isis.applib.events.domain.AbstractDomainEvent;
 import org.apache.isis.applib.events.domain.ActionDomainEvent;
 import org.apache.isis.applib.services.i18n.TranslatableString;
 import org.apache.isis.applib.services.i18n.TranslationService;
+import org.apache.isis.applib.services.wrapper.events.InteractionEvent;
+import org.apache.isis.applib.services.wrapper.events.UsabilityEvent;
+import org.apache.isis.applib.services.wrapper.events.ValidityEvent;
+import org.apache.isis.applib.services.wrapper.events.VisibilityEvent;
+import org.apache.isis.commons.internal.base._Casts;
+import org.apache.isis.commons.internal.base._Tuples.Tuple2;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -42,8 +42,8 @@ import org.apache.isis.core.metamodel.interactions.UsabilityContext;
 import org.apache.isis.core.metamodel.interactions.ValidityContext;
 import org.apache.isis.core.metamodel.interactions.VisibilityContext;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 
 public abstract class ActionDomainEventFacetAbstract
 extends SingleClassValueFacetAbstract implements ActionDomainEventFacet {
@@ -120,8 +120,15 @@ extends SingleClassValueFacetAbstract implements ActionDomainEventFacet {
     }
 
     private static ObjectAdapter[] argumentAdaptersFrom(final InteractionContext<? extends InteractionEvent> ic) {
-        final Map<Integer, ObjectAdapter> contributeeAsMap = ic.getContributeeAsMap();
-        return contributeeAsMap.isEmpty() ? null : new ObjectAdapter[]{contributeeAsMap.get(0)};
+        final Tuple2<Integer, ObjectAdapter> contributee = ic.getContributeeWithParamIndex();
+        
+        if(contributee!=null) {
+            int paramIndex = contributee.get_1(); 
+            ObjectAdapter adapter = contributee.get_2();
+            return new ObjectAdapter[]{paramIndex==0 ? adapter : null};
+        }
+        
+        return null;
     }
 
     @Override
@@ -147,13 +154,13 @@ extends SingleClassValueFacetAbstract implements ActionDomainEventFacet {
         return null;
     }
 
-    protected Class eventType() {
+    protected Class<?> eventType() {
         return value();
     }
 
     public Class<? extends ActionDomainEvent<?>> getEventType() {
         //noinspection unchecked
-        return eventType();
+        return _Casts.uncheckedCast(eventType());
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java
index 8a5f15d..2971217 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java
@@ -24,6 +24,7 @@ import java.util.Collections;
 import java.util.List;
 
 import org.apache.isis.applib.services.wrapper.events.UsabilityEvent;
+import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.applib.services.i18n.TranslatableString;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -70,7 +71,8 @@ public class DisableForContextFacetViaMethod extends DisableForContextFacetAbstr
         if (target == null) {
             return null;
         }
-        final Object returnValue = ObjectAdapter.InvokeUtils.invoke(method, target, ic.getContributeeAsMap());
+        final Object returnValue = ObjectAdapter.InvokeUtils.invokeC(method, target, 
+                _NullSafe.streamNullable(ic.getContributeeWithParamIndex()));
         if(returnValue instanceof String) {
             return (String) returnValue;
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethod.java
index b77eb3c..2d4dfe9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethod.java
@@ -24,6 +24,7 @@ import java.util.Collections;
 import java.util.List;
 
 import org.apache.isis.applib.services.wrapper.events.VisibilityEvent;
+import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
@@ -58,7 +59,8 @@ public class HideForContextFacetViaMethod extends HideForContextFacetAbstract im
         if (target == null) {
             return null;
         }
-        final Boolean isHidden = (Boolean) ObjectAdapter.InvokeUtils.invoke(method, target, ic.getContributeeAsMap());
+        final Boolean isHidden = (Boolean) ObjectAdapter.InvokeUtils.invokeC(method, target, 
+                _NullSafe.streamNullable(ic.getContributeeWithParamIndex()));
         return isHidden.booleanValue() ? "Hidden" : null;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CallbackFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CallbackFacet.java
index faeb3af..c859390 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CallbackFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CallbackFacet.java
@@ -19,10 +19,10 @@
 
 package org.apache.isis.core.metamodel.facets.object.callbacks;
 
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.ImperativeFacetMulti;
 import org.apache.isis.core.metamodel.spec.DomainModelException;
+import org.apache.isis.core.metamodel.spec.Instance;
 
 /**
  * A {@link Facet} that represents some type of lifecycle callback on the object
@@ -30,14 +30,14 @@ import org.apache.isis.core.metamodel.spec.DomainModelException;
  */
 public interface CallbackFacet extends Facet, ImperativeFacetMulti {
 
-    public void invoke(ObjectAdapter object);
+    public void invoke(Instance object);
 
     public static final class Util {
 
         private Util() {
         }
 
-        public static void callCallback(final ObjectAdapter object, final Class<? extends Facet> cls) {
+        public static void callCallback(final Instance object, final Class<? extends Facet> cls) {
             final CallbackFacet facet = (CallbackFacet) object.getSpecification().getFacet(cls);
             if (facet != null) {
                 try {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CallbackFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CallbackFacetAbstract.java
index ba5795d..5aff7b7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CallbackFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CallbackFacetAbstract.java
@@ -19,11 +19,9 @@
 
 package org.apache.isis.core.metamodel.facets.object.callbacks;
 
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.callbacks.CallbackFacet;
 
 /**
  * Adapter superclass for {@link Facet}s for {@link CallbackFacet}.
@@ -33,8 +31,5 @@ public abstract class CallbackFacetAbstract extends FacetAbstract implements Cal
     public CallbackFacetAbstract(final Class<? extends Facet> facetType, final FacetHolder holder) {
         super(facetType, holder, Derivation.NOT_DERIVED);
     }
-
-    @Override
-    public abstract void invoke(ObjectAdapter object);
-
+    
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CreatedCallbackFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CreatedCallbackFacetViaMethod.java
index 8fea409..b3f9312 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CreatedCallbackFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CreatedCallbackFacetViaMethod.java
@@ -27,6 +27,7 @@ import java.util.List;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.spec.Instance;
 
 public class CreatedCallbackFacetViaMethod extends CreatedCallbackFacetAbstract implements ImperativeFacet {
 
@@ -53,7 +54,7 @@ public class CreatedCallbackFacetViaMethod extends CreatedCallbackFacetAbstract
     }
 
     @Override
-    public void invoke(final ObjectAdapter adapter) {
+    public void invoke(final Instance adapter) {
         ObjectAdapter.InvokeUtils.invokeAll(methods, adapter);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/LoadedCallbackFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/LoadedCallbackFacetViaMethod.java
index 8b3ef2a..c941d7e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/LoadedCallbackFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/LoadedCallbackFacetViaMethod.java
@@ -27,6 +27,7 @@ import java.util.List;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.spec.Instance;
 
 public class LoadedCallbackFacetViaMethod extends LoadedCallbackFacetAbstract implements ImperativeFacet {
 
@@ -53,7 +54,7 @@ public class LoadedCallbackFacetViaMethod extends LoadedCallbackFacetAbstract im
     }
 
     @Override
-    public void invoke(final ObjectAdapter adapter) {
+    public void invoke(final Instance adapter) {
         ObjectAdapter.InvokeUtils.invokeAll(methods, adapter);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/LoadingCallbackFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/LoadingCallbackFacetViaMethod.java
index ad1057a..e34ccf9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/LoadingCallbackFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/LoadingCallbackFacetViaMethod.java
@@ -27,6 +27,7 @@ import java.util.List;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.spec.Instance;
 
 /**
  * @deprecated - THIS CAN NEVER BE CALLED (BY JDO OBJECTSTORE AT LEAST)
@@ -57,7 +58,7 @@ public class LoadingCallbackFacetViaMethod extends LoadingCallbackFacetAbstract
     }
 
     @Override
-    public void invoke(final ObjectAdapter adapter) {
+    public void invoke(final Instance adapter) {
         ObjectAdapter.InvokeUtils.invokeAll(methods, adapter);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/PersistedCallbackFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/PersistedCallbackFacetViaMethod.java
index 0f9988d..19faec3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/PersistedCallbackFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/PersistedCallbackFacetViaMethod.java
@@ -27,6 +27,7 @@ import java.util.List;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.spec.Instance;
 
 public class PersistedCallbackFacetViaMethod extends PersistedCallbackFacetAbstract implements ImperativeFacet {
 
@@ -53,7 +54,7 @@ public class PersistedCallbackFacetViaMethod extends PersistedCallbackFacetAbstr
     }
 
     @Override
-    public void invoke(final ObjectAdapter adapter) {
+    public void invoke(final Instance adapter) {
         ObjectAdapter.InvokeUtils.invokeAll(methods, adapter);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/PersistingCallbackFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/PersistingCallbackFacetViaMethod.java
index 4adcae8..801c917 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/PersistingCallbackFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/PersistingCallbackFacetViaMethod.java
@@ -27,6 +27,7 @@ import java.util.List;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.spec.Instance;
 
 public class PersistingCallbackFacetViaMethod extends PersistingCallbackFacetAbstract implements ImperativeFacet {
 
@@ -53,7 +54,7 @@ public class PersistingCallbackFacetViaMethod extends PersistingCallbackFacetAbs
     }
 
     @Override
-    public void invoke(final ObjectAdapter adapter) {
+    public void invoke(final Instance adapter) {
         ObjectAdapter.InvokeUtils.invokeAll(methods, adapter);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/RemovedCallbackFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/RemovedCallbackFacetViaMethod.java
index f41a90f..5de6333 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/RemovedCallbackFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/RemovedCallbackFacetViaMethod.java
@@ -27,6 +27,7 @@ import java.util.List;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.spec.Instance;
 
 /**
  * @deprecated - cannot touch a pojo once deleted
@@ -57,7 +58,7 @@ public class RemovedCallbackFacetViaMethod extends RemovedCallbackFacetAbstract
     }
 
     @Override
-    public void invoke(final ObjectAdapter adapter) {
+    public void invoke(final Instance adapter) {
         ObjectAdapter.InvokeUtils.invokeAll(methods, adapter);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/RemovingCallbackFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/RemovingCallbackFacetViaMethod.java
index dfa9947..e8d54b4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/RemovingCallbackFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/RemovingCallbackFacetViaMethod.java
@@ -27,6 +27,7 @@ import java.util.List;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.spec.Instance;
 
 public class RemovingCallbackFacetViaMethod extends RemovingCallbackFacetAbstract implements ImperativeFacet {
 
@@ -53,7 +54,7 @@ public class RemovingCallbackFacetViaMethod extends RemovingCallbackFacetAbstrac
     }
 
     @Override
-    public void invoke(final ObjectAdapter adapter) {
+    public void invoke(final Instance adapter) {
         ObjectAdapter.InvokeUtils.invokeAll(methods, adapter);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/UpdatedCallbackFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/UpdatedCallbackFacetViaMethod.java
index c856237..e6b63f0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/UpdatedCallbackFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/UpdatedCallbackFacetViaMethod.java
@@ -27,6 +27,7 @@ import java.util.List;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.spec.Instance;
 
 public class UpdatedCallbackFacetViaMethod extends UpdatedCallbackFacetAbstract implements ImperativeFacet {
 
@@ -53,7 +54,7 @@ public class UpdatedCallbackFacetViaMethod extends UpdatedCallbackFacetAbstract
     }
 
     @Override
-    public void invoke(final ObjectAdapter adapter) {
+    public void invoke(final Instance adapter) {
         ObjectAdapter.InvokeUtils.invokeAll(methods, adapter);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/UpdatingCallbackFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/UpdatingCallbackFacetViaMethod.java
index 80c04ed..30f4a76 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/UpdatingCallbackFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/UpdatingCallbackFacetViaMethod.java
@@ -22,10 +22,12 @@ import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+
 import org.apache.isis.core.commons.lang.Wormhole;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.spec.Instance;
 
 public class UpdatingCallbackFacetViaMethod extends UpdatingCallbackFacetAbstract implements ImperativeFacet {
 
@@ -52,13 +54,8 @@ public class UpdatingCallbackFacetViaMethod extends UpdatingCallbackFacetAbstrac
     }
 
     @Override
-    public void invoke(final ObjectAdapter adapter) {
-        Wormhole.invoke(new Runnable() {
-            @Override
-            public void run() {
-                ObjectAdapter.InvokeUtils.invokeAll(methods, adapter);
-            }
-        });
+    public void invoke(final Instance adapter) {
+        Wormhole.invoke(()->ObjectAdapter.InvokeUtils.invokeAll(methods, adapter));
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
index 0d3841c..6e186c9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
@@ -110,8 +110,8 @@ public class ActionChoicesFacetViaMethod extends ActionChoicesFacetAbstract impl
 
         final ObjectAdapter collectionAdapter = getObjectAdapterProvider().adapterFor(collectionOrArray);
 
-        final AuthenticationSession authenticationSession = getAuthenticationSession();
-        final DeploymentCategory deploymentCategory = getDeploymentCategory();
+//        final AuthenticationSession authenticationSession = getAuthenticationSession();
+//        final DeploymentCategory deploymentCategory = getDeploymentCategory();
         final List<ObjectAdapter> visibleAdapters =
                 ObjectAdapter.Util.visibleAdapters(
                         collectionAdapter,
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
index 71d49b3..d97c3ba 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
@@ -77,7 +77,7 @@ public class ActionParameterChoicesFacetViaMethod extends ActionParameterChoices
             final InteractionInitiatedBy interactionInitiatedBy) {
         final Object choices =
                 ObjectAdapter.InvokeUtils.invokeAutofit(
-                        method, adapter, argumentsIfAvailable, getObjectAdapterProvider());
+                        method, adapter, argumentsIfAvailable);
         if (choices == null) {
             return _Constants.emptyObjects;
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
index c9f7d9d..5618a0d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
@@ -57,11 +57,9 @@ public class ActionParameterDefaultsFacetViaMethod extends ActionParameterDefaul
 
     @Override
     public Object getDefault(final ObjectAdapter target, List<ObjectAdapter> argumentsIfAvailable) {
-        return ObjectAdapter.InvokeUtils.invokeAutofit(method, target, argumentsIfAvailable, getObjectAdapterProvider());
+        return ObjectAdapter.InvokeUtils.invokeAutofit(method, target, argumentsIfAvailable);
     }
 
-
-
     @Override
     protected String toStringValues() {
         return "method=" + method;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/InteractionContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/InteractionContext.java
index c35ea8e..81e1fc0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/InteractionContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/InteractionContext.java
@@ -19,12 +19,11 @@
 
 package org.apache.isis.core.metamodel.interactions;
 
-import java.util.Map;
-
-import com.google.common.collect.ImmutableMap;
+import javax.annotation.Nullable;
 
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.services.wrapper.events.InteractionEvent;
+import org.apache.isis.commons.internal.base._Tuples;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.InteractionContextType;
@@ -140,10 +139,11 @@ public abstract class InteractionContext<T extends InteractionEvent> {
         this.contributee = contributee;
     }
 
-    public Map<Integer, ObjectAdapter> getContributeeAsMap() {
-        return contributee != null
-                ? ImmutableMap.<Integer, ObjectAdapter>of(contributeeParam, contributee)
-                        : ImmutableMap.<Integer, ObjectAdapter>of();
+    public @Nullable _Tuples.Tuple2<Integer, ObjectAdapter> getContributeeWithParamIndex() {
+        if(contributee==null) {
+            return null;
+        }
+        return _Tuples.pair(contributeeParam, contributee);
     }
 
     // //////////////////////////////////////
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
index 04f7115..16817dd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
@@ -24,11 +24,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.function.Function;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import javax.annotation.Nullable;
 
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainService;
@@ -83,7 +79,7 @@ public class GridSystemServiceBS3 extends GridSystemServiceAbstract<BS3Grid> {
     public BS3Grid defaultGrid(final Class<?> domainClass) {
         final BS3Grid bs3Grid = new BS3Grid();
 
-        final ObjectSpecification objectSpec = specificationLoader.loadSpecification(domainClass);
+//        final ObjectSpecification objectSpec = specificationLoader.loadSpecification(domainClass);
         bs3Grid.setDomainClass(domainClass);
 
         final BS3Row headerRow = new BS3Row();
diff --git a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
index 9f47a85..fbe578c 100644
--- a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
+++ b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
@@ -825,9 +825,7 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
 
         if (rootOid.isTransient()) {
             // persisting
-            final RootOid persistentOid = objectAdapterContext.createPersistentOrViewModelOid(pojo);
-
-            objectAdapterContext.remapAsPersistent(adapter, persistentOid, this);
+            objectAdapterContext.asPersistent(adapter, this);
 
             CallbackFacet.Util.callCallback(adapter, PersistedCallbackFacet.class);
             objectAdapterContext.postLifecycleEventIfRequired(adapter, PersistedLifecycleEventFacet.class);
diff --git a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
index ef828a3..be3c45f 100644
--- a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
+++ b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
@@ -825,9 +825,8 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
 
         if (rootOid.isTransient()) {
             // persisting
-            final RootOid persistentOid = objectAdapterContext.createPersistentOrViewModelOid(pojo);
-
-            objectAdapterContext.remapAsPersistent(adapter, persistentOid, this);
+            
+            objectAdapterContext.asPersistent(adapter, this);
 
             CallbackFacet.Util.callCallback(adapter, PersistedCallbackFacet.class);
             objectAdapterContext.postLifecycleEventIfRequired(adapter, PersistedLifecycleEventFacet.class);
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index 206308e..0cf961a 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -19,7 +19,6 @@
 package org.apache.isis.core.runtime.system.persistence.adaptermanager;
 
 import java.util.Objects;
-import java.util.UUID;
 import java.util.function.Function;
 
 import org.slf4j.Logger;
@@ -187,7 +186,6 @@ final public class ObjectAdapterContext {
 
     // -- ADAPTER MANAGER LEGACY
 
-    @Deprecated // don't expose caching
     public ObjectAdapter fetchPersistent(final Object pojo) {
         if (persistenceSession.getPersistenceManager().getObjectId(pojo) == null) {
             return null;
@@ -197,13 +195,16 @@ final public class ObjectAdapterContext {
         return adapter;
     }
     
-    @Deprecated
     public ObjectAdapter recreatePojo(Oid oid, Object recreatedPojo) {
         final ObjectAdapter createdAdapter = createRootOrAggregatedAdapter(oid, recreatedPojo);
         return injectServices(createdAdapter);
     }
+    
+    public ObjectAdapter recreatedPojo(ObjectAdapter adapter, final Object pojo) {
+        final ObjectAdapter newAdapter = adapter.withPojo(pojo);
+        return injectServices(newAdapter);
+    }
 
-    @Deprecated
     public ObjectAdapter injectServices(final ObjectAdapter adapter) {
         Objects.requireNonNull(adapter);
         if(adapter.isValue()) {
@@ -214,7 +215,6 @@ final public class ObjectAdapterContext {
         return adapter;
     }
     
-    @Deprecated
     public ObjectAdapter createRootOrAggregatedAdapter(final Oid oid, final Object pojo) {
         final ObjectAdapter createdAdapter;
         if(oid instanceof RootOid) {
@@ -272,14 +272,16 @@ final public class ObjectAdapterContext {
      * @param newRootOid - allow a different persistent root oid to be provided.
      * @param session 
      */
-    @Deprecated // expected to be moved
-    public void remapAsPersistent(final ObjectAdapter rootAdapter, RootOid newRootOid, PersistenceSession session) {
-        Objects.requireNonNull(newRootOid);
+    public void asPersistent(final ObjectAdapter rootAdapter, PersistenceSession session) {
+        
+        final RootOid persistentOid = createPersistentOrViewModelOid(rootAdapter.getObject());
+        
+        Objects.requireNonNull(persistentOid);
         Assert.assertFalse("expected to not be a parented collection", rootAdapter.isParentedCollection());
-        if(newRootOid.isTransient()) {
+        if(persistentOid.isTransient()) {
             throw new IsisAssertException("hintRootOid must be persistent");
         }
-        final ObjectSpecId hintRootOidObjectSpecId = newRootOid.getObjectSpecId();
+        final ObjectSpecId hintRootOidObjectSpecId = persistentOid.getObjectSpecId();
         final ObjectSpecId adapterObjectSpecId = rootAdapter.getSpecification().getSpecId();
         if(!hintRootOidObjectSpecId.equals(adapterObjectSpecId)) {
             throw new IsisAssertException("hintRootOid's objectType must be same as that of adapter " +
@@ -287,12 +289,7 @@ final public class ObjectAdapterContext {
         }
     }
 
-    @Deprecated
-    public ObjectAdapter remapRecreatedPojo(ObjectAdapter adapter, final Object pojo) {
-        final ObjectAdapter newAdapter = adapter.withPojo(pojo);
-        injectServices(newAdapter);
-        return newAdapter;
-    }
+
 
 
 
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
index 98f6579..a92c5cf 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
@@ -53,7 +53,7 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
     @SuppressWarnings("unused")
     private static final Logger LOG = LoggerFactory.getLogger(ObjectAdapterContext_ObjectAdapterProvider.class);
     private final ObjectAdapterContext objectAdapterContext;
-    private final PersistenceSession persistenceSession;
+//    private final PersistenceSession persistenceSession;
     private final ServicesInjector servicesInjector;
     private final SpecificationLoader specificationLoader; 
     private final OidFactory oidFactory; 
@@ -61,7 +61,7 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
     ObjectAdapterContext_ObjectAdapterProvider(ObjectAdapterContext objectAdapterContext,
             PersistenceSession persistenceSession) {
         this.objectAdapterContext = objectAdapterContext;
-        this.persistenceSession = persistenceSession;
+//        this.persistenceSession = persistenceSession;
         this.servicesInjector = persistenceSession.getServicesInjector();
         this.specificationLoader = servicesInjector.getSpecificationLoader();
         
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index 37abc9f..5da0393 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -791,7 +791,7 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
 
     public boolean isScalarTypeSubtypeOf(final Class<?> requiredClass) {
         final Class<?> scalarType = getTypeOfSpecification().getCorrespondingClass();
-        return _NullSafe.stream(requiredClass)
+        return _NullSafe.streamNullable(requiredClass)
                 .anyMatch(x -> x.isAssignableFrom(scalarType));
     }
 


[isis] 02/02: ISIS-1976: further removing OAs where not required

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit d1e90152d9dfb4a252daa434d4c81599a29aa9a5
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Sep 14 08:31:23 2018 +0200

    ISIS-1976: further removing OAs where not required
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../isis/core/metamodel/adapter/ObjectAdapter.java | 14 +--------
 .../apache/isis/core/metamodel/spec/Instance.java  | 35 ++++++++++++++++++++++
 .../system/persistence/PersistenceSession4.java    | 17 ++++-------
 .../system/persistence/PersistenceSession5.java    | 19 ++++--------
 .../adaptermanager/ObjectAdapterContext.java       |  3 +-
 ...ObjectAdapterContext_LifecycleEventSupport.java |  3 +-
 6 files changed, 51 insertions(+), 40 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
index d005984..806ca13 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
@@ -431,19 +431,7 @@ public interface ObjectAdapter extends Instance {
                 if(args.get(i) == null && cls.isPrimitive()) {
                     final Object object = ClassExtensions.toDefault(cls);
                     
-                    final Instance adapter = new Instance() {
-                        
-                        @Override
-                        public Specification getSpecification() {
-                            return null; // not needed for primitives
-                        }
-                        
-                        @Override
-                        public Object getObject() {
-                            return object;
-                        }
-                    }; 
-                            
+                    final Instance adapter = Instance.of((ObjectSpecification)null, object);
                     args.set(i, adapter);
                 }
             }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Instance.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Instance.java
index d2f46a7..ea387ee 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Instance.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Instance.java
@@ -19,6 +19,11 @@
 
 package org.apache.isis.core.metamodel.spec;
 
+import static org.apache.isis.commons.internal.base._With.requires;
+
+import java.util.function.Supplier;
+
+import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 
 /**
@@ -42,5 +47,35 @@ public interface Instance {
      * with the framework.
      */
     Object getObject();
+    
+    // -- FACTORIES
+    
+    public static Instance of(Specification specification, Object pojo) {
+        return new Instance() {
+            @Override
+            public Specification getSpecification() {
+                return specification;
+            }
+            @Override
+            public Object getObject() {
+                return pojo;
+            }
+        };
+    }
+    
+    public static Instance of(Supplier<Specification> specificationSupplier, Object pojo) {
+        requires(specificationSupplier, "specificationSupplier");
+        return new Instance() {
+            private final _Lazy<Specification> specification = _Lazy.of(specificationSupplier);
+            @Override
+            public Specification getSpecification() {
+                return specification.get();
+            }
+            @Override
+            public Object getObject() {
+                return pojo;
+            }
+        };
+    }
 
 }
diff --git a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
index fbe578c..428e963 100644
--- a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
+++ b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
@@ -56,11 +56,8 @@ import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterByIdProvider;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.core.metamodel.adapter.concurrency.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.ParentedCollectionOid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.object.callbacks.CallbackFacet;
@@ -74,11 +71,10 @@ import org.apache.isis.core.metamodel.facets.object.callbacks.RemovingCallbackFa
 import org.apache.isis.core.metamodel.facets.object.callbacks.RemovingLifecycleEventFacet;
 import org.apache.isis.core.metamodel.facets.object.callbacks.UpdatedCallbackFacet;
 import org.apache.isis.core.metamodel.facets.object.callbacks.UpdatedLifecycleEventFacet;
-import org.apache.isis.core.metamodel.facets.object.callbacks.UpdatingCallbackFacet;
-import org.apache.isis.core.metamodel.facets.object.callbacks.UpdatingLifecycleEventFacet;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.services.container.query.QueryCardinality;
 import org.apache.isis.core.metamodel.spec.FreeStandingList;
+import org.apache.isis.core.metamodel.spec.Instance;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.runtime.persistence.FixturesInstalledFlag;
 import org.apache.isis.core.runtime.persistence.NotPersistableException;
@@ -787,14 +783,11 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
      */
     @Override
     public void invokeIsisPersistingCallback(final Persistable pojo) {
-        final ObjectAdapter adapter = null;
-        if (adapter == null) {
-            // not expected.
-            return;
-        }
+        if (isTransient(pojo)) {
+            final Instance adapter = Instance.of(
+                    ()->getSpecificationLoader().loadSpecification(pojo.getClass()),
+                    pojo);
 
-        final RootOid isisOid = (RootOid) adapter.getOid();
-        if (isisOid.isTransient()) {
             // persisting
             // previously this was performed in the DataNucleusSimplePersistAlgorithm.
             CallbackFacet.Util.callCallback(adapter, PersistingCallbackFacet.class);
diff --git a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
index be3c45f..ff546ed 100644
--- a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
+++ b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
@@ -56,11 +56,8 @@ import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterByIdProvider;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.core.metamodel.adapter.concurrency.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.ParentedCollectionOid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.object.callbacks.CallbackFacet;
@@ -74,11 +71,10 @@ import org.apache.isis.core.metamodel.facets.object.callbacks.RemovingCallbackFa
 import org.apache.isis.core.metamodel.facets.object.callbacks.RemovingLifecycleEventFacet;
 import org.apache.isis.core.metamodel.facets.object.callbacks.UpdatedCallbackFacet;
 import org.apache.isis.core.metamodel.facets.object.callbacks.UpdatedLifecycleEventFacet;
-import org.apache.isis.core.metamodel.facets.object.callbacks.UpdatingCallbackFacet;
-import org.apache.isis.core.metamodel.facets.object.callbacks.UpdatingLifecycleEventFacet;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.services.container.query.QueryCardinality;
 import org.apache.isis.core.metamodel.spec.FreeStandingList;
+import org.apache.isis.core.metamodel.spec.Instance;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.runtime.persistence.FixturesInstalledFlag;
 import org.apache.isis.core.runtime.persistence.NotPersistableException;
@@ -787,14 +783,11 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
      */
     @Override
     public void invokeIsisPersistingCallback(final Persistable pojo) {
-        final ObjectAdapter adapter = null;
-        if (adapter == null) {
-            // not expected.
-            return;
-        }
-
-        final RootOid isisOid = (RootOid) adapter.getOid();
-        if (isisOid.isTransient()) {
+        if (isTransient(pojo)) {
+            final Instance adapter = Instance.of(
+                    ()->getSpecificationLoader().loadSpecification(pojo.getClass()),
+                    pojo);
+            
             // persisting
             // previously this was performed in the DataNucleusSimplePersistAlgorithm.
             CallbackFacet.Util.callCallback(adapter, PersistingCallbackFacet.class);
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index 0cf961a..d493d29 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -36,6 +36,7 @@ import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.facets.object.callbacks.LifecycleEventFacet;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
+import org.apache.isis.core.metamodel.spec.Instance;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
@@ -247,7 +248,7 @@ final public class ObjectAdapterContext {
     // -- LIFECYCLE EVENT SUPPORT
 
     public void postLifecycleEventIfRequired(
-            final ObjectAdapter adapter,
+            final Instance adapter,
             final Class<? extends LifecycleEventFacet> lifecycleEventFacetClass) {
         lifecycleEventMixin.postLifecycleEventIfRequired(adapter, lifecycleEventFacetClass);
     }
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_LifecycleEventSupport.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_LifecycleEventSupport.java
index 217ca05..34fb8ba 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_LifecycleEventSupport.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_LifecycleEventSupport.java
@@ -36,6 +36,7 @@ import org.apache.isis.core.metamodel.facets.object.callbacks.CreatedLifecycleEv
 import org.apache.isis.core.metamodel.facets.object.callbacks.LifecycleEventFacet;
 import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
+import org.apache.isis.core.metamodel.spec.Instance;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
@@ -72,7 +73,7 @@ class ObjectAdapterContext_LifecycleEventSupport {
     
     @SuppressWarnings({ "unchecked", "rawtypes" })
     void postLifecycleEventIfRequired(
-            final ObjectAdapter adapter,
+            final Instance adapter,
             final Class<? extends LifecycleEventFacet> lifecycleEventFacetClass) {
         final LifecycleEventFacet facet = adapter.getSpecification().getFacet(lifecycleEventFacetClass);
         if(facet != null) {