diff --git a/dumpAst/src/main/jastadd/DumpAst.relast b/dumpAst/src/main/jastadd/DumpAst.relast index e847a08ffc41780bfe91ed568cca77d094685cd9..035dfc432ef01c21a8036f28200bb20cd1ea2537 100644 --- a/dumpAst/src/main/jastadd/DumpAst.relast +++ b/dumpAst/src/main/jastadd/DumpAst.relast @@ -62,5 +62,6 @@ StyleInformation ::= <NameMethod:StyleMethod> <BackgroundColorMethod:StyleMethod PrintConfig ::= Header* <Scale:double> <Version> + <RelationWithRank:boolean> <OrderChildren:boolean> ; Header ::= <Value> ; diff --git a/dumpAst/src/main/jastadd/GenerationToYaml.jrag b/dumpAst/src/main/jastadd/GenerationToYaml.jrag index a1dd78cc1444455a1e19bfc38af273722c55c0ce..5f3d3b26dac7c41a48564599cdf5bd80d158a0f4 100644 --- a/dumpAst/src/main/jastadd/GenerationToYaml.jrag +++ b/dumpAst/src/main/jastadd/GenerationToYaml.jrag @@ -137,6 +137,7 @@ aspect GenerationToYaml { MappingElement result = super.toYaml(fromRelation); // attributes result.put("innerNodeName", innerNodeName()); + result.put("innerNotNull", innerNotNull()); result.put("outerNodeName", outerNodeName()); return result; } @@ -169,6 +170,7 @@ aspect GenerationToYaml { // attributes result.put("bothVisible", bothVisible()); result.put("innerNodeName", innerNodeName()); + result.put("innerNotNull", innerNotNull()); return result; } @@ -194,6 +196,7 @@ aspect GenerationToYaml { // attributes result.put("bothVisible", bothVisible()); result.put("innerNodeName", innerNodeName()); + result.put("innerNotNull", innerNotNull()); result.put("outerNodeName", outerNodeName()); result.put("label", label()); return result; diff --git a/dumpAst/src/main/jastadd/Navigation.jrag b/dumpAst/src/main/jastadd/Navigation.jrag index 656556f4f495fab814ed2c34e265341467d87746..dc4ce9a3e857777d7305d07f48a436fb18c0bfc7 100644 --- a/dumpAst/src/main/jastadd/Navigation.jrag +++ b/dumpAst/src/main/jastadd/Navigation.jrag @@ -14,6 +14,10 @@ aspect Navigation { // --- printConfig --- inh PrintConfig BuildConfig.printConfig(); + inh PrintConfig DumpNode.printConfig(); + inh PrintConfig DumpNormalRelation.printConfig(); + inh PrintConfig InnerRelationDumpNode.printConfig(); + inh PrintConfig DumpReferenceToken.printConfig(); eq DumpAst.getChild().printConfig() = getPrintConfig(); // --- containingDumpNode --- @@ -81,6 +85,11 @@ aspect Navigation { return result; } + // --- innerNotNull --- + syn boolean DumpNormalRelation.innerNotNull() = !printConfig().getRelationWithRank() && getDumpNode() != null && getDumpNode().getObject() != null; + syn boolean DumpReferenceToken.innerNotNull() = !printConfig().getRelationWithRank() && getValue() != null && getValue().getObject() != null; + syn boolean InnerRelationDumpNode.innerNotNull() = !printConfig().getRelationWithRank() && getDumpNode() != null && getDumpNode().getObject() != null; + // === Method naviagtion === coll java.util.List<SingleChildMethod> ClassAnalysisResult.singleChildMethods() [new java.util.ArrayList<>()] root ClassAnalysisResult; SingleChildMethod contributes this to ClassAnalysisResult.singleChildMethods(); diff --git a/dumpAst/src/main/java/de/tudresden/inf/st/jastadd/dumpAst/ast/DumpBuilder.java b/dumpAst/src/main/java/de/tudresden/inf/st/jastadd/dumpAst/ast/DumpBuilder.java index 87466ee2adb6dbd79d7f97dd682f82c6f6f5461f..424b05a3c63b238da88ff8d58b1c896f48e5d8a4 100644 --- a/dumpAst/src/main/java/de/tudresden/inf/st/jastadd/dumpAst/ast/DumpBuilder.java +++ b/dumpAst/src/main/java/de/tudresden/inf/st/jastadd/dumpAst/ast/DumpBuilder.java @@ -80,6 +80,15 @@ public class DumpBuilder { return this; } + /** + * Let all relations (and reference attributes) influence layouting of nodes (disabled by default). + * @return this + */ + public DumpBuilder enableRelationWithRank() { + printConfig.setRelationWithRank(true); + return this; + } + // --- Types --- /** diff --git a/dumpAst/src/main/resources/dumpAst.mustache b/dumpAst/src/main/resources/dumpAst.mustache index 051cd8c7aa42b40c95aad024a87966aeb955f76d..da993c1d4d995ea2f8b15f4129207be3bc14d08a 100644 --- a/dumpAst/src/main/resources/dumpAst.mustache +++ b/dumpAst/src/main/resources/dumpAst.mustache @@ -40,13 +40,13 @@ object "{{{labelAndTextColor}}}" as {{{name}}} {{{stereotypeList}}} {{#backgroun {{#isList}} {{#InnerRelationDumpNode}} {{#bothVisible}} -{{{outerNodeName}}} .{{#computed}}[#{{{computedColor}}}]{{/computed}}.> {{{innerNodeName}}} : {{{label}}} +{{{outerNodeName}}} .[#black{{#computed}},#{{{computedColor}}}{{/computed}}{{#innerNotNull}},norank{{/innerNotNull}}].> {{{innerNodeName}}} : {{{label}}} {{/bothVisible}} {{/InnerRelationDumpNode}} {{/isList}} {{^isList}} {{^isDumpValueToken}} -{{{outerNodeName}}} .{{#computed}}[#{{{computedColor}}}]{{/computed}}.> {{{innerNodeName}}} : {{{label}}} +{{{outerNodeName}}} .[#black{{#computed}},#{{{computedColor}}}{{/computed}}{{#innerNotNull}},norank{{/innerNotNull}}].> {{{innerNodeName}}} : {{{label}}} {{/isDumpValueToken}} {{/isList}} {{/invisible}} @@ -69,13 +69,13 @@ object "{{{labelAndTextColor}}}" as {{{name}}} {{{stereotypeList}}} {{#backgroun {{#isList}} {{#InnerRelationDumpNode}} {{#bothVisible}} -{{{outerNodeName}}} {{#bidirectional}}<{{/bidirectional}}--> {{{innerNodeName}}} : {{{label}}} +{{{outerNodeName}}} {{#bidirectional}}<{{/bidirectional}}-{{#innerNotNull}}[norank]{{/innerNotNull}}-> {{{innerNodeName}}} : {{{label}}} {{/bothVisible}} {{/InnerRelationDumpNode}} {{/isList}} {{^isList}} {{#bothVisible}} -{{{outerNodeName}}} {{#bidirectional}}<{{/bidirectional}}--> {{{innerNodeName}}} : {{{label}}} +{{{outerNodeName}}} {{#bidirectional}}<{{/bidirectional}}-{{#innerNotNull}}[norank]{{/innerNotNull}}-> {{{innerNodeName}}} : {{{label}}} {{/bothVisible}} {{/isList}} {{/DumpRelations}} diff --git a/dumpAst/src/main/resources/dumpAstVersion.properties b/dumpAst/src/main/resources/dumpAstVersion.properties index bdaf3608801384e2c166884daa6df52e0dee9922..eb7274f1cdbf0a84cef1c2fc0c0c80b57ed9ce1f 100644 --- a/dumpAst/src/main/resources/dumpAstVersion.properties +++ b/dumpAst/src/main/resources/dumpAstVersion.properties @@ -1,2 +1,2 @@ -#Mon Jun 13 18:33:49 CEST 2022 -version=1.0.3 +#Tue Jun 21 14:31:38 CEST 2022 +version=1.0.4 diff --git a/featureTest/.gitignore b/featureTest/.gitignore index 7609b2344767a4c3fd8857201dac2c4d1dff200c..464bb11e342becdcd6a5d6dde4a764c4ea13111a 100644 --- a/featureTest/.gitignore +++ b/featureTest/.gitignore @@ -5,3 +5,4 @@ out/ *.class /featureTest.png /featureTest.yml +/featureTest.puml diff --git a/featureTest/src/main/java/de/tudresden/inf/st/jastadd/featureTest/FeatureTestMain.java b/featureTest/src/main/java/de/tudresden/inf/st/jastadd/featureTest/FeatureTestMain.java index 1a8177de6d48e67885d1ed73f0e879018d7289c5..eb1cb8c0b87423fa9f670efb4dc3e40188d4fd00 100644 --- a/featureTest/src/main/java/de/tudresden/inf/st/jastadd/featureTest/FeatureTestMain.java +++ b/featureTest/src/main/java/de/tudresden/inf/st/jastadd/featureTest/FeatureTestMain.java @@ -46,13 +46,16 @@ public class FeatureTestMain { .read(root) // .customPreamble("hide empty members") .skinParam(SkinParamBooleanSetting.Shadowing, false) +// .enableRelationWithRank() .includeAttributes("referenceAttr" , "collectBs" ) .includeNonterminalAttributes("Calculated") .includeNonterminalAttributes("AlsoCalculatedListNewSyntax") .dumpAsYaml(pathToYaml, true) - .dumpAsPNG(pathToPng); + .dumpAsPNG(pathToPng) + .dumpAsSource(Paths.get("featureTest.puml")) + ; } private void m() {