1 |
| |
2 |
| |
3 |
| |
4 |
| package net.sourceforge.pmd.renderers; |
5 |
| |
6 |
| import net.sourceforge.pmd.PMD; |
7 |
| import net.sourceforge.pmd.Report; |
8 |
| import net.sourceforge.pmd.IRuleViolation; |
9 |
| |
10 |
| import java.util.HashSet; |
11 |
| import java.util.Iterator; |
12 |
| import java.util.Set; |
13 |
| import java.util.StringTokenizer; |
14 |
| |
15 |
| public class IDEAJRenderer extends AbstractRenderer implements Renderer { |
16 |
| |
17 |
| private static class SourcePath { |
18 |
| |
19 |
| private Set paths = new HashSet(); |
20 |
| |
21 |
0
| public SourcePath(String sourcePathString) {
|
22 |
0
| for (StringTokenizer st = new StringTokenizer(sourcePathString, System.getProperty("path.separator")); st.hasMoreTokens();) {
|
23 |
0
| paths.add(st.nextToken());
|
24 |
| } |
25 |
| } |
26 |
| |
27 |
0
| public String clipPath(String fullFilename) {
|
28 |
0
| for (Iterator i = paths.iterator(); i.hasNext();) {
|
29 |
0
| String path = (String) i.next();
|
30 |
0
| if (fullFilename.startsWith(path)) {
|
31 |
0
| return fullFilename.substring(path.length() + 1);
|
32 |
| } |
33 |
| } |
34 |
0
| throw new RuntimeException("Couldn't find src path for " + fullFilename);
|
35 |
| } |
36 |
| } |
37 |
| |
38 |
| private String[] args; |
39 |
| |
40 |
1
| public IDEAJRenderer(String[] args) {
|
41 |
1
| this.args = args;
|
42 |
| } |
43 |
| |
44 |
0
| public String render(Report report) {
|
45 |
0
| if (args[4].equals(".method")) {
|
46 |
| |
47 |
0
| String sourcePath = args[3];
|
48 |
0
| return render(report, sourcePath);
|
49 |
| } |
50 |
| |
51 |
0
| String classAndMethodName = args[4];
|
52 |
0
| String singleFileName = args[5];
|
53 |
0
| return render(report, classAndMethodName, singleFileName);
|
54 |
| } |
55 |
| |
56 |
0
| private String render(Report report, String sourcePathString) {
|
57 |
0
| SourcePath sourcePath = new SourcePath(sourcePathString);
|
58 |
0
| StringBuffer buf = new StringBuffer();
|
59 |
0
| for (Iterator i = report.iterator(); i.hasNext();) {
|
60 |
0
| IRuleViolation rv = (IRuleViolation) i.next();
|
61 |
0
| buf.append(rv.getDescription() + PMD.EOL);
|
62 |
0
| buf.append(" at " + getFullyQualifiedClassName(rv.getFilename(), sourcePath) + ".method(" + getSimpleFileName(rv.getFilename()) + ":" + rv.getBeginLine() + ")" + PMD.EOL);
|
63 |
| } |
64 |
0
| return buf.toString();
|
65 |
| } |
66 |
| |
67 |
0
| private String render(Report report, String classAndMethod, String file) {
|
68 |
0
| StringBuffer buf = new StringBuffer();
|
69 |
0
| for (Iterator i = report.iterator(); i.hasNext();) {
|
70 |
0
| IRuleViolation rv = (IRuleViolation) i.next();
|
71 |
0
| buf.append(rv.getDescription() + PMD.EOL);
|
72 |
0
| buf.append(" at " + classAndMethod + "(" + file + ":" + rv.getBeginLine() + ")" + PMD.EOL);
|
73 |
| } |
74 |
0
| return buf.toString();
|
75 |
| } |
76 |
| |
77 |
0
| private String getFullyQualifiedClassName(String in, SourcePath sourcePath) {
|
78 |
0
| String classNameWithSlashes = sourcePath.clipPath(in);
|
79 |
0
| String className = classNameWithSlashes.replace(System.getProperty("file.separator").charAt(0), '.');
|
80 |
0
| return className.substring(0, className.length() - 5);
|
81 |
| } |
82 |
| |
83 |
0
| private String getSimpleFileName(String in) {
|
84 |
0
| return in.substring(in.lastIndexOf(System.getProperty("file.separator")) + 1);
|
85 |
| } |
86 |
| } |