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