From a92013fafe2e85a13de067405167281c90ed1999 Mon Sep 17 00:00:00 2001 From: rschoene <rene.schoene@tu-dresden.de> Date: Thu, 6 Oct 2022 09:56:51 +0200 Subject: [PATCH] 2.0.2 - keep original indices of children when filtered (untested) --- dumpAst.base/src/main/jastadd/DumpAst.relast | 4 ++-- dumpAst.base/src/main/jastadd/Printing.jrag | 9 +++++++-- dumpAst.base/src/main/jastadd/TemplateContext.jrag | 2 +- dumpAst.base/src/main/jastadd/Transform.jadd | 9 +++++++-- .../inf/st/jastadd/featureTest/FeatureTestMain.java | 11 +++++++---- 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/dumpAst.base/src/main/jastadd/DumpAst.relast b/dumpAst.base/src/main/jastadd/DumpAst.relast index fcfd923..bca6fd7 100644 --- a/dumpAst.base/src/main/jastadd/DumpAst.relast +++ b/dumpAst.base/src/main/jastadd/DumpAst.relast @@ -5,9 +5,9 @@ DumpNode ::= DumpChildNode* DumpToken* DumpRelation* <Name> <Label> <BackgroundColor> <TextColor> <Object:Object> <Invisible:boolean> <Computed:boolean> <ManualStereotypes> /InvisiblePath/ ; -InnerDumpNode ; +InnerDumpNode ::= <OriginalIndex:int>; rel InnerDumpNode.DumpNode <-> DumpNode.ContainerOfInner ; -InnerRelationDumpNode; +InnerRelationDumpNode ::= <OriginalIndex:int>; rel InnerRelationDumpNode.DumpNode -> DumpNode ; // .ContainerOfInner* abstract DumpChildNode ::= <Name> <Computed:boolean> ; diff --git a/dumpAst.base/src/main/jastadd/Printing.jrag b/dumpAst.base/src/main/jastadd/Printing.jrag index f42e6fa..2d64f5f 100644 --- a/dumpAst.base/src/main/jastadd/Printing.jrag +++ b/dumpAst.base/src/main/jastadd/Printing.jrag @@ -25,10 +25,15 @@ aspect Printing { syn String DumpNode.label() = getLabel(); inh String InnerDumpNode.label(); inh String InnerRelationDumpNode.label(); - eq DumpListChildNode.getInnerDumpNode(int index).label() = label() + "[" + index + "]"; - eq DumpListRelation.getInnerRelationDumpNode(int index).label() = label() + "[" + index + "]"; + eq DumpListChildNode.getInnerDumpNode(int index).label() = label() + "[" + + chooseIndex(getInnerDumpNode(index).getOriginalIndex(), index) + "]"; + eq DumpListRelation.getInnerRelationDumpNode(int index).label() = label() + "[" + + chooseIndex(getInnerRelationDumpNode(index).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) { + return originalIndex != 0 ? originalIndex : inheritedIndex; + } // --- bothVisible --- boolean ASTNode.bothVisible(DumpNode one, DumpNode two) { diff --git a/dumpAst.base/src/main/jastadd/TemplateContext.jrag b/dumpAst.base/src/main/jastadd/TemplateContext.jrag index e8d5549..a1d09c4 100644 --- a/dumpAst.base/src/main/jastadd/TemplateContext.jrag +++ b/dumpAst.base/src/main/jastadd/TemplateContext.jrag @@ -26,7 +26,7 @@ aspect TemplateContext { syn InvisiblePath DumpNode.getInvisiblePath() { InvisiblePath result = new InvisiblePath(); for (DumpNode successor : reachableThroughInvisible()) { - result.addInnerRelationDumpNode(new InnerRelationDumpNode(successor)); + result.addInnerRelationDumpNode(new InnerRelationDumpNode().setDumpNode(successor)); } return result; } diff --git a/dumpAst.base/src/main/jastadd/Transform.jadd b/dumpAst.base/src/main/jastadd/Transform.jadd index 747a59b..bc8cfba 100644 --- a/dumpAst.base/src/main/jastadd/Transform.jadd +++ b/dumpAst.base/src/main/jastadd/Transform.jadd @@ -155,13 +155,15 @@ aspect Transform { listChild.setComputed(false); String childName = containmentMethod.getName(); listChild.setName(childName); + int index = -1; for (Object target : targetList) { + index++; if (!getBuildConfig().getIncludeChildMethod().shouldInclude(obj, target, childName)) { continue; } DumpNode targetNode = transform(tti, target, options.asNormal(false)); if (target != null && targetNode != null) { - listChild.addInnerDumpNode(new InnerDumpNode().setDumpNode(targetNode)); + listChild.addInnerDumpNode(new InnerDumpNode().setDumpNode(targetNode).setOriginalIndex(index)); } } if (listChild.getNumInnerDumpNode() > 0) { @@ -229,13 +231,16 @@ aspect Transform { Iterable<?> targetList = (Iterable<?>) otherMethod.getMethod().invoke(obj); DumpListRelation listRelation = new DumpListRelation(); listRelation.setName(otherMethod.getName()); + int index = -1; for (Object target : targetList) { + index++; if (!getBuildConfig().getIncludeRelationMethod().shouldInclude(obj, target, otherMethod.getName())) { continue; } DumpNode targetNode = transform(tti, target, options.asRelation()); if (target != null && targetNode != null) { - listRelation.addInnerRelationDumpNode(new InnerRelationDumpNode(targetNode)); + listRelation.addInnerRelationDumpNode(new InnerRelationDumpNode().setDumpNode(targetNode) + .setOriginalIndex(index)); } } if (listRelation.getNumInnerRelationDumpNode() > 0) { 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 5e758f9..dc47a4a 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 @@ -23,18 +23,18 @@ public class FeatureTestMain { A a = new A().setName("A2"); a.setB(new B().setName("B2.1")); // a.setMyC(new C().setName("C2.1")); -// B b1 = new B().setName("B3").setOtherValue("some long text"); + B b1 = new B().setName("B3").setOtherValue("some long text"); // C c = new C().setName("C4"); // c.setA(new A().setName("A4.1").setB(new B().setName("B4.1.1"))); // c.setRawReference(a); // b1.setOneA(a); -// B b2 = new B().setName("B5").setOtherValue("#ff00ff"); + B b2 = new B().setName("B5").setOtherValue("#ff00ff"); // C myC = new C().setName("C6"); // c.setA(new A().setName("A6.1").setB(new B().setName("B6.1.1"))); // a.setMyC(myC); root.setA(a); -// root.addB(b1); -// root.addB(b2); + root.addB(b1); + root.addB(b2); // root.setC(c); Path pathToYaml = Paths.get("featureTest.yml"); @@ -51,6 +51,9 @@ public class FeatureTestMain { if (parentNode instanceof A && ((A) parentNode).getName().equals("A2")) { return false; } + if (parentNode instanceof Root && childNode instanceof B) { + return !"B3".equals(((B) childNode).getName()); + } return !contextName.equals("MyC"); }) .includeRelationsWhen((sourceNode, targetNode, roleName) -> -- GitLab