diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/BaseAntlrInnerNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/BaseAntlrInnerNode.java index aec3f91a37..7e53f88aff 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/BaseAntlrInnerNode.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/BaseAntlrInnerNode.java @@ -10,6 +10,7 @@ import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.RecognitionException; import org.antlr.v4.runtime.RuleContext; import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.ParseTreeListener; import org.antlr.v4.runtime.tree.ParseTreeVisitor; import org.antlr.v4.runtime.tree.RuleNode; @@ -138,6 +139,14 @@ public abstract class BaseAntlrInnerNode> extends BaseA return (AntlrToPmdParseTreeAdapter) super.getChild(i); } + @Override + public T addAnyChild(T t) { + assert t instanceof AntlrToPmdParseTreeAdapter; + BaseAntlrNode pmdNode = ((AntlrToPmdParseTreeAdapter) t).getPmdNode(); + pmdNode.setIndexInParent(getChildCount()); + return super.addAnyChild(t); + } + @Override public void setParent(RuleContext parent) { assert parent instanceof PmdAsAntlrInnerNode; diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/BaseAntlrNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/BaseAntlrNode.java index 1a0d5a90c9..cfa618c9dc 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/BaseAntlrNode.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/BaseAntlrNode.java @@ -64,6 +64,10 @@ public abstract class BaseAntlrNode, N e public abstract Token getLastAntlrToken(); + void setIndexInParent(int indexInParent) { + this.indexInParent = indexInParent; + } + @Override public N getParent() { return (N) asAntlrNode().getParent().getPmdNode(); diff --git a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/ast/testdata/BTree.txt b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/ast/testdata/BTree.txt index 970ddd7758..4914c8c7e6 100644 --- a/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/ast/testdata/BTree.txt +++ b/pmd-swift/src/test/resources/net/sourceforge/pmd/lang/swift/ast/testdata/BTree.txt @@ -1853,7 +1853,7 @@ | | | | | | | | +- BinaryOperator | | | | | | | | | +- Operator | | | | | | | | | +- OperatorHead - | | | | | | | | | +- T-133 + | | | | | | | | | +- T-double-amp | | | | | | | | +- PrefixExpression | | | | | | | | +- PostfixExpression | | | | | | | | +- PrimaryExpression @@ -2853,7 +2853,7 @@ | | | | | | | | +- PostfixOperator | | | | | | | | +- Operator | | | | | | | | +- OperatorHead - | | | | | | | | +- T-133 + | | | | | | | | +- T-double-amp | | | | | | | +- FunctionCallArgumentClause | | | | | | | +- T-lparen | | | | | | | +- FunctionCallArgumentList @@ -2877,7 +2877,7 @@ | | | | | | | | | +- BinaryOperator | | | | | | | | | | +- Operator | | | | | | | | | | +- OperatorHead - | | | | | | | | | | +- T-134 + | | | | | | | | | | +- T-double-pipe | | | | | | | | | +- PrefixExpression | | | | | | | | | +- PostfixExpression | | | | | | | | | +- PostfixExpression