From 88264e06ffc97480185fd8bf63d9005801f79c04 Mon Sep 17 00:00:00 2001
From: rschoene <rene.schoene@tu-dresden.de>
Date: Mon, 10 Oct 2022 16:27:15 +0200
Subject: [PATCH] 3.0.0

- prepare new release
- coherent styling of nodes and relation labels
---
 dumpAst.base/src/main/jastadd/Navigation.jrag  | 10 ++++++++++
 dumpAst.base/src/main/jastadd/Printing.jrag    | 18 ++++++++++--------
 .../st/jastadd/dumpAst/ast/DumpBuilder.java    |  2 ++
 .../jastadd/featureTest/FeatureTestMain.java   | 14 +++++++++++++-
 .../inf/st/jastadd/testDumper/TestSimple.java  |  6 +++---
 5 files changed, 38 insertions(+), 12 deletions(-)

diff --git a/dumpAst.base/src/main/jastadd/Navigation.jrag b/dumpAst.base/src/main/jastadd/Navigation.jrag
index fcec323..5935de9 100644
--- a/dumpAst.base/src/main/jastadd/Navigation.jrag
+++ b/dumpAst.base/src/main/jastadd/Navigation.jrag
@@ -30,6 +30,16 @@ aspect Navigation {
   eq DumpNode.getDumpToken().containingDumpNode() = this;
   eq DumpNode.getInvisiblePath().containingDumpNode() = this;
 
+  // --- containingDumpListChildNode ---
+  inh DumpListChildNode InnerDumpNode.containingDumpListChildNode();
+  eq DumpListChildNode.getInnerDumpNode().containingDumpListChildNode() = this;
+
+  // --- containingDumpListRelation ---
+  inh DumpListRelation InnerRelationDumpNode.containingDumpListRelation();
+  eq DumpListRelation.getInnerRelationDumpNode().containingDumpListRelation() = this;
+  eq DumpReferenceListToken.getInnerRelationDumpNode().containingDumpListRelation() = null;
+  eq InvisiblePath.getInnerRelationDumpNode().containingDumpListRelation() = null;
+
   // --- container ---
   syn DumpNode DumpNode.container() {
     if (getContainerOfNormalChild() != null) {
diff --git a/dumpAst.base/src/main/jastadd/Printing.jrag b/dumpAst.base/src/main/jastadd/Printing.jrag
index 7493711..eb16c80 100644
--- a/dumpAst.base/src/main/jastadd/Printing.jrag
+++ b/dumpAst.base/src/main/jastadd/Printing.jrag
@@ -25,14 +25,16 @@ aspect Printing {
   syn String DumpNode.label() = getLabel();
   inh String InnerDumpNode.label();
   inh String InnerRelationDumpNode.label();
-  eq DumpListChildNode.getInnerDumpNode(int index).label() = label() +
-      (getInnerDumpNode(index).getDumpNode().isEmpty() ?
-          "" :
-          "[" + chooseIndex(getInnerDumpNode(index).getOriginalIndex(), index) + "]");
-  eq DumpListRelation.getInnerRelationDumpNode(int index).label() = label() +
-      (getInnerRelationDumpNode(index).getDumpNode().isEmpty() ?
-          "" :
-          "[" + chooseIndex(getInnerRelationDumpNode(index).getOriginalIndex(), index) + "]");
+  eq DumpListChildNode.getInnerDumpNode(int index).label() {
+    InnerDumpNode inner = getInnerDumpNode(index);
+    return inner.getLabel() +
+        (inner.getDumpNode().isEmpty() ? "" : "[" + chooseIndex(inner.getOriginalIndex(), index) + "]");
+  }
+  eq DumpListRelation.getInnerRelationDumpNode(int index).label() {
+    InnerRelationDumpNode inner = getInnerRelationDumpNode(index);
+    return inner.getLabel() +
+      (inner.getDumpNode().isEmpty() ? "" : "[" + chooseIndex(inner.getOriginalIndex(), index) + "]");
+  }
   eq DumpReferenceListToken.getInnerRelationDumpNode(int index).label() = label() + "[" + index + "]";
   eq InvisiblePath.getInnerRelationDumpNode(int index).label() = null;
   protected int ASTNode.chooseIndex(int originalIndex, int inheritedIndex) {
diff --git a/dumpAst.base/src/main/java/de/tudresden/inf/st/jastadd/dumpAst/ast/DumpBuilder.java b/dumpAst.base/src/main/java/de/tudresden/inf/st/jastadd/dumpAst/ast/DumpBuilder.java
index 0f94480..6644961 100644
--- a/dumpAst.base/src/main/java/de/tudresden/inf/st/jastadd/dumpAst/ast/DumpBuilder.java
+++ b/dumpAst.base/src/main/java/de/tudresden/inf/st/jastadd/dumpAst/ast/DumpBuilder.java
@@ -97,6 +97,8 @@ public class DumpBuilder {
     dumpAst.setPrintConfig(new PrintConfig());
     dumpAst.getPrintConfig().setScale(1);
     dumpAst.getPrintConfig().setVersion(readVersion());
+    dumpAst.getPrintConfig().setNodeStyleDefinition((node, style) -> {});
+    dumpAst.getPrintConfig().setRelationStyleDefinition((sourceNode, targetNode, context, style) -> {});
   }
 
   private DumpBuilder thisWithResetBuilt() {
diff --git a/dumpAst.prototyping/src/main/java/de/tudresden/inf/st/jastadd/featureTest/FeatureTestMain.java b/dumpAst.prototyping/src/main/java/de/tudresden/inf/st/jastadd/featureTest/FeatureTestMain.java
index dc47a4a..ea4c631 100644
--- a/dumpAst.prototyping/src/main/java/de/tudresden/inf/st/jastadd/featureTest/FeatureTestMain.java
+++ b/dumpAst.prototyping/src/main/java/de/tudresden/inf/st/jastadd/featureTest/FeatureTestMain.java
@@ -72,7 +72,19 @@ public class FeatureTestMain {
           }
         })
         .skinParam(SkinParamBooleanSetting.Shadowing, false)
-        .setNameMethod(node -> node.getClass().getSimpleName() + ASTNode.counter++);
+        .relationStyle((source, target, context, style) -> {
+          if (context.equals("ManyA")) {
+            style.setLabel("ManyA of " + ((Nameable) source).getName());
+          } else if (context.equals("OneA") || context.equals("MaybeC")) {
+            style.setTextColor("red");
+          }
+        })
+        .<ASTNode<?>>nodeStyle((node, style) -> {
+          if (node.isA()) {
+            style.setBackgroundColor("yellow");
+          }
+          style.setLabel(node.getClass().getSimpleName() + ASTNode.counter++);
+        });
 
     builder.dumpAsYaml(pathToYaml, true);
     builder.dumpAsPNG(pathToPng);
diff --git a/dumpAst.tests/src/test/java/de/tudresden/inf/st/jastadd/testDumper/TestSimple.java b/dumpAst.tests/src/test/java/de/tudresden/inf/st/jastadd/testDumper/TestSimple.java
index abdf25d..2f4224a 100644
--- a/dumpAst.tests/src/test/java/de/tudresden/inf/st/jastadd/testDumper/TestSimple.java
+++ b/dumpAst.tests/src/test/java/de/tudresden/inf/st/jastadd/testDumper/TestSimple.java
@@ -285,7 +285,7 @@ public class TestSimple {
     Root root = createRoot(createA(A_NAME), null);
 
     List<DumpNode> nodes = TestUtils.dumpModel(root,
-        builder -> builder.<ASTNode<?>>setNameMethod(n -> n.isA() ? "A" : "Not A"));
+        builder -> builder.<ASTNode<?>>nodeStyle((node, style) -> style.setLabel(node.isA() ? "A" : "Not A")));
     DumpNode actualRoot = TestUtils.findByName(nodes, ROOT_NAME);
     assertEquals("Not A", actualRoot.getLabel());
 
@@ -298,7 +298,7 @@ public class TestSimple {
     Root root = createRoot(createA(A_NAME), null);
 
     List<DumpNode> nodes = TestUtils.dumpModel(root,
-        builder -> builder.<ASTNode<?>>setTextColorMethod(n -> n.isA() ? "red" : ""));
+        builder -> builder.<ASTNode<?>>nodeStyle((node, style) -> style.setTextColor(node.isA() ? "red" : "")));
     DumpNode actualRoot = TestUtils.findByName(nodes, ROOT_NAME);
     assertEquals("", actualRoot.getTextColor());
 
@@ -311,7 +311,7 @@ public class TestSimple {
     Root root = createRoot(createA(A_NAME), null);
 
     List<DumpNode> nodes = TestUtils.dumpModel(root,
-        builder -> builder.<ASTNode<?>>setBackgroundColorMethod(n -> n.isA() ? "green" : ""));
+        builder -> builder.<ASTNode<?>>nodeStyle((node, style) -> style.setBackgroundColor(node.isA() ? "green" : "")));
     DumpNode actualRoot = TestUtils.findByName(nodes, ROOT_NAME);
     assertEquals("", actualRoot.getBackgroundColor());
 
-- 
GitLab