View Javadoc
1 /*** 2 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html 3 */ 4 package net.sourceforge.pmd.cpd; 5 6 import net.sourceforge.pmd.ast.JavaCharStream; 7 import net.sourceforge.pmd.ast.JavaParserTokenManager; 8 import net.sourceforge.pmd.ast.Token; 9 10 import java.io.StringReader; 11 12 public class JavaTokenizer implements Tokenizer { 13 14 public void tokenize(SourceCode tokens, Tokens tokenEntries) { 15 StringBuffer sb = tokens.getCodeBuffer(); 16 17 /* 18 I'm doing a sort of State pattern thing here where 19 this goes into "discarding" mode when it hits an import or package 20 keyword and goes back into "accumulate mode when it hits a semicolon. 21 This could probably be turned into some objects. 22 */ 23 JavaCharStream javaStream = new JavaCharStream(new StringReader(sb.toString())); 24 JavaParserTokenManager tokenMgr = new JavaParserTokenManager(javaStream); 25 Token currToken = tokenMgr.getNextToken(); 26 boolean discarding = false; 27 int count = 0; 28 while (currToken.image != "") { 29 if (currToken.image.equals("import") || currToken.image.equals("package")) { 30 discarding = true; 31 currToken = tokenMgr.getNextToken(); 32 continue; 33 } 34 35 if (discarding && currToken.image.equals(";")) { 36 discarding = false; 37 } 38 39 if (discarding) { 40 currToken = tokenMgr.getNextToken(); 41 continue; 42 } 43 44 if (!currToken.image.equals(";")) { 45 count++; 46 tokenEntries.add(new TokenEntry(currToken.image, tokens.getFileName(), currToken.beginLine)); 47 } 48 49 currToken = tokenMgr.getNextToken(); 50 } 51 tokenEntries.add(TokenEntry.getEOF()); 52 } 53 }

This page was automatically generated by Maven