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/07/06 12:05:45 UTC
[isis] branch master updated: ISIS-2791:
TitleFacetViaMethodsFactory needs to unconditionally remove toString method
from action candidates
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 29387ad ISIS-2791: TitleFacetViaMethodsFactory needs to unconditionally remove toString method from action candidates
29387ad is described below
commit 29387ad3b3e7c262ab264d4951ae2ab4eefacf50
Author: andi-huber <ah...@apache.org>
AuthorDate: Tue Jul 6 14:05:31 2021 +0200
ISIS-2791: TitleFacetViaMethodsFactory needs to unconditionally remove
toString method from action candidates
---
.../title/methods/TitleFacetViaMethodsFactory.java | 57 ++++++++++++++--------
1 file changed, 36 insertions(+), 21 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/methods/TitleFacetViaMethodsFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/methods/TitleFacetViaMethodsFactory.java
index 6be2c8c..de0b5f0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/methods/TitleFacetViaMethodsFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/methods/TitleFacetViaMethodsFactory.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.metamodel.facets.object.title.methods;
import java.lang.reflect.Method;
+import javax.annotation.Nullable;
import javax.inject.Inject;
import org.apache.isis.applib.services.i18n.TranslationContext;
@@ -28,7 +29,6 @@ import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.core.metamodel.commons.ClassExtensions;
import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.fallback.FallbackFacetFactory;
@@ -41,6 +41,10 @@ import static org.apache.isis.core.metamodel.methods.MethodLiteralConstants.TO_S
import lombok.val;
+/**
+ * @implNote removes the {@link Object#toString()} method as action candidate,
+ * regardless of whether this method is used for the domain-object's title or not
+ */
public class TitleFacetViaMethodsFactory
extends MethodPrefixBasedFacetFactoryAbstract {
@@ -59,45 +63,56 @@ extends MethodPrefixBasedFacetFactoryAbstract {
*/
@Override
public void process(final ProcessClassContext processClassContext) {
- final Class<?> cls = processClassContext.getCls();
- final FacetHolder facetHolder = processClassContext.getFacetHolder();
+ val cls = processClassContext.getCls();
+ val facetHolder = processClassContext.getFacetHolder();
- Method method = MethodFinderUtils.findMethod_returningText(
+ val titleMethod = MethodFinderUtils.findMethod_returningText(
cls,
TITLE,
NO_ARG);
- if (method != null) {
- processClassContext.removeMethod(method);
+ if (titleMethod != null) {
+ processClassContext.removeMethod(titleMethod);
// sadness: same as in TranslationFactory
- val translationContext = TranslationContext.forMethod(method);
+ val translationContext = TranslationContext.forMethod(titleMethod);
FacetUtil.addFacet(
new TitleFacetViaTitleMethod(
- method, translationContext, facetHolder));
+ titleMethod, translationContext, facetHolder));
+
+ removeToString(processClassContext);
return;
}
// may have a facet by virtue of @Title, say.
- final TitleFacet existingTitleFacet = facetHolder.lookupNonFallbackFacet(TitleFacet.class)
- .orElse(null);
- if(existingTitleFacet != null) {
+ val existingTitleFacet = facetHolder.lookupNonFallbackFacet(TitleFacet.class);
+ if(existingTitleFacet.isPresent()) {
+ removeToString(processClassContext);
return;
}
try {
- method = MethodFinderUtils.findMethod(cls, TO_STRING, String.class, null);
- if (method == null) {
- return;
- }
- if (ClassExtensions.isJavaClass(method.getDeclaringClass())) {
- return;
+ val toStringMethod = removeToString(processClassContext);
+ if (toStringMethod != null) {
+ if(!ClassExtensions.isJavaClass(toStringMethod.getDeclaringClass())) {
+ FacetUtil.addFacet(new TitleFacetInferredFromToStringMethod(toStringMethod, facetHolder));
+ }
}
- processClassContext.removeMethod(method);
- FacetUtil.addFacet(new TitleFacetInferredFromToStringMethod(method, facetHolder));
-
} catch (final Exception e) {
- return;
+ // ignore
}
+
}
+ // -- HELPER
+
+ private @Nullable Method removeToString(final ProcessClassContext processClassContext) {
+ val cls = processClassContext.getCls();
+ val toStringMethod = MethodFinderUtils.findMethod(cls, TO_STRING, String.class, null);
+ if (toStringMethod != null) {
+ processClassContext.removeMethod(toStringMethod);
+ }
+ return toStringMethod;
+ }
+
+
}