From 5d278c049bb658502c107bf85029b322a72d045e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Wed, 15 Sep 2021 16:55:37 +0200 Subject: [PATCH] Fix compilation issues --- antlr4-wrapper.xml | 38 ++++++++++++++++++- .../ast/impl/antlr4/BaseAntlrInnerNode.java | 6 +++ pmd-kotlin/pom.xml | 2 +- .../sourceforge/pmd/lang/kotlin/ast/Kotlin.g4 | 23 ++++++++++- .../lang/kotlin/ast/KotlinNameDictionary.java | 24 ++++++++++++ .../pmd/lang/kotlin/ast/KotlinRootNode.java | 13 ++++--- .../pmd/lang/kotlin/ast/PmdKotlinParser.java | 11 +++--- 7 files changed, 102 insertions(+), 15 deletions(-) create mode 100644 pmd-kotlin/src/main/java/net/sourceforge/pmd/lang/kotlin/ast/KotlinNameDictionary.java diff --git a/antlr4-wrapper.xml b/antlr4-wrapper.xml index 2e4b617e27..7219dcf44d 100644 --- a/antlr4-wrapper.xml +++ b/antlr4-wrapper.xml @@ -31,9 +31,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -45,7 +81,7 @@ - + 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 5833547776..03c37ca247 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 @@ -88,6 +88,12 @@ public abstract class BaseAntlrInnerNode> extends BaseAnt return pmdWrapper != null ? pmdWrapper.asAntlrNode() : null; } + protected List getTokens(int kind) { + return children(BaseAntlrTerminalNode.class) + .filter(it -> it.getTokenKind() == kind) + .toList(BaseAntlrTerminalNode::asAntlrNode); + } + protected void copyFrom(BaseAntlrInnerNode other) { asAntlrNode().copyFrom(other.asAntlrNode()); } diff --git a/pmd-kotlin/pom.xml b/pmd-kotlin/pom.xml index c1b3e36220..d00109b502 100644 --- a/pmd-kotlin/pom.xml +++ b/pmd-kotlin/pom.xml @@ -36,7 +36,7 @@ - + diff --git a/pmd-kotlin/src/main/antlr4/net/sourceforge/pmd/lang/kotlin/ast/Kotlin.g4 b/pmd-kotlin/src/main/antlr4/net/sourceforge/pmd/lang/kotlin/ast/Kotlin.g4 index 5712a7f82d..885fb61b91 100644 --- a/pmd-kotlin/src/main/antlr4/net/sourceforge/pmd/lang/kotlin/ast/Kotlin.g4 +++ b/pmd-kotlin/src/main/antlr4/net/sourceforge/pmd/lang/kotlin/ast/Kotlin.g4 @@ -9,11 +9,30 @@ import net.sourceforge.pmd.lang.ast.impl.antlr4.*; import net.sourceforge.pmd.lang.ast.AstVisitor; } -options { tokenVocab = KotlinLexer; } +@parser::members { + + static final AntlrNameDictionary DICO = new KotlinNameDictionary(VOCABULARY, ruleNames); + + @Override + public KotlinTerminalNode createPmdTerminal(ParserRuleContext parent, Token t) { + return new KotlinTerminalNode(t); + } + + @Override + public KotlinErrorNode createPmdError(ParserRuleContext parent, Token t) { + return new KotlinErrorNode(t); + } +} + +options { + tokenVocab = KotlinLexer; + contextSuperClass = 'KotlinInnerNode'; + superClass = 'AntlrGeneratedParserBase'; +} // SECTION: general -kotlinFile +file : shebangLine? NL* fileAnnotation* packageHeader importList topLevelObject* EOF ; diff --git a/pmd-kotlin/src/main/java/net/sourceforge/pmd/lang/kotlin/ast/KotlinNameDictionary.java b/pmd-kotlin/src/main/java/net/sourceforge/pmd/lang/kotlin/ast/KotlinNameDictionary.java new file mode 100644 index 0000000000..387717bb53 --- /dev/null +++ b/pmd-kotlin/src/main/java/net/sourceforge/pmd/lang/kotlin/ast/KotlinNameDictionary.java @@ -0,0 +1,24 @@ +/* + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.kotlin.ast; + +import org.antlr.v4.runtime.Vocabulary; +import org.checkerframework.checker.nullness.qual.Nullable; + +import net.sourceforge.pmd.lang.ast.impl.antlr4.AntlrNameDictionary; + + +final class KotlinNameDictionary extends AntlrNameDictionary { + + KotlinNameDictionary(Vocabulary vocab, String[] ruleNames) { + super(vocab, ruleNames); + } + + @Override + protected @Nullable String nonAlphaNumName(String name) { + // todo + return super.nonAlphaNumName(name); + } +} diff --git a/pmd-kotlin/src/main/java/net/sourceforge/pmd/lang/kotlin/ast/KotlinRootNode.java b/pmd-kotlin/src/main/java/net/sourceforge/pmd/lang/kotlin/ast/KotlinRootNode.java index 3e2fd8f04e..bb62e02a20 100644 --- a/pmd-kotlin/src/main/java/net/sourceforge/pmd/lang/kotlin/ast/KotlinRootNode.java +++ b/pmd-kotlin/src/main/java/net/sourceforge/pmd/lang/kotlin/ast/KotlinRootNode.java @@ -4,28 +4,29 @@ package net.sourceforge.pmd.lang.kotlin.ast; +import org.antlr.v4.runtime.ParserRuleContext; + import net.sourceforge.pmd.lang.ast.AstInfo; import net.sourceforge.pmd.lang.ast.Parser.ParserTask; import net.sourceforge.pmd.lang.ast.RootNode; -import net.sourceforge.pmd.lang.kotlin.ast.KotlinParser.KtTopLevel; -import org.antlr.v4.runtime.ParserRuleContext; +import net.sourceforge.pmd.lang.kotlin.ast.KotlinParser.KtFile; // package private base class abstract class KotlinRootNode extends KotlinInnerNode implements RootNode { - private AstInfo astInfo; + private AstInfo astInfo; KotlinRootNode(ParserRuleContext parent, int invokingStateNumber) { super(parent, invokingStateNumber); } @Override - public AstInfo getAstInfo() { + public AstInfo getAstInfo() { return astInfo; } - KtTopLevel makeAstInfo(ParserTask task) { - KtTopLevel me = (KtTopLevel) this; + KtFile makeAstInfo(ParserTask task) { + KtFile me = (KtFile) this; this.astInfo = new AstInfo<>(task, me); return me; } diff --git a/pmd-kotlin/src/main/java/net/sourceforge/pmd/lang/kotlin/ast/PmdKotlinParser.java b/pmd-kotlin/src/main/java/net/sourceforge/pmd/lang/kotlin/ast/PmdKotlinParser.java index c789950765..234a95491f 100644 --- a/pmd-kotlin/src/main/java/net/sourceforge/pmd/lang/kotlin/ast/PmdKotlinParser.java +++ b/pmd-kotlin/src/main/java/net/sourceforge/pmd/lang/kotlin/ast/PmdKotlinParser.java @@ -4,21 +4,22 @@ package net.sourceforge.pmd.lang.kotlin.ast; -import net.sourceforge.pmd.lang.ast.impl.antlr4.AntlrBaseParser; -import net.sourceforge.pmd.lang.kotlin.ast.KotlinParser.KtTopLevel; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.Lexer; +import net.sourceforge.pmd.lang.ast.impl.antlr4.AntlrBaseParser; +import net.sourceforge.pmd.lang.kotlin.ast.KotlinParser.KtFile; + /** * Adapter for the KotlinParser. */ -public final class PmdKotlinParser extends AntlrBaseParser { +public final class PmdKotlinParser extends AntlrBaseParser { @Override - protected KtTopLevel parse(final Lexer lexer, ParserTask task) { + protected KtFile parse(final Lexer lexer, ParserTask task) { KotlinParser parser = new KotlinParser(new CommonTokenStream(lexer)); - return parser.topLevel().makeAstInfo(task); + return parser.file().makeAstInfo(task); } @Override