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/10/04 16:40:46 UTC

[isis] branch v2 updated: ISIS-1976: cleaning up some raw types, unchecked casts and incomplete switches

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

ahuber pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/v2 by this push:
     new 9d9f122  ISIS-1976: cleaning up some raw types, unchecked casts and incomplete switches
9d9f122 is described below

commit 9d9f1224a4e6fffe85bcacbcc1b57fe7b7d4ab76
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Oct 4 18:40:23 2018 +0200

    ISIS-1976: cleaning up some raw types, unchecked casts and incomplete
    switches
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../core/metamodel/facets/DomainEventHelper.java   | 70 ++++++++++------------
 .../command/CommandFacetForActionAnnotation.java   |  1 +
 .../invocation/ActionDomainEventFacetAbstract.java | 13 ++--
 ...ctionInvocationFacetForDomainEventAbstract.java | 15 +----
 .../PublishedActionFacetForActionAnnotation.java   |  1 +
 ...okmarkPolicyFacetForActionLayoutAnnotation.java |  1 +
 .../DisabledFacetForCollectionAnnotation.java      |  2 +
 ...ectionAddToFacetForDomainEventFromAbstract.java | 17 +++---
 .../modify/CollectionDomainEventFacetAbstract.java | 19 ++----
 ...nRemoveFromFacetForDomainEventFromAbstract.java | 19 +++---
 .../NotPersistedFacetForCollectionAnnotation.java  |  1 +
 .../layout/CollectionLayoutFacetFactory.java       |  7 ---
 ...SortedByFacetForCollectionLayoutAnnotation.java |  4 +-
 .../layout/SortedByFacetForCollectionXml.java      |  6 +-
 ...fecycleEventFacetForDomainObjectAnnotation.java |  8 +--
 ...fecycleEventFacetForDomainObjectAnnotation.java |  8 +--
 ...fecycleEventFacetForDomainObjectAnnotation.java |  8 +--
 ...fecycleEventFacetForDomainObjectAnnotation.java |  8 +--
 ...fecycleEventFacetForDomainObjectAnnotation.java |  9 +--
 ...fecycleEventFacetForDomainObjectAnnotation.java |  9 +--
 ...fecycleEventFacetForDomainObjectAnnotation.java |  9 +--
 .../ImmutableFacetForDomainObjectAnnotation.java   |  1 +
 ...ainObjectLayoutAnnotationUsingTitleUiEvent.java |  8 +--
 .../DomainServiceLayoutFacetFactory.java           | 11 ----
 .../facets/object/grid/GridFacetDefault.java       |  6 +-
 .../facets/object/grid/GridFacetFactory.java       |  5 +-
 .../facets/object/parseable/ParserUtil.java        | 16 +++--
 .../value/vsp/ValueSemanticsProviderUtil.java      | 16 +++--
 .../MustSatisfySpecificationFacetAbstract.java     |  3 +-
 ...dAdjustedFacetForParameterLayoutAnnotation.java |  1 +
 .../MandatoryFacetForParameterAnnotation.java      |  1 +
 .../method/PropertyAutoCompleteFacetMethod.java    |  4 --
 .../command/CommandFacetForPropertyAnnotation.java |  1 +
 .../DisabledFacetForPropertyAnnotation.java        |  1 +
 .../MandatoryFacetForPropertyAnnotation.java       |  1 +
 .../modify/PropertyDomainEventFacetAbstract.java   | 19 ++----
 ...tySetterOrClearFacetForDomainEventAbstract.java | 21 +++----
 ...ublishedPropertyFacetForPropertyAnnotation.java |  1 +
 ...romptStyleFacetForPropertyLayoutAnnotation.java |  2 +-
 .../propertylayout/PropertyLayoutFacetFactory.java |  2 -
 ...edAdjustedFacetForPropertyLayoutAnnotation.java |  1 +
 ...UnchangingFacetForPropertyLayoutAnnotation.java |  1 +
 .../isis/core/metamodel/layout/DeweyOrderSet.java  |  4 +-
 .../specloader/InjectorMethodEvaluatorDefault.java |  5 +-
 .../classsubstitutor/ClassSubstitutor.java         | 14 ++---
 .../CollectionFacetOnStandaloneList.java           |  4 +-
 .../isis/progmodels/dflt/JavaReflectorHelper.java  |  5 +-
 47 files changed, 152 insertions(+), 237 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DomainEventHelper.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DomainEventHelper.java
index 5d3dd9d..50bb2fb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DomainEventHelper.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DomainEventHelper.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.core.metamodel.facets;
 
+import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
+
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.util.Arrays;
@@ -51,11 +53,11 @@ public class DomainEventHelper {
     }
 
     // -- postEventForAction, newActionDomainEvent
