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 2021/09/17 05:04:45 UTC

[isis] branch master updated: ISIS-2870: remove support for @Defaulted

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 a23339d  ISIS-2870: remove support for @Defaulted
a23339d is described below

commit a23339d44891f08396ef7d9645ceee75ea0f9855
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Sep 17 07:04:36 2021 +0200

    ISIS-2870: remove support for @Defaulted
    
    as is conflicting with Spring managed value semantics
    
    rational: devs can instead put their own value semantics providers onto the Spring context utilizing any Spring provided mechanics
---
 .../apache/isis/applib/annotation/Defaulted.java   |  79 -------
 .../object/defaults/DefaultsProviderUtil.java      |  97 --------
 .../annotcfg/DefaultedFacetAnnotation.java         |  72 ------
 ...tedFacetAnnotationElseConfigurationFactory.java |  66 ------
 .../annotcfg/DefaultedFacetFromConfiguration.java  |  47 ----
 .../object/parseable/ParseableFacetAbstract.java   |  94 --------
 .../{parser => }/ParseableFacetUsingParser.java    |  11 +-
 .../facets/object/parseable/ParserUtil.java        |  45 ----
 .../annotcfg/ParseableFacetFromConfiguration.java  |  32 ---
 .../ValueFacetUsingSemanticsProviderFactory.java   |  15 +-
 .../dflt/ProgrammingModelFacetsJava11.java         |   3 -
 .../object/defaults/DefaultedFacetFactoryTest.java | 249 ---------------------
 .../parseable/ParseableFacetUsingParserTest.java   |   1 -
 .../facets/param/name/ParameterNameFacetTest.java  |   2 +-
 .../ValueSemanticsProviderAbstractTestCase.java    |   2 +-
 15 files changed, 13 insertions(+), 802 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotation/Defaulted.java b/api/applib/src/main/java/org/apache/isis/applib/annotation/Defaulted.java
