SimpleRenderer xref

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.PMD;
7 import net.sourceforge.pmd.util.StringUtil;
8 
9 import java.util.Iterator;
10 
11 public class SimpleRenderer implements Renderer {
12 
13 	private String separator;
14 	private boolean trimLeadingWhitespace;
15 
16 	public static final String DEFAULT_SEPARATOR = "=====================================================================";
17 	
18 	public SimpleRenderer() {
19 		this(false);
20 	}
21 	
22 	public SimpleRenderer(boolean trimLeadingWhitespace) {
23 		this(DEFAULT_SEPARATOR);
24 this.trimLeadingWhitespace = trimLeadingWhitespace;
25 	}
26 	
27 	public SimpleRenderer(String theSeparator) {
28 		separator = theSeparator;
29 	}
30 	
31 	private void renderOn(StringBuilder rpt, Match match) {
32 		
33 rpt.append("Found a ").append(match.getLineCount()).append(" line (").append(match.getTokenCount()).append(" tokens) duplication in the following files: ").append(PMD.EOL);
34 
35 for (Iterator<TokenEntry> occurrences = match.iterator(); occurrences.hasNext();) {
36 TokenEntry mark = occurrences.next();
37 rpt.append("Starting at line ").append(mark.getBeginLine()).append(" of ").append(mark.getTokenSrcID()).append(PMD.EOL);
38 }
39 
40 rpt.append(PMD.EOL);	// add a line to separate the source from the desc above
41 
42 String source = match.getSourceCodeSlice();
43 
44 if (trimLeadingWhitespace) {
45 String[] lines = source.split("[" + PMD.EOL + "]");
46 	 int trimDepth = StringUtil.maxCommonLeadingWhitespaceForAll(lines);
47 	 if (trimDepth > 0) {
48 		 lines = StringUtil.trimStartOn(lines, trimDepth);
49 	 }
50 	 for (int i=0; i<lines.length; i++) {
51 		 rpt.append(lines[i]).append(PMD.EOL);
52 	 } 
53 	 return;
54 }
55 
56 rpt.append(source).append(PMD.EOL);
57 	}
58 	
59 	
60 public String render(Iterator<Match> matches) {
61 	
62 	StringBuilder rpt = new StringBuilder(300);
63 
64 if (matches.hasNext()) {
65 	renderOn(rpt, matches.next());
66 }
67 
68 Match match;
69 while (matches.hasNext()) {
70 match = matches.next();
71 rpt.append(separator).append(PMD.EOL);
72 renderOn(rpt, match);
73 
74 }
75 return rpt.toString();
76 }
77 }

AltStyle によって変換されたページ (->オリジナル) /