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 2022/08/11 19:30:51 UTC

[isis] branch master updated: ISIS-3119: remove IdStringifier.SupportingTargetEntityClass

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 39b762ddcd ISIS-3119: remove IdStringifier.SupportingTargetEntityClass
39b762ddcd is described below

commit 39b762ddcdb4cdb0aec89932a6e8800d8923328e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Aug 11 23:30:43 2022 +0200

    ISIS-3119: remove IdStringifier.SupportingTargetEntityClass
    
    - also swapping arguments in destringify(...)
---
 .../applib/services/bookmark/IdStringifier.java    | 37 +++++++++++-----------
 .../ValueSemanticsBasedOnIdStringifier.java        | 15 ++-------
 ...manticsBasedOnIdStringifierEntityAgnostic.java} | 21 +++++++++---
 .../valuesemantics/BigDecimalValueSemantics.java   |  5 ++-
 .../valuesemantics/BigIntegerValueSemantics.java   |  5 ++-
 .../valuesemantics/ByteValueSemantics.java         |  5 ++-
 .../valuesemantics/CharacterValueSemantics.java    |  5 ++-
 .../valuesemantics/IntValueSemantics.java          |  5 ++-
 .../valuesemantics/LongValueSemantics.java         |  5 ++-
 .../valuesemantics/SerializableValueSemantics.java |  4 +--
 .../valuesemantics/ShortValueSemantics.java        |  5 ++-
 .../valuesemantics/StringValueSemantics.java       |  5 ++-
 .../valuesemantics/UUIDValueSemantics.java         |  2 +-
 .../idstringifier/IdStringifierService.java        |  5 +--
 .../commandlog/jpa/dom/CommandLogEntryPK.java      |  4 +--
 .../executionlog/jdo/dom/ExecutionLogEntryPK.java  |  4 +--
 .../executionlog/jpa/dom/ExecutionLogEntryPK.java  |  4 +--
 .../jdo/dom/ExecutionOutboxEntryPK.java            |  4 +--
 .../jpa/dom/ExecutionOutboxEntryPK.java            |  4 +--
 .../sessionlog/jpa/dom/SessionLogEntryPK.java      |  4 +--
 .../valuetypes/JdoByteIdValueSemantics.java        |  8 ++---
 .../valuetypes/JdoByteIdentityValueSemantics.java  |  8 ++---
 .../valuetypes/JdoCharIdValueSemantics.java        | 12 +++----
 .../valuetypes/JdoCharIdentityValueSemantics.java  | 12 +++----
 .../JdoDatastoreIdImplValueSemantics.java          | 10 +++---
 .../valuetypes/JdoDatastoreIdValueSemantics.java   | 11 +++----
 .../JdoDatastoreUniqueLongIdValueSemantics.java    |  4 +--
 .../valuetypes/JdoIntIdValueSemantics.java         | 10 +++---
 .../valuetypes/JdoIntIdentityValueSemantics.java   | 10 +++---
 .../valuetypes/JdoLongIdValueSemantics.java        | 10 +++---
 .../valuetypes/JdoLongIdentityValueSemantics.java  | 10 +++---
 .../valuetypes/JdoObjectIdValueSemantics.java      | 10 +++---
 .../JdoObjectIdentityValueSemantics.java           | 10 +++---
 .../valuetypes/JdoShortIdValueSemantics.java       | 10 +++---
 .../valuetypes/JdoShortIdentityValueSemantics.java | 10 +++---
 .../valuetypes/JdoStringIdValueSemantics.java      | 12 +++----
 .../JdoStringIdentityValueSemantics.java           | 12 +++----
 .../oid/IdStringifierForByteIdentity_Test.java     |  2 +-
 .../oid/IdStringifierForCharIdentity_Test.java     |  2 +-
 ...erForDatastoreId_DatastoreIdImpl_long_Test.java |  2 +-
 .../oid/IdStringifierForIntId_Test.java            |  2 +-
 .../oid/IdStringifierForIntIdentity_Test.java      |  2 +-
 .../oid/IdStringifierForLongId_Test.java           |  2 +-
 .../oid/IdStringifierForLongIdentity_Test.java     |  2 +-
 .../oid/IdStringifierForObjectIdentity_Test.java   |  2 +-
 .../oid/IdStringifierForShortIdentity_Test.java    |  2 +-
 .../oid/IdStringifierForStringIdentity_Test.java   |  2 +-
 47 files changed, 168 insertions(+), 169 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java
index a1a596a169..d4c4306cd2 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/IdStringifier.java
@@ -21,7 +21,6 @@
 package org.apache.isis.applib.services.bookmark;
 
 import org.apache.isis.commons.internal.assertions._Assert;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
 
 import lombok.Getter;
 import lombok.NonNull;
@@ -40,7 +39,7 @@ import lombok.val;
  *
  * <p>
  *     The framework provides default implementations of this SPI for JDO (data store and application identity) and
- *     for JPA. Because this is an SPI, other modules or application code can provide their own implementations.
+ *     for JPA. Because this is a SPI, other modules or application code can provide their own implementations.
  *     An example of such is the JPA implementation of the <code>commandlog</code> extension.
  * </p>
  *
@@ -48,6 +47,7 @@ import lombok.val;
  *
  * @since 2.0 {@index}
  */
