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

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


The following commit(s) were added to refs/heads/main by this push:
     new 87ad3c985d1 CAUSEWAY-3859: Java record refactoring (part 14)
87ad3c985d1 is described below

commit 87ad3c985d1e9954d39eaf41873ac5891543e84f
Author: Andi Huber <[email protected]>
AuthorDate: Wed Feb 19 06:57:25 2025 +0100

    CAUSEWAY-3859: Java record refactoring (part 14)
---
 .../core/metamodel/facets/FacetFactory.java        |   2 +-
 .../core/metamodel/facets/FacetedMethod.java       | 124 ++++++++++++---------
 .../metamodel/facets/FacetedMethodParameter.java   |  44 ++++----
 .../{TypedHolder.java => TypedFacetHolder.java}    |  15 +--
 .../core/metamodel/facets/TypedHolderAbstract.java |  57 ----------
 .../facets/fallback/FallbackFacetFactory.java      |   8 +-
 ...ommandPublishingFacetForPropertyAnnotation.java |  10 +-
 ...cutionPublishingFacetForPropertyAnnotation.java |  10 +-
 .../facets/object/value/CompositeValueUpdater.java |   2 +-
 ...ActionParameterSupportFacetFactoryAbstract.java |   8 +-
 .../method/PropertyChoicesFacetViaMethod.java      |   2 +-
 ...romptStyleFacetForPropertyLayoutAnnotation.java |   2 +-
 .../ValueSemanticsAnnotationFacetFactory.java      |  10 +-
 .../metamodel/spec/impl/FacetedMethodsBuilder.java |  41 +++----
 .../metamodel/spec/impl/ObjectActionDefault.java   |  28 ++---
 .../metamodel/spec/impl/ObjectActionMixedIn.java   |   2 +-
 .../spec/impl/ObjectActionParameterAbstract.java   |   4 +-
 .../spec/impl/ObjectSpecificationDefault.java      |   6 +-
 .../spec/impl/OneToManyAssociationDefault.java     |   4 +-
 .../spec/impl/OneToManyAssociationMixedIn.java     |   2 +-
 .../spec/impl/OneToOneAssociationDefault.java      |   4 +-
 .../spec/impl/OneToOneAssociationMixedIn.java      |   2 +-
 ...udeAnnotationEnforcesMetamodelContribution.java |   8 +-
 .../metamodel/facets/FacetFactoryTestAbstract.java |   4 +-
 .../actions/ActionMethodsFacetFactoryTest.java     |  12 +-
 ...nnotationFacetFactoryTest_ActionInvocation.java |   4 +-
 .../PropertyAnnotationFacetFactoryTest.java        |   2 +-
 .../metamodel/MetaModelServiceDefaultTest.java     |   2 +-
 .../spec/impl/OneToManyAssociationDefaultTest.java |   2 +-
 .../testing/AbstractFacetFactoryTest.java          |   4 +-
 .../AutoCompleteGeneratedQueryFacetFactory.java    |   2 +-
 31 files changed, 188 insertions(+), 239 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetFactory.java
index 34a591d37a0..fd082b2cc2a 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetFactory.java
@@ -373,7 +373,7 @@ public ProcessParameterContext(
                 final FacetedMethodParameter facetedMethodParameter) {
 
             super(cls, introspectionPolicy, method, methodRemover, 
facetedMethodParameter);
-            this.paramNum = facetedMethodParameter.getParamIndex();
+            this.paramNum = facetedMethodParameter.paramIndex();
             this.parameterType = super.method.getParameterType(paramNum);
             this.parameterName = super.method.getParameterName(paramNum);
         }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetedMethod.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetedMethod.java
index c8e101e2b52..9a37330f30b 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetedMethod.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetedMethod.java
@@ -18,12 +18,12 @@
  */
 package org.apache.causeway.core.metamodel.facets;
 
-import java.lang.reflect.Method;
 import java.util.List;
 
 import org.apache.causeway.applib.Identifier;
 import org.apache.causeway.applib.id.LogicalType;
 import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.commons.internal.base._Lazy;
 import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.commons.internal.collections._Lists;
 import org.apache.causeway.commons.internal.reflection._GenericResolver;
@@ -33,18 +33,45 @@
 import 
org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade;
 import org.apache.causeway.commons.semantics.CollectionSemantics;
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
+import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
 import org.apache.causeway.core.metamodel.facetapi.FacetUtil;
 import org.apache.causeway.core.metamodel.facetapi.FeatureType;
 import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
+import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
 
-import lombok.Getter;
-
 /**
- * non-final only so it can be mocked if need be.
+ * {@link TypedFacetHolder} representing a Java method.
  */
-public class FacetedMethod
-extends TypedHolderAbstract {
+public record FacetedMethod(
+    FacetHolder facetHolder,
+    FeatureType featureType,
+    /**
+     * resolved method return type
+     */
+    ResolvedType resolvedType,
+    /**
+     * The {@link Class} that owns this {@link Method} (as per
+     * {@link Class#getMethods()}, returning the {@link Method}s both of this
+     * class and of its super-classes).
+     * <p>
+     * Note: we don't call this the 'declaring type' because
+     * {@link Class#getDeclaredMethods()} does not return methods from
+     * super-classes.
+     */
+    Class<?> owningType,
+    /**
+     * A {@link Method} obtained from the {@link #owningType()}
+     * using {@link Class#getMethods()}.
+     */
+    MethodFacade methodFacade,
+    Can<FacetedMethodParameter> parameters,
+    /**
+     * @apiNote lazily memoized only once the metamodel was populated,
+     * otherwise during metamodel introspection would trigger cascading object 
introspection as a side-effect
+     */
+    _Lazy<ObjectSpecification> elementSpecificationLazy
+    ) implements TypedFacetHolder {
 
     // -- FACTORIES
 
@@ -103,16 +130,14 @@ private static Can<FacetedMethodParameter> getParameters(
             }
 
             // this is based on similar logic to 
ActionAnnotationFacetFactory#processTypeOf
-
-            var facetedMethodParamToUse =
-                    TypeOfFacet
-                    .inferFromMethodParameter(actionMethod, paramIndex, 
facetedMethodParam)
-                    .map(typeOfFacet->{
-                        // (corresponds to similar code for 
OneToManyAssociation in FacetMethodsBuilder).
-                        FacetUtil.addFacet(typeOfFacet);
-                        return 
facetedMethodParam.withType(typeOfFacet.value());
-                    })
-                    .orElse(facetedMethodParam);
+            var facetedMethodParamToUse = TypeOfFacet
+                .inferFromMethodParameter(actionMethod, paramIndex, 
facetedMethodParam)
+                .map(typeOfFacet->{
+                    // (corresponds to similar code for OneToManyAssociation 
in FacetMethodsBuilder).
+                    FacetUtil.addFacet(typeOfFacet);
+                    return 
facetedMethodParam.withResolvedType(typeOfFacet.value());
+                })
+                .orElse(facetedMethodParam);
 
             actionParams.add(facetedMethodParamToUse);
 
@@ -165,28 +190,6 @@ public static FacetedMethod createForAction(
         }
     }
 
-    // -- FIELDS
-
-    /**
-     * The {@link Class} that owns this {@link Method} (as per
-     * {@link Class#getMethods()}, returning the {@link Method}s both of this
-     * class and of its superclasses).
-     *
-     * <p>
-     * Note: we don't call this the 'declaring type' because
-     * {@link Class#getDeclaredMethods()} does not return methods from
-     * superclasses.
-     */
-    @Getter private final Class<?> owningType;
-
-    /**
-     * A {@link Method} obtained from the {@link #getOwningType() owning type}
-     * using {@link Class#getMethods()}.
-     */
-    @Getter private final MethodFacade method;
-
-    @Getter private final Can<FacetedMethodParameter> parameters;
-
     // -- CONSTRUCTOR
 
     private FacetedMethod(
@@ -194,32 +197,41 @@ private FacetedMethod(
             final FeatureType featureType,
             final Class<?> declaringType,
             final MethodFacade method,
-            final ResolvedType type,
+            final ResolvedType resolvedType,
             final Can<FacetedMethodParameter> parameters) {
+        this(
+            FacetHolder
+                .simple(mmc, methodIdentifier(mmc.getSpecificationLoader(), 
featureType, declaringType, method)),
+            featureType,
+            resolvedType,
+            declaringType,
+            method,
+            parameters,
+            elementSpecificationLazy(mmc.getSpecificationLoader(), 
resolvedType));
+    }
 
-        super(mmc,
-                featureType,
-                type,
-                methodIdentifier(mmc.getSpecificationLoader(), featureType, 
declaringType, method));
-        this.owningType = declaringType;
-        this.method = method;
-        this.parameters = parameters;
+    public FacetedMethodParameter parameter(final int paramIndex) {
+        return parameters.getElseFail(paramIndex);
     }
 
     @Override
     public String toString() {
-        return getFeatureType().name() + " Peer [identifier=\"" + 
getFeatureIdentifier()
-            + "\",type=" + getType() + " ]";
+        return featureType().name() + " Peer [identifier=\"" + 
getFeatureIdentifier()
+            + "\",type=" + resolvedType() + " ]";
+    }
+
+    public ObjectSpecification elementSpecification() {
+        return elementSpecificationLazy.get();
     }
 
     /**
-     * Returns an instance with {@code type} replaced by given {@code 
elementType}.
+     * Returns an instance with {@link #resolvedType} replaced by a new {@link 
ResolvedType} that has given {@code elementType}.
      * @param elementType
      */
-    public FacetedMethod withType(final Class<?> elementType) {
-        //XXX maybe future refactoring can make the type immutable, so we can 
remove this method
-        this.type = type.withElementType(elementType);
-        return this;
+    public FacetedMethod withElementType(final Class<?> elementType) {
+        var newResolvedType = resolvedType.withElementType(elementType);
+        return new FacetedMethod(facetHolder, featureType, newResolvedType, 
owningType, methodFacade, parameters,
+            elementSpecificationLazy(facetHolder.getSpecificationLoader(), 
newResolvedType));
     }
 
     // -- HELPER
@@ -232,4 +244,10 @@ private static Identifier methodIdentifier(
         return featureType.identifierFor(LogicalType.infer(declaringType), 
method);
     }
 
+    private static _Lazy<ObjectSpecification> elementSpecificationLazy(
+            final SpecificationLoader specificationLoader,
+            final ResolvedType resolvedType) {
+        return 
_Lazy.threadSafe(()->specificationLoader.specForTypeElseFail(resolvedType.elementType()));
+    }
+
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetedMethodParameter.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetedMethodParameter.java
index d1a74d81d24..cff56065485 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetedMethodParameter.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/FacetedMethodParameter.java
@@ -22,14 +22,15 @@
 import 
org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedType;
 import 
org.apache.causeway.commons.internal.reflection._MethodFacades.MethodFacade;
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
+import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
 import org.apache.causeway.core.metamodel.facetapi.FeatureType;
 
-import lombok.Getter;
-
-public class FacetedMethodParameter
-extends TypedHolderAbstract {
-
-    @Getter private final int paramIndex;
+public record FacetedMethodParameter(
+    int paramIndex,
+    FacetHolder facetHolder,
+    FeatureType featureType,
+    ResolvedType resolvedType
+    ) implements TypedFacetHolder {
 
     public FacetedMethodParameter(
             final MetaModelContext mmc,
@@ -37,24 +38,25 @@ public FacetedMethodParameter(
             final Class<?> declaringType,
             final MethodFacade methodFacade,
             final int paramIndex) {
-
-        super(mmc,
-                featureType,
-                methodFacade.resolveParameter(paramIndex),
-                FeatureType.ACTION.identifierFor(
-                        LogicalType.infer(declaringType),
-                        methodFacade));
-
-        this.paramIndex = paramIndex;
+        this(
+            paramIndex,
+            FacetHolder.simple(mmc, FeatureType.ACTION.identifierFor(
+                LogicalType.infer(declaringType),
+                methodFacade)),
+            featureType,
+            methodFacade.resolveParameter(paramIndex));
     }
 
     /**
-     * Returns an instance with {@code type} replaced by given {@code newType}.
+     * Returns an instance with {@code resolvedType} replaced by given {@code 
newType}.
      */
-    public FacetedMethodParameter withType(final ResolvedType newType) {
-        //XXX maybe future refactoring can make the type immutable, so we can 
remove this method
-        this.type = newType;
-        return this;
+    public FacetedMethodParameter withResolvedType(final ResolvedType newType) 
{
+        return new FacetedMethodParameter(paramIndex, facetHolder, 
featureType, newType);
+    }
+
+    @Override // as used for logging, not strictly required
+    public String toString() {
+        return resolvedType.toString();
     }
 
-}
+}
\ No newline at end of file
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/TypedHolder.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/TypedFacetHolder.java
similarity index 78%
rename from 
core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/TypedHolder.java
rename to 
core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/TypedFacetHolder.java
index e513b295b0b..2a843617a27 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/TypedHolder.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/TypedFacetHolder.java
@@ -22,18 +22,19 @@
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
 import org.apache.causeway.core.metamodel.facetapi.FeatureType;
 import org.apache.causeway.core.metamodel.facetapi.HasFacetHolder;
-import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 
 /**
- * A {@link FacetHolder} that also has a {@link ObjectSpecification type}.
- *
+ * A {@link FacetHolder} that also has a {@link ResolvedType}.
  * <p>
  * Used to represent class members when building up the metamodel.
  */
-public interface TypedHolder extends HasFacetHolder {
-
-    FeatureType getFeatureType();
+public sealed interface TypedFacetHolder extends HasFacetHolder
+permits FacetedMethod, FacetedMethodParameter {
 
-    ResolvedType getType();
+    FacetHolder facetHolder();
+    FeatureType featureType();
+    ResolvedType resolvedType();
 
+    @Override
+    default FacetHolder getFacetHolder() { return facetHolder(); }
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/TypedHolderAbstract.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/TypedHolderAbstract.java
deleted file mode 100644
index b280d8347d6..00000000000
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/TypedHolderAbstract.java
+++ /dev/null
@@ -1,57 +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.causeway.core.metamodel.facets;
-
-import org.apache.causeway.applib.Identifier;
-import 
org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedType;
-import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-import org.apache.causeway.core.metamodel.facetapi.FeatureType;
-import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
-
-import lombok.Getter;
-import org.jspecify.annotations.NonNull;
-
-public abstract class TypedHolderAbstract
-implements TypedHolder {
-
-    @Getter(onMethod_ = {@Override}) private FacetHolder facetHolder;
-    @Getter(onMethod_ = {@Override}) private final FeatureType featureType;
-    @Getter(onMethod_ = {@Override}) protected ResolvedType type;
-
-    protected TypedHolderAbstract(
-            final MetaModelContext mmc,
-            final FeatureType featureType,
-            final @NonNull ResolvedType type,
-            final Identifier featureIdentifier) {
-        this.facetHolder = FacetHolder.simple(mmc, featureIdentifier);
-        this.featureType = featureType;
-        this.type = type;
-    }
-
-    @Override // as used for logging, not strictly required
-    public String toString() {
-        return type.toString();
-    }
-
-    public ObjectSpecification getElementSpecification() {
-        return 
getSpecificationLoader().specForTypeElseFail(type.elementType());
-    }
-
-}
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/fallback/FallbackFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/fallback/FallbackFacetFactory.java
index 41f46f590ed..65cc945d098 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/fallback/FallbackFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/fallback/FallbackFacetFactory.java
@@ -28,7 +28,7 @@
 import org.apache.causeway.core.metamodel.facetapi.FeatureType;
 import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.causeway.core.metamodel.facets.FacetedMethod;
-import org.apache.causeway.core.metamodel.facets.TypedHolder;
+import org.apache.causeway.core.metamodel.facets.TypedFacetHolder;
 
 /**
  * Central point for providing some kind of default for any {@link Facet}s
@@ -80,7 +80,7 @@ public void process(final ProcessMethodContext 
processMethodContext) {
 
         addFacet(new NamedFacetFallbackFromMemberName(facetedMethod));
 
-        final FeatureType featureType = facetedMethod.getFeatureType();
+        final FeatureType featureType = facetedMethod.featureType();
         if (featureType.isProperty()) {
             addFacet(new MaxLengthFacetUnlimited(facetedMethod));
             addFacet(new MultiLineFacetNone(facetedMethod));
@@ -102,8 +102,8 @@ public void process(final ProcessMethodContext 
processMethodContext) {
 
     @Override
     public void processParams(final ProcessParameterContext 
processParameterContext) {
-        final TypedHolder typedHolder = 
processParameterContext.getFacetHolder();
-        if (typedHolder.getFeatureType().isActionParameter()) {
+        final TypedFacetHolder typedHolder = 
processParameterContext.getFacetHolder();
+        if (typedHolder.featureType().isActionParameter()) {
             addFacet(new MultiLineFacetNone(typedHolder));
             addFacet(new MaxLengthFacetUnlimited(typedHolder));
             addFacet(new LabelAtFacetFromLayoutConfiguration(
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotation.java
index 7d4b65924e3..622de800147 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotation.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotation.java
@@ -29,14 +29,14 @@
 import org.apache.causeway.core.config.metamodel.facets.PropertyConfigOptions;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
 import org.apache.causeway.core.metamodel.facetapi.FeatureType;
-import org.apache.causeway.core.metamodel.facets.TypedHolder;
+import org.apache.causeway.core.metamodel.facets.TypedFacetHolder;
 import 
org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacet;
 import org.apache.causeway.core.metamodel.facets.object.mixin.MixinFacet;
 
 public abstract class CommandPublishingFacetForPropertyAnnotation extends 
CommandPublishingFacetAbstract {
 
     static class Enabled extends CommandPublishingFacetForPropertyAnnotation {
-        Enabled(CommandDtoProcessor processor, FacetHolder holder, 
ServiceInjector servicesInjector) {
+        Enabled(final CommandDtoProcessor processor, final FacetHolder holder, 
final ServiceInjector servicesInjector) {
             super(processor, holder, servicesInjector);
         }
 
@@ -47,7 +47,7 @@ public boolean isEnabled() {
     }
 
     static class Disabled extends CommandPublishingFacetForPropertyAnnotation {
-        Disabled(CommandDtoProcessor processor, FacetHolder holder, 
ServiceInjector servicesInjector) {
+        Disabled(final CommandDtoProcessor processor, final FacetHolder 
holder, final ServiceInjector servicesInjector) {
             super(processor, holder, servicesInjector);
         }
 
@@ -127,9 +127,9 @@ public static CommandPublishingFacet create(
             });
     }
 
-    private static boolean representsProperty(FacetHolder holder) {
+    private static boolean representsProperty(final FacetHolder holder) {
         // a property
-        if (holder instanceof TypedHolder && 
((TypedHolder)holder).getFeatureType() == FeatureType.PROPERTY) {
+        if (holder instanceof TypedFacetHolder && 
((TypedFacetHolder)holder).featureType() == FeatureType.PROPERTY) {
             return true;
         }
         // or a mixin
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyAnnotation.java
index c27a04556cb..4150307bb4b 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyAnnotation.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyAnnotation.java
@@ -27,7 +27,7 @@
 import org.apache.causeway.core.config.metamodel.facets.PropertyConfigOptions;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
 import org.apache.causeway.core.metamodel.facetapi.FeatureType;
-import org.apache.causeway.core.metamodel.facets.TypedHolder;
+import org.apache.causeway.core.metamodel.facets.TypedFacetHolder;
 import 
org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacet;
 import org.apache.causeway.core.metamodel.facets.object.mixin.MixinFacet;
 
@@ -35,7 +35,7 @@ public abstract class 
ExecutionPublishingFacetForPropertyAnnotation
 extends ExecutionPublishingFacetAbstract {
 
     static class Enabled extends ExecutionPublishingFacetForPropertyAnnotation 
{
-        Enabled(FacetHolder holder) {
+        Enabled(final FacetHolder holder) {
             super(holder);
         }
 
@@ -46,7 +46,7 @@ public boolean isEnabled() {
     }
 
     static class Disabled extends 
ExecutionPublishingFacetForPropertyAnnotation {
-        Disabled(FacetHolder holder) {
+        Disabled(final FacetHolder holder) {
             super(holder);
         }
 
@@ -118,9 +118,9 @@ public static ExecutionPublishingFacet create(
             });
     }
 
-    private static boolean representsProperty(FacetHolder holder) {
+    private static boolean representsProperty(final FacetHolder holder) {
         // a property
-        if (holder instanceof TypedHolder && 
((TypedHolder)holder).getFeatureType() == FeatureType.PROPERTY) {
+        if (holder instanceof TypedFacetHolder && 
((TypedFacetHolder)holder).featureType() == FeatureType.PROPERTY) {
             return true;
         }
         // or a mixin
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/value/CompositeValueUpdater.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/value/CompositeValueUpdater.java
index f0e820d02a8..eefdceee8c3 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/value/CompositeValueUpdater.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/value/CompositeValueUpdater.java
@@ -62,7 +62,7 @@ private ManagedObject simpleExecute(
             final InteractionHead head, final Can<ManagedObject> parameters) {
 
         var methodFacade = mixedInAction instanceof HasFacetedMethod 
facetedMethodHolder
-            ? facetedMethodHolder.getFacetedMethod().getMethod()
+            ? facetedMethodHolder.getFacetedMethod().methodFacade()
             : null;
         if(methodFacade==null) return 
ManagedObject.empty(mixedInAction.getReturnType()); // unsupported MixedInAction
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/support/ActionParameterSupportFacetFactoryAbstract.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/support/ActionParameterSupportFacetFactoryAbstract.java
index 2c9a74398b8..bfde77e9f62 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/support/ActionParameterSupportFacetFactoryAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/param/support/ActionParameterSupportFacetFactoryAbstract.java
@@ -56,13 +56,10 @@ protected ActionParameterSupportFacetFactoryAbstract(
 
     @Override
     public final void process(final ProcessMethodContext processMethodContext) 
{
-
         var facetedMethod = processMethodContext.getFacetHolder();
-        var parameters = facetedMethod.getParameters();
+        var parameters = facetedMethod.parameters();
 
-        if (parameters.isEmpty()) {
-            return;
-        }
+        if (parameters.isEmpty()) return;
 
         var methodNameCandidates = memberSupportPrefix.getMethodNamePrefixes()
                 .flatMap(processMethodContext::parameterSupportCandidates);
@@ -84,7 +81,6 @@ public final void process(final ProcessMethodContext 
processMethodContext) {
             var paramAsHolder = parameters.getElseFail(paramIndex);
             onSearchResult(paramAsHolder, searchResult);
         });
-
     }
 
     protected abstract void onSearchResult(
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
index 0926af4f374..2de9ca2c1d6 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
@@ -62,7 +62,7 @@ public Can<ManagedObject> getChoices(
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         var method = methods.getFirstElseFail().asMethodElseFail(); // 
expected regular
-        var elementSpec = ((FacetedMethod) 
getFacetHolder()).getElementSpecification();
+        var elementSpec = ((FacetedMethod) 
getFacetHolder()).elementSpecification();
         var optionPojos = MmInvokeUtils.invokeNoArg(method.method(), 
owningAdapter);
         var visibleChoices = ManagedObjects
                 .adaptMultipleOfTypeThenFilterByVisibility(
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutAnnotation.java
index 3904edd518f..da6135072df 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutAnnotation.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutAnnotation.java
@@ -50,7 +50,7 @@ public static Optional<PromptStyleFacet> create(
         // guard against member not being a property
         if(holder instanceof FacetedMethod) {
             final FacetedMethod facetedMethod = (FacetedMethod) holder;
-            if(facetedMethod.getFeatureType() != FeatureType.PROPERTY) {
+            if(facetedMethod.featureType() != FeatureType.PROPERTY) {
                 return Optional.empty();
             }
         }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
index 8e2d1ccbf78..9d6287ebd93 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
@@ -27,7 +27,7 @@
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
 import org.apache.causeway.core.metamodel.facetapi.FeatureType;
 import org.apache.causeway.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.causeway.core.metamodel.facets.TypedHolderAbstract;
+import org.apache.causeway.core.metamodel.facets.TypedFacetHolder;
 import 
org.apache.causeway.core.metamodel.facets.objectvalue.digits.MaxFractionalDigitsFacetAbstract;
 import 
org.apache.causeway.core.metamodel.facets.objectvalue.digits.MaxTotalDigitsFacetAbstract;
 import 
org.apache.causeway.core.metamodel.facets.objectvalue.digits.MinFractionalDigitsFacetAbstract;
@@ -72,7 +72,7 @@ public void processParams(final ProcessParameterContext 
processParameterContext)
     // -- HELPER
 
     private void processAll(
-            final TypedHolderAbstract facetHolder,
+            final TypedFacetHolder facetHolder,
             final Optional<ValueSemantics> valueSemanticsIfAny,
             final Optional<Digits> digitsIfAny) {
         processProvider(facetHolder, valueSemanticsIfAny);
@@ -81,7 +81,7 @@ private void processAll(
     }
 
     private void processProvider(
-            final TypedHolderAbstract facetHolder,
+            final TypedFacetHolder facetHolder,
             final Optional<ValueSemantics> valueSemanticsIfAny) {
 
         // check for @ValueSemantics(provider=...)
@@ -91,7 +91,7 @@ private void processProvider(
     }
 
     private void processDigits(
-            final TypedHolderAbstract facetHolder,
+            final TypedFacetHolder facetHolder,
             final Optional<ValueSemantics> valueSemanticsIfAny,
             final Optional<Digits> digitsIfAny){
 
@@ -130,7 +130,7 @@ private void processDigits(
     }
 
     private void processTemporalFormat(
-            final TypedHolderAbstract facetHolder,
+            final TypedFacetHolder facetHolder,
             final Optional<ValueSemantics> valueSemanticsIfAny){
 
         addFacetIfPresent(
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/FacetedMethodsBuilder.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/FacetedMethodsBuilder.java
index fa65c997ef4..cb5ddd02818 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/FacetedMethodsBuilder.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/FacetedMethodsBuilder.java
@@ -225,24 +225,24 @@ private void createCollectionFacetedMethodsFromAccessors(
             // create property and add facets
             var facetedMethod = FacetedMethod.createForCollection(mmc, 
introspectedClass, accessorMethod);
             getFacetProcessor()
-            .process(
-                    introspectedClass,
-                    introspectionPolicy(),
-                    accessorMethodFacade,
-                    methodRemover,
-                    facetedMethod,
-                    FeatureType.COLLECTION,
-                    isMixinMain(accessorMethodFacade));
+                .process(
+                        introspectedClass,
+                        introspectionPolicy(),
+                        accessorMethodFacade,
+                        methodRemover,
+                        facetedMethod,
+                        FeatureType.COLLECTION,
+                        isMixinMain(accessorMethodFacade));
 
             // figure out what the type is
             final Class<?> elementType = 
facetedMethod.lookupFacet(TypeOfFacet.class)
                     
.<Class<?>>map(typeOfFacet->typeOfFacet.value().elementType())
                     .orElse(Object.class);
 
-            // skip if class substitutor says so.
+            // skip if class substitutor says so
             if 
(classSubstitutorRegistry.getSubstitution(elementType).isNeverIntrospect()) 
continue;
 
-            onNewFacetMethod.accept(facetedMethod.withType(elementType));
+            
onNewFacetMethod.accept(facetedMethod.withElementType(elementType));
         }
     }
 
@@ -352,12 +352,11 @@ private FacetedMethod createActionFacetedMethod(final 
ResolvedMethod actionMetho
                 FeatureType.ACTION,
                 isMixinMain(actionMethodFacade));
 
-        action.getParameters()
-        .forEach(actionParam->{
-            getFacetProcessor()
-            .processParams(introspectedClass, introspectionPolicy(), 
actionMethodFacade, methodRemover, actionParam);
-
-        });
+        action.parameters()
+            .forEach(actionParam->{
+                getFacetProcessor()
+                    .processParams(introspectedClass, introspectionPolicy(), 
actionMethodFacade, methodRemover, actionParam);
+            });
 
         return action;
     }
@@ -415,9 +414,7 @@ private boolean representsAction(final ResolvedMethod 
actionMethod) {
         return true;
     }
 
-    // 
////////////////////////////////////////////////////////////////////////////
-    // Helpers for finding and removing methods.
-    // 
////////////////////////////////////////////////////////////////////////////
+    // -- Helpers for finding and removing methods.
 
     private boolean isMixinMain(final MethodFacade methodFacade) {
         return isMixinMain(methodFacade.asMethodForIntrospection());
@@ -443,7 +440,7 @@ private boolean isMixinMain(final ResolvedMethod method) {
                 .lookupMixedInAction(inspectedTypeSpec)
                 .map(HasFacetedMethod.class::cast)
                 .map(HasFacetedMethod::getFacetedMethod)
-                .map(FacetedMethod::getMethod)
+                .map(FacetedMethod::methodFacade)
                 .map(MethodFacade::asMethodForIntrospection)
                 .map(method::equals)
                 .orElse(false);
@@ -453,10 +450,6 @@ private IntrospectionPolicy introspectionPolicy() {
         return inspectedTypeSpec.getIntrospectionPolicy();
     }
 
-    // 
////////////////////////////////////////////////////////////////////////////
-    // toString
-    // 
////////////////////////////////////////////////////////////////////////////
-
     @Override
     public String toString() {
         final ToString str = new ToString(this);
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionDefault.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionDefault.java
index af4403b7458..a56430c035f 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionDefault.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionDefault.java
@@ -135,7 +135,7 @@ private ObjectSpecification loadDeclaringType() {
         // JUnit support
         if(testing
                 && declaringType.isEmpty()) {
-            return 
specLoaderInternal().loadSpecification(getFacetedMethod().getMethod().getDeclaringClass());
+            return 
specLoaderInternal().loadSpecification(getFacetedMethod().methodFacade().getDeclaringClass());
         }
         return declaringType.orElseThrow(()->_Exceptions
                 .illegalState("missing ActionInvocationFacet on action %s", 
getFeatureIdentifier()));
@@ -175,7 +175,7 @@ private ObjectSpecification loadReturnType() {
         // JUnit support
         if(testing
                 && returType.isEmpty()) {
-            return 
specLoaderInternal().loadSpecification(getFacetedMethod().getMethod().getReturnType());
+            return 
specLoaderInternal().loadSpecification(getFacetedMethod().methodFacade().getReturnType());
         }
         return returType.orElseThrow(()->_Exceptions
                 .illegalState("framework bug: missing ActionInvocationFacet on 
action %s", getFeatureIdentifier()));
@@ -219,7 +219,7 @@ public ActionInteractionHead interactionHead(
 
     @Override
     public int getParameterCount() {
-        return getFacetedMethod().getParameters().size();
+        return getFacetedMethod().parameters().size();
     }
 
     @Override
@@ -228,21 +228,17 @@ public Can<ObjectActionParameter> getParameters() {
     }
 
     protected Can<ObjectActionParameter> determineParameters() {
-
         var specLoaderInternal = specLoaderInternal();
 
-        return getFacetedMethod().getParameters()
-        .map(facetedParam->{
-
-            final int paramIndex = facetedParam.getParamIndex();
-            var paramElementType = 
specLoaderInternal.loadSpecification(facetedParam.getType().elementType()); // 
preload
-
-            return
-                    facetedParam.getFeatureType() == 
FeatureType.ACTION_PARAMETER_SINGULAR
-                        ? new OneToOneActionParameterDefault(paramElementType, 
paramIndex, this)
-                        : new 
OneToManyActionParameterDefault(paramElementType, paramIndex, this);
+        return getFacetedMethod().parameters()
+            .map(facetedParam->{
+                final int paramIndex = facetedParam.paramIndex();
+                var paramElementType = 
specLoaderInternal.loadSpecification(facetedParam.resolvedType().elementType());
 // preload
 
-        });
+                return facetedParam.featureType() == 
FeatureType.ACTION_PARAMETER_SINGULAR
+                            ? new 
OneToOneActionParameterDefault(paramElementType, paramIndex, this)
+                            : new 
OneToManyActionParameterDefault(paramElementType, paramIndex, this);
+            });
     }
 
     @Override
@@ -603,7 +599,7 @@ private CommandDto commandDtoFor(
     }
 
     private boolean calculateIsExplicitlyAnnotated() {
-        var methodFacade = getFacetedMethod().getMethod();
+        var methodFacade = getFacetedMethod().methodFacade();
         return methodFacade.synthesize(Action.class).isPresent()
                 || methodFacade.synthesize(ActionLayout.class).isPresent();
     }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionMixedIn.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionMixedIn.java
index 81cd35b4097..9cc6f3c27a0 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionMixedIn.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionMixedIn.java
@@ -192,7 +192,7 @@ public ObjectSpecification getMixinType() {
     // -- HELPER
 
     private boolean calculateIsExplicitlyAnnotated() {
-        var methodFacade = getFacetedMethod().getMethod();
+        var methodFacade = getFacetedMethod().methodFacade();
         return super.isExplicitlyAnnotated() // legacy programming style
                 || methodFacade.synthesize(Domain.Include.class).isPresent();
     }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionParameterAbstract.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionParameterAbstract.java
index 1f2f850f284..af955c662dc 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionParameterAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectActionParameterAbstract.java
@@ -76,7 +76,7 @@ protected ObjectActionParameterAbstract(
         this.paramElementType = paramElementType;
 
         this.javaSourceParamName =
-                
objectAction.getFacetedMethod().getMethod().getParameterName(parameterIndex);
+                
objectAction.getFacetedMethod().methodFacade().getParameterName(parameterIndex);
     }
 
     @Override
@@ -163,7 +163,7 @@ public Consent isUsable() {
     @Override
     public FacetHolder getFacetHolder() {
         // that is the faceted method parameter
-        return 
parentAction.getFacetedMethod().getParameters().getElseFail(parameterIndex);
+        return parentAction.getFacetedMethod().parameter(parameterIndex);
     }
 
     // -- Defaults
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectSpecificationDefault.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectSpecificationDefault.java
index 5168459b84d..c98049291a1 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectSpecificationDefault.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ObjectSpecificationDefault.java
@@ -272,9 +272,9 @@ private Stream<ObjectAssociation> createAssociations() {
     }
 
     private ObjectAssociation createAssociation(final FacetedMethod 
facetMethod) {
-        if (facetMethod.getFeatureType().isCollection()) {
+        if (facetMethod.featureType().isCollection()) {
             return OneToManyAssociationDefault.forMethod(facetMethod);
-        } else if (facetMethod.getFeatureType().isProperty()) {
+        } else if (facetMethod.featureType().isProperty()) {
             return OneToOneAssociationDefault.forMethod(facetMethod);
         } else {
             return null;
@@ -289,7 +289,7 @@ private Stream<ObjectAction> createActions() {
     }
 
     private ObjectAction createAction(final FacetedMethod facetedMethod) {
-        if (facetedMethod.getFeatureType().isAction()) {
+        if (facetedMethod.featureType().isAction()) {
             /* Assuming, that facetedMethod was already populated with 
ContributingFacet,
              * we copy the mixin-sort information from the FacetedMethod to 
the MixinFacet
              * that is held by the mixin's type spec. */
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationDefault.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationDefault.java
index 1d6dae39117..75c334f149e 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationDefault.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationDefault.java
@@ -53,7 +53,7 @@ public static OneToManyAssociationDefault forMethod(final 
FacetedMethod facetedM
                 facetedMethod.getFeatureIdentifier(),
                 facetedMethod,
                 
((SpecificationLoaderInternal)facetedMethod.getMetaModelContext().getSpecificationLoader())
-                    .loadSpecification(facetedMethod.getType().elementType()));
+                    
.loadSpecification(facetedMethod.resolvedType().elementType()));
     }
 
     protected OneToManyAssociationDefault(
@@ -182,7 +182,7 @@ public String toString() {
     // -- HELPER
 
     private boolean calculateIsExplicitlyAnnotated() {
-        var methodFacade = getFacetedMethod().getMethod();
+        var methodFacade = getFacetedMethod().methodFacade();
         return methodFacade.synthesize(Collection.class).isPresent()
                 || methodFacade.synthesize(CollectionLayout.class).isPresent();
     }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationMixedIn.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationMixedIn.java
index 26876a68f2f..3d1a98f03be 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationMixedIn.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationMixedIn.java
@@ -169,7 +169,7 @@ public boolean hasMixinAction(final ObjectAction 
mixinAction) {
     // -- HELPER
 
     private boolean calculateIsExplicitlyAnnotated() {
-        var methodFacade = getFacetedMethod().getMethod();
+        var methodFacade = getFacetedMethod().methodFacade();
         return super.isExplicitlyAnnotated() // legacy programming style
                 || methodFacade.synthesize(Domain.Include.class).isPresent();
     }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationDefault.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationDefault.java
index 70a05332dcb..2da9edffbc1 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationDefault.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationDefault.java
@@ -70,7 +70,7 @@ public static OneToOneAssociationDefault forMethod(final 
FacetedMethod facetedMe
                 facetedMethod.getFeatureIdentifier(),
                 facetedMethod,
                 
((SpecificationLoaderInternal)facetedMethod.getMetaModelContext().getSpecificationLoader())
-                    .loadSpecification(facetedMethod.getType().elementType()));
+                    
.loadSpecification(facetedMethod.resolvedType().elementType()));
     }
 
     // -- CONSTRUCTION
@@ -340,7 +340,7 @@ public String toString() {
     // -- HELPER
 
     private boolean calculateIsExplicitlyAnnotated() {
-        var methodFacade = getFacetedMethod().getMethod();
+        var methodFacade = getFacetedMethod().methodFacade();
         return methodFacade.synthesize(Property.class).isPresent()
                 || methodFacade.synthesize(PropertyLayout.class).isPresent();
     }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationMixedIn.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationMixedIn.java
index 529ae96879a..bd6a030883c 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationMixedIn.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/OneToOneAssociationMixedIn.java
@@ -152,7 +152,7 @@ public boolean hasMixinAction(final ObjectAction 
mixinAction) {
     // -- HELPER
 
     private boolean calculateIsExplicitlyAnnotated() {
-        var methodFacade = getFacetedMethod().getMethod();
+        var methodFacade = getFacetedMethod().methodFacade();
         return super.isExplicitlyAnnotated() // legacy programming style
                 || methodFacade.synthesize(Domain.Include.class).isPresent();
     }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ValidatorDomainIncludeAnnotationEnforcesMetamodelContribution.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ValidatorDomainIncludeAnnotationEnforcesMetamodelContribution.java
index 9e8ab650802..555f5a27a92 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ValidatorDomainIncludeAnnotationEnforcesMetamodelContribution.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/impl/ValidatorDomainIncludeAnnotationEnforcesMetamodelContribution.java
@@ -86,7 +86,7 @@ public void validateObjectEnter(final ObjectSpecification 
spec) {
             .streamAnyActions(MixedIn.EXCLUDED)
             .map(HasFacetedMethod.class::cast)
             .map(HasFacetedMethod::getFacetedMethod)
-            .map(FacetedMethod::getMethod)
+            .map(FacetedMethod::methodFacade)
             .map(MethodFacade::asMethodForIntrospection)
             .forEach(memberMethods::add);
 
@@ -94,7 +94,7 @@ public void validateObjectEnter(final ObjectSpecification 
spec) {
             .streamAssociations(MixedIn.EXCLUDED)
             .map(HasFacetedMethod.class::cast)
             .map(HasFacetedMethod::getFacetedMethod)
-            .map(FacetedMethod::getMethod)
+            .map(FacetedMethod::methodFacade)
             .map(MethodFacade::asMethodForIntrospection)
             .forEach(memberMethods::add);
 
@@ -195,7 +195,7 @@ private static void validateOrphanedSupportingMethod(
                     .isSupportMethodAnnotationsRequired()) {
             return; // ignore
         }
-        
+
         var potentialOrphans = spec instanceof ObjectSpecificationDefault 
specDefault
             ? specDefault.getPotentialOrphans()
             : Collections.<ResolvedMethod>emptySet();
@@ -223,7 +223,7 @@ private static void validateOrphanedSupportingMethod(
         potentialOrphans.clear(); // no longer needed
     }
 
-    private static boolean matchesSupportMethodNamingConvention(String 
methodName) {
+    private static boolean matchesSupportMethodNamingConvention(final String 
methodName) {
         for(var objectSupportMethod : ObjectSupportMethod.values()) {
             
if(objectSupportMethod.getMethodNames().anyMatch(name->name.equals(methodName)))
 return true;
         }
diff --git 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java
 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java
index d058fe77909..9163bdf5925 100644
--- 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java
+++ 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/FacetFactoryTestAbstract.java
@@ -285,8 +285,8 @@ protected void parameterScenario(
                 actionMethod.isNoArg()
                 ? (FacetedMethodParameter)null
                 : new FacetedMethodParameter(getMetaModelContext(),
-                    FeatureType.ACTION_PARAMETER_SINGULAR, 
facetedMethod.getOwningType(),
-                    facetedMethod.getMethod(), 0);
+                    FeatureType.ACTION_PARAMETER_SINGULAR, 
facetedMethod.owningType(),
+                    facetedMethod.methodFacade(), 0);
 
         var processParameterContext =
                 FacetFactory.ProcessParameterContext.forTesting(
diff --git 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
index 9c5661892c3..ed3769cd4f5 100644
--- 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
+++ 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
@@ -118,14 +118,14 @@ public void someAction(final int x, final long y) {}
             //when
             facetFactory.process(processMethodContext);
             //then
-            final Facet facet0 = 
facetedMethod.getParameters().getElseFail(0).getFacet(ActionParameterDefaultsFacet.class);
+            final Facet facet0 = 
facetedMethod.parameter(0).getFacet(ActionParameterDefaultsFacet.class);
             assertNotNull(facet0);
             assertTrue(facet0 instanceof 
ActionParameterDefaultsFacetViaMethod);
             final ActionParameterDefaultsFacetViaMethod 
actionDefaultFacetViaMethod0 = (ActionParameterDefaultsFacetViaMethod) facet0;
             assertMethodEqualsFirstIn(default0Method, 
actionDefaultFacetViaMethod0);
             assertMethodWasRemoved(default0Method);
 
-            final Facet facet1 = 
facetedMethod.getParameters().getElseFail(1).getFacet(ActionParameterDefaultsFacet.class);
+            final Facet facet1 = 
facetedMethod.parameter(1).getFacet(ActionParameterDefaultsFacet.class);
             assertNotNull(facet1);
             assertTrue(facet1 instanceof 
ActionParameterDefaultsFacetViaMethod);
             final ActionParameterDefaultsFacetViaMethod 
actionDefaultFacetViaMethod1 = (ActionParameterDefaultsFacetViaMethod) facet1;
@@ -154,21 +154,21 @@ public void someAction(final int x, final long y, final 
long z) {}
             //when
             facetFactory.process(processMethodContext);
             //then
-            final Facet facet0 = 
facetedMethod.getParameters().getElseFail(0).getFacet(ActionParameterChoicesFacet.class);
+            final Facet facet0 = 
facetedMethod.parameter(0).getFacet(ActionParameterChoicesFacet.class);
             assertNotNull(facet0);
             assertTrue(facet0 instanceof ActionParameterChoicesFacetViaMethod);
             var actionChoicesFacetViaMethod0 = 
(ActionParameterChoicesFacetViaMethod) facet0;
             assertMethodEqualsFirstIn(choices0Method, 
actionChoicesFacetViaMethod0);
             assertMethodWasRemoved(choices0Method);
 
-            final Facet facet1 = 
facetedMethod.getParameters().getElseFail(1).getFacet(ActionParameterChoicesFacet.class);
+            final Facet facet1 = 
facetedMethod.parameter(1).getFacet(ActionParameterChoicesFacet.class);
             assertNotNull(facet1);
             assertTrue(facet1 instanceof ActionParameterChoicesFacetViaMethod);
             var actionChoicesFacetViaMethod1 = 
(ActionParameterChoicesFacetViaMethod) facet1;
             assertMethodEqualsFirstIn(choices1Method, 
actionChoicesFacetViaMethod1);
             assertMethodWasRemoved(choices1Method);
 
-            final Facet facet2 = 
facetedMethod.getParameters().getElseFail(2).getFacet(ActionParameterChoicesFacet.class);
+            final Facet facet2 = 
facetedMethod.parameter(2).getFacet(ActionParameterChoicesFacet.class);
             assertNotNull(facet2);
             assertTrue(facet2 instanceof ActionParameterChoicesFacetViaMethod);
             var actionChoicesFacetViaMethod2 = 
(ActionParameterChoicesFacetViaMethod) facet2;
@@ -193,7 +193,7 @@ public void someAction(final int x, final long y) {}
             //when
             facetFactory.process(processMethodContext);
             //then
-            final Facet facet0 = 
facetedMethod.getParameters().getElseFail(0).getFacet(ActionParameterAutoCompleteFacet.class);
+            final Facet facet0 = 
facetedMethod.parameter(0).getFacet(ActionParameterAutoCompleteFacet.class);
             assertNotNull(facet0);
             assertTrue(facet0 instanceof 
ActionParameterAutoCompleteFacetViaMethod);
             final ActionParameterAutoCompleteFacetViaMethod 
actionAutoCompleteFacetViaMethod0 = (ActionParameterAutoCompleteFacetViaMethod) 
facet0;
diff --git 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java
 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java
index 015c1c3a436..a0837059953 100644
--- 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java
+++ 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java
@@ -185,13 +185,13 @@ class CustomerEx extends Customer {
             final Facet facet0 = 
facetedMethod.getFacet(ActionInvocationFacet.class);
             assertNotNull(facet0);
 
-            final Facet facet1 = 
facetedMethod.getParameters().getElseFail(0).getFacet(ActionParameterChoicesFacet.class);
+            final Facet facet1 = 
facetedMethod.parameter(0).getFacet(ActionParameterChoicesFacet.class);
             assertNotNull(facet1);
             assertTrue(facet1 instanceof ActionParameterChoicesFacetViaMethod);
             var actionChoicesFacetViaMethod0 = 
(ActionParameterChoicesFacetViaMethod) facet1;
             assertMethodEqualsFirstIn(choices0Method, 
actionChoicesFacetViaMethod0);
 
-            final Facet facet2 = 
facetedMethod.getParameters().getElseFail(1).getFacet(ActionParameterChoicesFacet.class);
+            final Facet facet2 = 
facetedMethod.parameter(1).getFacet(ActionParameterChoicesFacet.class);
             assertNotNull(facet2);
             assertTrue(facet2 instanceof ActionParameterChoicesFacetViaMethod);
             var actionChoicesFacetViaMethod1 = 
(ActionParameterChoicesFacetViaMethod) facet2;
diff --git 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
index 4c07f5bad81..e4a67edb234 100644
--- 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
+++ 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
@@ -193,7 +193,7 @@ private void assertHasPropertyDomainEventFacet(
             assertEquals(eventTypeOrigin, 
domainEventFacet.getEventTypeOrigin());
             assertThat(domainEventFacet.getEventType(), 
CausewayMatchers.classEqualTo(eventType));
 
-            if(facetedMethod.getMethod().getName().equals("prop")) {
+            if(facetedMethod.methodFacade().getName().equals("prop")) {
                 return; // skip further checks, when in a mixed-in scenario
             }
 
diff --git 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/services/metamodel/MetaModelServiceDefaultTest.java
 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/services/metamodel/MetaModelServiceDefaultTest.java
index 25383257dc7..0194b11af40 100644
--- 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/services/metamodel/MetaModelServiceDefaultTest.java
+++ 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/services/metamodel/MetaModelServiceDefaultTest.java
@@ -69,7 +69,7 @@ void setUp() throws Exception {
         
Mockito.when(mockFacetedMethod.getFeatureIdentifier()).thenReturn(Identifier.actionIdentifier(
               TypeIdentifierTestFactory.newCustomer(), "reduceheadcount"));
         
Mockito.when(mockFacetedMethod.getFacet(Mockito.any(Class.class))).thenReturn(null);
-        
Mockito.when(mockFacetedMethod.getParameters()).thenReturn(Can.empty());
+        Mockito.when(mockFacetedMethod.parameters()).thenReturn(Can.empty());
 
         mockSpec = Mockito.mock(ObjectSpecification.class);
         Mockito.when(mockSpec.getFullIdentifier()).thenReturn("mocked");
diff --git 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationDefaultTest.java
 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationDefaultTest.java
index 636374bd167..f6e314907fc 100644
--- 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationDefaultTest.java
+++ 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/spec/impl/OneToManyAssociationDefaultTest.java
@@ -64,7 +64,7 @@ protected void afterSetUp() {
         
when(mockNamedFacet.getSpecialization()).thenReturn(Either.left(mockHasStaticText));
 
         var mockPeer = mock(FacetedMethod.class);
-        doReturn(TOAC).when(mockPeer).getType();
+        doReturn(TOAC).when(mockPeer).resolvedType();
         when(mockPeer.getMetaModelContext()).thenReturn(getMetaModelContext());
         when(mockPeer.getFeatureIdentifier()).thenReturn(
                 Identifier
diff --git 
a/persistence/jdo/metamodel/src/test/java/org/apache/causeway/persistence/jdo/metamodel/testing/AbstractFacetFactoryTest.java
 
b/persistence/jdo/metamodel/src/test/java/org/apache/causeway/persistence/jdo/metamodel/testing/AbstractFacetFactoryTest.java
index 11aee3c0410..7a2267d2d51 100644
--- 
a/persistence/jdo/metamodel/src/test/java/org/apache/causeway/persistence/jdo/metamodel/testing/AbstractFacetFactoryTest.java
+++ 
b/persistence/jdo/metamodel/src/test/java/org/apache/causeway/persistence/jdo/metamodel/testing/AbstractFacetFactoryTest.java
@@ -97,8 +97,8 @@ protected void setUp() throws Exception {
         facetedMethod = 
FacetedMethod.testing.createSetterForProperty(metaModelContext, Customer.class, 
"firstName");
         facetedMethodParameter = new FacetedMethodParameter(
                 metaModelContext,
-                FeatureType.ACTION_PARAMETER_SINGULAR, 
facetedMethod.getOwningType(),
-                facetedMethod.getMethod(), 0);
+                FeatureType.ACTION_PARAMETER_SINGULAR, 
facetedMethod.owningType(),
+                facetedMethod.methodFacade(), 0);
 
         jdoFacetContext = jdoFacetContextForTesting();
     }
diff --git 
a/persistence/querydsl/metamodel/src/main/java/org/apache/causeway/persistence/querydsl/metamodel/facets/AutoCompleteGeneratedQueryFacetFactory.java
 
b/persistence/querydsl/metamodel/src/main/java/org/apache/causeway/persistence/querydsl/metamodel/facets/AutoCompleteGeneratedQueryFacetFactory.java
index 5a74c846d0a..8f6928302e8 100644
--- 
a/persistence/querydsl/metamodel/src/main/java/org/apache/causeway/persistence/querydsl/metamodel/facets/AutoCompleteGeneratedQueryFacetFactory.java
+++ 
b/persistence/querydsl/metamodel/src/main/java/org/apache/causeway/persistence/querydsl/metamodel/facets/AutoCompleteGeneratedQueryFacetFactory.java
@@ -93,7 +93,7 @@ public void process(final ProcessClassContext 
processClassContext) {
     public void process(final ProcessMethodContext processMethodContext) {
 
         var facetedMethod = processMethodContext.getFacetHolder();
-        var owningType = facetedMethod.getOwningType();
+        var owningType = facetedMethod.owningType();
         var declaringSpec = specForTypeElseFail(owningType);
 
         var propertyIfAny = propertyIfAny(processMethodContext);

Reply via email to