diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/token/internal/BaseTokenFilter.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/token/internal/BaseTokenFilter.java index 7b7f11ca17..4baca41d37 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/token/internal/BaseTokenFilter.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/token/internal/BaseTokenFilter.java @@ -41,9 +41,9 @@ public abstract class BaseTokenFilter implements TokenFi currentToken = null; if (!unprocessedTokens.isEmpty()) { currentToken = unprocessedTokens.poll(); - return currentToken; + } else { + currentToken = (T) tokenManager.getNextToken(); } - currentToken = (T) tokenManager.getNextToken(); while (!shouldStopProcessing(currentToken)) { analyzeToken(currentToken); analyzeTokens(currentToken, remainingTokens); @@ -53,7 +53,11 @@ public abstract class BaseTokenFilter implements TokenFi return currentToken; } - currentToken = (T) tokenManager.getNextToken(); + if (!unprocessedTokens.isEmpty()) { + currentToken = unprocessedTokens.poll(); + } else { + currentToken = (T) tokenManager.getNextToken(); + } } return null; diff --git a/pmd-cs/src/test/java/net/sourceforge/pmd/cpd/CsTokenizerTest.java b/pmd-cs/src/test/java/net/sourceforge/pmd/cpd/CsTokenizerTest.java index ed87562537..e3fe714131 100644 --- a/pmd-cs/src/test/java/net/sourceforge/pmd/cpd/CsTokenizerTest.java +++ b/pmd-cs/src/test/java/net/sourceforge/pmd/cpd/CsTokenizerTest.java @@ -125,6 +125,17 @@ public class CsTokenizerTest { assertEquals(TokenEntry.EOF, tokens.getTokens().get(0)); } + @Test + public void testStatementsAfterUsingDirectivesAreNotIgnored() { + tokenizer.setIgnoreUsings(true); + tokenizer.tokenize(toSourceCode( + "using System;\n" + + "public class MyClass {\n" + + "}\n"), + tokens); + assertEquals(6, tokens.size()); + } + @Test public void testUsingStatementsAreNotIgnored() { tokenizer.setIgnoreUsings(true);