diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/internal/JavaCCTokenizer.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/internal/JavaCCTokenizer.java index 6cbbad4133..dc14dafa2f 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/internal/JavaCCTokenizer.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/internal/JavaCCTokenizer.java @@ -26,10 +26,10 @@ public abstract class JavaCCTokenizer implements Tokenizer { @SuppressWarnings("PMD.CloseResource") protected TokenManager getLexerForSource(SourceCode sourceCode) throws IOException, MalformedSourceException { TextDocument textDocument = TextDocument.create(CpdCompat.cpdCompat(sourceCode)); - return makeLexerImpl(CharStream.create(textDocument, newTokenDoc())); + return makeLexerImpl(CharStream.create(textDocument, tokenBehavior())); } - protected TokenDocumentBehavior newTokenDoc() { + protected TokenDocumentBehavior tokenBehavior() { return TokenDocumentBehavior.DEFAULT; } diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/javacc/JavaccTokenDocument.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/javacc/JavaccTokenDocument.java index 201720662b..76be813888 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/javacc/JavaccTokenDocument.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/javacc/JavaccTokenDocument.java @@ -11,6 +11,7 @@ import java.util.function.Function; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; +import net.sourceforge.pmd.cpd.internal.JavaCCTokenizer; import net.sourceforge.pmd.lang.ast.impl.TokenDocument; import net.sourceforge.pmd.lang.ast.impl.javacc.io.EscapeTranslator; import net.sourceforge.pmd.lang.ast.impl.javacc.io.MalformedSourceException; @@ -18,12 +19,14 @@ import net.sourceforge.pmd.util.document.TextDocument; /** * Token document for Javacc implementations. This is a helper object - * for generated token managers. + * for generated token managers. Note: the extension point is a custom + * implementation of {@link TokenDocumentBehavior}, see {@link JjtreeParserAdapter#tokenBehavior()}, + * {@link JavaCCTokenizer#tokenBehavior()} */ -public class JavaccTokenDocument extends TokenDocument { +public final class JavaccTokenDocument extends TokenDocument { private final TokenDocumentBehavior behavior; - final StringPool stringPool = new StringPool(); + private final StringPool stringPool = new StringPool(); private JavaccToken first; @@ -143,28 +146,10 @@ public class JavaccTokenDocument extends TokenDocument { } } - /** - * Returns true if the lexer should accumulate the image of MORE - * tokens into the StringBuilder jjimage. This is useless in our - * current implementations. The default returns false, which makes - * {@link CharStream#appendSuffix(StringBuilder, int)} a noop. - */ - public boolean useMarkSuffix() { + boolean useMarkSuffix() { return behavior.useMarkSuffix(); } - /** - * Translate the escapes of the source document. The default implementation - * does not perform any escaping. - * - * @param text Source doc - * - * @see EscapeTranslator - */ - protected TextDocument translate(TextDocument text) throws MalformedSourceException { - return behavior.translate(text); - } - /** * Open the document. This is only meant to be used by a Javacc-generated * parser. @@ -193,26 +178,18 @@ public class JavaccTokenDocument extends TokenDocument { return first.next; } - final String computeImage(JavaccToken t) { + String computeImage(JavaccToken t) { CharSequence imageCs = t.getImageCs(); if (imageCs instanceof String) { return (String) imageCs; } - return stringPool.toString(imageCs, isImagePooled(t)); - } - - protected boolean isImagePooled(JavaccToken t) { - return behavior.isImagePooled(t); + return stringPool.toString(imageCs, behavior.isImagePooled(t)); } /** - * Returns a string that describes the token kind. - * - * @param kind Kind of token - * - * @return A descriptive string + * @see TokenDocumentBehavior#describeKind(int) */ - public final @NonNull String describeKind(int kind) { + public @NonNull String describeKind(int kind) { return behavior.describeKind(kind); } diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/javacc/io/EscapeTranslator.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/javacc/io/EscapeTranslator.java index 1d7f46e158..90f929aa76 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/javacc/io/EscapeTranslator.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/impl/javacc/io/EscapeTranslator.java @@ -113,6 +113,7 @@ public abstract class EscapeTranslator implements AutoCloseable { return startOffsetInclusive; } + @Override public void close() { this.bufpos = -1; this.input = null; diff --git a/pmd-core/src/test/java/net/sourceforge/pmd/lang/ast/impl/javacc/io/JavaEscapeReaderTest.java b/pmd-core/src/test/java/net/sourceforge/pmd/lang/ast/impl/javacc/io/JavaEscapeReaderTest.java index a72f7e760c..8c9b803484 100644 --- a/pmd-core/src/test/java/net/sourceforge/pmd/lang/ast/impl/javacc/io/JavaEscapeReaderTest.java +++ b/pmd-core/src/test/java/net/sourceforge/pmd/lang/ast/impl/javacc/io/JavaEscapeReaderTest.java @@ -29,7 +29,7 @@ public class JavaEscapeReaderTest { String input = "abcdede"; try (TextDocument r = readString(input)) { - Assert.assertEquals(Chars.wrap(input),r.getText()); + Assert.assertEquals(Chars.wrap(input), r.getText()); } } @@ -38,7 +38,7 @@ public class JavaEscapeReaderTest { String input = "abc\\dede"; try (TextDocument r = readString(input)) { - Assert.assertEquals(Chars.wrap(input),r.getText()); + Assert.assertEquals(Chars.wrap(input), r.getText()); } } @@ -47,7 +47,7 @@ public class JavaEscapeReaderTest { String input = "abc\\\\\\dede"; try (TextDocument r = readString(input)) { - Assert.assertEquals(Chars.wrap(input),r.getText()); + Assert.assertEquals(Chars.wrap(input), r.getText()); } } diff --git a/pmd-cpp/src/main/java/net/sourceforge/pmd/cpd/CPPTokenizer.java b/pmd-cpp/src/main/java/net/sourceforge/pmd/cpd/CPPTokenizer.java index 3905f23f3a..fbb80a8f33 100644 --- a/pmd-cpp/src/main/java/net/sourceforge/pmd/cpd/CPPTokenizer.java +++ b/pmd-cpp/src/main/java/net/sourceforge/pmd/cpd/CPPTokenizer.java @@ -59,7 +59,7 @@ public class CPPTokenizer extends JavaCCTokenizer { @Override - protected TokenDocumentBehavior newTokenDoc() { + protected TokenDocumentBehavior tokenBehavior() { return new TokenDocumentBehavior(CppTokenKinds.TOKEN_NAMES) { @Override diff --git a/pmd-cpp/src/test/java/net/sourceforge/pmd/cpd/CppCharStreamTest.java b/pmd-cpp/src/test/java/net/sourceforge/pmd/cpd/CppCharStreamTest.java index 50d3c3c409..0101ea3b67 100644 --- a/pmd-cpp/src/test/java/net/sourceforge/pmd/cpd/CppCharStreamTest.java +++ b/pmd-cpp/src/test/java/net/sourceforge/pmd/cpd/CppCharStreamTest.java @@ -21,7 +21,7 @@ public class CppCharStreamTest { @NonNull public CharStream charStreamFor(String source) throws IOException { TextDocument textDoc = TextDocument.readOnlyString(source, TextFile.UNKNOWN_FILENAME, CpdCompat.dummyVersion()); - return CharStream.create(new CPPTokenizer().newTokenDoc(textDoc)); + return CharStream.create(textDoc, new CPPTokenizer().tokenBehavior()); } @Test diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/cpd/JavaTokenizer.java b/pmd-java/src/main/java/net/sourceforge/pmd/cpd/JavaTokenizer.java index 284bd05af5..39d1eb3699 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/cpd/JavaTokenizer.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/cpd/JavaTokenizer.java @@ -44,7 +44,7 @@ public class JavaTokenizer extends JavaCCTokenizer { } @Override - protected JavaccTokenDocument.TokenDocumentBehavior newTokenDoc() { + protected JavaccTokenDocument.TokenDocumentBehavior tokenBehavior() { return InternalApiBridge.javaTokenDoc(); } diff --git a/pmd-jsp/src/main/java/net/sourceforge/pmd/cpd/JSPTokenizer.java b/pmd-jsp/src/main/java/net/sourceforge/pmd/cpd/JSPTokenizer.java index 73b4f1fc35..c1dc624a56 100644 --- a/pmd-jsp/src/main/java/net/sourceforge/pmd/cpd/JSPTokenizer.java +++ b/pmd-jsp/src/main/java/net/sourceforge/pmd/cpd/JSPTokenizer.java @@ -23,7 +23,7 @@ public class JSPTokenizer extends JavaCCTokenizer { } @Override - protected JavaccTokenDocument.TokenDocumentBehavior newTokenDoc() { + protected JavaccTokenDocument.TokenDocumentBehavior tokenBehavior() { return JspParser.getTokenBehavior(); } diff --git a/pmd-plsql/src/main/ant/alljavacc.xml b/pmd-plsql/src/main/ant/alljavacc.xml deleted file mode 100644 index e33aef3418..0000000000 --- a/pmd-plsql/src/main/ant/alljavacc.xml +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - public class - - - - - - public class Token implements java.io.Serializable - - - - - - public Token specialToken; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/PLSQLParser.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/PLSQLParser.java index 6b7fc86d69..a9ebee6e09 100644 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/PLSQLParser.java +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/PLSQLParser.java @@ -4,13 +4,10 @@ package net.sourceforge.pmd.lang.plsql.ast; -import org.checkerframework.checker.nullness.qual.Nullable; - import net.sourceforge.pmd.lang.ast.ParseException; -import net.sourceforge.pmd.lang.ast.impl.javacc.JavaccTokenDocument; +import net.sourceforge.pmd.lang.ast.impl.javacc.CharStream; import net.sourceforge.pmd.lang.ast.impl.javacc.JavaccTokenDocument.TokenDocumentBehavior; import net.sourceforge.pmd.lang.ast.impl.javacc.JjtreeParserAdapter; -import net.sourceforge.pmd.lang.ast.impl.javacc.CharStream; public class PLSQLParser extends JjtreeParserAdapter { diff --git a/pmd-python/src/main/java/net/sourceforge/pmd/cpd/PythonTokenizer.java b/pmd-python/src/main/java/net/sourceforge/pmd/cpd/PythonTokenizer.java index bbd0f3c8bf..3ebcd5a7e1 100644 --- a/pmd-python/src/main/java/net/sourceforge/pmd/cpd/PythonTokenizer.java +++ b/pmd-python/src/main/java/net/sourceforge/pmd/cpd/PythonTokenizer.java @@ -32,7 +32,7 @@ public class PythonTokenizer extends JavaCCTokenizer { } @Override - protected JavaccTokenDocument.TokenDocumentBehavior newTokenDoc() { + protected JavaccTokenDocument.TokenDocumentBehavior tokenBehavior() { return TOKEN_BEHAVIOR; } diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/cpd/VfTokenizer.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/cpd/VfTokenizer.java index dfe4665c6a..8ec128ac17 100644 --- a/pmd-visualforce/src/main/java/net/sourceforge/pmd/cpd/VfTokenizer.java +++ b/pmd-visualforce/src/main/java/net/sourceforge/pmd/cpd/VfTokenizer.java @@ -25,7 +25,7 @@ public class VfTokenizer extends JavaCCTokenizer { } @Override - protected TokenDocumentBehavior newTokenDoc() { + protected TokenDocumentBehavior tokenBehavior() { return new JavaccTokenDocument.TokenDocumentBehavior(VfTokenKinds.TOKEN_NAMES, EscapeTranslator.translatorFor(JavaEscapeTranslator::new)); }