deleted file mode 100644
index 285e894..0000000
--- a/api/applib/src/main/java/org/apache/isis/applib/annotation/Defaulted.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.applib.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-import org.apache.isis.applib.adapters.DefaultsProvider;
-
-/**
- * Indicates that the class should have a default, by providing a link to a
- * {@link DefaultsProvider}, or some externally-configured mechanism.
- *
- * <p>
- * This possibly seems a little tortuous. The more obvious means to provide a
- * default would seem to be a simple <tt>@DefaultsTo(new SomeObject())</tt>.
- * However, Java only allows primitives, strings and class literals to be used
- * in annotations. We therefore need delegate to an external implementation.
- * (This more complex design is also more flexible of course; the implementation
- * of {@link DefaultsProvider} could adjust the default it provides according to
- * circumstance, for example).
- *
- * @apiNote This annotation is only incompletely recognized by the framework, 
- *     and may be deprecated in the future.
- *
- * @see Value
- * @since 1.x {@index}
- */
-@Inherited
-@Target({ ElementType.TYPE })
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Defaulted {
-
-    /**
-     * The fully qualified name of a class that implements the
-     * {@link DefaultsProvider} interface.
-     *
-     * <p>
-     * This is optional because some implementations may pick up the defaults
-     * provider via a configuration file, or via the equivalent
-     * {@link #defaultsProviderClass()}.
-     *
-     * <p>
-     * Implementation note: the default value provided here is simply an empty
-     * string because <tt>null</tt> is not a valid default.
-     */
-    String defaultsProviderName() default "";
-
-    /**
-     * As per {@link #defaultsProviderName()}, but specifying a class literal
-     * rather than a fully qualified class name.
-     *
-     * <p>
-     * Implementation note: the default value provided here is simply the
-     * {@link Defaulted}'s own class, because <tt>null</tt> is not a valid
-     * default.
-     */
-    Class<?> defaultsProviderClass() default Defaulted.class;
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultsProviderUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultsProviderUtil.java
deleted file mode 100644
index 82a5c9c..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultsProviderUtil.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.core.metamodel.facets.object.defaults;
-
-import java.util.Optional;
-
-import org.springframework.lang.Nullable;
-
-import org.apache.isis.applib.adapters.DefaultsProvider;
-import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.commons.ClassExtensions;
-import org.apache.isis.core.metamodel.commons.ClassUtil;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-
-import lombok.NonNull;
-import lombok.val;
-import lombok.experimental.UtilityClass;
-
-@UtilityClass
-public final class DefaultsProviderUtil {
-
-    public static final String DEFAULTS_PROVIDER_NAME_KEY_PREFIX = "isis.reflector.java.facets.defaulted.";
-    public static final String DEFAULTS_PROVIDER_NAME_KEY_SUFFIX = ".providerName";
-
-    public static String defaultsProviderNameFromConfiguration(
-            final IsisConfiguration configuration,
-            final Class<?> type) {
-
-        val key = DEFAULTS_PROVIDER_NAME_KEY_PREFIX +
-                type.getCanonicalName() +
-                DEFAULTS_PROVIDER_NAME_KEY_SUFFIX;
-
-        val defaultsProviderName = configuration
-                .getEnvironment()
-                .getProperty(key);
-
-        return !_Strings.isNullOrEmpty(defaultsProviderName)
-                ? defaultsProviderName
-                : null;
-    }
-
-    public static Class<?> defaultsProviderOrNull(
-            final Class<?> candidateClass,
-            final String classCandidateName) {
-
-        val type = candidateClass != null
-                ? ClassUtil.implementingClassOrNull(
-                        candidateClass.getName(),
-                        DefaultsProvider.class,
-                        FacetHolder.class)
-
-                        : null;
-
-        return type != null
-                ? type
-                        : ClassUtil.implementingClassOrNull(
-                                classCandidateName,
-                                DefaultsProvider.class,
-                                FacetHolder.class);
-    }
-
-    public static Optional<DefaultsProvider<?>> providerFrom(
-            final @Nullable String candidateEncoderDecoderName,
-            final @Nullable Class<?> candidateEncoderDecoderClass,
-            final @NonNull FacetHolder holder) {
-
-        val defaultsProviderClass = DefaultsProviderUtil
-                .defaultsProviderOrNull(candidateEncoderDecoderClass, candidateEncoderDecoderName);
-
-        val defaultsProvider = defaultsProviderClass!=null
-                ? (DefaultsProvider<?>) ClassExtensions
-                        .newInstance(defaultsProviderClass, FacetHolder.class, holder)
-                : null;
-
-        return Optional.ofNullable(defaultsProvider)
-                .map(holder.getServiceInjector()::injectServicesInto);
-
-    }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetAnnotation.java
deleted file mode 100644
index fb63010..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetAnnotation.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.core.metamodel.facets.object.defaults.annotcfg;
-
-import java.util.Optional;
-
-import org.apache.isis.applib.adapters.DefaultsProvider;
-import org.apache.isis.applib.annotation.Defaulted;
-import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacet;
-import org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetAbstract;
-import org.apache.isis.core.metamodel.facets.object.defaults.DefaultsProviderUtil;
-
-public class DefaultedFacetAnnotation
-extends DefaultedFacetAbstract {
-
-    public static Optional<DefaultedFacet> create(
-            final IsisConfiguration config,
-            final Class<?> annotatedClass,
-            final FacetHolder holder) {
-
-        return DefaultsProviderUtil.providerFrom(
-                providerName(config, annotatedClass),
-                providerClass(annotatedClass),
-                holder)
-        .map(defaultsProvider->new DefaultedFacetAnnotation(defaultsProvider, holder));
-    }
-
-    // -- CONSTRUCTOR
-
-    private DefaultedFacetAnnotation(
-            final DefaultsProvider<?> defaultsProvider,
-            final FacetHolder holder) {
-        super(defaultsProvider, holder);
-    }
-
-    // -- HELPER
-
-    private static String providerName(final IsisConfiguration config, final Class<?> annotatedClass) {
-
-        final Defaulted annotation = annotatedClass.getAnnotation(Defaulted.class);
-        final String providerName = annotation.defaultsProviderName();
-        if (!_Strings.isNullOrEmpty(providerName)) {
-            return providerName;
-        }
-        return DefaultsProviderUtil.defaultsProviderNameFromConfiguration(config, annotatedClass);
-    }
-
-    private static Class<?> providerClass(final Class<?> annotatedClass) {
-        final Defaulted annotation = annotatedClass.getAnnotation(Defaulted.class);
-        return annotation.defaultsProviderClass();
-    }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetAnnotationElseConfigurationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetAnnotationElseConfigurationFactory.java
deleted file mode 100644
index fd9406bb..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetAnnotationElseConfigurationFactory.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.core.metamodel.facets.object.defaults.annotcfg;
-
-import java.util.Optional;
-
-import javax.inject.Inject;
-
-import org.apache.isis.applib.annotation.Defaulted;
-import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.object.defaults.DefaultsProviderUtil;
-
-public class DefaultedFacetAnnotationElseConfigurationFactory
-extends FacetFactoryAbstract {
-
-    @Inject
-    public DefaultedFacetAnnotationElseConfigurationFactory(final MetaModelContext mmc) {
-        super(mmc, FeatureType.OBJECTS_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-
-        final var cls = processClassContext.getCls();
-        final var facetHolder = processClassContext.getFacetHolder();
-        final var config = super.getConfiguration();
-        final var defaultedIfAny = processClassContext.synthesizeOnType(Defaulted.class);
-
-        addFacetIfPresent(
-
-            // create from annotation, if present
-            defaultedIfAny
-                .flatMap(defaultedAnnot->DefaultedFacetAnnotation.create(config, cls, facetHolder))
-            .or(
-
-                // otherwise, try to create from configuration, if present
-                ()->{
-                    final var providerName = DefaultsProviderUtil.defaultsProviderNameFromConfiguration(config, cls);
-                    return _Strings.isNotEmpty(providerName)
-                        ? DefaultedFacetFromConfiguration.create(providerName, facetHolder)
-                        : Optional.empty();
-                })
-        );
-    }
-
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetFromConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetFromConfiguration.java
deleted file mode 100644
index d449a29..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetFromConfiguration.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.core.metamodel.facets.object.defaults.annotcfg;
-
-import java.util.Optional;
-
-import org.springframework.lang.Nullable;
-
-import org.apache.isis.applib.adapters.DefaultsProvider;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetAbstract;
-import org.apache.isis.core.metamodel.facets.object.defaults.DefaultsProviderUtil;
-
-public class DefaultedFacetFromConfiguration
-extends DefaultedFacetAbstract {
-
-    @Nullable
-    public static Optional<DefaultedFacetFromConfiguration> create(
-            final String defaultedProviderName,
-            final FacetHolder holder) {
-
-        return DefaultsProviderUtil.providerFrom(defaultedProviderName, null, holder)
-        .map(defaultsProvider->new DefaultedFacetFromConfiguration(defaultsProvider, holder));
-    }
-
-    private DefaultedFacetFromConfiguration(
-            final DefaultsProvider<?> defaultsProvider,
-            final FacetHolder holder) {
-        super(defaultsProvider, holder);
-    }
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetAbstract.java
deleted file mode 100644
index 7e1d014..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetAbstract.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.core.metamodel.facets.object.parseable;
-
-import java.util.function.BiConsumer;
-
-import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.core.metamodel.commons.ClassExtensions;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.parseable.parser.ParseableFacetUsingParser;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-
-public abstract class ParseableFacetAbstract
-extends FacetAbstract
-implements ParseableFacet {
-
-    private final Class<?> parserClass;
-
-    // to delegate to
-    private final ParseableFacetUsingParser parseableFacetUsingParser;
-
-    public ParseableFacetAbstract(
-            final String candidateParserName,
-            final Class<?> candidateParserClass,
-            final FacetHolder holder) {
-
-        super(ParseableFacet.class, holder);
-
-        this.parserClass = ParserUtil.parserOrNull(candidateParserClass, candidateParserName);
-        this.parseableFacetUsingParser = hasParser()
-                ? createParseableFacetUsingParser(holder)
-                : null;
-    }
-
-    private ParseableFacetUsingParser createParseableFacetUsingParser(
-            final FacetHolder holder) {
-        final Parser<?> parser = (Parser<?>) ClassExtensions
-                .newInstance(parserClass, FacetHolder.class, holder);
-        return ParseableFacetUsingParser.create(parser, holder);
-    }
-
-    /**
-     * Discover whether either of the candidate parser name or class is valid.
-     */
-    public boolean hasParser() {
-        return parserClass != null;
-    }
-
-    /**
-     * Guaranteed to implement the {@link Parser} class, thanks to generics in
-     * the applib.
-     */
-    public Class<?> getParserClass() {
-        return parserClass;
-    }
-
-    @Override
-    public void visitAttributes(final BiConsumer<String, Object> visitor) {
-        super.visitAttributes(visitor);
-        visitor.accept("parser", parserClass.getName());
-    }
-
-    @Override
-    public ManagedObject parseTextEntry(
-            final ManagedObject original,
-            final String entryText,
-            final InteractionInitiatedBy interactionInitiatedBy) {
-
-        return parseableFacetUsingParser.parseTextEntry(original, entryText, interactionInitiatedBy);
-    }
-
-    @Override
-    public String parseableTextRepresentation(final ManagedObject existing) {
-        return parseableFacetUsingParser.parseableTextRepresentation(existing);
-    }
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/parser/ParseableFacetUsingParser.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParser.java
similarity index 93%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/parser/ParseableFacetUsingParser.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParser.java
index 8f75265..0f4a004 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/parser/ParseableFacetUsingParser.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParser.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.metamodel.facets.object.parseable.parser;
+package org.apache.isis.core.metamodel.facets.object.parseable;
 
 import java.util.IllegalFormatException;
 import java.util.function.BiConsumer;
@@ -28,13 +28,13 @@ import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.adapters.ParsingException;
 import org.apache.isis.applib.adapters.ValueSemanticsProvider;
 import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
+import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.consent.InteractionResultSet;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract;
-import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.core.metamodel.interactions.InteractionHead;
 import org.apache.isis.core.metamodel.interactions.InteractionUtils;
@@ -134,16 +134,11 @@ implements ParseableFacet {
         }
     }
 
-    /**
-     * TODO: need to fix genericity of using Parser<?>, for now suppressing
-     * warnings.
-     */
     @Override
-    @SuppressWarnings({ "unchecked", "rawtypes" })
     public String parseableTextRepresentation(final ManagedObject contextAdapter) {
         final Object pojo = UnwrapUtil.single(contextAdapter);
 
-        return ((Parser)parser).parseableTextRepresentation(parserContext(), pojo);
+        return parser.parseableTextRepresentation(parserContext(), _Casts.uncheckedCast(pojo));
     }
 
     private ValueSemanticsProvider.Context parserContext() {
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
deleted file mode 100644
index c678fbf..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParserUtil.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.core.metamodel.facets.object.parseable;
-
-import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.core.metamodel.commons.ClassUtil;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-
-import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
-
-public final class ParserUtil {
-
-    private ParserUtil() {
-    }
-
-    public static Class<? extends Parser<?>> parserOrNull(final Class<?> candidateClass, final String classCandidateName) {
-
-        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/parseable/annotcfg/ParseableFacetFromConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetFromConfiguration.java
deleted file mode 100644
index d85cf31..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetFromConfiguration.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.core.metamodel.facets.object.parseable.annotcfg;
-
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacetAbstract;
-
-public class ParseableFacetFromConfiguration extends ParseableFacetAbstract {
-
-    public ParseableFacetFromConfiguration(
-            final String candidateParserName,
-            final FacetHolder holder) {
-
-        super(candidateParserName, null, holder);
-    }
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java
index 8a6eed5..2348af4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java
@@ -32,7 +32,7 @@ import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetUsingDefaultsProvider;
 import org.apache.isis.core.metamodel.facets.object.encodeable.encoder.EncodableFacetUsingEncoderDecoder;
-import org.apache.isis.core.metamodel.facets.object.parseable.parser.ParseableFacetUsingParser;
+import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacetUsingParser;
 import org.apache.isis.core.metamodel.facets.object.title.parser.TitleFacetUsingRenderer;
 import org.apache.isis.core.metamodel.facets.object.value.ImmutableFacetViaValueSemantics;
 import org.apache.isis.core.metamodel.facets.object.value.MaxLengthFacetUsingParser;
@@ -49,7 +49,7 @@ extends FacetFactoryAbstract {
     protected final void addValueFacet(final ValueSemanticsProviderAndFacetAbstract<T> valueSemantics) {
         FacetUtil.addFacet(
                 new ValueFacetUsingSemanticsProvider(Can.ofSingleton(valueSemantics), valueSemantics.getFacetHolder()));
-        installRelatedFacets(valueSemantics, valueSemantics.getFacetHolder());
+        installRelatedFacets(Can.of(valueSemantics), valueSemantics.getFacetHolder());
     }
 
     protected final void addAllFacetsForValueSemantics(
@@ -57,24 +57,25 @@ extends FacetFactoryAbstract {
             final FacetHolder holder) {
         FacetUtil.addFacet(
                 new ValueFacetUsingSemanticsProvider(valueSemantics, holder));
-        installRelatedFacets(valueSemantics.getFirstOrFail(), holder);
+        installRelatedFacets(valueSemantics, holder);
     }
 
     // -- HELPER
 
     private void installRelatedFacets(
-            final ValueSemanticsProvider<?> semanticsProvider,
+            final Can<ValueSemanticsProvider<?>> semanticsProviders,
             final FacetHolder holder) {
 
         holder.addFacet(new ImmutableFacetViaValueSemantics(holder));
 
-        if (semanticsProvider != null) {
+        semanticsProviders
+        .forEach(semanticsProvider->{
 
             // install the EncodeableFacet if we've been given an EncoderDecoder
             final EncoderDecoder<?> encoderDecoder = semanticsProvider.getEncoderDecoder();
             if (encoderDecoder != null) {
                 //getServiceInjector().injectServicesInto(encoderDecoder);
-                FacetUtil.addFacet(new EncodableFacetUsingEncoderDecoder(encoderDecoder, holder));
+                holder.addFacet(new EncodableFacetUsingEncoderDecoder(encoderDecoder, holder));
             }
 
             final Renderer<?> renderer = semanticsProvider.getRenderer();
@@ -104,7 +105,7 @@ extends FacetFactoryAbstract {
                 holder.addFacet(new DefaultedFacetUsingDefaultsProvider(defaultsProvider, holder));
             }
 
-        }
+        });
 
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
index 66a2b8b..e55ad99 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
@@ -44,7 +44,6 @@ import org.apache.isis.core.metamodel.facets.object.ViewModelSemanticCheckingFac
 import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.bookmarkable.BookmarkPolicyFacetFallbackFactory;
 import org.apache.isis.core.metamodel.facets.object.callbacks.CallbackFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.choices.enums.EnumFacetUsingValueFacetUsingSemanticsProviderFactory;
-import org.apache.isis.core.metamodel.facets.object.defaults.annotcfg.DefaultedFacetAnnotationElseConfigurationFactory;
 import org.apache.isis.core.metamodel.facets.object.domainobject.DomainObjectAnnotationFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.DomainObjectLayoutFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.domainservice.annotation.DomainServiceFacetAnnotationFactory;
@@ -214,8 +213,6 @@ extends ProgrammingModelAbstract {
         addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new BookmarkPolicyFacetFallbackFactory(mmc));
         addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new HomePageFacetAnnotationFactory(mmc));
 
-        addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new DefaultedFacetAnnotationElseConfigurationFactory(mmc));
-
         addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new BigDecimalFacetOnParameterFromJavaxValidationAnnotationFactory(mmc));
         addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory(mmc));
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFactoryTest.java
deleted file mode 100644
index 4b67590..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFactoryTest.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.core.metamodel.facets.object.defaults;
-
-import org.apache.isis.applib.adapters.DefaultsProvider;
-import org.apache.isis.applib.annotation.Defaulted;
-import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
-import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
-import org.apache.isis.core.metamodel.facets.object.defaults.annotcfg.DefaultedFacetAnnotationElseConfigurationFactory;
-
-import lombok.val;
-
-public class DefaultedFacetFactoryTest
-extends AbstractFacetFactoryTest {
-
-    private DefaultedFacetAnnotationElseConfigurationFactory facetFactory;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        facetFactory = new DefaultedFacetAnnotationElseConfigurationFactory(metaModelContext);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        facetFactory = null;
-        super.tearDown();
-    }
-
-    public void testFacetPickedUp() {
-        facetFactory.process(ProcessClassContext
-                .forTesting(MyDefaultedUsingDefaultsProvider.class, methodRemover, facetedMethod));
-
-        final DefaultedFacet facet = facetedMethod.getFacet(DefaultedFacet.class);
-        assertNotNull(facet);
-        assertTrue(facet instanceof DefaultedFacetAbstract);
-    }
-
-    public void testFacetFacetHolderStored() {
-
-        facetFactory.process(ProcessClassContext
-                .forTesting(MyDefaultedUsingDefaultsProvider.class, methodRemover, facetedMethod));
-
-        final DefaultedFacetAbstract valueFacet = (DefaultedFacetAbstract) facetedMethod.getFacet(DefaultedFacet.class);
-        assertEquals(facetedMethod, valueFacet.getFacetHolder());
-    }
-
-    public void testNoMethodsRemoved() {
-
-        facetFactory.process(ProcessClassContext
-                .forTesting(MyDefaultedUsingDefaultsProvider.class, methodRemover, facetedMethod));
-
-        assertNoMethodsRemoved();
-    }
-
-    abstract static class DefaultsProviderNoop<T> implements DefaultsProvider<T> {
-
-        @Override
-        public abstract T getDefaultValue();
-
-    }
-
-    @Defaulted(defaultsProviderName = "org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetFactoryTest$MyDefaultedUsingDefaultsProvider")
-    public static class MyDefaultedUsingDefaultsProvider extends DefaultsProviderNoop<MyDefaultedUsingDefaultsProvider> {
-
-        /**
-         * Required since is a DefaultsProvider.
-         */
-        public MyDefaultedUsingDefaultsProvider() {
-        }
-
-        @Override
-        public MyDefaultedUsingDefaultsProvider getDefaultValue() {
-            return new MyDefaultedUsingDefaultsProvider();
-        }
-    }
-
-    public void testDefaultedUsingDefaultsProviderName() {
-        facetFactory.process(ProcessClassContext
-                .forTesting(MyDefaultedUsingDefaultsProvider.class, methodRemover, facetedMethod));
-        final DefaultedFacetAbstract facet = (DefaultedFacetAbstract) facetedMethod.getFacet(DefaultedFacet.class);
-        assertEquals(MyDefaultedUsingDefaultsProvider.class, facet.getDefaultsProviderClass());
-    }
-
-    @Defaulted(defaultsProviderClass = MyDefaultedUsingDefaultsProviderClass.class)
-    public static class MyDefaultedUsingDefaultsProviderClass extends DefaultsProviderNoop<MyDefaultedUsingDefaultsProviderClass> {
-
-        /**
-         * Required since is a DefaultsProvider.
-         */
-        public MyDefaultedUsingDefaultsProviderClass() {
-        }
-
-        @Override
-        public MyDefaultedUsingDefaultsProviderClass getDefaultValue() {
-            return new MyDefaultedUsingDefaultsProviderClass();
-        }
-    }
-
-    public void testDefaultedUsingDefaultsProviderClass() {
-        facetFactory.process(ProcessClassContext
-                .forTesting(MyDefaultedUsingDefaultsProviderClass.class, methodRemover, facetedMethod));
-        final DefaultedFacetAbstract facet = (DefaultedFacetAbstract) facetedMethod.getFacet(DefaultedFacet.class);
-        assertEquals(MyDefaultedUsingDefaultsProviderClass.class, facet.getDefaultsProviderClass());
-    }
-
-    public void testDefaultedMustBeADefaultsProvider() {
-        // no test, because compiler prevents us from nominating a class that
-        // doesn't
-        // implement DefaultsProvider
-    }
-
-    @Defaulted(defaultsProviderClass = MyDefaultedWithoutNoArgConstructor.class)
-    public static class MyDefaultedWithoutNoArgConstructor extends DefaultsProviderNoop<MyDefaultedWithoutNoArgConstructor> {
-
-        // no no-arg constructor
-
-        public MyDefaultedWithoutNoArgConstructor(final int value) {
-        }
-
-        @Override
-        public MyDefaultedWithoutNoArgConstructor getDefaultValue() {
-            return new MyDefaultedWithoutNoArgConstructor(0);
-        }
-
-    }
-
-    public void testDefaultedMustHaveANoArgConstructor() {
-        facetFactory.process(ProcessClassContext
-                .forTesting(MyDefaultedWithoutNoArgConstructor.class, methodRemover, facetedMethod));
-        final DefaultedFacetAbstract facet = (DefaultedFacetAbstract) facetedMethod.getFacet(DefaultedFacet.class);
-        assertNull(facet);
-    }
-
-    @Defaulted(defaultsProviderClass = MyDefaultedWithoutPublicNoArgConstructor.class)
-    public static class MyDefaultedWithoutPublicNoArgConstructor extends DefaultsProviderNoop<MyDefaultedWithoutPublicNoArgConstructor> {
-
-        // no public no-arg constructor
-        MyDefaultedWithoutPublicNoArgConstructor() {
-        }
-
-        public MyDefaultedWithoutPublicNoArgConstructor(final int value) {
-        }
-
-        @Override
-        public MyDefaultedWithoutPublicNoArgConstructor getDefaultValue() {
-            return new MyDefaultedWithoutPublicNoArgConstructor();
-        }
-
-    }
-
-    public void testDefaultedHaveAPublicNoArgConstructor() {
-        facetFactory.process(ProcessClassContext
-                .forTesting(MyDefaultedWithoutPublicNoArgConstructor.class, methodRemover, facetedMethod));
-        final DefaultedFacetAbstract facet = (DefaultedFacetAbstract) facetedMethod.getFacet(DefaultedFacet.class);
-        assertNull(facet);
-    }
-
-    @Defaulted()
-    public static class MyDefaultedWithDefaultsProviderSpecifiedUsingConfiguration extends DefaultsProviderNoop<MyDefaultedWithDefaultsProviderSpecifiedUsingConfiguration> {
-
-        /**
-         * Required since is a DefaultsProvider.
-         */
-        public MyDefaultedWithDefaultsProviderSpecifiedUsingConfiguration() {
-        }
-
-        @Override
-        public MyDefaultedWithDefaultsProviderSpecifiedUsingConfiguration getDefaultValue() {
-            return new MyDefaultedWithDefaultsProviderSpecifiedUsingConfiguration();
-        }
-    }
-
-    public void testDefaultedProviderNameCanBePickedUpFromConfiguration() {
-
-        val className = "org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetFactoryTest$MyDefaultedWithDefaultsProviderSpecifiedUsingConfiguration";
-        val configKey = DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_PREFIX + canonical(className) + DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_SUFFIX;
-
-        metaModelContext
-        .runWithConfigProperties(
-            map->map.put(configKey, className),
-            ()->{
-
-                facetFactory.process(ProcessClassContext
-                        .forTesting(MyDefaultedWithDefaultsProviderSpecifiedUsingConfiguration.class, methodRemover, facetedMethod));
-
-            });
-
-
-        final DefaultedFacetAbstract facet = (DefaultedFacetAbstract) facetedMethod.getFacet(DefaultedFacet.class);
-        assertNotNull(facet);
-        assertEquals(MyDefaultedWithDefaultsProviderSpecifiedUsingConfiguration.class, facet.getDefaultsProviderClass());
-    }
-
-    public static class NonAnnotatedDefaultedDefaultsProviderSpecifiedUsingConfiguration extends DefaultsProviderNoop<NonAnnotatedDefaultedDefaultsProviderSpecifiedUsingConfiguration> {
-
-        /**
-         * Required since is a DefaultsProvider.
-         */
-        public NonAnnotatedDefaultedDefaultsProviderSpecifiedUsingConfiguration() {
-        }
-
-        @Override
-        public NonAnnotatedDefaultedDefaultsProviderSpecifiedUsingConfiguration getDefaultValue() {
-            return new NonAnnotatedDefaultedDefaultsProviderSpecifiedUsingConfiguration();
-        }
-    }
-
-    public void testNonAnnotatedDefaultedCanBePickedUpFromConfiguration() {
-
-        val className = "org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetFactoryTest$NonAnnotatedDefaultedDefaultsProviderSpecifiedUsingConfiguration";
-        val configKey = DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_PREFIX + canonical(className) + DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_SUFFIX;
-
-        metaModelContext
-        .runWithConfigProperties(
-            map->map.put(configKey, className),
-            ()->{
-
-                facetFactory.process(ProcessClassContext.forTesting(NonAnnotatedDefaultedDefaultsProviderSpecifiedUsingConfiguration.class, methodRemover, facetedMethod));
-
-            });
-
-        final DefaultedFacetAbstract facet = (DefaultedFacetAbstract) facetedMethod.getFacet(DefaultedFacet.class);
-        assertNotNull(facet);
-        assertEquals(NonAnnotatedDefaultedDefaultsProviderSpecifiedUsingConfiguration.class, facet.getDefaultsProviderClass());
-    }
-
-    private String canonical(final String className) {
-        return className.replace('$', '.');
-    }
-
-}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java
index 563e969..2942a92 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java
@@ -39,7 +39,6 @@ import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.parseable.parser.ParseableFacetUsingParser;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 
 public class ParseableFacetUsingParserTest {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java
index b83db45..0a1324a 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java
@@ -67,7 +67,7 @@ extends AbstractFacetFactoryJUnit4TestCase {
 
     @Test
     public void verifyProgrammingModelNumberOfFactories() {
-        assertEquals(94, programmingModel.streamFactories().count());
+        assertEquals(93, programmingModel.streamFactories().count());
     }
 
     @Test //verify we have the javac -parameter flag set when compiling this class
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
index 2e281b8..87bff2a 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
@@ -47,7 +47,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
 import org.apache.isis.core.metamodel.facets.object.encodeable.encoder.EncodableFacetUsingEncoderDecoder;
 import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
-import org.apache.isis.core.metamodel.facets.object.parseable.parser.ParseableFacetUsingParser;
+import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacetUsingParser;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
 import org.apache.isis.core.metamodel.facets.value.string.StringValueSemantics;
 import org.apache.isis.core.metamodel.spec.ManagedObject;