From 164c1361a6722264d3110c526ea01f19198f2b26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Thu, 23 Apr 2020 21:24:54 +0200 Subject: [PATCH] Add supertype to swift nodes --- .../lang/ast/impl/antlr4/AntlrBaseNode.java | 19 ++++++------ .../sourceforge/pmd/lang/swift/ast/Swift.g4 | 2 +- .../pmd/lang/swift/ast/SwiftNode.java | 29 +++++++++++++++++++ 3 files changed, 40 insertions(+), 10 deletions(-) create mode 100644 pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/ast/SwiftNode.java diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/AntlrBaseNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/AntlrBaseNode.java index 5f6e3f52d7..5bd8555a05 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/AntlrBaseNode.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/antlr4/AntlrBaseNode.java @@ -5,19 +5,19 @@ package net.sourceforge.pmd.lang.ast.impl.antlr4; import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.tree.ParseTree; import net.sourceforge.pmd.util.DataMap; import net.sourceforge.pmd.util.DataMap.DataKey; -public abstract class AntlrBaseNode extends ParserRuleContext implements AntlrNode { +public abstract class AntlrBaseNode> extends ParserRuleContext implements AntlrNode { private final DataMap> userData = DataMap.newDataMap(); /** * Constructor required by {@link ParserRuleContext} */ - @SuppressWarnings("unused") - public AntlrBaseNode() { + protected AntlrBaseNode() { // Nothing to be done } @@ -27,8 +27,7 @@ public abstract class AntlrBaseNode extends ParserRuleContext implements AntlrNo * @param parent The parent * @param invokingStateNumber the invokingState defined by {@link org.antlr.v4.runtime.RuleContext} parent */ - @SuppressWarnings("unused") - public AntlrBaseNode(final ParserRuleContext parent, final int invokingStateNumber) { + protected AntlrBaseNode(final ParserRuleContext parent, final int invokingStateNumber) { super(parent, invokingStateNumber); } @@ -70,15 +69,17 @@ public abstract class AntlrBaseNode extends ParserRuleContext implements AntlrNo } @Override - public AntlrNode getChild(int i) { - return (AntlrNode) super.getChild(i); + public I getChild(int i) { + return cast(super.getChild(i)); } @Override - public AntlrBaseNode getParent() { - return (AntlrBaseNode) super.getParent(); + public I getParent() { + return cast(super.getParent()); } + protected abstract I cast(ParseTree o); + @Override public int getNumChildren() { return getChildCount(); diff --git a/pmd-swift/src/main/antlr4/net/sourceforge/pmd/lang/swift/ast/Swift.g4 b/pmd-swift/src/main/antlr4/net/sourceforge/pmd/lang/swift/ast/Swift.g4 index 62747999f4..9d67b97e8b 100644 --- a/pmd-swift/src/main/antlr4/net/sourceforge/pmd/lang/swift/ast/Swift.g4 +++ b/pmd-swift/src/main/antlr4/net/sourceforge/pmd/lang/swift/ast/Swift.g4 @@ -54,7 +54,7 @@ import net.sourceforge.pmd.lang.ast.impl.antlr4.*; } options { - contextSuperClass = AntlrBaseNode; + contextSuperClass = SwiftNode; superClass = PmdAntlrParserBase; } diff --git a/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/ast/SwiftNode.java b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/ast/SwiftNode.java new file mode 100644 index 0000000000..5055a17b4a --- /dev/null +++ b/pmd-swift/src/main/java/net/sourceforge/pmd/lang/swift/ast/SwiftNode.java @@ -0,0 +1,29 @@ +/* + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.swift.ast; + +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.tree.ParseTree; + +import net.sourceforge.pmd.lang.ast.impl.antlr4.AntlrBaseNode; + +/** + * Supertype of all swift nodes. + */ +public abstract class SwiftNode extends AntlrBaseNode { + + protected SwiftNode() { + super(); + } + + protected SwiftNode(final ParserRuleContext parent, final int invokingStateNumber) { + super(parent, invokingStateNumber); + } + + @Override + protected SwiftNode cast(ParseTree o) { + return (SwiftNode) o; + } +}