All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sourceforge.pmd.lang.dart.cpd.DartCpdLexer Maven / Gradle / Ivy

The newest version!
/*
 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
 */

package net.sourceforge.pmd.lang.dart.cpd;

import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.Lexer;

import net.sourceforge.pmd.cpd.impl.AntlrCpdLexer;
import net.sourceforge.pmd.cpd.impl.AntlrTokenFilter;
import net.sourceforge.pmd.cpd.impl.BaseTokenFilter;
import net.sourceforge.pmd.lang.TokenManager;
import net.sourceforge.pmd.lang.ast.impl.antlr4.AntlrToken;
import net.sourceforge.pmd.lang.dart.ast.DartLexer;

/**
 * The Dart Tokenizer
 *
 * 

Note: This class has been called DartTokenizer in PMD 6

. */ public class DartCpdLexer extends AntlrCpdLexer { @Override protected Lexer getLexerForSource(CharStream charStream) { return new DartLexer(charStream); } @Override protected TokenManager filterTokenStream(TokenManager tokenManager) { return new DartTokenFilter(tokenManager); } /** * The {@link DartTokenFilter} extends the {@link AntlrTokenFilter} to discard * Dart-specific tokens. *

* By default, it discards package and import statements, and * enables comment-based CPD suppression. *

*/ private static class DartTokenFilter extends BaseTokenFilter { private boolean discardingLibraryAndImport = false; private boolean discardingNL = false; private boolean discardingSemicolon = false; /* default */ DartTokenFilter(final TokenManager tokenManager) { super(tokenManager); } @Override protected void analyzeToken(final AntlrToken currentToken) { skipLibraryAndImport(currentToken); skipNewLines(currentToken); skipSemicolons(currentToken); } private void skipLibraryAndImport(final AntlrToken currentToken) { final int type = currentToken.getKind(); if (type == DartLexer.LIBRARY || type == DartLexer.IMPORT) { discardingLibraryAndImport = true; } else if (discardingLibraryAndImport && (type == DartLexer.SEMICOLON || type == DartLexer.NEWLINE)) { discardingLibraryAndImport = false; } } private void skipNewLines(final AntlrToken currentToken) { discardingNL = currentToken.getKind() == DartLexer.NEWLINE; } private void skipSemicolons(final AntlrToken currentToken) { discardingSemicolon = currentToken.getKind() == DartLexer.SEMICOLON; } @Override protected boolean isLanguageSpecificDiscarding() { return discardingLibraryAndImport || discardingNL || discardingSemicolon; } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy