View Javadoc
1 package net.sourceforge.pmd.cpd; 2 3 import java.io.File; 4 import java.io.FileReader; 5 import java.io.IOException; 6 import java.util.HashMap; 7 import java.util.Iterator; 8 import java.util.List; 9 import java.util.Map; 10 11 public class CPD { 12 13 private Map source = new HashMap(); 14 private CPDListener listener = new CPDNullListener(); 15 private Tokens tokens = new Tokens(); 16 private int minimumTileSize; 17 private MatchAlgorithm matchAlgorithm; 18 private Language language; 19 20 public CPD(int minimumTileSize, Language language) { 21 this.minimumTileSize = minimumTileSize; 22 this.language = language; 23 } 24 25 public void setCpdListener(CPDListener cpdListener) { 26 this.listener = cpdListener; 27 } 28 29 public void go() { 30 matchAlgorithm = new MatchAlgorithm(source, tokens); 31 matchAlgorithm.setListener(listener); 32 matchAlgorithm.findMatches(minimumTileSize); 33 } 34 35 public Iterator getMatches() { 36 return matchAlgorithm.matches(); 37 } 38 39 public void add(File file) throws IOException { 40 add(1, file); 41 } 42 43 public void addAllInDirectory(String dir) throws IOException { 44 addDirectory(dir, false); 45 } 46 47 public void addRecursively(String dir) throws IOException { 48 addDirectory(dir, true); 49 } 50 51 public void add(List files) throws IOException { 52 for (Iterator i = files.iterator(); i.hasNext();) { 53 add(files.size(), (File) i.next()); 54 } 55 } 56 57 private void addDirectory(String dir, boolean recurse) throws IOException { 58 FileFinder finder = new FileFinder(); 59 add(finder.findFilesFrom(dir, language.getFileFilter(), recurse)); 60 } 61 62 private void add(int fileCount, File file) throws IOException { 63 listener.addedFile(fileCount, file); 64 SourceCode sourceCode = new SourceCode(file.getAbsolutePath()); 65 FileReader reader = new FileReader(file); 66 language.getTokenizer().tokenize(sourceCode, tokens, reader); 67 reader.close(); 68 source.put(sourceCode.getFileName(), sourceCode); 69 } 70 71 public static void main(String[] args) { 72 if (args.length >3 || args.length < 2) { 73 usage(); 74 System.exit(1); 75 } 76 77 try { 78 String lang = LanguageFactory.JAVA_KEY; 79 if (args.length == 3) { 80 lang = args[2]; 81 } 82 LanguageFactory f = new LanguageFactory(); 83 Language language = f.createLanguage(lang); 84 CPD cpd = new CPD(Integer.parseInt(args[0]), language); 85 cpd.addRecursively(args[1]); 86 long start = System.currentTimeMillis(); 87 cpd.go(); 88 long total = System.currentTimeMillis() - start; 89 System.out.println(new SimpleRenderer().render(cpd.getMatches())); 90 System.out.println("That took " + total + " milliseconds"); 91 } catch (Exception e) { 92 e.printStackTrace(); 93 } 94 } 95 96 private static void usage() { 97 System.out.println("Usage:"); 98 System.out.println(" java net.sourceforge.pmd.cpd.CPD <tile size> <directory> [<language>]"); 99 System.out.println("i.e: "); 100 System.out.println(" java net.sourceforge.pmd.cpd.CPD 100 c://jdk14//src//java "); 101 System.out.println("or: "); 102 System.out.println(" java net.sourceforge.pmd.cpd.CPD 100 c://apache//src// cpp"); 103 } 104 105 }

This page was automatically generated by Maven