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