-    @SuppressWarnings({ "rawtypes" })
-    public ActionDomainEvent<?> postEventForAction(
+    
+    public <S> ActionDomainEvent<S> postEventForAction(
             final AbstractDomainEvent.Phase phase,
-            final Class eventType,
-            final ActionDomainEvent<?> existingEvent,
+            final Class<? extends ActionDomainEvent<S>> eventType,
+            final ActionDomainEvent<S> existingEvent,
             final ObjectAction objectAction,
             final IdentifiedHolder identified,
             final ManagedObject targetAdapter,
@@ -65,14 +67,14 @@ public class DomainEventHelper {
             final ObjectAdapter resultAdapter) {
 
         try {
-            final ActionDomainEvent<?> event;
+            final ActionDomainEvent<S> event;
 
             if (existingEvent != null && phase.isExecuted()) {
                 // reuse existing event from the executing phase
                 event = existingEvent;
             } else {
                 // all other phases, create a new event
-                final Object source = ObjectAdapter.Util.unwrapPojo(targetAdapter);
+                final S source = uncheckedCast(ObjectAdapter.Util.unwrapPojo(targetAdapter));
                 final Object[] arguments = ObjectAdapter.Util.unwrapPojoArray(argumentAdapters);
                 final Identifier identifier = identified.getIdentifier();
                 event = newActionDomainEvent(eventType, identifier, source, arguments);
@@ -115,11 +117,6 @@ public class DomainEventHelper {
         }
     }
 
-//    private static <T> List<T> immutableList(final Iterable<T> iterable) {
-//        return Collections.unmodifiableList(_Lists.newArrayList(iterable));
-//    }
-
-    @SuppressWarnings("unchecked")
     static <S> ActionDomainEvent<S> newActionDomainEvent(
             final Class<? extends ActionDomainEvent<S>> type,
                     final Identifier identifier,
@@ -133,7 +130,7 @@ public class DomainEventHelper {
             final Class<?>[] parameterTypes = constructor.getParameterTypes();
             if(parameterTypes.length == 0) {
                 final Object event = constructor.newInstance();
-                final ActionDomainEvent<S> ade = (ActionDomainEvent<S>) event;
+                final ActionDomainEvent<S> ade = uncheckedCast(event);
 
                 ade.setSource(source);
                 ade.setIdentifier(identifier);
@@ -158,7 +155,7 @@ public class DomainEventHelper {
                 continue;
             }
             final Object event = constructor.newInstance(source, identifier, arguments);
-            return (ActionDomainEvent<S>) event;
+            return uncheckedCast(event);
         }
         throw new NoSuchMethodException(type.getName()+".<init>(? super " + source.getClass().getName() + ", " + Identifier.class.getName() + ", [Ljava.lang.Object;)");
     }
@@ -172,18 +169,18 @@ public class DomainEventHelper {
 
 
     // -- postEventForProperty, newPropertyInteraction
-    public PropertyDomainEvent<?, ?> postEventForProperty(
+    public <S, T> PropertyDomainEvent<S, T> postEventForProperty(
             final AbstractDomainEvent.Phase phase,
-            final Class eventType,
-            final PropertyDomainEvent<?, ?> existingEvent,
+            final Class<? extends PropertyDomainEvent<S, T>> eventType,
+            final PropertyDomainEvent<S, T> existingEvent,
             final IdentifiedHolder identified,
             final ManagedObject targetAdapter,
-            final Object oldValue,
-            final Object newValue) {
+            final T oldValue,
+            final T newValue) {
 
         try {
-            final PropertyDomainEvent<?, ?> event;
-            final Object source = ObjectAdapter.Util.unwrapPojo(targetAdapter);
+            final PropertyDomainEvent<S, T> event;
+            final S source = uncheckedCast(ObjectAdapter.Util.unwrapPojo(targetAdapter));
             final Identifier identifier = identified.getIdentifier();
 
             if(existingEvent != null && phase.isExecuted()) {
@@ -206,11 +203,10 @@ public class DomainEventHelper {
         }
     }
 
-    private static <S,T> void setEventNewValue(PropertyDomainEvent<S, T> event, Object newValue) {
-        event.setNewValue((T) newValue);
+    private static <S,T> void setEventNewValue(PropertyDomainEvent<S, T> event, T newValue) {
+        event.setNewValue(newValue);
     }
 
-    @SuppressWarnings("unchecked")
     static <S,T> PropertyDomainEvent<S,T> newPropertyDomainEvent(
             final Class<? extends PropertyDomainEvent<S, T>> type,
                     final Identifier identifier,
@@ -225,7 +221,7 @@ public class DomainEventHelper {
             final Class<?>[] parameterTypes = constructor.getParameterTypes();
             if(parameterTypes.length == 0) {
                 final Object event = constructor.newInstance();
-                final PropertyDomainEvent<S, T> pde = (PropertyDomainEvent<S, T>) event;
+                final PropertyDomainEvent<S, T> pde = uncheckedCast(event);
                 pde.setSource(source);
                 pde.setIdentifier(identifier);
                 pde.setOldValue(oldValue);
@@ -253,7 +249,7 @@ public class DomainEventHelper {
                 continue;
             }
             final Object event = constructor.newInstance(source, identifier, oldValue, newValue);
-            return (PropertyDomainEvent<S, T>) event;
+            return uncheckedCast(event);
         }
 
         throw new NoSuchMethodException(type.getName()+".<init>(? super " + source.getClass().getName() + ", " + Identifier.class.getName() + ", java.lang.Object, java.lang.Object)");
@@ -262,22 +258,22 @@ public class DomainEventHelper {
 
     // -- postEventForCollection, newCollectionDomainEvent
 
-    public CollectionDomainEvent<?, ?> postEventForCollection(
+    public <S, T> CollectionDomainEvent<S, T> postEventForCollection(
             AbstractDomainEvent.Phase phase,
-            final Class eventType,
-            final CollectionDomainEvent<?, ?> existingEvent,
+            final Class<? extends CollectionDomainEvent<S, T>> eventType,
+            final CollectionDomainEvent<S, T> existingEvent,
             final IdentifiedHolder identified,
             final ManagedObject targetAdapter,
             final CollectionDomainEvent.Of of,
-            final Object reference) {
+            final T reference) {
         try {
-            final CollectionDomainEvent<?, ?> event;
+            final CollectionDomainEvent<S, T> event;
             if (existingEvent != null && phase.isExecuted()) {
                 // reuse existing event from the executing phase
                 event = existingEvent;
             } else {
                 // all other phases, create a new event
-                final Object source = ObjectAdapter.Util.unwrapPojo(targetAdapter);
+                final S source = uncheckedCast(ObjectAdapter.Util.unwrapPojo(targetAdapter));
                 final Identifier identifier = identified.getIdentifier();
                 event = newCollectionDomainEvent(eventType, phase, identifier, source, of, reference);
             }
@@ -291,7 +287,6 @@ public class DomainEventHelper {
         }
     }
 
-    @SuppressWarnings("unchecked")
     <S, T> CollectionDomainEvent<S, T> newCollectionDomainEvent(
             final Class<? extends CollectionDomainEvent<S, T>> type,
                     final AbstractDomainEvent.Phase phase,
@@ -309,7 +304,7 @@ public class DomainEventHelper {
             final Class<?>[] parameterTypes = constructor.getParameterTypes();
             if(parameterTypes.length ==0) {
                 final Object event = constructor.newInstance();
-                final CollectionDomainEvent<S, T> cde = (CollectionDomainEvent<S, T>) event;
+                final CollectionDomainEvent<S, T> cde = uncheckedCast(event);
 
                 cde.setSource(source);
                 cde.setIdentifier(identifier);
@@ -338,7 +333,7 @@ public class DomainEventHelper {
                 continue;
             }
             final Object event = constructor.newInstance(source, identifier, of, value);
-            return (CollectionDomainEvent<S, T>) event;
+            return uncheckedCast(event);
         }
 
         if(phase == AbstractDomainEvent.Phase.EXECUTED) {
@@ -360,7 +355,7 @@ public class DomainEventHelper {
                         continue;
                     }
                     final Object event = constructor.newInstance(source, identifier, value);
-                    return (CollectionDomainEvent<S, T>) event;
+                    return uncheckedCast(event);
                 }
             } else if(of == CollectionDomainEvent.Of.REMOVE_FROM) {
                 // support for @PostsCollectionRemovedFrom annotation:
@@ -381,16 +376,13 @@ public class DomainEventHelper {
                     }
                     final Object event = constructor.newInstance(
                             source, identifier, value);
-                    return (CollectionDomainEvent<S, T>) event;
+                    return uncheckedCast(event);
                 }
             }
         }
         throw new NoSuchMethodException(type.getName()+".<init>(? super " + source.getClass().getName() + ", " + Identifier.class.getName() + ", java.lang.Object)");
     }
 
-
-
-
     // -- eventBusService
 
     private EventBusService getEventBusService() {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/command/CommandFacetForActionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/command/CommandFacetForActionAnnotation.java
index c873ac4..7ba09d2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/command/CommandFacetForActionAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/command/CommandFacetForActionAnnotation.java
@@ -77,6 +77,7 @@ public class CommandFacetForActionAnnotation extends CommandFacetAbstract {
                     case ENABLED:
                         return new CommandFacetForActionAnnotation(
                                 persistence, executeIn, Enablement.ENABLED, processor, holder, servicesInjector);
+                    default:
                     }
                     throw new IllegalStateException("command '" + command + "' not recognised");
                 })
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 5fcb378..6f2a34f 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
@@ -78,7 +78,7 @@ extends SingleClassValueFacetAbstract implements ActionDomainEventFacet {
         final ActionDomainEvent<?> event =
                 domainEventHelper.postEventForAction(
                         AbstractDomainEvent.Phase.HIDE,
-                        eventType(), null,
+                        getEventType(), null,
                         actionFrom(ic), getIdentified(),
                         ic.getTarget(), ic.getMixedIn(), argumentAdaptersFrom(ic),
                         null,
@@ -95,7 +95,7 @@ extends SingleClassValueFacetAbstract implements ActionDomainEventFacet {
         final ActionDomainEvent<?> event =
                 domainEventHelper.postEventForAction(
                         AbstractDomainEvent.Phase.DISABLE,
-                        eventType(), null,
+                        getEventType(), null,
                         actionFrom(ic), getIdentified(),
                         ic.getTarget(), ic.getMixedIn(), argumentAdaptersFrom(ic),
                         null,
@@ -138,7 +138,7 @@ extends SingleClassValueFacetAbstract implements ActionDomainEventFacet {
         final ActionDomainEvent<?> event =
                 domainEventHelper.postEventForAction(
                         AbstractDomainEvent.Phase.VALIDATE,
-                        eventType(), null,
+                        getEventType(), null,
                         actionFrom(ic), getIdentified(),
                         ic.getTarget(), ic.getMixedIn(), aic.getArgs(),
                         null,
@@ -154,13 +154,8 @@ extends SingleClassValueFacetAbstract implements ActionDomainEventFacet {
         return null;
     }
 
-    protected Class<?> eventType() {
-        return value();
-    }
-
     public Class<? extends ActionDomainEvent<?>> getEventType() {
-        //noinspection unchecked
-        return _Casts.uncheckedCast(eventType());
+        return _Casts.uncheckedCast(value());
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
index a855d4e..39bc843 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
@@ -214,6 +214,7 @@ implements ImperativeFacet {
             final Interaction.MemberExecutor<Interaction.ActionInvocation> callable =
                     new Interaction.MemberExecutor<Interaction.ActionInvocation>() {
 
+                @SuppressWarnings("rawtypes")
                 @Override
                 public Object execute(final Interaction.ActionInvocation currentExecution) {
 
@@ -238,6 +239,7 @@ implements ImperativeFacet {
 
 
                         // ... post the executing event
+                        
                         final ActionDomainEvent<?> event =
                                 domainEventHelper.postEventForAction(
                                         AbstractDomainEvent.Phase.EXECUTING,
@@ -252,14 +254,12 @@ implements ImperativeFacet {
 
                         // invoke method
                         final Object resultPojo = invokeMethodElseFromCache(targetAdapter, argumentAdapters);
-
                         final ObjectAdapter resultAdapterPossiblyCloned = cloneIfViewModelCloneable(resultPojo, mixinElseRegularAdapter);
 
-
                         // ... post the executed event
                         domainEventHelper.postEventForAction(
                                 AbstractDomainEvent.Phase.EXECUTED,
-                                eventType, verify(event),
+                                getEventType(), (ActionDomainEvent)event,
                                 owningAction, owningAction, targetAdapter, mixedInAdapter, argumentAdapters,
                                 command,
                                 resultAdapterPossiblyCloned);
@@ -514,15 +514,6 @@ implements ImperativeFacet {
         }
     }
 
-
-    /**
-     * Optional hook, previously to allow facet implementations of (now removed) annotations to to discard the event if the domain event
-     * was incompatible.  Now a no-op I think.
-     */
-    protected ActionDomainEvent<?> verify(final ActionDomainEvent<?> event) {
-        return event;
-    }
-
     /**
      * For testing only.
      */
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/publishing/PublishedActionFacetForActionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/publishing/PublishedActionFacetForActionAnnotation.java
index 13fd010..96cb186 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/publishing/PublishedActionFacetForActionAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/publishing/PublishedActionFacetForActionAnnotation.java
@@ -61,6 +61,7 @@ public class PublishedActionFacetForActionAnnotation extends PublishedActionFace
                         return null;
                     case ENABLED:
                         return new PublishedActionFacetForActionAnnotation(holder);
+                    default:
                     }
                     throw new IllegalStateException("publishing '" + publishing + "' not recognised");
                 })
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetForActionLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetForActionLayoutAnnotation.java
index 7e52e4e..569d3dc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetForActionLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetForActionLayoutAnnotation.java
@@ -44,6 +44,7 @@ public class BookmarkPolicyFacetForActionLayoutAnnotation extends BookmarkPolicy
                         return new BookmarkPolicyFacetForActionLayoutAnnotation(bookmarkPolicy, holder);
                     case NEVER:
                         return null;
+                    default:
                     }
                     throw new IllegalStateException("bookmarkPolicy '" + bookmarkPolicy + "' not recognised");
                 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/disabled/DisabledFacetForCollectionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/disabled/DisabledFacetForCollectionAnnotation.java
index a229f86..33d2551 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/disabled/DisabledFacetForCollectionAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/disabled/DisabledFacetForCollectionAnnotation.java
@@ -55,6 +55,8 @@ public class DisabledFacetForCollectionAnnotation extends DisabledFacetAbstractI
 
                     case ENABLED:
                         return null;
+                    default:
+                        break;
                     }
                     throw new IllegalStateException("editing '" + editing + "' not recognised");
                 })
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java
index 4a32bb6..7059ea5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.core.metamodel.facets.collections.collection.modify;
 
+import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
+
 import java.util.Set;
 
 import org.apache.isis.applib.events.domain.AbstractDomainEvent;
@@ -88,10 +90,11 @@ implements CollectionAddToFacet {
         // execute the add wrapped between the executing and executed events ...
 
         // ... post the executing event
+        
         final CollectionDomainEvent<?, ?> event =
                 domainEventHelper.postEventForCollection(
                         AbstractDomainEvent.Phase.EXECUTING,
-                        eventType(), null,
+                        getEventType(), null,
                         getIdentified(), targetAdapter,
                         CollectionDomainEvent.Of.ADD_TO,
                         referencedObject);
@@ -102,21 +105,15 @@ implements CollectionAddToFacet {
         // ... post the executed event
         domainEventHelper.postEventForCollection(
                 AbstractDomainEvent.Phase.EXECUTED,
-                value(), verify(event),
+                getEventType(), uncheckedCast((CollectionDomainEvent<?, ?>)event),
                 getIdentified(), targetAdapter,
                 CollectionDomainEvent.Of.ADD_TO,
                 referencedObject);
     }
 
-    private Class<? extends CollectionDomainEvent<?, ?>> eventType() {
-        return value();
+    public <S, T> Class<? extends CollectionDomainEvent<S, T>> getEventType() {
+        return uncheckedCast(value());
     }
 
-    /**
-     * Optional hook to allow the facet implementation of now-deleted annotations to discard the event if of a different type; now a no-op, I think.
-     */
-    protected CollectionDomainEvent<?, ?> verify(CollectionDomainEvent<?, ?> event) {
-        return event;
-    }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java
index b430213..ead0ca5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionDomainEventFacetAbstract.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.services.i18n.TranslationService;
 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.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.core.metamodel.facets.DomainEventHelper;
@@ -64,7 +65,7 @@ public abstract class CollectionDomainEventFacetAbstract extends SingleClassValu
         final CollectionDomainEvent<?, ?> event =
                 domainEventHelper.postEventForCollection(
                         AbstractDomainEvent.Phase.HIDE,
-                        eventType(), null,
+                        getEventType(), null,
                         getIdentified(), ic.getTarget(),
                         CollectionDomainEvent.Of.ACCESS,
                         null);
@@ -80,7 +81,7 @@ public abstract class CollectionDomainEventFacetAbstract extends SingleClassValu
         final CollectionDomainEvent<?, ?> event =
                 domainEventHelper.postEventForCollection(
                         AbstractDomainEvent.Phase.DISABLE,
-                        eventType(), null,
+                        getEventType(), null,
                         getIdentified(), ic.getTarget(),
                         CollectionDomainEvent.Of.ACCESS,
                         null);
@@ -108,7 +109,7 @@ public abstract class CollectionDomainEventFacetAbstract extends SingleClassValu
         final CollectionDomainEvent<?, ?> event =
                 domainEventHelper.postEventForCollection(
                         AbstractDomainEvent.Phase.VALIDATE,
-                        eventType(), null,
+                        getEventType(), null,
                         getIdentified(), ic.getTarget(),
                         of,
                         proposed);
@@ -123,16 +124,8 @@ public abstract class CollectionDomainEventFacetAbstract extends SingleClassValu
         return null;
     }
 
-    private Class<?> eventType() {
-        return value();
-    }
-
-    /**
-     * For testing.
-     */
-    public Class<? extends CollectionDomainEvent<?, ?>> getEventType() {
-        Class eventType = eventType();
-        return eventType;
+    public <S, T> Class<? extends CollectionDomainEvent<S, T>> getEventType() {
+        return _Casts.uncheckedCast(value());
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java
index 9d5a9eb..d38bb50 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java
@@ -19,10 +19,13 @@
 
 package org.apache.isis.core.metamodel.facets.collections.collection.modify;
 
+import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
+
 import java.util.Collection;
 
 import org.apache.isis.applib.events.domain.AbstractDomainEvent;
 import org.apache.isis.applib.events.domain.CollectionDomainEvent;
+import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -90,7 +93,7 @@ implements CollectionRemoveFromFacet {
         final CollectionDomainEvent<?, ?> event =
                 domainEventHelper.postEventForCollection(
                         AbstractDomainEvent.Phase.EXECUTING,
-                        eventType(), null,
+                        getEventType(), null,
                         getIdentified(), targetAdapter,
                         CollectionDomainEvent.Of.REMOVE_FROM,
                         referencedObject);
@@ -101,22 +104,14 @@ implements CollectionRemoveFromFacet {
         // ... and post the executed event
         domainEventHelper.postEventForCollection(
                 AbstractDomainEvent.Phase.EXECUTED,
-                value(), verify(event),
+                getEventType(), uncheckedCast((CollectionDomainEvent<?, ?>)event),
                 getIdentified(), targetAdapter,
                 CollectionDomainEvent.Of.REMOVE_FROM,
                 referencedObject);
     }
 
-    private Class<? extends CollectionDomainEvent<?, ?>> eventType() {
-        return value();
-    }
-
-    /**
-     * Optional hook to allow the facet implementation for now removed annotations
-     * to discard the event if of a different type.  Now a no-op, I think.
-     */
-    protected CollectionDomainEvent<?, ?> verify(CollectionDomainEvent<?, ?> event) {
-        return event;
+    public <S, T> Class<? extends CollectionDomainEvent<S, T>> getEventType() {
+        return _Casts.uncheckedCast(value());
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/notpersisted/NotPersistedFacetForCollectionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/notpersisted/NotPersistedFacetForCollectionAnnotation.java
index b016553..be0856c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/notpersisted/NotPersistedFacetForCollectionAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/notpersisted/NotPersistedFacetForCollectionAnnotation.java
@@ -47,6 +47,7 @@ public class NotPersistedFacetForCollectionAnnotation extends NotPersistedFacetA
                         return null;
                     case EXCLUDED:
                         return new NotPersistedFacetForCollectionAnnotation(holder);
+                    default:
                     }
                     throw new IllegalStateException("mementoSerialization '" + mementoSerialization + "' not recognized");
                 })
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java
index f47663c..2bcb1af 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java
@@ -19,7 +19,6 @@
 package org.apache.isis.core.metamodel.facets.collections.layout;
 
 import java.util.List;
-import java.util.Properties;
 
 import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -48,7 +47,6 @@ public class CollectionLayoutFacetFactory extends FacetFactoryAbstract implement
 
         final FacetHolder holder = processMethodContext.getFacetHolder();
 
-        Properties properties = null;
         final List<CollectionLayout> collectionLayouts = Annotations.getAnnotations(processMethodContext.getMethod(), CollectionLayout.class);
 
 
@@ -93,11 +91,6 @@ public class CollectionLayoutFacetFactory extends FacetFactoryAbstract implement
     @Override
     public void process(ProcessContributeeMemberContext processMemberContext) {
 
-        final FacetHolder holder = processMemberContext.getFacetHolder();
-
-        Properties properties = null;
-
-
         // cssClass
         CssClassFacet cssClassFacet = null;
         FacetUtil.addFacet(cssClassFacet);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutAnnotation.java
index 47e457b..3df9063 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionLayoutAnnotation.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.core.metamodel.facets.collections.layout;
 
+import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
+
 import java.util.Comparator;
 import java.util.List;
 
@@ -39,7 +41,7 @@ public class SortedByFacetForCollectionLayoutAnnotation extends SortedByFacetAbs
                 .filter(Comparator.class::isAssignableFrom)
                 .findFirst()
                 .map(sortedBy -> {
-                    Class<? extends Comparator<?>> sortedByForceGenerics = sortedBy;
+                    Class<? extends Comparator<?>> sortedByForceGenerics = uncheckedCast(sortedBy);
                     return new SortedByFacetForCollectionLayoutAnnotation(sortedByForceGenerics, holder);
                 })
                 .orElse(null);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionXml.java
index b030736..5816f3f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionXml.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/SortedByFacetForCollectionXml.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.core.metamodel.facets.collections.layout;
 
+import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
+
 import java.util.Comparator;
 
 import org.apache.isis.applib.layout.component.CollectionLayoutData;
@@ -37,12 +39,12 @@ public class SortedByFacetForCollectionXml extends SortedByFacetAbstract {
         if (sortedBy == null) {
             return null;
         }
-        final Class sortedByClass = ClassUtil.forName(sortedBy);
+        final Class<?> sortedByClass = ClassUtil.forName(sortedBy);
         if(sortedByClass == Comparator.class) {
             return null;
         }
 
-        return sortedByClass != null ? new SortedByFacetForCollectionXml(sortedByClass, holder) : null;
+        return sortedByClass != null ? new SortedByFacetForCollectionXml(uncheckedCast(sortedByClass), holder) : null;
     }
 
     private SortedByFacetForCollectionXml(Class<? extends Comparator<?>> sortedBy, FacetHolder holder) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CreatedLifecycleEventFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CreatedLifecycleEventFacetForDomainObjectAnnotation.java
index bf3af3d..015be1e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CreatedLifecycleEventFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CreatedLifecycleEventFacetForDomainObjectAnnotation.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.metamodel.facets.object.callbacks;
 
 import org.apache.isis.applib.events.lifecycle.AbstractLifecycleEvent;
 import org.apache.isis.applib.events.lifecycle.ObjectCreatedEvent;
+import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.SingleClassValueFacetAbstract;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
@@ -40,11 +41,8 @@ public class CreatedLifecycleEventFacetForDomainObjectAnnotation extends SingleC
 
     @Override
     public Class<? extends AbstractLifecycleEvent<?>> getEventType() {
-        //noinspection unchecked
-        return eventType();
+        return _Casts.uncheckedCast(value());
     }
 
-    Class eventType() {
-        return value();
-    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/LoadedLifecycleEventFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/LoadedLifecycleEventFacetForDomainObjectAnnotation.java
index a0c15ff..7784e03 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/LoadedLifecycleEventFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/LoadedLifecycleEventFacetForDomainObjectAnnotation.java
@@ -20,6 +20,7 @@
 package org.apache.isis.core.metamodel.facets.object.callbacks;
 
 import org.apache.isis.applib.events.lifecycle.ObjectLoadedEvent;
+import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.SingleClassValueFacetAbstract;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
@@ -39,12 +40,7 @@ public class LoadedLifecycleEventFacetForDomainObjectAnnotation extends SingleCl
 
     @Override
     public Class<? extends ObjectLoadedEvent<?>> getEventType() {
-        //noinspection unchecked
-        return eventType();
-    }
-
-    Class eventType() {
-        return value();
+        return _Casts.uncheckedCast(value());
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/PersistedLifecycleEventFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/PersistedLifecycleEventFacetForDomainObjectAnnotation.java
index aef38e6..f8c4ea4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/PersistedLifecycleEventFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/PersistedLifecycleEventFacetForDomainObjectAnnotation.java
@@ -20,6 +20,7 @@
 package org.apache.isis.core.metamodel.facets.object.callbacks;
 
 import org.apache.isis.applib.events.lifecycle.ObjectPersistedEvent;
+import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.SingleClassValueFacetAbstract;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
@@ -39,12 +40,7 @@ public class PersistedLifecycleEventFacetForDomainObjectAnnotation extends Singl
 
     @Override
     public Class<? extends ObjectPersistedEvent<?>> getEventType() {
-        //noinspection unchecked
-        return eventType();
-    }
-
-    Class eventType() {
-        return value();
+        return _Casts.uncheckedCast(value());
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/PersistingLifecycleEventFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/PersistingLifecycleEventFacetForDomainObjectAnnotation.java
index 14a9163..5adfb1f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/PersistingLifecycleEventFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/PersistingLifecycleEventFacetForDomainObjectAnnotation.java
@@ -20,6 +20,7 @@
 package org.apache.isis.core.metamodel.facets.object.callbacks;
 
 import org.apache.isis.applib.events.lifecycle.ObjectPersistingEvent;
+import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.SingleClassValueFacetAbstract;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
@@ -39,12 +40,7 @@ public class PersistingLifecycleEventFacetForDomainObjectAnnotation extends Sing
 
     @Override
     public Class<? extends ObjectPersistingEvent<?>> getEventType() {
-        //noinspection unchecked
-        return eventType();
-    }
-
-    Class eventType() {
-        return value();
+        return _Casts.uncheckedCast(value());
     }
 
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/RemovingLifecycleEventFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/RemovingLifecycleEventFacetForDomainObjectAnnotation.java
index bbbd0eb..c199589 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/RemovingLifecycleEventFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/RemovingLifecycleEventFacetForDomainObjectAnnotation.java
@@ -20,6 +20,7 @@
 package org.apache.isis.core.metamodel.facets.object.callbacks;
 
 import org.apache.isis.applib.events.lifecycle.ObjectRemovingEvent;
+import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.SingleClassValueFacetAbstract;
@@ -40,13 +41,7 @@ public class RemovingLifecycleEventFacetForDomainObjectAnnotation extends Single
 
     @Override
     public Class<? extends ObjectRemovingEvent<?>> getEventType() {
-        //noinspection unchecked
-        return eventType();
+        return _Casts.uncheckedCast(value());
     }
 
-    Class eventType() {
-        return value();
-    }
-
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/UpdatedLifecycleEventFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/UpdatedLifecycleEventFacetForDomainObjectAnnotation.java
index f12d4b2..e739ef4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/UpdatedLifecycleEventFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/UpdatedLifecycleEventFacetForDomainObjectAnnotation.java
@@ -20,6 +20,7 @@
 package org.apache.isis.core.metamodel.facets.object.callbacks;
 
 import org.apache.isis.applib.events.lifecycle.ObjectUpdatedEvent;
+import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.SingleClassValueFacetAbstract;
@@ -40,13 +41,7 @@ public class UpdatedLifecycleEventFacetForDomainObjectAnnotation extends SingleC
 
     @Override
     public Class<? extends ObjectUpdatedEvent<?>> getEventType() {
-        //noinspection unchecked
-        return eventType();
+        return _Casts.uncheckedCast(value());
     }
 
-    Class eventType() {
-        return value();
-    }
-
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/UpdatingLifecycleEventFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/UpdatingLifecycleEventFacetForDomainObjectAnnotation.java
index cb17e25..8d2d400 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/UpdatingLifecycleEventFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/UpdatingLifecycleEventFacetForDomainObjectAnnotation.java
@@ -20,6 +20,7 @@
 package org.apache.isis.core.metamodel.facets.object.callbacks;
 
 import org.apache.isis.applib.events.lifecycle.ObjectUpdatingEvent;
+import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.SingleClassValueFacetAbstract;
@@ -40,13 +41,7 @@ public class UpdatingLifecycleEventFacetForDomainObjectAnnotation extends Single
 
     @Override
     public Class<? extends ObjectUpdatingEvent<?>> getEventType() {
-        //noinspection unchecked
-        return eventType();
+        return _Casts.uncheckedCast(value());
     }
 
-    Class eventType() {
-        return value();
-    }
-
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/ImmutableFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/ImmutableFacetForDomainObjectAnnotation.java
index c5bd46b..5f7a2b6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/ImmutableFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/ImmutableFacetForDomainObjectAnnotation.java
@@ -63,6 +63,7 @@ public class ImmutableFacetForDomainObjectAnnotation extends ImmutableFacetAbstr
                         return new ImmutableFacetForDomainObjectAnnotation(disabledReason, holder);
                     case ENABLED:
                         return null;
+                    default:
                     }
                     throw new IllegalStateException("domainObject.editing() not recognised, is " + domainObject.editing());
                 })
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java
index 39e8533..e8449c3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java
@@ -21,15 +21,13 @@ package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
 
 import java.util.List;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import org.apache.isis.applib.NonRecoverableException;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.events.ui.TitleUiEvent;
 import org.apache.isis.applib.services.eventbus.EventBusService;
 import org.apache.isis.applib.services.i18n.TranslatableString;
 import org.apache.isis.applib.services.i18n.TranslationService;
+import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -42,7 +40,7 @@ import org.apache.isis.core.metamodel.util.EventUtil;
 
 public class TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent extends TitleFacetAbstract {
 
-    private static final Logger LOG = LoggerFactory.getLogger(TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.class);
+    //private static final Logger LOG = LoggerFactory.getLogger(TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.class);
 
     public static Facet create(
             final List<DomainObjectLayout> domainObjectLayouts,
@@ -119,7 +117,7 @@ public class TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent extends
 
     private TitleUiEvent<Object> newTitleUiEvent(final Object domainObject) {
         try {
-            final TitleUiEvent<Object> titleUiEvent = (TitleUiEvent<Object>) titleUiEventClass.newInstance();
+            final TitleUiEvent<Object> titleUiEvent = _Casts.uncheckedCast(titleUiEventClass.newInstance());
             titleUiEvent.setSource(domainObject);
             return titleUiEvent;
         } catch (InstantiationException | IllegalAccessException ex) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservicelayout/DomainServiceLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservicelayout/DomainServiceLayoutFacetFactory.java
index 83d5418..3ddd54e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservicelayout/DomainServiceLayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservicelayout/DomainServiceLayoutFacetFactory.java
@@ -30,8 +30,6 @@ import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.object.domainservice.DomainServiceMenuOrder;
 import org.apache.isis.core.metamodel.facets.object.domainservicelayout.annotation.DomainServiceLayoutFacetAnnotation;
 
-
-
 public class DomainServiceLayoutFacetFactory extends FacetFactoryAbstract {
 
     public DomainServiceLayoutFacetFactory() {
@@ -78,13 +76,4 @@ public class DomainServiceLayoutFacetFactory extends FacetFactoryAbstract {
                 FacetUtil.addFacet(NamedFacetForDomainServiceLayoutAnnotation.create(domainServiceLayouts, facetHolder));
     }
 
-    private static String coalesce(final String... reasons) {
-        for (final String reason : reasons) {
-            if(reason != null) {
-                return reason;
-            }
-        }
-        return null;
-    }
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetDefault.java
index c5c38bd..0a953ce 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetDefault.java
@@ -18,9 +18,6 @@
  */
 package org.apache.isis.core.metamodel.facets.object.grid;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import org.apache.isis.applib.layout.grid.Grid;
 import org.apache.isis.applib.services.grid.GridService;
 import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -32,8 +29,7 @@ public class GridFacetDefault
 extends FacetAbstract
 implements GridFacet {
 
-    private static final Logger LOG = LoggerFactory.getLogger(GridFacetDefault.class);
-
+    //private static final Logger LOG = LoggerFactory.getLogger(GridFacetDefault.class);
 
     public static Class<? extends Facet> type() {
         return GridFacet.class;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetFactory.java
index aa3e52f..9179974 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetFactory.java
@@ -16,9 +16,6 @@
  * under the License. */
 package org.apache.isis.core.metamodel.facets.object.grid;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import org.apache.isis.applib.services.grid.GridService;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
@@ -27,7 +24,7 @@ import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 
 public class GridFacetFactory extends FacetFactoryAbstract {
 
-    private static final Logger LOG = LoggerFactory.getLogger(GridFacetFactory.class);
+    //private static final Logger LOG = LoggerFactory.getLogger(GridFacetFactory.class);
 
     public GridFacetFactory() {
         super(FeatureType.OBJECTS_ONLY);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParserUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParserUtil.java
index 50d0939..7fb3034 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParserUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParserUtil.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.core.metamodel.facets.object.parseable;
 
+import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
+
 import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.core.commons.config.IsisConfiguration;
@@ -39,11 +41,17 @@ public final class ParserUtil {
         return !_Strings.isNullOrEmpty(parserName) ? parserName : null;
     }
 
-    @SuppressWarnings("unchecked")
     public static Class<? extends Parser<?>> parserOrNull(final Class<?> candidateClass, final String classCandidateName) {
-        @SuppressWarnings("rawtypes")
-        final Class type = candidateClass != null ? ClassUtil.implementingClassOrNull(candidateClass.getName(), Parser.class, FacetHolder.class) : null;
-        return type != null ? type : (Class)ClassUtil.implementingClassOrNull(classCandidateName, Parser.class, FacetHolder.class);
+        
+        final Class<? extends Parser<?>> type = candidateClass != null 
+                ? uncheckedCast(ClassUtil.implementingClassOrNull(
+                        candidateClass.getName(), Parser.class, FacetHolder.class)) 
+                        : null;
+        
+        return type != null 
+                ? type 
+                        : uncheckedCast(ClassUtil.implementingClassOrNull(
+                                classCandidateName, Parser.class, FacetHolder.class));
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderUtil.java
index 154d886..48dd3a9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderUtil.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.core.metamodel.facets.object.value.vsp;
 
+import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
+
 import org.apache.isis.applib.adapters.ValueSemanticsProvider;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.core.commons.config.IsisConfiguration;
@@ -39,11 +41,17 @@ public final class ValueSemanticsProviderUtil {
         return !_Strings.isNullOrEmpty(semanticsProviderName) ? semanticsProviderName : null;
     }
 
-    @SuppressWarnings("unchecked")
+    
     public static Class<? extends ValueSemanticsProvider<?>> valueSemanticsProviderOrNull(final Class<?> candidateClass, final String classCandidateName) {
-        @SuppressWarnings("rawtypes")
-        final Class clazz = candidateClass != null ? ClassUtil.implementingClassOrNull(candidateClass.getName(), ValueSemanticsProvider.class, FacetHolder.class) : null;
-        return clazz != null ? clazz : (Class)ClassUtil.implementingClassOrNull(classCandidateName, ValueSemanticsProvider.class, FacetHolder.class);
+    
+        final Class<? extends ValueSemanticsProvider<?>> clazz = candidateClass != null 
+                ? uncheckedCast(ClassUtil.implementingClassOrNull(
+                        candidateClass.getName(), ValueSemanticsProvider.class, FacetHolder.class)) 
+                        : null;
+        return clazz != null 
+                ? clazz 
+                        : uncheckedCast(ClassUtil.implementingClassOrNull(
+                                classCandidateName, ValueSemanticsProvider.class, FacetHolder.class));
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mustsatisfyspec/MustSatisfySpecificationFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mustsatisfyspec/MustSatisfySpecificationFacetAbstract.java
index 76c300d..70b9b62 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mustsatisfyspec/MustSatisfySpecificationFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mustsatisfyspec/MustSatisfySpecificationFacetAbstract.java
@@ -67,8 +67,7 @@ public abstract class MustSatisfySpecificationFacetAbstract extends FacetAbstrac
         specificationEvaluator = new SpecificationEvaluator(translationService, translationContext);
     }
 
-    private static void inject(
-            final List specifications, final ServicesInjector servicesInjector) {
+    private static void inject(final List<?> specifications, final ServicesInjector servicesInjector) {
         servicesInjector.injectServicesInto(specifications);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/RenderedAdjustedFacetForParameterLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/RenderedAdjustedFacetForParameterLayoutAnnotation.java
index f3506ff..02a905c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/RenderedAdjustedFacetForParameterLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/RenderedAdjustedFacetForParameterLayoutAnnotation.java
@@ -43,6 +43,7 @@ public class RenderedAdjustedFacetForParameterLayoutAnnotation extends RenderedA
                         return null;
                     case AS_DAY_BEFORE:
                         return new RenderedAdjustedFacetForParameterLayoutAnnotation(holder);
+                    default:
                     }
                     throw new IllegalStateException("renderDay '" + renderDay + "' not recognised");
                 })
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/mandatory/MandatoryFacetForParameterAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/mandatory/MandatoryFacetForParameterAnnotation.java
index 8501b54..842135e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/mandatory/MandatoryFacetForParameterAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/mandatory/MandatoryFacetForParameterAnnotation.java
@@ -56,6 +56,7 @@ public abstract class MandatoryFacetForParameterAnnotation extends MandatoryFace
                         return new MandatoryFacetForParameterAnnotation.Required(holder);
                     case OPTIONAL:
                         return new MandatoryFacetForParameterAnnotation.Optional(holder);
+                    default:
                     }
                     throw new IllegalStateException("optionality '" + optionality + "' not recognised");
                 })
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java
index c63bf47..b147a35 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java
@@ -28,7 +28,6 @@ import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter.Util;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -94,9 +93,6 @@ public class PropertyAutoCompleteFacetMethod extends PropertyAutoCompleteFacetAb
             final String searchArg,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
-        final AuthenticationSession authenticationSession = getAuthenticationSession();
-        final DeploymentCategory deploymentCategory = getDeploymentCategory();
-
         final Object collectionOrArray = ObjectAdapter.InvokeUtils.invoke(method, owningAdapter, searchArg);
         if (collectionOrArray == null) {
             return null;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/command/CommandFacetForPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/command/CommandFacetForPropertyAnnotation.java
index b7b40d3..b31ef45 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/command/CommandFacetForPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/command/CommandFacetForPropertyAnnotation.java
@@ -70,6 +70,7 @@ public class CommandFacetForPropertyAnnotation extends CommandFacetAbstract {
                                 return null;
                             case ENABLED:
                                 return new CommandFacetForPropertyAnnotation(commandPersistence, commandExecuteIn, Enablement.ENABLED, holder, processor, servicesInjector);
+                            default:
                             }
                             throw new IllegalStateException("command '" + command + "' not recognised");
                 })
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/disabled/DisabledFacetForPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/disabled/DisabledFacetForPropertyAnnotation.java
index fecd07c..6a9a490 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/disabled/DisabledFacetForPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/disabled/DisabledFacetForPropertyAnnotation.java
@@ -50,6 +50,7 @@ public class DisabledFacetForPropertyAnnotation extends DisabledFacetAbstractImp
                         return new DisabledFacetForPropertyAnnotation(disabledReason, holder);
                     case ENABLED:
                         return new DisabledFacetForPropertyAnnotationInvertedSemantics(holder);
+                    default:
                     }
                     return null;
                 })
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/mandatory/MandatoryFacetForPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/mandatory/MandatoryFacetForPropertyAnnotation.java
index 2b6368e..6731e91 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/mandatory/MandatoryFacetForPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/mandatory/MandatoryFacetForPropertyAnnotation.java
@@ -62,6 +62,7 @@ public abstract class MandatoryFacetForPropertyAnnotation extends MandatoryFacet
                         return new MandatoryFacetForPropertyAnnotation.Required(holder);
                     case OPTIONAL:
                         return new MandatoryFacetForPropertyAnnotation.Optional(holder);
+                    default:
                     }
                     throw new IllegalStateException("optionality '" + optionality + "' not recognised");
                 })
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java
index 4c42856..2a75197 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.services.i18n.TranslationService;
 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.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.core.metamodel.facets.DomainEventHelper;
@@ -70,7 +71,7 @@ extends SingleClassValueFacetAbstract implements PropertyDomainEventFacet {
         final PropertyDomainEvent<?, ?> event =
                 domainEventHelper.postEventForProperty(
                         AbstractDomainEvent.Phase.HIDE,
-                        eventType(), null,
+                        getEventType(), null,
                         getIdentified(), ic.getTarget(),
                         null, null);
         if (event != null && event.isHidden()) {
@@ -85,7 +86,7 @@ extends SingleClassValueFacetAbstract implements PropertyDomainEventFacet {
         final PropertyDomainEvent<?, ?> event =
                 domainEventHelper.postEventForProperty(
                         AbstractDomainEvent.Phase.DISABLE,
-                        eventType(), null,
+                        getEventType(), null,
                         getIdentified(), ic.getTarget(),
                         null, null);
         if (event != null && event.isDisabled()) {
@@ -108,7 +109,7 @@ extends SingleClassValueFacetAbstract implements PropertyDomainEventFacet {
         final PropertyDomainEvent<?, ?> event =
                 domainEventHelper.postEventForProperty(
                         AbstractDomainEvent.Phase.VALIDATE,
-                        eventType(), null,
+                        getEventType(), null,
                         getIdentified(), ic.getTarget(),
                         oldValue, proposedValue);
         if (event != null && event.isInvalid()) {
@@ -128,15 +129,7 @@ extends SingleClassValueFacetAbstract implements PropertyDomainEventFacet {
         return proposedAdapter != null? proposedAdapter.getPojo(): null;
     }
 
-    private Class<?> eventType() {
-        return value();
-    }
-
-    /**
-     * For testing.
-     */
-    public Class<? extends PropertyDomainEvent<?, ?>> getEventType() {
-        Class eventType = eventType();
-        return eventType;
+    public <S, T> Class<? extends PropertyDomainEvent<S, T>> getEventType() {
+        return _Casts.uncheckedCast(value());
     }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
index 27c7027..1f1ed60 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.core.metamodel.facets.properties.property.modify;
 
+import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
+
 import java.sql.Timestamp;
 import java.util.Objects;
 
@@ -238,7 +240,7 @@ extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>> {
                         final PropertyDomainEvent<?, ?> event =
                                 domainEventHelper.postEventForProperty(
                                         AbstractDomainEvent.Phase.EXECUTING,
-                                        eventType(), null,
+                                        getEventType(), null,
                                         getIdentified(), targetAdapter,
                                         oldValue, newValue);
 
@@ -259,7 +261,7 @@ extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>> {
                             // ... post the executed event
                             domainEventHelper.postEventForProperty(
                                     AbstractDomainEvent.Phase.EXECUTED,
-                                    eventType(), verify(event),
+                                    getEventType(), uncheckedCast((PropertyDomainEvent<?, ?>)event),
                                     getIdentified(), targetAdapter,
                                     oldValue, actualNewValue);
                         }
@@ -281,7 +283,7 @@ extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>> {
             interaction.execute(executor, execution);
 
             // handle any exceptions
-            final Interaction.Execution priorExecution = interaction.getPriorExecution();
+            final Interaction.Execution<?, ?> priorExecution = interaction.getPriorExecution();
 
             // TODO: should also sync DTO's 'threw' attribute here...?
 
@@ -302,19 +304,10 @@ extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>> {
         }
     }
 
-    private Class<? extends PropertyDomainEvent<?, ?>> eventType() {
-        return value();
-    }
-
-    /**
-     * Optional hook to allow the facet implementation for now-deleted annotations to discard an event if incompatible.
-     * Now in effect redundant.
-     */
-    protected PropertyDomainEvent<?, ?> verify(PropertyDomainEvent<?, ?> event) {
-        return event;
+    public <S, T> Class<? extends PropertyDomainEvent<S, T>> getEventType() {
+        return uncheckedCast(value());
     }
 
-
     private InteractionDtoServiceInternal getInteractionDtoServiceInternal() {
         return servicesInjector.lookupServiceElseFail(InteractionDtoServiceInternal.class);
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/publishing/PublishedPropertyFacetForPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/publishing/PublishedPropertyFacetForPropertyAnnotation.java
index 7d00aa7..ff82d74 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/publishing/PublishedPropertyFacetForPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/publishing/PublishedPropertyFacetForPropertyAnnotation.java
@@ -56,6 +56,7 @@ public class PublishedPropertyFacetForPropertyAnnotation extends PublishedProper
                         return null;
                     case ENABLED:
                         return new PublishedPropertyFacetForPropertyAnnotation(holder);
+                    default:
                     }
                     return null;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutAnnotation.java
index a6d03e4..3178760 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutAnnotation.java
@@ -66,7 +66,7 @@ public class PromptStyleFacetForPropertyLayoutAnnotation extends PromptStyleFace
 
                         promptStyle = PromptStyleConfiguration.parse(configuration);
                         return new PromptStyleFacetAsConfigured(promptStyle, holder);
-
+                    default:
                     }
                     throw new IllegalStateException("promptStyle '" + promptStyle + "' not recognised");
                 })
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java
index 6884548..4cfb2d2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PropertyLayoutFacetFactory.java
@@ -140,8 +140,6 @@ public class PropertyLayoutFacetFactory extends FacetFactoryAbstract implements
 
     @Override
     public void process(ProcessContributeeMemberContext processMemberContext) {
-        final FacetHolder holder = processMemberContext.getFacetHolder();
-
 
         // cssClass
         CssClassFacet cssClassFacet = null;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyLayoutAnnotation.java
index f98e43e..20609eb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/RenderedAdjustedFacetForPropertyLayoutAnnotation.java
@@ -43,6 +43,7 @@ public class RenderedAdjustedFacetForPropertyLayoutAnnotation extends RenderedAd
                         return null;
                     case AS_DAY_BEFORE:
                         return new RenderedAdjustedFacetForPropertyLayoutAnnotation(holder);
+                    default:
                     }
                     throw new IllegalStateException("renderDay '" + renderDay + "' not recognised");
                 })
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/UnchangingFacetForPropertyLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/UnchangingFacetForPropertyLayoutAnnotation.java
index 0458a11..d1f38e6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/UnchangingFacetForPropertyLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/UnchangingFacetForPropertyLayoutAnnotation.java
@@ -46,6 +46,7 @@ public class UnchangingFacetForPropertyLayoutAnnotation extends UnchangingFacetA
                     case NO_REPAINT:
                         unchanging = true;
                         return new UnchangingFacetForPropertyLayoutAnnotation(unchanging, holder);
+                    default:
                     }
                     throw new IllegalStateException("repainting '" + repainting + "' not recognised");
                 })
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/DeweyOrderSet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/DeweyOrderSet.java
index 11568f9..f993e93 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/DeweyOrderSet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layout/DeweyOrderSet.java
@@ -112,9 +112,7 @@ public class DeweyOrderSet implements Comparable<DeweyOrderSet>, Iterable<Object
         // now populate the OrderSets
         for (final String groupName : groupNames) {
             final DeweyOrderSet deweyOrderSet = orderSetsByGroup.get(groupName);
-            // REVIEW: something fishy happens here with casting, hence warnings
-            // left in
-            final SortedSet sortedMembers = sortedMembersByGroup.get(groupName);
+            final SortedSet<IdentifiedHolder> sortedMembers = sortedMembersByGroup.get(groupName);
             deweyOrderSet.addAll(sortedMembers);
             deweyOrderSet.copyOverChildren();
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/InjectorMethodEvaluatorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/InjectorMethodEvaluatorDefault.java
index b5cbb6c..c4a40bb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/InjectorMethodEvaluatorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/InjectorMethodEvaluatorDefault.java
@@ -22,15 +22,12 @@ package org.apache.isis.core.metamodel.specloader;
 import java.lang.reflect.Method;
 import java.util.Map;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.core.metamodel.spec.InjectorMethodEvaluator;
 
 public final class InjectorMethodEvaluatorDefault implements InjectorMethodEvaluator {
 
-    private final static Logger LOG = LoggerFactory.getLogger(InjectorMethodEvaluatorDefault.class);
+    //private final static Logger LOG = LoggerFactory.getLogger(InjectorMethodEvaluatorDefault.class);
 
     private final Map<Method, Map<Class<?>, Boolean>> isInjectorMethod = _Maps.newConcurrentHashMap();
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/classsubstitutor/ClassSubstitutor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/classsubstitutor/ClassSubstitutor.java
index 0f29c53..31e461d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/classsubstitutor/ClassSubstitutor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/classsubstitutor/ClassSubstitutor.java
@@ -88,13 +88,13 @@ public class ClassSubstitutor {
     private final Set<Class<?>> classesToIgnore = _Sets.newHashSet();
     private final Set<String> classNamesToIgnore = _Sets.newHashSet();
 
-    /**
-     * For any classes registered as ignored, {@link #getClass(Class)} will
-     * return <tt>null</tt>.
-     */
-    private boolean ignore(final Class<?> q) {
-        return classesToIgnore.add(q);
-    }
+//    /**
+//     * For any classes registered as ignored, {@link #getClass(Class)} will
+//     * return <tt>null</tt>.
+//     */
+//    private boolean ignore(final Class<?> q) {
+//        return classesToIgnore.add(q);
+//    }
 
     /**
      * For any classes registered as ignored, {@link #getClass(Class)} will
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/CollectionFacetOnStandaloneList.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/CollectionFacetOnStandaloneList.java
index b5ffdd5..7290e7e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/CollectionFacetOnStandaloneList.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/CollectionFacetOnStandaloneList.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.core.metamodel.specloader.specimpl.standalonelist;
 
+import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
+
 import java.util.List;
 import java.util.function.Supplier;
 import java.util.stream.Stream;
@@ -41,7 +43,7 @@ public class CollectionFacetOnStandaloneList extends CollectionFacetAbstract {
     public <T extends ManagedObject> Stream<T> stream(T wrappedObjectList) {
         final List<ManagedObject> list = collection(wrappedObjectList);
         return list.stream()
-                .map(x->(T)x);
+                .map(x->uncheckedCast(x));
     }
 
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
index 8a2892e..5f9a5e7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
@@ -52,10 +52,7 @@ public final class JavaReflectorHelper  {
             metaModelRefiner.refineMetaModelValidator(metaModelValidator, configuration);
         }
 
-        // the programming model is itself also a MetaModelValidatorRefiner
-        if(!metaModelRefiners.contains(programmingModel)) {
-            programmingModel.refineMetaModelValidator(metaModelValidator, configuration);
-        }
+        programmingModel.refineMetaModelValidator(metaModelValidator, configuration);
 
         return new SpecificationLoader(configuration, programmingModel, metaModelValidator, servicesInjector);
     }