View Javadoc
1 /* 2 * Created on 15/03/2003 3 * 4 * To change this generated comment go to 5 * Window>Preferences>Java>Code Generation>Code Template 6 */ 7 package net.sourceforge.pmd.rules; 8 9 import net.sourceforge.pmd.AbstractRule; 10 import net.sourceforge.pmd.RuleContext; 11 import net.sourceforge.pmd.ast.ASTCompilationUnit; 12 import net.sourceforge.pmd.ast.SimpleNode; 13 import net.sourceforge.pmd.jaxen.DocumentNavigator; 14 import org.jaxen.BaseXPath; 15 import org.jaxen.JaxenException; 16 import org.jaxen.XPath; 17 18 import java.io.PrintStream; 19 import java.io.PrintWriter; 20 import java.text.MessageFormat; 21 import java.util.Iterator; 22 23 /*** 24 * @author daniels 25 * 26 * To change this generated comment go to 27 * Window>Preferences>Java>Code Generation>Code Template 28 */ 29 public class XPathRule extends AbstractRule { 30 31 private XPath xpath; 32 33 public Object visit(ASTCompilationUnit node, Object data) { 34 try { 35 init(); 36 for (Iterator iter = xpath.selectNodes(node).iterator(); iter.hasNext();) { 37 SimpleNode actualNode = (SimpleNode) iter.next(); 38 RuleContext ctx = (RuleContext) data; 39 ctx.getReport().addRuleViolation(createRuleViolation(ctx, actualNode.getBeginLine(), getMessage())); 40 } 41 } catch (JaxenException ex) { 42 throwJaxenAsRuntime(ex); 43 } 44 return data; 45 } 46 47 private void init() throws JaxenException { 48 if(xpath == null) { 49 String path = getStringProperty("xpath"); 50 String subst = getStringProperty("subst"); 51 if(subst != null && subst.length() > 0) { 52 path = MessageFormat.format(path, new String[] {subst}); 53 } 54 xpath = new BaseXPath(path, new DocumentNavigator()); 55 } 56 } 57 58 private static void throwJaxenAsRuntime(final JaxenException ex) { 59 throw new RuntimeException() { 60 public void printStackTrace() { 61 super.printStackTrace(); 62 ex.printStackTrace(); 63 } 64 public void printStackTrace(PrintWriter writer) { 65 super.printStackTrace(writer); 66 ex.printStackTrace(writer); 67 } 68 public void printStackTrace(PrintStream stream) { 69 super.printStackTrace(stream); 70 ex.printStackTrace(stream); 71 } 72 public String getMessage() { 73 return super.getMessage() + ex.getMessage(); 74 } 75 }; 76 } 77 }

This page was automatically generated by Maven