1 package net.sourceforge.pmd.util; 2 3 import net.sourceforge.pmd.*; 4 import net.sourceforge.pmd.rules.XPathRule; 5 6 import java.io.FileReader; 7 import java.util.Iterator; 8 9 /** 10 * To use this, do this: 11 * 12 * $ cat ~/tmp/Test.java 13 * package foo; 14 * public class Test { 15 * private int x; 16 * } 17 * $ java net.sourceforge.pmd.util.XPathTest -xpath "//FieldDeclaration" -filename "/home/tom/tmp/Test.java" 18 * Match at line 3 column 11; package name 'foo'; variable name 'x' 19 */ 20 public class XPathTest { 21 public static void main(String[] args) throws Exception { 22 String xpath; 23 if (args[0].equals("-xpath")) { 24 xpath = args[1]; 25 } else { 26 xpath = args[3]; 27 } 28 String filename; 29 if (args[0].equals("-file")) { 30 filename = args[1]; 31 } else { 32 filename = args[3]; 33 } 34 PMD pmd = new PMD(); 35 Rule rule = new XPathRule(); 36 rule.addProperty("xpath", xpath); 37 rule.setMessage("Got one!"); 38 RuleSet ruleSet = new RuleSet(); 39 ruleSet.addRule(rule); 40 41 Report report = new Report(); 42 RuleContext ctx = new RuleContext(); 43 ctx.setReport(report); 44 ctx.setSourceCodeFilename(filename); 45 46 pmd.processFile(new FileReader(filename), new RuleSets(ruleSet), ctx, SourceType.JAVA_15); 47 48 for (Iterator<IRuleViolation> i = report.iterator(); i.hasNext();) { 49 IRuleViolation rv = i.next(); 50 String res = "Match at line " + rv.getBeginLine() + " column " + rv.getBeginColumn(); 51 if (rv.getPackageName() != null && !rv.getPackageName().equals("")) { 52 res += "; package name '" + rv.getPackageName() + "'"; 53 } 54 if (rv.getMethodName() != null && !rv.getMethodName().equals("")) { 55 res += "; method name '" + rv.getMethodName() + "'"; 56 } 57 if (rv.getVariableName() != null && !rv.getVariableName().equals("")) { 58 res += "; variable name '" + rv.getVariableName() + "'"; 59 } 60 System.out.println(res); 61 } 62 } 63 }