diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/token/AntlrToken.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/token/AntlrToken.java index 6df0fd1e50..476577e325 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/token/AntlrToken.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/token/AntlrToken.java @@ -71,4 +71,8 @@ public class AntlrToken implements GenericToken { public boolean isHidden() { return token.getChannel() == Lexer.HIDDEN; } + + public boolean isDefault() { + return token.getChannel() == Lexer.DEFAULT_TOKEN_CHANNEL; + } } diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/token/AntlrTokenFilter.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/token/AntlrTokenFilter.java index e1eee7b77b..f0f6d71e27 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/token/AntlrTokenFilter.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/token/AntlrTokenFilter.java @@ -14,8 +14,6 @@ import net.sourceforge.pmd.lang.antlr.AntlrTokenManager; */ public class AntlrTokenFilter extends BaseTokenFilter { - private boolean discardingHiddenTokens = false; - /** * Creates a new AntlrTokenFilter * @param tokenManager The token manager from which to retrieve tokens to be filtered @@ -28,18 +26,4 @@ public class AntlrTokenFilter extends BaseTokenFilter { protected boolean shouldStopProcessing(final AntlrToken currentToken) { return currentToken.getType() == EOF; } - - @Override - protected void analyzeToken(final AntlrToken currentToken) { - analyzeHiddenTokens(currentToken); - } - - @Override - protected boolean isLanguageSpecificDiscarding() { - return super.isLanguageSpecificDiscarding() || discardingHiddenTokens; - } - - private void analyzeHiddenTokens(final AntlrToken token) { - discardingHiddenTokens = token.isHidden(); - } } diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/token/BaseTokenFilter.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/token/BaseTokenFilter.java index 4be453b919..c5451fa9ed 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/token/BaseTokenFilter.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/token/BaseTokenFilter.java @@ -61,6 +61,17 @@ public abstract class BaseTokenFilter implements TokenFi } } + /** + * Extension point for subclasses to analyze all tokens (before filtering) + * and update internal status to decide on custom discard rules. + * + * @param currentToken The token to be analyzed + * @see #isLanguageSpecificDiscarding() + */ + protected void analyzeToken(final GenericToken currentToken) { + // noop + } + /** * Extension point for subclasses to indicate tokens are to be filtered. * @@ -78,13 +89,4 @@ public abstract class BaseTokenFilter implements TokenFi */ protected abstract boolean shouldStopProcessing(T currentToken); - /** - * Extension point for subclasses to analyze all tokens (before filtering) - * and update internal status to decide on custom discard rules. - * - * @param currentToken The token to be analyzed - * @see #isLanguageSpecificDiscarding() - */ - protected abstract void analyzeToken(T currentToken); - } diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/token/JavaCCTokenFilter.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/token/JavaCCTokenFilter.java index 3231e353e2..734b9fcff3 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/token/JavaCCTokenFilter.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/token/JavaCCTokenFilter.java @@ -25,9 +25,4 @@ public class JavaCCTokenFilter extends BaseTokenFilter { protected boolean shouldStopProcessing(final GenericToken currentToken) { return currentToken.getImage().isEmpty(); } - - @Override - protected void analyzeToken(final GenericToken currentToken) { - // noop - } } diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrTokenManager.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrTokenManager.java index 0bf95b3336..48434eca01 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrTokenManager.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/antlr/AntlrTokenManager.java @@ -34,6 +34,14 @@ public class AntlrTokenManager implements TokenManager { @Override public Object getNextToken() { + AntlrToken nextToken = getNextTokenFromAnyChannel(); + while (!nextToken.isDefault()) { + nextToken = getNextTokenFromAnyChannel(); + } + return nextToken; + } + + private AntlrToken getNextTokenFromAnyChannel() { final AntlrToken previousComment = previousToken != null && previousToken.isHidden() ? previousToken : null; final AntlrToken currentToken = new AntlrToken(lexer.nextToken(), previousComment); previousToken = currentToken; diff --git a/pmd-go/src/test/resources/net/sourceforge/pmd/cpd/hello.go b/pmd-go/src/test/resources/net/sourceforge/pmd/cpd/hello.go index 302c5a580a..a613af4286 100644 --- a/pmd-go/src/test/resources/net/sourceforge/pmd/cpd/hello.go +++ b/pmd-go/src/test/resources/net/sourceforge/pmd/cpd/hello.go @@ -26,4 +26,6 @@ import ( func main() { fmt.Println(stringutil.Reverse("!selpmaxe oG ,olleH")) -} \ No newline at end of file +} + +/* Comment */ \ No newline at end of file