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/08 06:18:36 UTC
[isis] branch master updated: ISIS-2774: refactor Method Name
Candidates into MethodFinderOptions
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 a883341 ISIS-2774: refactor Method Name Candidates into MethodFinderOptions
a883341 is described below
commit a8833414fe3373b87491242566c18afab2d844f9
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Sep 8 08:18:23 2021 +0200
ISIS-2774: refactor Method Name Candidates into MethodFinderOptions
---
.../progmodel/ProgrammingModelConstants.java | 10 +--
.../isis/core/metamodel/facets/ActionSupport.java | 16 ++---
.../core/metamodel/facets/ParameterSupport.java | 48 +++++++--------
.../DescribedAsFacetForMemberViaMethodFactory.java | 3 +-
.../DisableForContextFacetViaMethodFactory.java | 3 +-
.../HideForContextFacetViaMethodFactory.java | 3 +-
.../NamedFacetForMemberViaMethodFactory.java | 3 +-
.../object/callbacks/CallbackFacetFactory.java | 19 +++---
.../choices/enums/EnumValueSemanticsProvider.java | 21 ++++---
.../object/support/ObjectSupportFacetFactory.java | 71 +++++++++++----------
.../PropertyAutoCompleteFacetMethodFactory.java | 3 +-
.../PropertyChoicesFacetViaMethodFactory.java | 3 +-
.../PropertyDefaultFacetViaMethodFactory.java | 3 +-
.../update/PropertySetterFacetFactory.java | 72 ++++++++++------------
.../PropertyValidateFacetViaMethodFactory.java | 3 +-
.../isis/core/metamodel/methods/MethodFinder.java | 42 +++++++------
.../metamodel/methods/MethodFinderOptions.java | 57 +++++++++++++----
.../core/metamodel/methods/MethodFinderUtils.java | 14 ++++-
.../restfulobjects/viewer/mappers/FailureUtil.java | 5 +-
19 files changed, 218 insertions(+), 181 deletions(-)
diff --git a/core/config/src/main/java/org/apache/isis/core/config/progmodel/ProgrammingModelConstants.java b/core/config/src/main/java/org/apache/isis/core/config/progmodel/ProgrammingModelConstants.java
index 7627cf6..104de7b 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/progmodel/ProgrammingModelConstants.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/progmodel/ProgrammingModelConstants.java
@@ -174,7 +174,11 @@ public final class ProgrammingModelConstants {
TITLE(ReturnTypeCategory.TRANSLATABLE, "title"),
CSS_CLASS(ReturnTypeCategory.STRING, "cssClass"),
ICON_NAME(ReturnTypeCategory.STRING, "iconName"),
- LAYOUT(ReturnTypeCategory.STRING, "layout");
+ LAYOUT(ReturnTypeCategory.STRING, "layout"),
+
+ /** as a fallback in the absence of other title providers */
+ TO_STRING(ReturnTypeCategory.STRING, "toString"),
+ ;
ObjectSupportMethod(
final ReturnTypeCategory returnTypeCategory,
final String ...methodNames) {
@@ -207,10 +211,6 @@ public final class ProgrammingModelConstants {
private final Can<String> methodNamePrefixes;
}
- // -- OTHER LITERALS
-
- public static final String TO_STRING = "toString";
-
// -- CONFLICTING MARKER ANNOTATIONS
@Getter
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ActionSupport.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ActionSupport.java
index 64f02ad..c763356 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ActionSupport.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ActionSupport.java
@@ -119,8 +119,8 @@ public final class ActionSupport {
MethodFinder
.findMethodWithPPMArg_returningBoolean(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- type, methodNames, paramTypes, additionalParamTypes)
+ .memberSupport(methodNames, processMethodContext.getIntrospectionPolicy()),
+ type, paramTypes, additionalParamTypes)
.map(ActionSupport::toSearchResult)
.forEach(onMethodFound);
break;
@@ -128,8 +128,8 @@ public final class ActionSupport {
MethodFinder
.findMethodWithPPMArg_returningText(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- type, methodNames, paramTypes, additionalParamTypes)
+ .memberSupport(methodNames, processMethodContext.getIntrospectionPolicy()),
+ type, paramTypes, additionalParamTypes)
.map(ActionSupport::toSearchResult)
.forEach(onMethodFound);
break;
@@ -170,8 +170,8 @@ public final class ActionSupport {
MethodFinder
.findMethod_returningBoolean(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- type, methodNames, paramTypesToLookFor)
+ .memberSupport(methodNames, processMethodContext.getIntrospectionPolicy()),
+ type, paramTypesToLookFor)
.map(ActionSupport::toSearchResult)
.forEach(onMethodFound);
break;
@@ -179,8 +179,8 @@ public final class ActionSupport {
MethodFinder
.findMethod_returningText(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- type, methodNames, paramTypesToLookFor)
+ .memberSupport(methodNames, processMethodContext.getIntrospectionPolicy()),
+ type, paramTypesToLookFor)
.map(ActionSupport::toSearchResult)
.forEach(onMethodFound);
break;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ParameterSupport.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ParameterSupport.java
index 1f7049a..762b30b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ParameterSupport.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ParameterSupport.java
@@ -136,8 +136,8 @@ public final class ParameterSupport {
MethodFinder
.findMethodWithPPMArg_returningBoolean(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- type, methodNames, paramTypes, additionalParamTypes)
+ .memberSupport(methodNames, processMethodContext.getIntrospectionPolicy()),
+ type, paramTypes, additionalParamTypes)
.map(methodAndPpmConstructor->toSearchResult(paramIndex, paramType, methodAndPpmConstructor))
.forEach(onMethodFound);
break;
@@ -145,8 +145,8 @@ public final class ParameterSupport {
MethodFinder
.findMethodWithPPMArg_returningText(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- type, methodNames, paramTypes, additionalParamTypes)
+ .memberSupport(methodNames, processMethodContext.getIntrospectionPolicy()),
+ type, paramTypes, additionalParamTypes)
.map(methodAndPpmConstructor->toSearchResult(paramIndex, paramType, methodAndPpmConstructor))
.forEach(onMethodFound);
break;
@@ -154,8 +154,8 @@ public final class ParameterSupport {
MethodFinder
.findMethodWithPPMArg_returningNonScalar(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- type, methodNames, paramType, paramTypes, additionalParamTypes)
+ .memberSupport(methodNames, processMethodContext.getIntrospectionPolicy()),
+ type, paramType, paramTypes, additionalParamTypes)
.map(methodAndPpmConstructor->toSearchResult(paramIndex, paramType, methodAndPpmConstructor))
.forEach(onMethodFound);
break;
@@ -163,8 +163,8 @@ public final class ParameterSupport {
MethodFinder
.findMethodWithPPMArg(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- type, methodNames, paramType, paramTypes, additionalParamTypes)
+ .memberSupport(methodNames, processMethodContext.getIntrospectionPolicy()),
+ type, paramType, paramTypes, additionalParamTypes)
.map(methodAndPpmConstructor->toSearchResult(paramIndex, paramType, methodAndPpmConstructor))
.forEach(onMethodFound);
break;
@@ -202,8 +202,8 @@ public final class ParameterSupport {
MethodFinder
.findMethod_returningBoolean(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- type, methodNames, singleArg)
+ .memberSupport(methodNames, processMethodContext.getIntrospectionPolicy()),
+ type, singleArg)
.map(supportingMethod->toSearchResult(paramIndex, paramType, supportingMethod))
.forEach(onMethodFound);
break;
@@ -211,8 +211,8 @@ public final class ParameterSupport {
MethodFinder
.findMethod_returningText(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- type, methodNames, singleArg)
+ .memberSupport(methodNames, processMethodContext.getIntrospectionPolicy()),
+ type, singleArg)
.map(supportingMethod->toSearchResult(paramIndex, paramType, supportingMethod))
.forEach(onMethodFound);
break;
@@ -220,8 +220,8 @@ public final class ParameterSupport {
MethodFinder
.findMethod_returningNonScalar(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- type, methodNames, paramType, singleArg)
+ .memberSupport(methodNames, processMethodContext.getIntrospectionPolicy()),
+ type, paramType, singleArg)
.map(supportingMethod->toSearchResult(paramIndex, paramType, supportingMethod))
.forEach(onMethodFound);
break;
@@ -229,8 +229,8 @@ public final class ParameterSupport {
MethodFinder
.findMethod(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- type, methodNames, paramType, singleArg)
+ .memberSupport(methodNames, processMethodContext.getIntrospectionPolicy()),
+ type, paramType, singleArg)
.map(supportingMethod->toSearchResult(paramIndex, paramType, supportingMethod))
.forEach(onMethodFound);
break;
@@ -267,8 +267,8 @@ public final class ParameterSupport {
supportingMethod = MethodFinder
.findMethod_returningBoolean(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- type, methodNames, paramTypesToLookFor)
+ .memberSupport(methodNames, processMethodContext.getIntrospectionPolicy()),
+ type, paramTypesToLookFor)
.findFirst()
.orElse(null);
break;
@@ -276,8 +276,8 @@ public final class ParameterSupport {
supportingMethod = MethodFinder
.findMethod_returningText(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- type, methodNames, paramTypesToLookFor)
+ .memberSupport(methodNames, processMethodContext.getIntrospectionPolicy()),
+ type, paramTypesToLookFor)
.findFirst()
.orElse(null);
break;
@@ -285,8 +285,8 @@ public final class ParameterSupport {
supportingMethod = MethodFinder
.findMethod_returningNonScalar(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- type, methodNames, paramType, paramTypesToLookFor)
+ .memberSupport(methodNames, processMethodContext.getIntrospectionPolicy()),
+ type, paramType, paramTypesToLookFor)
.findFirst()
.orElse(null);
break;
@@ -294,8 +294,8 @@ public final class ParameterSupport {
supportingMethod = MethodFinder
.findMethod(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- type, methodNames, paramType, paramTypesToLookFor)
+ .memberSupport(methodNames, processMethodContext.getIntrospectionPolicy()),
+ type, paramType, paramTypesToLookFor)
.findFirst()
.orElse(null);
break;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/described/method/DescribedAsFacetForMemberViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/described/method/DescribedAsFacetForMemberViaMethodFactory.java
index 57fd567..039d8a0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/described/method/DescribedAsFacetForMemberViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/described/method/DescribedAsFacetForMemberViaMethodFactory.java
@@ -44,9 +44,8 @@ extends MemberSupportFacetFactoryAbstract {
MethodFinder
.findMethod_returningText(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
+ .memberSupport(methodNameCandidates, processMethodContext.getIntrospectionPolicy()),
processMethodContext.getCls(),
- methodNameCandidates,
NO_ARG)
.peek(processMethodContext::removeMethod)
.forEach(describedMethod->{
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethodFactory.java
index 648b887..68945e6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethodFactory.java
@@ -44,9 +44,8 @@ extends MemberSupportFacetFactoryAbstract {
MethodFinder
.findMethod_returningText(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
+ .memberSupport(methodNameCandidates, processMethodContext.getIntrospectionPolicy()),
processMethodContext.getCls(),
- methodNameCandidates,
NO_ARG)
.peek(processMethodContext::removeMethod)
.forEach(disableMethod->{
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethodFactory.java
index a9e5b40..24b9afd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethodFactory.java
@@ -44,9 +44,8 @@ extends MemberSupportFacetFactoryAbstract {
MethodFinder
.findMethod(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
+ .memberSupport(methodNameCandidates, processMethodContext.getIntrospectionPolicy()),
processMethodContext.getCls(),
- methodNameCandidates,
boolean.class,
NO_ARG)
.peek(processMethodContext::removeMethod)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/method/NamedFacetForMemberViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/method/NamedFacetForMemberViaMethodFactory.java
index a9b70dd..7139751 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/method/NamedFacetForMemberViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/method/NamedFacetForMemberViaMethodFactory.java
@@ -44,9 +44,8 @@ extends MemberSupportFacetFactoryAbstract {
MethodFinder
.findMethod_returningText(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
+ .memberSupport(methodNameCandidates, processMethodContext.getIntrospectionPolicy()),
processMethodContext.getCls(),
- methodNameCandidates,
NO_ARG)
.peek(processMethodContext::removeMethod)
.forEach(namedMethod->{
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CallbackFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CallbackFacetFactory.java
index a57337b..202d5ef 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CallbackFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CallbackFacetFactory.java
@@ -29,8 +29,8 @@ import org.apache.isis.core.config.progmodel.ProgrammingModelConstants.CallbackM
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.methods.MethodFinder;
import org.apache.isis.core.metamodel.methods.MethodFinderOptions;
-import org.apache.isis.core.metamodel.methods.MethodFinderUtils;
import org.apache.isis.core.metamodel.methods.MethodPrefixBasedFacetFactoryAbstract;
import lombok.val;
@@ -65,17 +65,20 @@ extends MethodPrefixBasedFacetFactoryAbstract {
val cls = processClassContext.getCls();
val facetHolder = processClassContext.getFacetHolder();
- val callbackMethods = callbackMethodEnum
- .getMethodNames()
- .map(callbackMethodName->MethodFinderUtils.findMethod(
- MethodFinderOptions
- .livecycleCallback(processClassContext.getIntrospectionPolicy()),
- cls, callbackMethodName, void.class, NO_ARG));
+ val callbackMethods = MethodFinder
+ .findMethod(
+ MethodFinderOptions
+ .livecycleCallback(
+ callbackMethodEnum.getMethodNames(),
+ processClassContext.getIntrospectionPolicy()),
+ cls, void.class, NO_ARG)
+ .peek(processClassContext::removeMethod)
+ .collect(Can.toCan());
if(callbackMethods.isNotEmpty()) {
- callbackMethods.forEach(processClassContext::removeMethod);
addFacet(callbackFacetConstructor.apply(callbackMethods, facetHolder));
}
+
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java
index 1166a5c..c0e3d46 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java
@@ -26,12 +26,13 @@ import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
import org.apache.isis.applib.services.i18n.TranslatableString;
import org.apache.isis.applib.services.i18n.TranslationContext;
import org.apache.isis.applib.util.Enums;
+import org.apache.isis.core.config.progmodel.ProgrammingModelConstants;
import org.apache.isis.core.metamodel.commons.MethodExtensions;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
+import org.apache.isis.core.metamodel.methods.MethodFinder;
import org.apache.isis.core.metamodel.methods.MethodFinderOptions;
-import org.apache.isis.core.metamodel.methods.MethodFinderUtils;
import lombok.val;
@@ -58,9 +59,6 @@ implements EnumFacet {
return max;
}
-
- private static final String TITLE = "title";
-
private final Method titleMethod;
// /**
@@ -81,11 +79,16 @@ implements EnumFacet {
EqualByContent.HONOURED,
defaultFor(adaptedClass));
- titleMethod = MethodFinderUtils.findMethod_returningText(
- MethodFinderOptions.objectSupport(introspectionPolicy),
- getAdaptedClass(),
- TITLE,
- null);
+ titleMethod = MethodFinder
+ .findMethod_returningText(
+ MethodFinderOptions
+ .objectSupport(
+ ProgrammingModelConstants.ObjectSupportMethod.TITLE.getMethodNames(),
+ introspectionPolicy),
+ getAdaptedClass(),
+ null)
+ .findFirst()
+ .orElse(null);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/support/ObjectSupportFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/support/ObjectSupportFacetFactory.java
index 45d402d..08707ce 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/support/ObjectSupportFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/support/ObjectSupportFacetFactory.java
@@ -43,14 +43,12 @@ import org.apache.isis.core.metamodel.facets.object.icon.method.IconFacetViaIcon
import org.apache.isis.core.metamodel.facets.object.layout.LayoutFacetViaLayoutMethod;
import org.apache.isis.core.metamodel.facets.object.title.methods.TitleFacetInferredFromToStringMethod;
import org.apache.isis.core.metamodel.facets.object.title.methods.TitleFacetViaTitleMethod;
+import org.apache.isis.core.metamodel.methods.MethodFinder;
import org.apache.isis.core.metamodel.methods.MethodFinderOptions;
-import org.apache.isis.core.metamodel.methods.MethodFinderUtils;
import org.apache.isis.core.metamodel.methods.MethodPrefixBasedFacetFactoryAbstract;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
-import static org.apache.isis.core.config.progmodel.ProgrammingModelConstants.TO_STRING;
-
import lombok.val;
/**
@@ -93,29 +91,6 @@ extends MethodPrefixBasedFacetFactoryAbstract {
processObjectSupport(processClassContext, ObjectSupportMethod.CSS_CLASS, CssClassFacetViaCssClassMethod::create);
}
- private void processObjectSupport(
- final ProcessClassContext processClassContext,
- final ObjectSupportMethod objectSupportMethodEnum,
- final BiFunction<Method, FacetHolder, Optional<? extends Facet>> ojectSupportFacetConstructor) {
- val cls = processClassContext.getCls();
- val facetHolder = processClassContext.getFacetHolder();
- val requiredReturnTypes = objectSupportMethodEnum.getReturnTypeCategory().getReturnTypes();
-
- val objectSupportMethods = objectSupportMethodEnum
- .getMethodNames()
- .map(callbackMethodName->MethodFinderUtils.findMethod_returningAnyOf(
- MethodFinderOptions
- .objectSupport(processClassContext.getIntrospectionPolicy()),
- requiredReturnTypes,
- cls, callbackMethodName, NO_ARG));
-
- objectSupportMethods
- .forEach(method->{
- addFacetIfPresent(ojectSupportFacetConstructor.apply(method, facetHolder));
- processClassContext.removeMethod(method);
- });
- }
-
@Override
public void process(final ProcessMethodContext processMethodContext) {
final FacetedMethod member = processMethodContext.getFacetHolder();
@@ -134,14 +109,42 @@ extends MethodPrefixBasedFacetFactoryAbstract {
// -- HELPER
private void inferTitleFromToString(final ProcessClassContext processClassContext) {
- val cls = processClassContext.getCls();
- val facetHolder = processClassContext.getFacetHolder();
- val toStringMethod = MethodFinderUtils.findMethod(
- MethodFinderOptions.publicOnly(),
- cls, TO_STRING, String.class, NO_ARG);
- processClassContext.removeMethod(toStringMethod);
- addFacetIfPresent(TitleFacetInferredFromToStringMethod
- .create(toStringMethod, facetHolder));
+
+ val toString = ObjectSupportMethod.TO_STRING;
+
+ MethodFinder
+ .findMethod_returningCategory(
+ MethodFinderOptions.publicOnly(toString.getMethodNames()),
+ toString.getReturnTypeCategory(),
+ processClassContext.getCls(),
+ NO_ARG)
+ .peek(processClassContext::removeMethod)
+ .forEach(method->{
+ addFacetIfPresent(TitleFacetInferredFromToStringMethod
+ .create(method, processClassContext.getFacetHolder()));
+ });
+
+ }
+
+ private void processObjectSupport(
+ final ProcessClassContext processClassContext,
+ final ObjectSupportMethod objectSupportMethodEnum,
+ final BiFunction<Method, FacetHolder, Optional<? extends Facet>> ojectSupportFacetConstructor) {
+
+ MethodFinder
+ .findMethod_returningCategory(
+ MethodFinderOptions
+ .objectSupport(
+ objectSupportMethodEnum.getMethodNames(),
+ processClassContext.getIntrospectionPolicy()),
+ objectSupportMethodEnum.getReturnTypeCategory(),
+ processClassContext.getCls(),
+ NO_ARG)
+ .peek(processClassContext::removeMethod)
+ .forEach(method->{
+ addFacetIfPresent(ojectSupportFacetConstructor
+ .apply(method, processClassContext.getFacetHolder()));
+ });
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethodFactory.java
index cc70adc..dcc9201 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethodFactory.java
@@ -49,9 +49,8 @@ extends MemberSupportFacetFactoryAbstract {
MethodFinder
.findMethod_returningNonScalar(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
+ .memberSupport(methodNameCandidates, processMethodContext.getIntrospectionPolicy()),
processMethodContext.getCls(),
- methodNameCandidates,
returnType,
STRING_ARG)
.peek(processMethodContext::removeMethod)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethodFactory.java
index a1eea83..3562ac3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethodFactory.java
@@ -49,9 +49,8 @@ extends MemberSupportFacetFactoryAbstract {
MethodFinder
.findMethod_returningNonScalar(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
+ .memberSupport(methodNameCandidates, processMethodContext.getIntrospectionPolicy()),
processMethodContext.getCls(),
- methodNameCandidates,
returnType,
NO_ARG)
.peek(processMethodContext::removeMethod)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethodFactory.java
index 25ae13f..8930253 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethodFactory.java
@@ -49,9 +49,8 @@ extends MemberSupportFacetFactoryAbstract {
MethodFinder
.findMethod(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
+ .memberSupport(methodNameCandidates, processMethodContext.getIntrospectionPolicy()),
processMethodContext.getCls(),
- methodNameCandidates,
returnType,
NO_ARG)
.peek(processMethodContext::removeMethod)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/PropertySetterFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/PropertySetterFacetFactory.java
index af75732..5b114d4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/PropertySetterFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/PropertySetterFacetFactory.java
@@ -24,18 +24,25 @@ import javax.inject.Inject;
import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.config.progmodel.ProgrammingModelConstants;
+import org.apache.isis.core.config.progmodel.ProgrammingModelConstants.ReturnTypeCategory;
import org.apache.isis.core.metamodel.commons.StringExtensions;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacetViaSetterMethod;
import org.apache.isis.core.metamodel.facets.properties.update.init.PropertyInitializationFacetViaSetterMethod;
import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacetViaSetterMethod;
+import org.apache.isis.core.metamodel.methods.MethodFinder;
import org.apache.isis.core.metamodel.methods.MethodFinderOptions;
-import org.apache.isis.core.metamodel.methods.MethodFinderUtils;
import org.apache.isis.core.metamodel.methods.MethodPrefixBasedFacetFactoryAbstract;
+import lombok.val;
+
+/**
+ * Sets up the {@link PropertySetterFacetViaSetterMethod} to invoke the
+ * property's setter if available, but if none then marks the property as
+ * {@link SnapshotExcludeFacetInferred not-persistable}.
+ */
public class PropertySetterFacetFactory
extends MethodPrefixBasedFacetFactoryAbstract {
@@ -49,39 +56,33 @@ extends MethodPrefixBasedFacetFactoryAbstract {
@Override
public void process(final ProcessMethodContext processMethodContext) {
- final Method setterMethod = attachPropertyModifyFacetIfSetterIsFound(processMethodContext);
-
- attachPropertyClearFacetUsingSetterIfRequired(processMethodContext, setterMethod);
- }
-
- /**
- * Sets up the {@link PropertySetterFacetViaSetterMethod} to invoke the
- * property's setter if available, but if none then marks the property as
- * {@link NotPersistableFacet not-persistable} and {@link DisabledFacet
- * disabled} otherwise.
- */
- private Method attachPropertyModifyFacetIfSetterIsFound(
- final ProcessMethodContext processMethodContext) {
-
final Method getterMethod = processMethodContext.getMethod();
final String capitalizedName = StringExtensions.asJavaBaseName(getterMethod.getName());
+ val methodNameCandidates = Can.ofSingleton(
+ ProgrammingModelConstants.AccessorPrefix.SET.prefix(capitalizedName));
+
+ final Class<?>[] paramTypes = new Class[] { getterMethod.getReturnType() };
- final Class<?> cls = processMethodContext.getCls();
- final Class<?> returnType = getterMethod.getReturnType();
- final Class<?>[] paramTypes = new Class[] { returnType };
- final Method setterMethod = MethodFinderUtils
- .findMethod(
- MethodFinderOptions
- .accessor(processMethodContext.getIntrospectionPolicy()),
- cls,
- ProgrammingModelConstants.AccessorPrefix.SET.prefix(capitalizedName),
- void.class, paramTypes);
- processMethodContext.removeMethod(setterMethod);
+ val setterMethods = MethodFinder
+ .findMethod_returningCategory(
+ MethodFinderOptions
+ .accessor(methodNameCandidates, processMethodContext.getIntrospectionPolicy()),
+ ReturnTypeCategory.VOID,
+ processMethodContext.getCls(),
+ paramTypes)
+ .peek(processMethodContext::removeMethod)
+ .collect(Can.toCan());
final FacetHolder property = processMethodContext.getFacetHolder();
- if (setterMethod != null) {
- addFacet(new PropertySetterFacetViaSetterMethod(setterMethod, property));
- addFacet(new PropertyInitializationFacetViaSetterMethod(setterMethod, property));
+ if (setterMethods.isNotEmpty()) {
+
+ setterMethods
+ .forEach(setterMethod->{
+ addFacet(new PropertySetterFacetViaSetterMethod(setterMethod, property));
+ addFacet(new PropertyInitializationFacetViaSetterMethod(setterMethod, property));
+ addFacet(new PropertyClearFacetViaSetterMethod(setterMethod, property));
+ });
+
} else {
addFacet(new SnapshotExcludeFacetInferred(property));
@@ -92,17 +93,6 @@ extends MethodPrefixBasedFacetFactoryAbstract {
}
- return setterMethod;
- }
-
- private void attachPropertyClearFacetUsingSetterIfRequired(
- final ProcessMethodContext processMethodContext, final Method setMethod) {
-
- if (setMethod == null) {
- return;
- }
- final FacetHolder property = processMethodContext.getFacetHolder();
- addFacet(new PropertyClearFacetViaSetterMethod(setMethod, property));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethodFactory.java
index ebe907a..7d7bed0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethodFactory.java
@@ -49,9 +49,8 @@ extends MemberSupportFacetFactoryAbstract {
MethodFinder
.findMethod_returningText(
MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
+ .memberSupport(methodNameCandidates, processMethodContext.getIntrospectionPolicy()),
processMethodContext.getCls(),
- methodNameCandidates,
new Class[] { returnType })
.peek(processMethodContext::removeMethod)
.forEach(validateMethod->{
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinder.java
index 6d0e329..aced3b3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinder.java
@@ -23,6 +23,7 @@ import java.util.stream.Stream;
import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.base._NullSafe;
+import org.apache.isis.core.config.progmodel.ProgrammingModelConstants.ReturnTypeCategory;
import org.apache.isis.core.metamodel.methods.MethodFinderUtils.MethodAndPpmConstructor;
/**
@@ -35,11 +36,10 @@ public final class MethodFinder {
public static Stream<Method> findMethod(
final MethodFinderOptions options,
final Class<?> type,
- final Can<String> names,
final Class<?> expectedReturnType,
final Class<?>[] paramTypes) {
- return names.stream()
+ return options.getMethodNameCandidates().stream()
.distinct()
.map(name->MethodFinderUtils
.findMethod(options, type, name, expectedReturnType, paramTypes))
@@ -48,13 +48,25 @@ public final class MethodFinder {
// -- SEARCH FOR MULTIPLE NAME CANDIDATES
+ public static Stream<Method> findMethod_returningCategory(
+ final MethodFinderOptions options,
+ final ReturnTypeCategory returnTypeCategory,
+ final Class<?> type,
+ final Class<?>[] paramTypes) {
+
+ return options.getMethodNameCandidates().stream()
+ .distinct()
+ .map(name->MethodFinderUtils
+ .findMethod_returningCategory(options, returnTypeCategory, type, name, paramTypes))
+ .filter(_NullSafe::isPresent);
+ }
+
public static Stream<Method> findMethod_returningBoolean(
final MethodFinderOptions options,
final Class<?> type,
- final Can<String> names,
final Class<?>[] paramTypes) {
- return names.stream()
+ return options.getMethodNameCandidates().stream()
.distinct()
.map(name->MethodFinderUtils
.findMethod_returningBoolean(options, type, name, paramTypes))
@@ -64,10 +76,9 @@ public final class MethodFinder {
public static Stream<Method> findMethod_returningText(
final MethodFinderOptions options,
final Class<?> type,
- final Can<String> names,
final Class<?>[] paramTypes) {
- return names.stream()
+ return options.getMethodNameCandidates().stream()
.distinct()
.map(name->MethodFinderUtils
.findMethod_returningText(options, type, name, paramTypes))
@@ -77,29 +88,26 @@ public final class MethodFinder {
public static Stream<Method> findMethod_returningNonScalar(
final MethodFinderOptions options,
final Class<?> type,
- final Can<String> names,
final Class<?> elementReturnType,
final Class<?>[] paramTypes) {
- return names.stream()
+ return options.getMethodNameCandidates().stream()
.distinct()
.map(name->MethodFinderUtils
.findMethod_returningNonScalar(options, type, name, elementReturnType, paramTypes))
.filter(_NullSafe::isPresent);
}
-
// -- SEARCH FOR MULTIPLE NAME CANDIDATES (PPM)
public static Stream<MethodAndPpmConstructor> findMethodWithPPMArg(
final MethodFinderOptions options,
final Class<?> type,
- final Can<String> names,
final Class<?> returnType,
final Class<?>[] paramTypes,
final Can<Class<?>> additionalParamTypes) {
- return names.stream()
+ return options.getMethodNameCandidates().stream()
.distinct()
.map(name->MethodFinderUtils
.findMethodWithPPMArg(options, type, name, returnType, paramTypes, additionalParamTypes))
@@ -110,11 +118,10 @@ public final class MethodFinder {
final MethodFinderOptions options,
final Can<Class<?>> returnTypes,
final Class<?> type,
- final Can<String> names,
final Class<?>[] paramTypes,
final Can<Class<?>> additionalParamTypes) {
- return names.stream()
+ return options.getMethodNameCandidates().stream()
.distinct()
.map(name->MethodFinderUtils
.findMethodWithPPMArg_returningAnyOf(options, returnTypes, type, name, paramTypes, additionalParamTypes))
@@ -124,11 +131,10 @@ public final class MethodFinder {
public static Stream<MethodAndPpmConstructor> findMethodWithPPMArg_returningBoolean(
final MethodFinderOptions options,
final Class<?> type,
- final Can<String> names,
final Class<?>[] paramTypes,
final Can<Class<?>> additionalParamTypes) {
- return names.stream()
+ return options.getMethodNameCandidates().stream()
.distinct()
.map(name->MethodFinderUtils
.findMethodWithPPMArg_returningBoolean(options, type, name, paramTypes, additionalParamTypes))
@@ -138,11 +144,10 @@ public final class MethodFinder {
public static Stream<MethodAndPpmConstructor> findMethodWithPPMArg_returningText(
final MethodFinderOptions options,
final Class<?> type,
- final Can<String> names,
final Class<?>[] paramTypes,
final Can<Class<?>> additionalParamTypes) {
- return names.stream()
+ return options.getMethodNameCandidates().stream()
.distinct()
.map(name->MethodFinderUtils
.findMethodWithPPMArg_returningText(options, type, name, paramTypes, additionalParamTypes))
@@ -152,12 +157,11 @@ public final class MethodFinder {
public static Stream<MethodAndPpmConstructor> findMethodWithPPMArg_returningNonScalar(
final MethodFinderOptions options,
final Class<?> type,
- final Can<String> names,
final Class<?> elementReturnType,
final Class<?>[] paramTypes,
final Can<Class<?>> additionalParamTypes) {
- return names.stream()
+ return options.getMethodNameCandidates().stream()
.distinct()
.map(name->MethodFinderUtils
.findMethodWithPPMArg_returningNonScalar(options, type, name, elementReturnType, paramTypes, additionalParamTypes))
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinderOptions.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinderOptions.java
index 80011ab..347a27c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinderOptions.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinderOptions.java
@@ -30,6 +30,7 @@ import org.apache.isis.commons.internal.functions._Predicates;
import org.apache.isis.commons.internal.reflection._Annotations;
import org.apache.isis.commons.internal.reflection._Reflect;
import org.apache.isis.core.config.progmodel.ProgrammingModelConstants;
+import org.apache.isis.core.config.progmodel.ProgrammingModelConstants.ConflictingAnnotations;
import lombok.NonNull;
import lombok.Value;
@@ -40,60 +41,92 @@ public class MethodFinderOptions {
public static MethodFinderOptions notNecessarilyPublic() {
return of(
+ Can.empty(), //FIXME
EncapsulationPolicy.ENCAPSULATED_MEMBERS_SUPPORTED,
_Predicates.alwaysTrue()
);
}
- public static MethodFinderOptions publicOnly() {
+ public static MethodFinderOptions publicOnly(
+ final Can<String> methodNameCandidates) {
return of(
+ methodNameCandidates,
EncapsulationPolicy.ONLY_PUBLIC_MEMBERS_SUPPORTED,
_Predicates.alwaysTrue()
);
}
public static MethodFinderOptions accessor(
+ final Can<String> methodNameCandidates,
final IntrospectionPolicy memberIntrospectionPolicy) {
- return havingAnyOrNoAnnotation(memberIntrospectionPolicy);
+ return havingAnyOrNoAnnotation(
+ methodNameCandidates,
+ memberIntrospectionPolicy);
}
public static MethodFinderOptions objectSupport(
+ final Can<String> methodNameCandidates,
final IntrospectionPolicy memberIntrospectionPolicy) {
- return havingAnnotationIfEnforcedByPolicyOrAccessibility(
+ return supportMethod(
+ methodNameCandidates,
memberIntrospectionPolicy,
Domain.Include.class,
- ProgrammingModelConstants.ConflictingAnnotations.OBJECT_SUPPORT.getProhibits());
+ ProgrammingModelConstants.ConflictingAnnotations.OBJECT_SUPPORT);
}
public static MethodFinderOptions livecycleCallback(
+ final Can<String> methodNameCandidates,
final IntrospectionPolicy memberIntrospectionPolicy) {
- return havingAnnotationIfEnforcedByPolicyOrAccessibility(
+ return supportMethod(
+ methodNameCandidates,
memberIntrospectionPolicy,
Domain.Include.class,
- ProgrammingModelConstants.ConflictingAnnotations.OBJECT_LIFECYCLE.getProhibits());
+ ProgrammingModelConstants.ConflictingAnnotations.OBJECT_LIFECYCLE);
}
public static MethodFinderOptions memberSupport(
+ final Can<String> methodNameCandidates,
final IntrospectionPolicy memberIntrospectionPolicy) {
- return havingAnnotationIfEnforcedByPolicyOrAccessibility(
+ return supportMethod(
+ methodNameCandidates,
memberIntrospectionPolicy,
Domain.Include.class,
- ProgrammingModelConstants.ConflictingAnnotations.MEMBER_SUPPORT.getProhibits());
+ ProgrammingModelConstants.ConflictingAnnotations.MEMBER_SUPPORT);
}
+ private final @NonNull Can<String> methodNameCandidates;
private final @NonNull EncapsulationPolicy encapsulationPolicy;
private final @NonNull Predicate<Method> mustSatisfy;
// -- HELPER
private static MethodFinderOptions havingAnyOrNoAnnotation(
+ final Can<String> methodNameCandidates,
final IntrospectionPolicy memberIntrospectionPolicy) {
return of(
+ methodNameCandidates,
memberIntrospectionPolicy.getEncapsulationPolicy(),
_Predicates.alwaysTrue());
}
- private static MethodFinderOptions havingAnnotationIfEnforcedByPolicyOrAccessibility(
+ private static MethodFinderOptions supportMethod(
+ final Can<String> methodNameCandidates,
+ final IntrospectionPolicy memberIntrospectionPolicy,
+ final Class<? extends Annotation> annotationType,
+ final ConflictingAnnotations conflictingAnnotations) {
+
+ return of(
+ methodNameCandidates,
+ // support methods are always allowed private
+ EncapsulationPolicy.ENCAPSULATED_MEMBERS_SUPPORTED,
+ havingAnnotationIfEnforcedByPolicyOrAccessibility(
+ memberIntrospectionPolicy,
+ annotationType,
+ conflictingAnnotations.getProhibits()));
+
+ }
+
+ private static Predicate<Method> havingAnnotationIfEnforcedByPolicyOrAccessibility(
final IntrospectionPolicy memberIntrospectionPolicy,
final Class<? extends Annotation> annotationType,
final Can<Class<? extends Annotation>> conflictingAnnotations) {
@@ -102,13 +135,11 @@ public class MethodFinderOptions {
// when REQUIRED -> annot. on support also required
// when OPTIONAL -> annot. on support only required when support method is private
- return of(
- EncapsulationPolicy.ENCAPSULATED_MEMBERS_SUPPORTED, // support methods are always allowed private
- memberIntrospectionPolicy.getMemberAnnotationPolicy().isMemberAnnotationsRequired()
+ return memberIntrospectionPolicy.getMemberAnnotationPolicy().isMemberAnnotationsRequired()
? method->havingAnnotation(method, annotationType, conflictingAnnotations)
: method-> !_Reflect.isAccessible(method)
? havingAnnotation(method, annotationType, conflictingAnnotations)
- : true);
+ : true;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinderUtils.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinderUtils.java
index f09b862..4dcadc0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinderUtils.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinderUtils.java
@@ -129,8 +129,8 @@ public final class MethodFinderUtils {
public static Optional<Method> findNoArgMethod(
final MethodFinderOptions options,
- final Class<?> type, final String name, final Class<?> returnType) {
- return streamMethods(options, type, Can.ofSingleton(name), returnType)
+ final Class<?> type, final Class<?> returnType) {
+ return streamMethods(options, type, options.getMethodNameCandidates(), returnType)
.filter(MethodUtil.Predicates.paramCount(0))
.findFirst();
}
@@ -222,6 +222,16 @@ public final class MethodFinderUtils {
// -- SHORTCUTS
+ public static Method findMethod_returningCategory(
+ final MethodFinderOptions options,
+ final ReturnTypeCategory returnTypeCategory,
+ final Class<?> type,
+ final String name,
+ final Class<?>[] paramTypes) {
+ return findMethod_returningAnyOf(
+ options, returnTypeCategory.getReturnTypes(), type, name, paramTypes);
+ }
+
public static Method findMethod_returningBoolean(
final MethodFinderOptions options,
final Class<?> type,
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/FailureUtil.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/FailureUtil.java
index 528d91a..37d66e9 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/FailureUtil.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/FailureUtil.java
@@ -20,6 +20,7 @@ package org.apache.isis.viewer.restfulobjects.viewer.mappers;
import java.lang.reflect.InvocationTargetException;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.metamodel.methods.MethodFinderOptions;
import org.apache.isis.core.metamodel.methods.MethodFinderUtils;
import org.apache.isis.viewer.restfulobjects.applib.RestfulResponse;
@@ -34,8 +35,8 @@ final class FailureUtil {
public static HttpStatusCode getFailureStatusCodeIfAny(final Throwable ex) {
val errorCodeGetter = MethodFinderUtils.findNoArgMethod(
- MethodFinderOptions.publicOnly(),
- ex.getClass(), "getErrorCode", int.class)
+ MethodFinderOptions.publicOnly(Can.ofSingleton("getErrorCode")),
+ ex.getClass(), int.class)
.orElse(null);
if(errorCodeGetter!=null) {
try {