1 package net.sourceforge.pmd.cli;
2
3 import java.io.File;
4 import java.io.FileReader;
5 import java.util.Iterator;
6
7 import net.sourceforge.pmd.PMD;
8 import net.sourceforge.pmd.PMDConfiguration;
9 import net.sourceforge.pmd.Rule;
10 import net.sourceforge.pmd.RuleContext;
11 import net.sourceforge.pmd.RuleSet;
12 import net.sourceforge.pmd.RuleSets;
13 import net.sourceforge.pmd.RuleViolation;
14 import net.sourceforge.pmd.SourceCodeProcessor;
15 import net.sourceforge.pmd.lang.Language;
16 import net.sourceforge.pmd.lang.rule.XPathRule;
17 import net.sourceforge.pmd.util.StringUtil;
18
19
20
21
22
23
24
25
26
27
28
29
30 public class XPathCLI {
31
32 public static void main(String[] args) throws Exception {
33
34 String xpath = args[0].equals("-xpath") ? args[1] : args[3];
35 String filename = args[0].equals("-file") ? args[1] : args[3];
36
37 Rule rule = new XPathRule(xpath);
38 rule.setMessage("Got one!");
39 RuleSet ruleSet = RuleSet.createFor("", rule);
40
41 RuleContext ctx = PMD.newRuleContext(filename, new File(filename));
42 ctx.setLanguageVersion(Language.JAVA.getDefaultVersion());
43
44 PMDConfiguration config = new PMDConfiguration();
45 config.setDefaultLanguageVersion(Language.JAVA.getDefaultVersion());
46
47 new SourceCodeProcessor(config).processSourceCode(new FileReader(filename), new RuleSets(ruleSet), ctx);
48
49 for (Iterator<RuleViolation> i = ctx.getReport().iterator(); i.hasNext();) {
50 RuleViolation rv = i.next();
51 StringBuilder sb = new StringBuilder("Match at line " + rv.getBeginLine() + " column " + rv.getBeginColumn());
52 if (StringUtil.isNotEmpty(rv.getPackageName())) {
53 sb.append("; package name '" + rv.getPackageName() + "'");
54 }
55 if (StringUtil.isNotEmpty(rv.getMethodName())) {
56 sb.append("; method name '" + rv.getMethodName() + "'");
57 }
58 if (StringUtil.isNotEmpty(rv.getVariableName())) {
59 sb.append("; variable name '" + rv.getVariableName() + "'");
60 }
61 System.out.println(sb.toString());
62 }
63 }
64 }