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

ahuber pushed a commit to branch 3752-appfeat.filter.spi
in repository https://gitbox.apache.org/repos/asf/causeway.git

commit db9e465ae9a6d6a34f5d57fd07d4b66dcc7c0ab0
Author: andi-huber <[email protected]>
AuthorDate: Thu Nov 27 11:03:19 2025 +0100

    CAUSEWAY-3752: flattens HiddenObjectFacetViaMethod
---
 .../metamodel/facets/all/hide/HiddenFacet.java     | 22 ---------
 .../facets/members/hidden/HiddenFacetAbstract.java |  3 +-
 .../facets/object/hidden/HiddenInstanceFacet.java  |  3 +-
 .../facets/object/hidden/HiddenObjectFacet.java    |  3 +-
 .../object/hidden/HiddenObjectFacetAbstract.java   | 47 ------------------
 .../facets/object/hidden/HiddenTypeFacet.java      |  4 +-
 .../hidden/HiddenTypeFacetFromAuthorization.java   | 11 +----
 .../hidden/method/HiddenObjectFacetViaMethod.java  | 56 +++++++++++-----------
 8 files changed, 37 insertions(+), 112 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/HiddenFacet.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/HiddenFacet.java
index ce145305973..f73cd0c2d96 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/HiddenFacet.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/all/hide/HiddenFacet.java
@@ -30,28 +30,6 @@
 public interface HiddenFacet
 extends WhereValueFacet, HidingInteractionAdvisor {
 
-    public enum Semantics {
-
-        /** regular semantics */
-        HIDDEN,
-
-        /** inverted semantics */
-        SHOWN;
-
-        public boolean isHidden() {
-            return this == HIDDEN;
-        }
-
-        public boolean isShown() {
-            return this == SHOWN;
-        }
-    }
-
-    // default semantics unless inverted
-    default Semantics getSemantics() {
-        return Semantics.HIDDEN;
-    }
-
     // -- PREDICATES
 
     static boolean isAlwaysHidden(final @NonNull FacetHolder facetHolder) {
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/HiddenFacetAbstract.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/HiddenFacetAbstract.java
index c3a0fc53ece..64cd86ebedc 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/HiddenFacetAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/hidden/HiddenFacetAbstract.java
@@ -55,7 +55,7 @@ private HiddenFacetAbstract(final HiddenFacetAbstract 
toplevelFacet) {
     }
 
     @Override
-    public String hides(final VisibilityContext ic) {
+    public final String hides(final VisibilityContext ic) {
         return hiddenReason(ic.target(), ic.where());
     }
 
@@ -68,7 +68,6 @@ public String hides(final VisibilityContext ic) {
     @Override
     public final void visitAttributes(final BiConsumer<String, Object> 
visitor) {
         super.visitAttributes(visitor);
-        visitor.accept("semantics", getSemantics());
     }
 
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenInstanceFacet.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenInstanceFacet.java
index 2243cb6948c..d6deefe0265 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenInstanceFacet.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenInstanceFacet.java
@@ -18,7 +18,6 @@
  */
 package org.apache.causeway.core.metamodel.facets.object.hidden;
 
-import org.apache.causeway.core.metamodel.facetapi.Facet;
 import org.apache.causeway.core.metamodel.facets.all.hide.HiddenFacet;
 import 
org.apache.causeway.core.metamodel.interactions.HidingInteractionAdvisor;
 
@@ -38,6 +37,6 @@
  * @apiNote An unification attempt on HiddenTypeFacet and HiddenObjectFacet 
into a single,
  * failed, because both facets must co-exist, where each has veto power (not 
one overruling the other).
  */
-public interface HiddenInstanceFacet extends Facet, HidingInteractionAdvisor {
+public interface HiddenInstanceFacet extends HidingInteractionAdvisor {
 
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenObjectFacet.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenObjectFacet.java
index 217a021e1b7..a8a72f838fb 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenObjectFacet.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenObjectFacet.java
@@ -18,11 +18,12 @@
  */
 package org.apache.causeway.core.metamodel.facets.object.hidden;
 
+import org.apache.causeway.core.metamodel.facetapi.Facet;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectMember;
 
-public interface HiddenObjectFacet extends HiddenInstanceFacet {
+public interface HiddenObjectFacet extends Facet, HiddenInstanceFacet {
 
     /**
      * Copy this facet to another {@link FacetHolder}.
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenObjectFacetAbstract.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenObjectFacetAbstract.java
deleted file mode 100644
index cd83642e1a2..00000000000
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenObjectFacetAbstract.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.core.metamodel.facets.object.hidden;
-
-import org.apache.causeway.core.metamodel.facetapi.Facet;
-import org.apache.causeway.core.metamodel.facetapi.FacetAbstract;
-import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-import org.apache.causeway.core.metamodel.interactions.vis.VisibilityContext;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-
-public abstract class HiddenObjectFacetAbstract
-extends FacetAbstract
-implements HiddenObjectFacet {
-
-    private static final Class<? extends Facet> type() {
-        return HiddenObjectFacet.class;
-    }
-
-    public HiddenObjectFacetAbstract(final FacetHolder holder) {
-        super(type(), holder);
-    }
-
-    @Override
-    public String hides(final VisibilityContext ic) {
-        final ManagedObject toValidate = ic.target();
-        return toValidate != null ? hiddenReason(toValidate) : null;
-    }
-
-    protected abstract String hiddenReason(ManagedObject toHide);
-
-}
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacet.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacet.java
index f05d8e798ed..96d7334cd12 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacet.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacet.java
@@ -18,6 +18,8 @@
  */
 package org.apache.causeway.core.metamodel.facets.object.hidden;
 
-public interface HiddenTypeFacet extends HiddenInstanceFacet {
+import org.apache.causeway.core.metamodel.facetapi.Facet;
+
+public interface HiddenTypeFacet extends Facet, HiddenInstanceFacet {
 
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacetFromAuthorization.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacetFromAuthorization.java
index 3245f2a36f5..2a091645fea 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacetFromAuthorization.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/HiddenTypeFacetFromAuthorization.java
@@ -29,15 +29,8 @@ public record HiddenTypeFacetFromAuthorization(
                FacetHolder facetHolder
                ) implements HiddenTypeFacet {
        
-       @Override
-       public Class<? extends Facet> facetType() {
-               return HiddenTypeFacet.class;
-       }
-       
-       @Override
-       public Precedence precedence() {
-               return Precedence.HIGH; // facet has final say, don't override;
-       }
+       @Override public Class<? extends Facet> facetType() { return 
HiddenTypeFacet.class; }
+       @Override public Precedence precedence() { return Precedence.HIGH; }
        
     @Override
     public String hides(final VisibilityContext vc) {
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/method/HiddenObjectFacetViaMethod.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/method/HiddenObjectFacetViaMethod.java
index 0b3b36ebb7e..37d774d5cc6 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/method/HiddenObjectFacetViaMethod.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/hidden/method/HiddenObjectFacetViaMethod.java
@@ -24,35 +24,33 @@
 import org.jspecify.annotations.Nullable;
 
 import 
org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
+import org.apache.causeway.core.metamodel.facetapi.Facet;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
 import org.apache.causeway.core.metamodel.facets.HasImperativeAspect;
 import org.apache.causeway.core.metamodel.facets.ImperativeAspect;
 import 
org.apache.causeway.core.metamodel.facets.object.hidden.HiddenObjectFacet;
-import 
org.apache.causeway.core.metamodel.facets.object.hidden.HiddenObjectFacetAbstract;
 import org.apache.causeway.core.metamodel.interactions.vis.VisibilityContext;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 
-import lombok.Getter;
-import org.jspecify.annotations.NonNull;
+public record HiddenObjectFacetViaMethod(
+               ImperativeAspect imperativeAspect,
+               FacetHolder facetHolder
+               ) implements HiddenObjectFacet, HasImperativeAspect {
 
-public class HiddenObjectFacetViaMethod
-extends HiddenObjectFacetAbstract
-implements HasImperativeAspect {
-
-    @Getter(onMethod_ = {@Override}) private final @NonNull ImperativeAspect 
imperativeAspect;
-
-    public static Optional<HiddenObjectFacet> create(
-            final @Nullable ResolvedMethod methodIfAny,
-            final FacetHolder holder) {
-
-        return Optional.ofNullable(methodIfAny)
-        .map(method->ImperativeAspect.singleRegularMethod(method, 
Intent.CHECK_IF_HIDDEN))
-        .map(imperativeAspect->new 
HiddenObjectFacetViaMethod(imperativeAspect, holder));
-    }
-
-    private HiddenObjectFacetViaMethod(final ImperativeAspect 
imperativeAspect, final FacetHolder holder) {
-        super(holder);
-        this.imperativeAspect = imperativeAspect;
+       public static Optional<HiddenObjectFacet> create(
+                       final @Nullable ResolvedMethod methodIfAny,
+                       final FacetHolder holder) {
+               
+               return Optional.ofNullable(methodIfAny)
+                               
.map(method->ImperativeAspect.singleRegularMethod(method, 
Intent.CHECK_IF_HIDDEN))
+                               .map(imperativeAspect->new 
HiddenObjectFacetViaMethod(imperativeAspect, holder));
+       }
+       
+       @Override public Class<? extends Facet> facetType() { return 
HiddenObjectFacet.class; }
+       @Override public Precedence precedence() { return Precedence.DEFAULT;}
+       
+    public ImperativeAspect getImperativeAspect() {
+       return imperativeAspect;
     }
 
     @Override
@@ -61,12 +59,6 @@ public String hides(final VisibilityContext ic) {
         return toValidate != null ? hiddenReason(toValidate) : null;
     }
 
-    @Override
-    public String hiddenReason(final ManagedObject target) {
-        final boolean isHidden = imperativeAspect.eval(target, false);
-        return isHidden ? "Hidden" : null;
-    }
-
     @Override
     public HiddenObjectFacetViaMethod copyTo(final FacetHolder holder) {
         return new HiddenObjectFacetViaMethod(imperativeAspect, holder);
@@ -74,7 +66,15 @@ public HiddenObjectFacetViaMethod copyTo(final FacetHolder 
holder) {
 
     @Override
     public void visitAttributes(final BiConsumer<String, Object> visitor) {
-        super.visitAttributes(visitor);
+       HiddenObjectFacet.super.visitAttributes(visitor);
         imperativeAspect.visitAttributes(visitor);
     }
+    
+    // -- HELPER
+    
+    private String hiddenReason(final ManagedObject target) {
+       final boolean isHidden = imperativeAspect.eval(target, false);
+       return isHidden ? "Hidden" : null;
+    }
+
 }

Reply via email to