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 d8e1461b370 CAUSEWAY-3964: fix for absence of superclass
d8e1461b370 is described below

commit d8e1461b3704f1d5dd8cb8e0f4c29b95cc1651e4
Author: andi-huber <[email protected]>
AuthorDate: Mon Feb 9 12:57:30 2026 +0100

    CAUSEWAY-3964: fix for absence of superclass
    
    e.g. when inspecting interfaces
---
 .../core/metamodel/inspect/model/MMNodeFactory.java  |  4 ++--
 ...ode.svg => MetamodelInspectView-TypeNode-sub.svg} |  6 +++---
 .../inspect/model/MetamodelInspectView-TypeNode.svg  |  4 ++--
 .../inspect/model/MetamodelInspectView.java          |  4 ++--
 .../core/metamodel/inspect/model/TypeNode.java       | 20 ++++++++++++++------
 5 files changed, 23 insertions(+), 15 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/MMNodeFactory.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/MMNodeFactory.java
index f0f7481a58d..ea5911f2545 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/MMNodeFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/MMNodeFactory.java
@@ -37,14 +37,14 @@
 class MMNodeFactory {
 
     TypeNode type(final ObjectSpecification objSpec) {
-        return new TypeNode(objSpec);
+        return new TypeNode(objSpec, false);
     }
 
     TypeNode superType(@Nullable ObjectSpecification superSpec, MMNode 
parentNodeNotUsed) {
        if(superSpec==null
                        || 
superSpec.getCorrespondingClass().equals(Object.class))
                return null;
-               return new TypeNode(superSpec);
+               return new TypeNode(superSpec, true);
        }
 
        MMNode interfaceGroup(Can<ObjectSpecification> interfaces, TypeNode 
parentNode) {
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/MetamodelInspectView-TypeNode.svg
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/MetamodelInspectView-TypeNode-sub.svg
similarity index 97%
copy from 
core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/MetamodelInspectView-TypeNode.svg
copy to 
core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/MetamodelInspectView-TypeNode-sub.svg
index 046acfb5285..d39848ee5b1 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/MetamodelInspectView-TypeNode.svg
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/MetamodelInspectView-TypeNode-sub.svg
@@ -69,12 +69,12 @@
   <text
      xml:space="preserve"
      
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:192px;line-height:0.95;font-family:Bahnschrift;-inkscape-font-specification:Bahnschrift;letter-spacing:0px;word-spacing:0px;fill:#003f5c;fill-opacity:1;stroke:none;stroke-width:3.73954"
-     x="97.265205"
+     x="70"
      y="323.21063"
      id="text857-3"><tspan
        sodipodi:role="line"
-       x="97.265205"
+       x="70"
        y="323.21063"
        
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:192px;font-family:Bahnschrift;-inkscape-font-specification:Bahnschrift;fill:#003f5c;fill-opacity:1;stroke-width:3.73954"
-       id="tspan859-3">typ</tspan></text>
+       id="tspan859-3">sup</tspan></text>
 </svg>
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/MetamodelInspectView-TypeNode.svg
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/MetamodelInspectView-TypeNode.svg
index 046acfb5285..1382ecd6196 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/MetamodelInspectView-TypeNode.svg
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/MetamodelInspectView-TypeNode.svg
@@ -69,11 +69,11 @@
   <text
      xml:space="preserve"
      
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:192px;line-height:0.95;font-family:Bahnschrift;-inkscape-font-specification:Bahnschrift;letter-spacing:0px;word-spacing:0px;fill:#003f5c;fill-opacity:1;stroke:none;stroke-width:3.73954"
-     x="97.265205"
+     x="70"
      y="323.21063"
      id="text857-3"><tspan
        sodipodi:role="line"
-       x="97.265205"
+       x="70"
        y="323.21063"
        
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:192px;font-family:Bahnschrift;-inkscape-font-specification:Bahnschrift;fill:#003f5c;fill-opacity:1;stroke-width:3.73954"
        id="tspan859-3">typ</tspan></text>
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/MetamodelInspectView.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/MetamodelInspectView.java
index 09016ab5d2e..bd4280aadcd 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/MetamodelInspectView.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/MetamodelInspectView.java
@@ -50,7 +50,7 @@ public class MetamodelInspectView extends 
MasterDetailTreeView<MMNode, Metamodel
     // -- FACTORY
 
     public static MetamodelInspectView root(final ObjectSpecification spec) {
-        return new MetamodelInspectView(new TypeNode(spec), TreePath.root());
+        return new MetamodelInspectView(new TypeNode(spec, false), 
TreePath.root());
     }
 
     // -- CONSTRUCTION
@@ -134,7 +134,7 @@ static Memento empty() {
         }
 
         public MMNode root() {
-            return new TypeNode(logicalName);
+            return new TypeNode(logicalName, false);
         }
 
         static Memento parse(final String stringified) {
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/TypeNode.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/TypeNode.java
index 6ca2ec5da7c..37f7ec299ea 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/TypeNode.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/TypeNode.java
@@ -30,15 +30,16 @@
 import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
 
 record TypeNode(
-    String logicalName)
+    String logicalName,
+    boolean isSubnode)
 implements MMNode, Serializable {
-
-       TypeNode(ObjectSpecification objSpec) {
+       
+       TypeNode(ObjectSpecification objSpec, boolean isSubnode) {
                // for security mapping, abstract spec's may share their 
logical type name with sub-types
                // however, for proper mementos, we should used fully qualified 
class names instead (when abstract)
                this(objSpec.isAbstract()
                        ? objSpec.getCorrespondingClass().getName()
-                       : objSpec.logicalTypeName());
+                       : objSpec.logicalTypeName(), isSubnode);
        }
        
     @Override
@@ -51,7 +52,7 @@ public String title() {
     
     @Override
     public String iconName() {
-        return "";
+        return isSubnode() ? "sub" : "";
     }
     
     @Override
@@ -62,7 +63,14 @@ public void putDetails(Details details) {
         details.put("Simple Name", spec.logicalType().logicalSimpleName());
         details.put("Namespace", spec.logicalType().namespace());
         details.put("Corresponding Class", 
spec.getCorrespondingClass().getName());
-        details.put("Super Type", 
spec.superclass().getCorrespondingClass().toString());
+        Optional.ofNullable(spec.superclass())
+               .ifPresent(superType->{
+                       details.put("Super Type", 
superType.getCorrespondingClass().getName());         
+               });
+        spec.interfaces().stream()
+               .forEach(interfc->details.put(
+                               "Interface", 
+                               interfc.getCorrespondingClass().getName()));
     }
 
     @Override

Reply via email to