+@SuppressWarnings("javadoc")
 public interface IdStringifier<T> {
 
     Class<T> getCorrespondingClass();
@@ -56,7 +56,7 @@ public interface IdStringifier<T> {
      * Convert the value (which will be of the same type as returned by {@link #getCorrespondingClass()}
      * into a string representation.
      *
-     * @see #destring(String)
+     * @see #destring(Class, String)
      */
     String enstring(@NonNull T value);
 
@@ -64,27 +64,31 @@ public interface IdStringifier<T> {
      * Convert a string representation of the identifier (as returned by {@link #enstring(Object)}) into an object
      * that can be used to retrieve.
      *
+     * @param targetEntityClass - the class of the target entity, eg <code>Customer</code>.  For both JDO and JPA,
+     *          we always have this information available, and is needed (at least) by the JDO
+     *          implementations of application primary keys using built-ins, eg <code>LongIdentity</code>.
      * @param stringified - as returned by {@link #enstring(Object)}
      */
-    T destring(@NonNull String stringified);
+    T destring(@NonNull Class<?> targetEntityClass, @NonNull String stringified);
 
+    /**
+     * Entity agnostic variant of {@link IdStringifier}.
+     */
+    interface EntityAgnostic<T> extends IdStringifier<T> {
 
-    interface SupportingTargetEntityClass<T> extends IdStringifier<T> {
         /**
          * Convert a string representation of the identifier (as returned by {@link #enstring(Object)}) into an object
          * that can be used to retrieve.
          *
          * @param stringified - as returned by {@link #enstring(Object)}
-         * @param targetEntityClass - the class of the target entity, eg <code>Customer</code>.  For both JDO and JPA,
-         *                                 we always have this information available, and is needed (at least) by the JDO
-         *                                 implementations of application primary keys using built-ins, eg <code>LongIdentity</code>.
          */
-        T destring(@NonNull String stringified, @NonNull Class<?> targetEntityClass);
+        T destring(@NonNull String stringified);
 
         @Override
-        default T destring(@NonNull final String stringified) {
-            throw _Exceptions.unsupportedOperation();
+        default T destring(@NonNull final Class<?> targetEntityClass, @NonNull final String stringified) {
+            return destring(stringified);
         }
+
     }
 
     /**
@@ -98,7 +102,7 @@ public interface IdStringifier<T> {
      * @deprecated not used within the framework; eventually remove
      */
     @Deprecated
-    abstract class AbstractWithPrefix<T> implements SupportingTargetEntityClass<T> {
+    abstract class AbstractWithPrefix<T> implements IdStringifier<T> {
 
         public final static char SEPARATOR = '_';
 
@@ -126,11 +130,6 @@ public interface IdStringifier<T> {
             return prefix + doEnstring(value);
         }
 
-        @Override
-        public final T destring(@NonNull final String stringified) {
-            throw _Exceptions.unsupportedOperation();
-        }
-
         /**
          * Overridable hook
          */
@@ -140,8 +139,8 @@ public interface IdStringifier<T> {
 
         @Override
         public final T destring(
-                final @NonNull String stringified,
-                final @NonNull Class<?> targetEntityClass) {
+                final @NonNull Class<?> targetEntityClass,
+                final @NonNull String stringified) {
             val suffix = removePrefix(stringified);
             return doDestring(suffix, targetEntityClass);
         }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifier.java b/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifier.java
index 2ac4622ec1..2a98d59618 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifier.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifier.java
@@ -28,7 +28,8 @@ import lombok.experimental.Accessors;
 
 /**
  * Convenient base class for value-semantics,
- * that are basically inferred from an {@link IdStringifier}.
+ * that are inferred from an {@link IdStringifier}.
+ * @see IdStringifier
  * @since 2.0
  */
 public abstract class ValueSemanticsBasedOnIdStringifier<T>
@@ -60,16 +61,4 @@ implements
         return value.toString();
     }
 
-    // -- COMPOSER
-
-    @Override
-    public final ValueDecomposition decompose(final T value) {
-        return decomposeAsString(value, this::enstring, ()->null);
-    }
-
-    @Override
-    public final T compose(final ValueDecomposition decomposition) {
-        return composeFromString(decomposition, this::destring, ()->null);
-    }
-
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport.java b/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifierEntityAgnostic.java
similarity index 75%
rename from api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport.java
rename to api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifierEntityAgnostic.java
index d37825569e..e0d589f1ea 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsBasedOnIdStringifierEntityAgnostic.java
@@ -28,19 +28,18 @@ import lombok.experimental.Accessors;
 
 /**
  * Convenient base class for value-semantics,
- * that are basically inferred from an {@link IdStringifier} with target-entity-class-support.
- * @see org.apache.isis.applib.services.bookmark.IdStringifier.SupportingTargetEntityClass
+ * that are inferred from an {@link org.apache.isis.applib.services.bookmark.IdStringifier.EntityAgnostic}.
  * @since 2.0
  */
-public abstract class ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<T>
+public abstract class ValueSemanticsBasedOnIdStringifierEntityAgnostic<T>
 extends ValueSemanticsAbstract<T>
 implements
-    IdStringifier.SupportingTargetEntityClass<T> {
+    IdStringifier.EntityAgnostic<T> {
 
     @Getter @Accessors(makeFinal = true)
     private final Class<T> correspondingClass;
 
-    protected ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport(
+    protected ValueSemanticsBasedOnIdStringifierEntityAgnostic(
             final @NonNull Class<T> correspondingClass) {
         _Assert.assertFalse(correspondingClass.isPrimitive(),
                 ()->String.format("not allowed to be initialzed with a primitive class (%s), "
@@ -61,4 +60,16 @@ implements
         return value.toString();
     }
 
+    // -- COMPOSER
+
+    @Override
+    public final ValueDecomposition decompose(final T value) {
+        return decomposeAsString(value, this::enstring, ()->null);
+    }
+
+    @Override
+    public final T compose(final ValueDecomposition decomposition) {
+        return composeFromString(decomposition, this::destring, ()->null);
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BigDecimalValueSemantics.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BigDecimalValueSemantics.java
index 6b0af5ff2e..1c35f413e2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BigDecimalValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BigDecimalValueSemantics.java
@@ -55,7 +55,7 @@ implements
     DefaultsProvider<BigDecimal>,
     Parser<BigDecimal>,
     Renderer<BigDecimal>,
-    IdStringifier<BigDecimal> {
+    IdStringifier.EntityAgnostic<BigDecimal> {
 
     @Setter @Inject
     private SpecificationLoader specificationLoader;
@@ -96,8 +96,7 @@ implements
     }
 
     @Override
-    public BigDecimal destring(
-            final @NonNull String stringified) {
+    public BigDecimal destring(final @NonNull String stringified) {
         return new BigDecimal(stringified);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BigIntegerValueSemantics.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BigIntegerValueSemantics.java
index 10dfbb6e13..6407f71655 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BigIntegerValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BigIntegerValueSemantics.java
@@ -48,7 +48,7 @@ implements
     DefaultsProvider<BigInteger>,
     Parser<BigInteger>,
     Renderer<BigInteger>,
-    IdStringifier<BigInteger> {
+    IdStringifier.EntityAgnostic<BigInteger> {
 
     @Override
     public Class<BigInteger> getCorrespondingClass() {
@@ -98,8 +98,7 @@ implements
     }
 
     @Override
-    public BigInteger destring(
-            final @NonNull String stringified) {
+    public BigInteger destring(final @NonNull String stringified) {
         return new BigInteger(stringified);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/ByteValueSemantics.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/ByteValueSemantics.java
index 3321e23ce5..14b7be6cf2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/ByteValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/ByteValueSemantics.java
@@ -54,7 +54,7 @@ implements
     DefaultsProvider<Byte>,
     Parser<Byte>,
     Renderer<Byte>,
-    IdStringifier<Byte> {
+    IdStringifier.EntityAgnostic<Byte> {
 
     @Override
     public Class<Byte> getCorrespondingClass() {
@@ -92,8 +92,7 @@ implements
     }
 
     @Override
-    public Byte destring(
-            final @NonNull String stringified) {
+    public Byte destring(final @NonNull String stringified) {
         return Byte.parseByte(stringified);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/CharacterValueSemantics.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/CharacterValueSemantics.java
index 68b2f0808c..deaf9ee6a2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/CharacterValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/CharacterValueSemantics.java
@@ -56,7 +56,7 @@ implements
     DefaultsProvider<Character>,
     Parser<Character>,
     Renderer<Character>,
-    IdStringifier<Character> {
+    IdStringifier.EntityAgnostic<Character> {
 
     @Override
     public Class<Character> getCorrespondingClass() {
@@ -111,8 +111,7 @@ implements
     }
 
     @Override
-    public Character destring(
-            final @NonNull String stringified) {
+    public Character destring(final @NonNull String stringified) {
         if(stringified.startsWith(REGULAR_PREFIX)) {
             return stringified.substring(REGULAR_PREFIX.length()).charAt(0);
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/IntValueSemantics.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/IntValueSemantics.java
index 5767b375dc..3f747dc800 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/IntValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/IntValueSemantics.java
@@ -54,7 +54,7 @@ implements
     DefaultsProvider<Integer>,
     Parser<Integer>,
     Renderer<Integer>,
-    IdStringifier<Integer>{
+    IdStringifier.EntityAgnostic<Integer>{
 
     @Override
     public Class<Integer> getCorrespondingClass() {
@@ -92,8 +92,7 @@ implements
     }
 
     @Override
-    public Integer destring(
-            final @NonNull String stringified) {
+    public Integer destring(final @NonNull String stringified) {
         return Integer.parseInt(stringified);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/LongValueSemantics.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/LongValueSemantics.java
index 2499a680a1..02c06f047d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/LongValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/LongValueSemantics.java
@@ -54,7 +54,7 @@ implements
     DefaultsProvider<Long>,
     Parser<Long>,
     Renderer<Long>,
-    IdStringifier<Long>{
+    IdStringifier.EntityAgnostic<Long>{
 
     @Override
     public Class<Long> getCorrespondingClass() {
@@ -92,8 +92,7 @@ implements
     }
 
     @Override
-    public Long destring(
-            final @NonNull String stringified) {
+    public Long destring(final @NonNull String stringified) {
         return Long.parseLong(stringified);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/SerializableValueSemantics.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/SerializableValueSemantics.java
index 19c85d2202..f6b79fb7ea 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/SerializableValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/SerializableValueSemantics.java
@@ -29,7 +29,7 @@ import org.springframework.stereotype.Component;
 
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.services.urlencoding.UrlEncodingService;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierEntityAgnostic;
 import org.apache.isis.applib.value.semantics.ValueSemanticsProvider;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._Strings;
@@ -45,7 +45,7 @@ import lombok.NonNull;
 @Named("isis.val.SerializableValueSemantics")
 @Priority(PriorityPrecedence.LAST)
 public class SerializableValueSemantics
-extends ValueSemanticsBasedOnIdStringifier<Serializable> {
+extends ValueSemanticsBasedOnIdStringifierEntityAgnostic<Serializable> {
 
     private final UrlEncodingService codec;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/ShortValueSemantics.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/ShortValueSemantics.java
index 065e884076..84d9654f31 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/ShortValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/ShortValueSemantics.java
@@ -54,7 +54,7 @@ implements
     DefaultsProvider<Short>,
     Parser<Short>,
     Renderer<Short>,
-    IdStringifier<Short> {
+    IdStringifier.EntityAgnostic<Short> {
 
     @Override
     public Class<Short> getCorrespondingClass() {
@@ -92,8 +92,7 @@ implements
     }
 
     @Override
-    public Short destring(
-            final @NonNull String stringified) {
+    public Short destring(final @NonNull String stringified) {
         return Short.parseShort(stringified);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/StringValueSemantics.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/StringValueSemantics.java
index 7a1e709dbc..7365b145e9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/StringValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/StringValueSemantics.java
@@ -47,7 +47,7 @@ extends ValueSemanticsAbstract<String>
 implements
     Parser<String>,
     Renderer<String>,
-    IdStringifier<String> {
+    IdStringifier.EntityAgnostic<String> {
 
     @Override
     public Class<String> getCorrespondingClass() {
@@ -87,8 +87,7 @@ implements
     }
 
     @Override
-    public String destring(
-            final @NonNull String stringified) {
+    public String destring(final @NonNull String stringified) {
         if(stringified.startsWith(REGULAR_PREFIX)) {
             return stringified.substring(REGULAR_PREFIX.length());
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/UUIDValueSemantics.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/UUIDValueSemantics.java
index 5a57dcd907..243f572a55 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/UUIDValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/UUIDValueSemantics.java
@@ -47,7 +47,7 @@ extends ValueSemanticsAbstract<UUID>
 implements
     Parser<UUID>,
     Renderer<UUID>,
-    IdStringifier<UUID> {
+    IdStringifier.EntityAgnostic<UUID> {
 
     @Override
     public Class<UUID> getCorrespondingClass() {
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/idstringifier/IdStringifierService.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/idstringifier/IdStringifierService.java
index 4569710925..dcece158bf 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/idstringifier/IdStringifierService.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/idstringifier/IdStringifierService.java
@@ -92,10 +92,7 @@ public class IdStringifierService {
             final @NonNull Class<?> entityClass,
             final @NonNull String stringifiedId) {
         val idStringifier = lookupElseFail(ClassUtils.resolvePrimitiveIfNecessary(primaryKeyType));
-        @SuppressWarnings("unchecked")
-        val primaryKey = _Casts.castTo(IdStringifier.SupportingTargetEntityClass.class, idStringifier)
-                .map(stringifier->stringifier.destring(stringifiedId, entityClass))
-                .orElseGet(()->idStringifier.destring(stringifiedId));
+        val primaryKey = idStringifier.destring(entityClass, stringifiedId);
         return _Casts.uncheckedCast(primaryKey);
     }
 
diff --git a/extensions/core/commandlog/persistence-jpa/src/main/java/org/apache/isis/extensions/commandlog/jpa/dom/CommandLogEntryPK.java b/extensions/core/commandlog/persistence-jpa/src/main/java/org/apache/isis/extensions/commandlog/jpa/dom/CommandLogEntryPK.java
index 049e5f634d..43b3124d51 100644
--- a/extensions/core/commandlog/persistence-jpa/src/main/java/org/apache/isis/extensions/commandlog/jpa/dom/CommandLogEntryPK.java
+++ b/extensions/core/commandlog/persistence-jpa/src/main/java/org/apache/isis/extensions/commandlog/jpa/dom/CommandLogEntryPK.java
@@ -30,7 +30,7 @@ import javax.persistence.Embeddable;
 import org.springframework.stereotype.Component;
 
 import org.apache.isis.applib.annotation.PriorityPrecedence;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierEntityAgnostic;
 import org.apache.isis.extensions.commandlog.applib.dom.CommandLogEntry;
 import org.apache.isis.persistence.jpa.integration.typeconverters.java.util.JavaUtilUuidConverter;
 
@@ -65,7 +65,7 @@ public class CommandLogEntryPK implements Serializable {
     @Component
     @Priority(PriorityPrecedence.MIDPOINT)
     public static class Semantics
-    extends ValueSemanticsBasedOnIdStringifier<CommandLogEntryPK> {
+    extends ValueSemanticsBasedOnIdStringifierEntityAgnostic<CommandLogEntryPK> {
 
         public Semantics() {
             super(CommandLogEntryPK.class);
diff --git a/extensions/core/executionlog/persistence-jdo/src/main/java/org/apache/isis/extensions/executionlog/jdo/dom/ExecutionLogEntryPK.java b/extensions/core/executionlog/persistence-jdo/src/main/java/org/apache/isis/extensions/executionlog/jdo/dom/ExecutionLogEntryPK.java
index fb82c34319..774d58db7b 100644
--- a/extensions/core/executionlog/persistence-jdo/src/main/java/org/apache/isis/extensions/executionlog/jdo/dom/ExecutionLogEntryPK.java
+++ b/extensions/core/executionlog/persistence-jdo/src/main/java/org/apache/isis/extensions/executionlog/jdo/dom/ExecutionLogEntryPK.java
@@ -27,7 +27,7 @@ import javax.annotation.Priority;
 import org.springframework.stereotype.Component;
 
 import org.apache.isis.applib.annotation.PriorityPrecedence;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierEntityAgnostic;
 
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
@@ -63,7 +63,7 @@ public class ExecutionLogEntryPK implements Serializable {
     @Component
     @Priority(PriorityPrecedence.MIDPOINT)
     public static class Semantics
-    extends ValueSemanticsBasedOnIdStringifier<ExecutionLogEntryPK> {
+    extends ValueSemanticsBasedOnIdStringifierEntityAgnostic<ExecutionLogEntryPK> {
 
         public Semantics() {
             super(ExecutionLogEntryPK.class);
diff --git a/extensions/core/executionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/executionlog/jpa/dom/ExecutionLogEntryPK.java b/extensions/core/executionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/executionlog/jpa/dom/ExecutionLogEntryPK.java
index 7cdb2bf1b7..abbc52c582 100644
--- a/extensions/core/executionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/executionlog/jpa/dom/ExecutionLogEntryPK.java
+++ b/extensions/core/executionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/executionlog/jpa/dom/ExecutionLogEntryPK.java
@@ -30,7 +30,7 @@ import javax.persistence.Embeddable;
 import org.springframework.stereotype.Component;
 
 import org.apache.isis.applib.annotation.PriorityPrecedence;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierEntityAgnostic;
 import org.apache.isis.persistence.jpa.integration.typeconverters.java.util.JavaUtilUuidConverter;
 
 import lombok.AccessLevel;
@@ -74,7 +74,7 @@ public class ExecutionLogEntryPK implements Serializable {
     @Component
     @Priority(PriorityPrecedence.MIDPOINT)
     public static class Semantics
-    extends ValueSemanticsBasedOnIdStringifier<ExecutionLogEntryPK> {
+    extends ValueSemanticsBasedOnIdStringifierEntityAgnostic<ExecutionLogEntryPK> {
 
         public Semantics() {
             super(ExecutionLogEntryPK.class);
diff --git a/extensions/core/executionoutbox/persistence-jdo/src/main/java/org/apache/isis/extensions/executionoutbox/jdo/dom/ExecutionOutboxEntryPK.java b/extensions/core/executionoutbox/persistence-jdo/src/main/java/org/apache/isis/extensions/executionoutbox/jdo/dom/ExecutionOutboxEntryPK.java
index 79a2be7db0..25e33143ec 100644
--- a/extensions/core/executionoutbox/persistence-jdo/src/main/java/org/apache/isis/extensions/executionoutbox/jdo/dom/ExecutionOutboxEntryPK.java
+++ b/extensions/core/executionoutbox/persistence-jdo/src/main/java/org/apache/isis/extensions/executionoutbox/jdo/dom/ExecutionOutboxEntryPK.java
@@ -27,7 +27,7 @@ import javax.annotation.Priority;
 import org.springframework.stereotype.Component;
 
 import org.apache.isis.applib.annotation.PriorityPrecedence;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierEntityAgnostic;
 
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
@@ -63,7 +63,7 @@ public class ExecutionOutboxEntryPK implements Serializable {
     @Component
     @Priority(PriorityPrecedence.MIDPOINT)
     public static class Semantics
-    extends ValueSemanticsBasedOnIdStringifier<ExecutionOutboxEntryPK> {
+    extends ValueSemanticsBasedOnIdStringifierEntityAgnostic<ExecutionOutboxEntryPK> {
 
         public Semantics() {
             super(ExecutionOutboxEntryPK.class);
diff --git a/extensions/core/executionoutbox/persistence-jpa/src/main/java/org/apache/isis/extensions/executionoutbox/jpa/dom/ExecutionOutboxEntryPK.java b/extensions/core/executionoutbox/persistence-jpa/src/main/java/org/apache/isis/extensions/executionoutbox/jpa/dom/ExecutionOutboxEntryPK.java
index 059d038058..bbc25b7f79 100644
--- a/extensions/core/executionoutbox/persistence-jpa/src/main/java/org/apache/isis/extensions/executionoutbox/jpa/dom/ExecutionOutboxEntryPK.java
+++ b/extensions/core/executionoutbox/persistence-jpa/src/main/java/org/apache/isis/extensions/executionoutbox/jpa/dom/ExecutionOutboxEntryPK.java
@@ -30,7 +30,7 @@ import javax.persistence.Embeddable;
 import org.springframework.stereotype.Component;
 
 import org.apache.isis.applib.annotation.PriorityPrecedence;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierEntityAgnostic;
 import org.apache.isis.persistence.jpa.integration.typeconverters.java.util.JavaUtilUuidConverter;
 
 import lombok.AccessLevel;
@@ -74,7 +74,7 @@ public class ExecutionOutboxEntryPK implements Serializable {
     @Component
     @Priority(PriorityPrecedence.MIDPOINT)
     public static class Semantics
-    extends ValueSemanticsBasedOnIdStringifier<ExecutionOutboxEntryPK> {
+    extends ValueSemanticsBasedOnIdStringifierEntityAgnostic<ExecutionOutboxEntryPK> {
 
         public Semantics() {
             super(ExecutionOutboxEntryPK.class);
diff --git a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/dom/SessionLogEntryPK.java b/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/dom/SessionLogEntryPK.java
index 42517e6979..f4b73fb5fe 100644
--- a/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/dom/SessionLogEntryPK.java
+++ b/extensions/security/sessionlog/persistence-jpa/src/main/java/org/apache/isis/extensions/sessionlog/jpa/dom/SessionLogEntryPK.java
@@ -31,7 +31,7 @@ import javax.persistence.Embeddable;
 import org.springframework.stereotype.Component;
 
 import org.apache.isis.applib.annotation.PriorityPrecedence;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierEntityAgnostic;
 import org.apache.isis.extensions.sessionlog.applib.dom.SessionLogEntry;
 import org.apache.isis.persistence.jpa.integration.typeconverters.java.util.JavaUtilUuidConverter;
 
@@ -64,7 +64,7 @@ public class SessionLogEntryPK implements Serializable {
     @Component
     @Priority(PriorityPrecedence.MIDPOINT)
     public static class Semantics
-    extends ValueSemanticsBasedOnIdStringifier<SessionLogEntryPK> {
+    extends ValueSemanticsBasedOnIdStringifierEntityAgnostic<SessionLogEntryPK> {
 
         public Semantics() {
             super(SessionLogEntryPK.class);
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoByteIdValueSemantics.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoByteIdValueSemantics.java
index 919bb52955..cfda144bf1 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoByteIdValueSemantics.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoByteIdValueSemantics.java
@@ -26,7 +26,7 @@ import org.springframework.stereotype.Component;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.util.schema.CommonDtoUtils;
 import org.apache.isis.applib.value.semantics.ValueDecomposition;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 import org.apache.isis.commons.internal.factory._InstanceUtil;
 import org.apache.isis.schema.common.v2.ValueType;
 
@@ -36,7 +36,7 @@ import lombok.val;
 @Component
 @Priority(PriorityPrecedence.LATE)
 public class JdoByteIdValueSemantics
-extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<ByteId> {
+extends ValueSemanticsBasedOnIdStringifier<ByteId> {
 
     public JdoByteIdValueSemantics() {
         super(ByteId.class);
@@ -57,13 +57,13 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<ByteId> {
         val elementMap = CommonDtoUtils.typedTupleAsMap(decomposition.rightIfAny());
         final String targetClassName = (String)elementMap.get("targetClassName");
         final String key = (String)elementMap.get("key");
-        return destring(key, _InstanceUtil.loadClass(targetClassName));
+        return destring(_InstanceUtil.loadClass(targetClassName), key);
     }
 
     // -- ID STRINGIFIER
 
     @Override
-    public ByteId destring(final @NonNull String stringified, final @NonNull Class<?> targetEntityClass) {
+    public ByteId destring(final @NonNull Class<?> targetEntityClass, final @NonNull String stringified) {
         return new ByteId(targetEntityClass, stringified);
     }
 
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoByteIdentityValueSemantics.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoByteIdentityValueSemantics.java
index 2b56eac52a..64ea2d8984 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoByteIdentityValueSemantics.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoByteIdentityValueSemantics.java
@@ -26,7 +26,7 @@ import org.springframework.stereotype.Component;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.util.schema.CommonDtoUtils;
 import org.apache.isis.applib.value.semantics.ValueDecomposition;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 import org.apache.isis.commons.internal.factory._InstanceUtil;
 import org.apache.isis.schema.common.v2.ValueType;
 
@@ -36,7 +36,7 @@ import lombok.val;
 @Component
 @Priority(PriorityPrecedence.LATE)
 public class JdoByteIdentityValueSemantics
-extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<ByteIdentity> {
+extends ValueSemanticsBasedOnIdStringifier<ByteIdentity> {
 
     public JdoByteIdentityValueSemantics() {
         super(ByteIdentity.class);
@@ -57,13 +57,13 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<ByteIdent
         val elementMap = CommonDtoUtils.typedTupleAsMap(decomposition.rightIfAny());
         final String targetClassName = (String)elementMap.get("targetClassName");
         final String key = (String)elementMap.get("key");
-        return destring(key, _InstanceUtil.loadClass(targetClassName));
+        return destring(_InstanceUtil.loadClass(targetClassName), key);
     }
 
     // -- ID STRINGIFIER
 
     @Override
-    public ByteIdentity destring(final @NonNull String stringified, final @NonNull Class<?> targetEntityClass) {
+    public ByteIdentity destring(final @NonNull Class<?> targetEntityClass, final @NonNull String stringified) {
         return new ByteIdentity(targetEntityClass, stringified);
     }
 
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoCharIdValueSemantics.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoCharIdValueSemantics.java
index 0cb1bf68d1..6ba0be106a 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoCharIdValueSemantics.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoCharIdValueSemantics.java
@@ -28,7 +28,7 @@ import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.services.bookmark.IdStringifier;
 import org.apache.isis.applib.util.schema.CommonDtoUtils;
 import org.apache.isis.applib.value.semantics.ValueDecomposition;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 import org.apache.isis.commons.internal.factory._InstanceUtil;
 import org.apache.isis.schema.common.v2.ValueType;
 
@@ -39,7 +39,7 @@ import lombok.val;
 @Component
 @Priority(PriorityPrecedence.LATE)
 public class JdoCharIdValueSemantics
-extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<CharId> {
+extends ValueSemanticsBasedOnIdStringifier<CharId> {
 
     @Inject IdStringifier<Character> idStringifierForCharacter;
 
@@ -71,7 +71,7 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<CharId> {
         val elementMap = CommonDtoUtils.typedTupleAsMap(decomposition.rightIfAny());
         final String targetClassName = (String)elementMap.get("targetClassName");
         final String key = (String)elementMap.get("key");
-        return destring(key, _InstanceUtil.loadClass(targetClassName));
+        return destring(_InstanceUtil.loadClass(targetClassName), key);
     }
 
     // -- ID STRINGIFIER
@@ -83,9 +83,9 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<CharId> {
 
     @Override
     public CharId destring(
-            final @NonNull String stringified,
-            final @NonNull Class<?> targetEntityClass) {
-        val idValue = idStringifierForCharacter.destring(stringified);
+            final @NonNull Class<?> targetEntityClass,
+            final @NonNull String stringified) {
+        val idValue = idStringifierForCharacter.destring(targetEntityClass, stringified);
         return new CharId(targetEntityClass, idValue);
     }
 }
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoCharIdentityValueSemantics.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoCharIdentityValueSemantics.java
index 08b11e81a2..a35083b123 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoCharIdentityValueSemantics.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoCharIdentityValueSemantics.java
@@ -28,7 +28,7 @@ import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.services.bookmark.IdStringifier;
 import org.apache.isis.applib.util.schema.CommonDtoUtils;
 import org.apache.isis.applib.value.semantics.ValueDecomposition;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 import org.apache.isis.commons.internal.factory._InstanceUtil;
 import org.apache.isis.schema.common.v2.ValueType;
 
@@ -39,7 +39,7 @@ import lombok.val;
 @Component
 @Priority(PriorityPrecedence.LATE)
 public class JdoCharIdentityValueSemantics
-extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<CharIdentity> {
+extends ValueSemanticsBasedOnIdStringifier<CharIdentity> {
 
     @Inject IdStringifier<Character> idStringifierForCharacter;
 
@@ -71,7 +71,7 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<CharIdent
         val elementMap = CommonDtoUtils.typedTupleAsMap(decomposition.rightIfAny());
         final String targetClassName = (String)elementMap.get("targetClassName");
         final String key = (String)elementMap.get("key");
-        return destring(key, _InstanceUtil.loadClass(targetClassName));
+        return destring(_InstanceUtil.loadClass(targetClassName), key);
     }
 
     // -- ID STRINGIFIER
@@ -83,9 +83,9 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<CharIdent
 
     @Override
     public CharIdentity destring(
-            final @NonNull String stringified,
-            final @NonNull Class<?> targetEntityClass) {
-        val idValue = idStringifierForCharacter.destring(stringified);
+            final @NonNull Class<?> targetEntityClass,
+            final @NonNull String stringified) {
+        val idValue = idStringifierForCharacter.destring(targetEntityClass, stringified);
         return new CharIdentity(targetEntityClass, idValue);
     }
 
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoDatastoreIdImplValueSemantics.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoDatastoreIdImplValueSemantics.java
index a4654d2993..cd3e5da923 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoDatastoreIdImplValueSemantics.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoDatastoreIdImplValueSemantics.java
@@ -26,7 +26,7 @@ import org.springframework.stereotype.Component;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.util.schema.CommonDtoUtils;
 import org.apache.isis.applib.value.semantics.ValueDecomposition;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 import org.apache.isis.commons.internal.factory._InstanceUtil;
 import org.apache.isis.schema.common.v2.ValueType;
 
@@ -37,7 +37,7 @@ import lombok.val;
 @Component
 @Priority(PriorityPrecedence.LATE)
 public class JdoDatastoreIdImplValueSemantics
-extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<DatastoreIdImpl> {
+extends ValueSemanticsBasedOnIdStringifier<DatastoreIdImpl> {
 
     public static final String STRING_DELIMITER = "[OID]"; // as
 
@@ -60,7 +60,7 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<Datastore
         val elementMap = CommonDtoUtils.typedTupleAsMap(decomposition.rightIfAny());
         final String targetClassName = (String)elementMap.get("targetClassName");
         final String key = (String)elementMap.get("key");
-        return destring(key, _InstanceUtil.loadClass(targetClassName));
+        return destring(_InstanceUtil.loadClass(targetClassName), key);
     }
 
     // -- ID STRINGIFIER
@@ -73,8 +73,8 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<Datastore
     @SneakyThrows
     @Override
     public DatastoreIdImpl destring(
-            final @NonNull String stringified,
-            final @NonNull Class<?> targetEntityClass) {
+            final @NonNull Class<?> targetEntityClass,
+            final @NonNull String stringified) {
         // enString invoked toString() on the original key; invoking toString() on its stringified form does not change it
         val proto = new DatastoreIdImpl(targetEntityClass.getName(), stringified);
         // now render in the form that the DataStoreImpl constructor expects; it will take it apart itself.
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoDatastoreIdValueSemantics.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoDatastoreIdValueSemantics.java
index 1447b7de1f..b3732f958d 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoDatastoreIdValueSemantics.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoDatastoreIdValueSemantics.java
@@ -23,14 +23,13 @@ import java.lang.reflect.Constructor;
 import javax.annotation.Priority;
 
 import org.datanucleus.identity.DatastoreId;
-import org.springframework.lang.Nullable;
 import org.springframework.stereotype.Component;
 
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.services.bookmark.IdStringifier;
 import org.apache.isis.applib.util.schema.CommonDtoUtils;
 import org.apache.isis.applib.value.semantics.ValueDecomposition;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.commons.internal.factory._InstanceUtil;
@@ -43,7 +42,7 @@ import lombok.val;
 @Component
 @Priority(PriorityPrecedence.LATE + 100) // after the implementations of DatastoreId; for a custom impl.
 public class JdoDatastoreIdValueSemantics
-extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<DatastoreId> {
+extends ValueSemanticsBasedOnIdStringifier<DatastoreId> {
 
     public JdoDatastoreIdValueSemantics() {
         super(DatastoreId.class);
@@ -64,7 +63,7 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<Datastore
         val elementMap = CommonDtoUtils.typedTupleAsMap(decomposition.rightIfAny());
         final String targetClassName = (String)elementMap.get("targetClassName");
         final String key = (String)elementMap.get("key");
-        return destring(key, _InstanceUtil.loadClass(targetClassName));
+        return destring(_InstanceUtil.loadClass(targetClassName), key);
     }
 
     // -- ID STRINGIFIER
@@ -82,8 +81,8 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<Datastore
     @SneakyThrows
     @Override
     public DatastoreId destring(
-            final @NonNull String stringified,
-            final @Nullable Class<?> targetEntityClass) {
+            final @NonNull Class<?> targetEntityClass,
+            final @NonNull String stringified) {
         int idx = stringified.indexOf(IdStringifier.AbstractWithPrefix.SEPARATOR);
         String clsName = stringified.substring(0, idx);
         String keyStr = stringified.substring(idx + 1);
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoDatastoreUniqueLongIdValueSemantics.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoDatastoreUniqueLongIdValueSemantics.java
index 47f2bebe92..9ed3f16cdd 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoDatastoreUniqueLongIdValueSemantics.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoDatastoreUniqueLongIdValueSemantics.java
@@ -24,7 +24,7 @@ import org.datanucleus.identity.DatastoreUniqueLongId;
 import org.springframework.stereotype.Component;
 
 import org.apache.isis.applib.annotation.PriorityPrecedence;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierEntityAgnostic;
 
 import lombok.NonNull;
 
@@ -34,7 +34,7 @@ import lombok.NonNull;
 @Component
 @Priority(PriorityPrecedence.LATE)
 public class JdoDatastoreUniqueLongIdValueSemantics
-extends ValueSemanticsBasedOnIdStringifier<DatastoreUniqueLongId> {
+extends ValueSemanticsBasedOnIdStringifierEntityAgnostic<DatastoreUniqueLongId> {
 
     public JdoDatastoreUniqueLongIdValueSemantics() {
         super(DatastoreUniqueLongId.class);
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoIntIdValueSemantics.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoIntIdValueSemantics.java
index 2a43679336..24cd76765a 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoIntIdValueSemantics.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoIntIdValueSemantics.java
@@ -26,7 +26,7 @@ import org.springframework.stereotype.Component;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.util.schema.CommonDtoUtils;
 import org.apache.isis.applib.value.semantics.ValueDecomposition;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 import org.apache.isis.commons.internal.factory._InstanceUtil;
 import org.apache.isis.schema.common.v2.ValueType;
 
@@ -36,7 +36,7 @@ import lombok.val;
 @Component
 @Priority(PriorityPrecedence.LATE)
 public class JdoIntIdValueSemantics
-extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<IntId> {
+extends ValueSemanticsBasedOnIdStringifier<IntId> {
 
     public JdoIntIdValueSemantics() {
         super(IntId.class);
@@ -57,13 +57,15 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<IntId> {
         val elementMap = CommonDtoUtils.typedTupleAsMap(decomposition.rightIfAny());
         final String targetClassName = (String)elementMap.get("targetClassName");
         final String key = (String)elementMap.get("key");
-        return destring(key, _InstanceUtil.loadClass(targetClassName));
+        return destring(_InstanceUtil.loadClass(targetClassName), key);
     }
 
     // -- ID STRINGIFIER
 
     @Override
-    public IntId destring(final @NonNull String stringified, final @NonNull Class<?> targetEntityClass) {
+    public IntId destring(
+            final @NonNull Class<?> targetEntityClass,
+            final @NonNull String stringified) {
         return new IntId(targetEntityClass, stringified);
     }
 }
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoIntIdentityValueSemantics.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoIntIdentityValueSemantics.java
index 2a3605f03c..5a59d56e85 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoIntIdentityValueSemantics.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoIntIdentityValueSemantics.java
@@ -26,7 +26,7 @@ import org.springframework.stereotype.Component;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.util.schema.CommonDtoUtils;
 import org.apache.isis.applib.value.semantics.ValueDecomposition;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 import org.apache.isis.commons.internal.factory._InstanceUtil;
 import org.apache.isis.schema.common.v2.ValueType;
 
@@ -36,7 +36,7 @@ import lombok.val;
 @Component
 @Priority(PriorityPrecedence.LATE)
 public class JdoIntIdentityValueSemantics
-extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<IntIdentity> {
+extends ValueSemanticsBasedOnIdStringifier<IntIdentity> {
 
     public JdoIntIdentityValueSemantics() {
         super(IntIdentity.class);
@@ -57,13 +57,15 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<IntIdenti
         val elementMap = CommonDtoUtils.typedTupleAsMap(decomposition.rightIfAny());
         final String targetClassName = (String)elementMap.get("targetClassName");
         final String key = (String)elementMap.get("key");
-        return destring(key, _InstanceUtil.loadClass(targetClassName));
+        return destring(_InstanceUtil.loadClass(targetClassName), key);
     }
 
     // -- ID STRINGIFIER
 
     @Override
-    public IntIdentity destring(final @NonNull String stringified, final @NonNull Class<?> targetEntityClass) {
+    public IntIdentity destring(
+            final @NonNull Class<?> targetEntityClass,
+            final @NonNull String stringified) {
         return new IntIdentity(targetEntityClass, stringified);
     }
 }
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoLongIdValueSemantics.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoLongIdValueSemantics.java
index af150efa6a..fb23051749 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoLongIdValueSemantics.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoLongIdValueSemantics.java
@@ -26,7 +26,7 @@ import org.springframework.stereotype.Component;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.util.schema.CommonDtoUtils;
 import org.apache.isis.applib.value.semantics.ValueDecomposition;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 import org.apache.isis.commons.internal.factory._InstanceUtil;
 import org.apache.isis.schema.common.v2.ValueType;
 
@@ -36,7 +36,7 @@ import lombok.val;
 @Component
 @Priority(PriorityPrecedence.LATE)
 public class JdoLongIdValueSemantics
-extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<LongId> {
+extends ValueSemanticsBasedOnIdStringifier<LongId> {
 
     public JdoLongIdValueSemantics() {
         super(LongId.class);
@@ -57,13 +57,15 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<LongId> {
         val elementMap = CommonDtoUtils.typedTupleAsMap(decomposition.rightIfAny());
         final String targetClassName = (String)elementMap.get("targetClassName");
         final String key = (String)elementMap.get("key");
-        return destring(key, _InstanceUtil.loadClass(targetClassName));
+        return destring(_InstanceUtil.loadClass(targetClassName), key);
     }
 
     // -- ID STRINGIFIER
 
     @Override
-    public LongId destring(final @NonNull String stringified, final @NonNull Class<?> targetEntityClass) {
+    public LongId destring(
+            final @NonNull Class<?> targetEntityClass,
+            final @NonNull String stringified) {
         return new LongId(targetEntityClass, stringified);
     }
 }
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoLongIdentityValueSemantics.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoLongIdentityValueSemantics.java
index 00fc9646ff..db590f611f 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoLongIdentityValueSemantics.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoLongIdentityValueSemantics.java
@@ -26,7 +26,7 @@ import org.springframework.stereotype.Component;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.util.schema.CommonDtoUtils;
 import org.apache.isis.applib.value.semantics.ValueDecomposition;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 import org.apache.isis.commons.internal.factory._InstanceUtil;
 import org.apache.isis.schema.common.v2.ValueType;
 
@@ -36,7 +36,7 @@ import lombok.val;
 @Component
 @Priority(PriorityPrecedence.LATE)
 public class JdoLongIdentityValueSemantics
-extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<LongIdentity> {
+extends ValueSemanticsBasedOnIdStringifier<LongIdentity> {
 
     public JdoLongIdentityValueSemantics() {
         super(LongIdentity.class);
@@ -57,13 +57,15 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<LongIdent
         val elementMap = CommonDtoUtils.typedTupleAsMap(decomposition.rightIfAny());
         final String targetClassName = (String)elementMap.get("targetClassName");
         final String key = (String)elementMap.get("key");
-        return destring(key, _InstanceUtil.loadClass(targetClassName));
+        return destring(_InstanceUtil.loadClass(targetClassName), key);
     }
 
     // -- ID STRINGIFIER
 
     @Override
-    public LongIdentity destring(final @NonNull String stringified, final @NonNull Class<?> targetEntityClass) {
+    public LongIdentity destring(
+            final @NonNull Class<?> targetEntityClass,
+            final @NonNull String stringified) {
         return new LongIdentity(targetEntityClass, stringified);
     }
 }
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoObjectIdValueSemantics.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoObjectIdValueSemantics.java
index 8704363e6d..cb25b669f5 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoObjectIdValueSemantics.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoObjectIdValueSemantics.java
@@ -28,7 +28,7 @@ import org.springframework.stereotype.Component;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.util.schema.CommonDtoUtils;
 import org.apache.isis.applib.value.semantics.ValueDecomposition;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 import org.apache.isis.commons.internal.factory._InstanceUtil;
 import org.apache.isis.schema.common.v2.ValueType;
 
@@ -48,7 +48,7 @@ import lombok.val;
 @Priority(PriorityPrecedence.LATE)
 @Builder
 public class JdoObjectIdValueSemantics
-extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<ObjectId> {
+extends ValueSemanticsBasedOnIdStringifier<ObjectId> {
 
     private static final String PREFIX_UUID = "u_";
     private static final String PREFIX_LONG = "l_";
@@ -73,7 +73,7 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<ObjectId>
         val elementMap = CommonDtoUtils.typedTupleAsMap(decomposition.rightIfAny());
         final String targetClassName = (String)elementMap.get("targetClassName");
         final String key = (String)elementMap.get("key");
-        return destring(key, _InstanceUtil.loadClass(targetClassName));
+        return destring(_InstanceUtil.loadClass(targetClassName), key);
     }
 
     // -- ID STRINGIFIER
@@ -96,8 +96,8 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<ObjectId>
 
     @Override
     public ObjectId destring(
-            final @NonNull String stringified,
-            final @NonNull Class<?> targetEntityClass) {
+            final @NonNull Class<?> targetEntityClass,
+            final @NonNull String stringified) {
         if (stringified.startsWith(PREFIX_LONG)) {
             return new ObjectId(targetEntityClass, Long.parseLong(stringified.substring(PREFIX_LONG.length())));
         }
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoObjectIdentityValueSemantics.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoObjectIdentityValueSemantics.java
index b7db0647f4..f5edcb8aaf 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoObjectIdentityValueSemantics.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoObjectIdentityValueSemantics.java
@@ -28,7 +28,7 @@ import org.springframework.stereotype.Component;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.util.schema.CommonDtoUtils;
 import org.apache.isis.applib.value.semantics.ValueDecomposition;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 import org.apache.isis.commons.internal.factory._InstanceUtil;
 import org.apache.isis.schema.common.v2.ValueType;
 
@@ -48,7 +48,7 @@ import lombok.val;
 @Priority(PriorityPrecedence.LATE)
 @Builder
 public class JdoObjectIdentityValueSemantics
-extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<ObjectIdentity> {
+extends ValueSemanticsBasedOnIdStringifier<ObjectIdentity> {
 
     private static final String PREFIX_UUID = "u_";
     private static final String PREFIX_LONG = "l_";
@@ -73,7 +73,7 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<ObjectIde
         val elementMap = CommonDtoUtils.typedTupleAsMap(decomposition.rightIfAny());
         final String targetClassName = (String)elementMap.get("targetClassName");
         final String key = (String)elementMap.get("key");
-        return destring(key, _InstanceUtil.loadClass(targetClassName));
+        return destring(_InstanceUtil.loadClass(targetClassName), key);
     }
 
     // -- ID STRINGIFIER
@@ -96,8 +96,8 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<ObjectIde
 
     @Override
     public ObjectIdentity destring(
-            final @NonNull String stringified,
-            final @NonNull Class<?> targetEntityClass) {
+            final @NonNull Class<?> targetEntityClass,
+            final @NonNull String stringified) {
         if (stringified.startsWith(PREFIX_LONG)) {
             return new ObjectIdentity(targetEntityClass, Long.parseLong(stringified.substring(PREFIX_LONG.length())));
         }
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoShortIdValueSemantics.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoShortIdValueSemantics.java
index 5493173a51..bff3bb1526 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoShortIdValueSemantics.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoShortIdValueSemantics.java
@@ -26,7 +26,7 @@ import org.springframework.stereotype.Component;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.util.schema.CommonDtoUtils;
 import org.apache.isis.applib.value.semantics.ValueDecomposition;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 import org.apache.isis.commons.internal.factory._InstanceUtil;
 import org.apache.isis.schema.common.v2.ValueType;
 
@@ -36,7 +36,7 @@ import lombok.val;
 @Component
 @Priority(PriorityPrecedence.LATE)
 public class JdoShortIdValueSemantics
-extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<ShortId> {
+extends ValueSemanticsBasedOnIdStringifier<ShortId> {
 
     public JdoShortIdValueSemantics() {
         super(ShortId.class);
@@ -57,13 +57,15 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<ShortId>
         val elementMap = CommonDtoUtils.typedTupleAsMap(decomposition.rightIfAny());
         final String targetClassName = (String)elementMap.get("targetClassName");
         final String key = (String)elementMap.get("key");
-        return destring(key, _InstanceUtil.loadClass(targetClassName));
+        return destring(_InstanceUtil.loadClass(targetClassName), key);
     }
 
     // -- ID STRINGIFIER
 
     @Override
-    public ShortId destring(final @NonNull String stringified, final @NonNull Class<?> targetEntityClass) {
+    public ShortId destring(
+            final @NonNull Class<?> targetEntityClass,
+            final @NonNull String stringified) {
         return new ShortId(targetEntityClass, stringified);
     }
 }
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoShortIdentityValueSemantics.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoShortIdentityValueSemantics.java
index 2273fb91f4..1333efbc43 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoShortIdentityValueSemantics.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoShortIdentityValueSemantics.java
@@ -26,7 +26,7 @@ import org.springframework.stereotype.Component;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.util.schema.CommonDtoUtils;
 import org.apache.isis.applib.value.semantics.ValueDecomposition;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 import org.apache.isis.commons.internal.factory._InstanceUtil;
 import org.apache.isis.schema.common.v2.ValueType;
 
@@ -36,7 +36,7 @@ import lombok.val;
 @Component
 @Priority(PriorityPrecedence.LATE)
 public class JdoShortIdentityValueSemantics
-extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<ShortIdentity> {
+extends ValueSemanticsBasedOnIdStringifier<ShortIdentity> {
 
     public JdoShortIdentityValueSemantics() {
         super(ShortIdentity.class);
@@ -57,13 +57,15 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<ShortIden
         val elementMap = CommonDtoUtils.typedTupleAsMap(decomposition.rightIfAny());
         final String targetClassName = (String)elementMap.get("targetClassName");
         final String key = (String)elementMap.get("key");
-        return destring(key, _InstanceUtil.loadClass(targetClassName));
+        return destring(_InstanceUtil.loadClass(targetClassName), key);
     }
 
     // -- ID STRINGIFIER
 
     @Override
-    public ShortIdentity destring(final @NonNull String stringified, final @NonNull Class<?> targetEntityClass) {
+    public ShortIdentity destring(
+            final @NonNull Class<?> targetEntityClass,
+            final @NonNull String stringified) {
         return new ShortIdentity(targetEntityClass, stringified);
     }
 }
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoStringIdValueSemantics.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoStringIdValueSemantics.java
index 2549c587ec..1f714dd3fa 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoStringIdValueSemantics.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoStringIdValueSemantics.java
@@ -28,7 +28,7 @@ import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.services.bookmark.IdStringifier;
 import org.apache.isis.applib.util.schema.CommonDtoUtils;
 import org.apache.isis.applib.value.semantics.ValueDecomposition;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 import org.apache.isis.commons.internal.factory._InstanceUtil;
 import org.apache.isis.schema.common.v2.ValueType;
 
@@ -39,7 +39,7 @@ import lombok.val;
 @Component
 @Priority(PriorityPrecedence.LATE)
 public class JdoStringIdValueSemantics
-extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<StringIdentity> {
+extends ValueSemanticsBasedOnIdStringifier<StringIdentity> {
 
     @Inject IdStringifier<String> idStringifierForString;
 
@@ -71,7 +71,7 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<StringIde
         val elementMap = CommonDtoUtils.typedTupleAsMap(decomposition.rightIfAny());
         final String targetClassName = (String)elementMap.get("targetClassName");
         final String key = (String)elementMap.get("key");
-        return destring(key, _InstanceUtil.loadClass(targetClassName));
+        return destring(_InstanceUtil.loadClass(targetClassName), key);
     }
 
     // -- ID STRINGIFIER
@@ -83,9 +83,9 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<StringIde
 
     @Override
     public StringIdentity destring(
-            final @NonNull String stringified,
-            final @NonNull Class<?> targetEntityClass) {
-        val idValue = idStringifierForString.destring(stringified);
+            final @NonNull Class<?> targetEntityClass,
+            final @NonNull String stringified) {
+        val idValue = idStringifierForString.destring(targetEntityClass, stringified);
         return new StringIdentity(targetEntityClass, idValue);
     }
 }
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoStringIdentityValueSemantics.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoStringIdentityValueSemantics.java
index 96a6dbf8bd..8a88cc4899 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoStringIdentityValueSemantics.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/valuetypes/JdoStringIdentityValueSemantics.java
@@ -28,7 +28,7 @@ import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.services.bookmark.IdStringifier;
 import org.apache.isis.applib.util.schema.CommonDtoUtils;
 import org.apache.isis.applib.value.semantics.ValueDecomposition;
-import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport;
+import org.apache.isis.applib.value.semantics.ValueSemanticsBasedOnIdStringifier;
 import org.apache.isis.commons.internal.factory._InstanceUtil;
 import org.apache.isis.schema.common.v2.ValueType;
 
@@ -39,7 +39,7 @@ import lombok.val;
 @Component
 @Priority(PriorityPrecedence.LATE)
 public class JdoStringIdentityValueSemantics
-extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<StringIdentity> {
+extends ValueSemanticsBasedOnIdStringifier<StringIdentity> {
 
     @Inject IdStringifier<String> idStringifierForString;
 
@@ -71,7 +71,7 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<StringIde
         val elementMap = CommonDtoUtils.typedTupleAsMap(decomposition.rightIfAny());
         final String targetClassName = (String)elementMap.get("targetClassName");
         final String key = (String)elementMap.get("key");
-        return destring(key, _InstanceUtil.loadClass(targetClassName));
+        return destring(_InstanceUtil.loadClass(targetClassName), key);
     }
 
     // -- ID STRINGIFIER
@@ -83,9 +83,9 @@ extends ValueSemanticsBasedOnIdStringifierWithTargetEntityClassSupport<StringIde
 
     @Override
     public StringIdentity destring(
-            final @NonNull String stringified,
-            final @NonNull Class<?> targetEntityClass) {
-        val idValue = idStringifierForString.destring(stringified);
+            final @NonNull Class<?> targetEntityClass,
+            final @NonNull String stringified) {
+        val idValue = idStringifierForString.destring(targetEntityClass, stringified);
         return new StringIdentity(targetEntityClass, idValue);
     }
 }
diff --git a/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForByteIdentity_Test.java b/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForByteIdentity_Test.java
index 307c7bdb1a..2eb9c51ebf 100644
--- a/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForByteIdentity_Test.java
+++ b/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForByteIdentity_Test.java
@@ -56,7 +56,7 @@ class IdStringifierForByteIdentity_Test {
         val stringifier = new JdoByteIdentityValueSemantics();
 
         val stringified = stringifier.enstring(new ByteIdentity(entityType, value));
-        val parse = stringifier.destring(stringified, entityType);
+        val parse = stringifier.destring(entityType, stringified);
 
         Assertions.assertThat(parse.getKeyAsObject()).isEqualTo(value);
         Assertions.assertThat(parse.getTargetClass()).isEqualTo(entityType);
diff --git a/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForCharIdentity_Test.java b/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForCharIdentity_Test.java
index fed3793f7d..755b7b84b2 100644
--- a/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForCharIdentity_Test.java
+++ b/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForCharIdentity_Test.java
@@ -77,7 +77,7 @@ class IdStringifierForCharIdentity_Test {
 
         val value = new CharIdentity(entityType, c);
         val stringified = stringifier.enstring(value);
-        val parse = stringifier.destring(stringified, entityType);
+        val parse = stringifier.destring(entityType, stringified);
 
         assertThat(parse).isEqualTo(value);
     }
diff --git a/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForDatastoreId_DatastoreIdImpl_long_Test.java b/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForDatastoreId_DatastoreIdImpl_long_Test.java
index 4e795cacad..34e0f4d796 100644
--- a/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForDatastoreId_DatastoreIdImpl_long_Test.java
+++ b/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForDatastoreId_DatastoreIdImpl_long_Test.java
@@ -58,7 +58,7 @@ class IdStringifierForDatastoreId_DatastoreIdImpl_long_Test {
         if(enstringed != null) {
             Assertions.assertThat(stringified).isEqualTo(enstringed);
         }
-        val parse = stringifier.destring(stringified, entityType);
+        val parse = stringifier.destring(entityType, stringified);
 
         Assertions.assertThat(parse.getKeyAsObject()).isEqualTo(value);
         Assertions.assertThat(parse.getTargetClassName()).isEqualTo(entityType.getName());
diff --git a/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForIntId_Test.java b/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForIntId_Test.java
index 24f256c1f4..c344df8713 100644
--- a/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForIntId_Test.java
+++ b/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForIntId_Test.java
@@ -55,7 +55,7 @@ class IdStringifierForIntId_Test {
         val stringifier = new JdoIntIdValueSemantics();
 
         val stringified = stringifier.enstring(new IntId(entityType, value));
-        val parse = stringifier.destring(stringified, entityType);
+        val parse = stringifier.destring(entityType, stringified);
 
         Assertions.assertThat(parse.getKeyAsObject()).isEqualTo(value);
         Assertions.assertThat(parse.getTargetClassName()).isEqualTo(entityType.getName());
diff --git a/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForIntIdentity_Test.java b/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForIntIdentity_Test.java
index 58e60096c4..84a6d7ab15 100644
--- a/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForIntIdentity_Test.java
+++ b/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForIntIdentity_Test.java
@@ -56,7 +56,7 @@ class IdStringifierForIntIdentity_Test {
         val stringifier = new JdoIntIdentityValueSemantics();
 
         val stringified = stringifier.enstring(new IntIdentity(entityType, value));
-        val parse = stringifier.destring(stringified, entityType);
+        val parse = stringifier.destring(entityType, stringified);
 
         Assertions.assertThat(parse.getKeyAsObject()).isEqualTo(value);
         Assertions.assertThat(parse.getTargetClass()).isEqualTo(entityType);
diff --git a/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForLongId_Test.java b/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForLongId_Test.java
index e4ec1c7f91..db92e86aa7 100644
--- a/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForLongId_Test.java
+++ b/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForLongId_Test.java
@@ -55,7 +55,7 @@ class IdStringifierForLongId_Test {
         val stringifier = new JdoLongIdValueSemantics();
 
         val stringified = stringifier.enstring(new LongId(entityType, value));
-        val parse = stringifier.destring(stringified, entityType);
+        val parse = stringifier.destring(entityType, stringified);
 
         Assertions.assertThat(parse.getKeyAsObject()).isEqualTo(value);
         Assertions.assertThat(parse.getTargetClassName()).isEqualTo(entityType.getName());
diff --git a/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForLongIdentity_Test.java b/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForLongIdentity_Test.java
index 169797554e..c4a2290b24 100644
--- a/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForLongIdentity_Test.java
+++ b/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForLongIdentity_Test.java
@@ -56,7 +56,7 @@ class IdStringifierForLongIdentity_Test {
         val stringifier = new JdoLongIdentityValueSemantics();
 
         val stringified = stringifier.enstring(new LongIdentity(entityType, value));
-        val parse = stringifier.destring(stringified, entityType);
+        val parse = stringifier.destring(entityType, stringified);
 
         Assertions.assertThat(parse.getKeyAsObject()).isEqualTo(value);
         Assertions.assertThat(parse.getTargetClass()).isEqualTo(entityType);
diff --git a/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForObjectIdentity_Test.java b/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForObjectIdentity_Test.java
index 081eebd7a7..daa19833b3 100644
--- a/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForObjectIdentity_Test.java
+++ b/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForObjectIdentity_Test.java
@@ -56,7 +56,7 @@ class IdStringifierForObjectIdentity_Test {
         val stringifier = JdoObjectIdentityValueSemantics.builder().build();
 
         val stringified = stringifier.enstring(new ObjectIdentity(entityType, value));
-        val parse = stringifier.destring(stringified, entityType);
+        val parse = stringifier.destring(entityType, stringified);
 
         Assertions.assertThat(parse.getKeyAsObject()).isEqualTo(value);
         Assertions.assertThat(parse.getTargetClass()).isEqualTo(entityType);
diff --git a/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForShortIdentity_Test.java b/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForShortIdentity_Test.java
index 5ee28be801..d6b4bbc13f 100644
--- a/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForShortIdentity_Test.java
+++ b/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForShortIdentity_Test.java
@@ -56,7 +56,7 @@ class IdStringifierForShortIdentity_Test {
         val stringifier = new JdoShortIdentityValueSemantics();
 
         val stringified = stringifier.enstring(new ShortIdentity(entityType, value));
-        val parse = stringifier.destring(stringified, entityType);
+        val parse = stringifier.destring(entityType, stringified);
 
         Assertions.assertThat(parse.getKeyAsObject()).isEqualTo(value);
         Assertions.assertThat(parse.getTargetClass()).isEqualTo(entityType);
diff --git a/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForStringIdentity_Test.java b/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForStringIdentity_Test.java
index 90ae55b4a6..be287bfb05 100644
--- a/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForStringIdentity_Test.java
+++ b/persistence/jdo/datanucleus/src/test/java/org/apache/isis/persistence/jdo/datanucleus/oid/IdStringifierForStringIdentity_Test.java
@@ -63,7 +63,7 @@ class IdStringifierForStringIdentity_Test {
                 .idStringifierForString(new StringValueSemantics()).build();
 
         val stringified = stringifier.enstring(new StringIdentity(entityType, value));
-        val parse = stringifier.destring(stringified, entityType);
+        val parse = stringifier.destring(entityType, stringified);
 
         Assertions.assertThat(parse.getKeyAsObject()).isEqualTo(value);
         Assertions.assertThat(parse.getTargetClass()).isEqualTo(entityType);