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

This page was automatically generated by Maven