From 3c0bb45a60df28c49b8efaac8f2351edf12813c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Wed, 24 Jan 2018 16:52:42 +0100 Subject: [PATCH] Add getXPathNodeName to the Node interface A default implementation is available in AbstractNode to preserve compatibility with the previous way, which used Object.toString. Fixes #569 --- .../pmd/lang/apex/ast/AbstractApexNode.java | 7 +++++++ .../pmd/lang/apex/ast/DumpFacade.java | 2 +- .../pmd/lang/ast/AbstractNode.java | 21 ++++++++++++------- .../net/sourceforge/pmd/lang/ast/Node.java | 8 +++++++ .../lang/ast/xpath/AttributeAxisIterator.java | 2 +- .../pmd/lang/ast/xpath/DocumentNavigator.java | 2 +- .../pmd/lang/ast/xpath/saxon/ElementNode.java | 2 +- .../lang/rule/AbstractRuleChainVisitor.java | 2 +- .../lang/rule/xpath/JaxenXPathRuleQuery.java | 2 +- .../pmd/jaxen/MatchesFunctionTest.java | 6 ++++++ .../sourceforge/pmd/lang/ast/DummyNode.java | 5 +++++ .../pmd/lang/java/ast/AbstractJavaNode.java | 6 ++++++ .../pmd/lang/java/ast/DumpFacade.java | 2 +- .../pmd/lang/java/ast/FormalComment.java | 5 +++++ .../pmd/lang/java/ast/JavadocElement.java | 6 ++++++ .../pmd/lang/java/ast/MultiLineComment.java | 6 ++++++ .../pmd/lang/java/ast/SingleLineComment.java | 5 +++++ .../ast/AbstractEcmascriptNode.java | 6 ++++++ .../pmd/lang/ecmascript/ast/DumpFacade.java | 2 +- .../pmd/lang/jsp/ast/AbstractJspNode.java | 8 ++++++- .../pmd/lang/jsp/ast/DumpFacade.java | 2 +- .../pmd/lang/plsql/ast/AbstractPLSQLNode.java | 8 ++++++- .../pmd/lang/plsql/ast/DumpFacade.java | 2 +- .../pmd/test/lang/ast/DummyNode.java | 6 ++++++ .../pmd/lang/vf/ast/AbstractVFNode.java | 8 ++++++- .../pmd/lang/vf/ast/DumpFacade.java | 2 +- .../pmd/lang/vm/ast/AbstractVmNode.java | 8 ++++++- .../pmd/lang/xml/ast/DumpFacade.java | 2 +- .../xml/ast/XmlNodeInvocationHandler.java | 9 ++++---- 29 files changed, 124 insertions(+), 28 deletions(-) diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/AbstractApexNode.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/AbstractApexNode.java index 41c18c0d7e..ccc6d05e99 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/AbstractApexNode.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/AbstractApexNode.java @@ -132,9 +132,16 @@ public abstract class AbstractApexNode extends AbstractNode i @Override public String toString() { + return getXPathNodeName(); + } + + + @Override + public final String getXPathNodeName() { return this.getClass().getSimpleName().replaceFirst("^AST", ""); } + public String getLocation() { if (hasRealLoc()) { return String.valueOf(node.getLoc()); diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/DumpFacade.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/DumpFacade.java index acaf2813b9..f4b0e4efb9 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/DumpFacade.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ast/DumpFacade.java @@ -49,7 +49,7 @@ public class DumpFacade { writer.print(prefix); // 2) JJT Name of the Node - writer.print(node.toString()); + writer.print(node.getXPathNodeName()); // // If there are any additional details, then: diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java index 24c1fe1ffd..8a0c748660 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/AbstractNode.java @@ -114,13 +114,6 @@ public abstract class AbstractNode implements Node { return id; } - /** - * Subclasses should implement this method to return a name usable with - * XPathRule for evaluating Element Names. - */ - @Override - public abstract String toString(); - @Override public String getImage() { return image; @@ -443,4 +436,18 @@ public abstract class AbstractNode implements Node { } } } + + + /** + * {@inheritDoc} + * + *

This default implementation adds compatibility with the previous + * way to get the xpath node name, which used {@link Object#toString()}. + * + *

Please override it. It may be removed in a future major version. + */ + @Override + public String getXPathNodeName() { + return toString(); + } } diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/Node.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/Node.java index f2dda9291c..ee43cf4f20 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/Node.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/Node.java @@ -281,4 +281,12 @@ public interface Node { * The index of the child to be removed */ void removeChildAtIndex(int childIndex); + + + /** + * Gets the name of the node that is used to match it with XPath queries. + * + * @return The XPath node name + */ + String getXPathNodeName(); } diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/xpath/AttributeAxisIterator.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/xpath/AttributeAxisIterator.java index 3c4cb72094..570631d35a 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/xpath/AttributeAxisIterator.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/xpath/AttributeAxisIterator.java @@ -105,7 +105,7 @@ public class AttributeAxisIterator implements Iterator { = new HashSet<>(Arrays.>asList(Integer.TYPE, Boolean.TYPE, Double.TYPE, String.class, Long.TYPE, Character.TYPE, Float.TYPE)); private static final Set FILTERED_OUT_NAMES - = new HashSet<>(Arrays.asList("toString", "getClass", "getTypeNameNode", "hashCode", "getImportedNameNode", "getScope")); + = new HashSet<>(Arrays.asList("toString", "getClass", "getXPathNodeName", "getTypeNameNode", "hashCode", "getImportedNameNode", "getScope")); protected boolean isAttributeAccessor(Method method) { String methodName = method.getName(); diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/xpath/DocumentNavigator.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/xpath/DocumentNavigator.java index 3adf8ea3e5..f56743ddb4 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/xpath/DocumentNavigator.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/xpath/DocumentNavigator.java @@ -48,7 +48,7 @@ public class DocumentNavigator extends DefaultNavigator { @Override public String getElementName(Object node) { - return node.toString(); + return ((Node) node).getXPathNodeName(); } @Override diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/xpath/saxon/ElementNode.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/xpath/saxon/ElementNode.java index dc407538a1..73b4dbf606 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/xpath/saxon/ElementNode.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/xpath/saxon/ElementNode.java @@ -83,7 +83,7 @@ public class ElementNode extends AbstractNodeInfo { @Override public String getLocalPart() { - return node.toString(); + return node.getXPathNodeName(); } @Override diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/rule/AbstractRuleChainVisitor.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/rule/AbstractRuleChainVisitor.java index a95592cc24..729273e883 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/rule/AbstractRuleChainVisitor.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/rule/AbstractRuleChainVisitor.java @@ -112,7 +112,7 @@ public abstract class AbstractRuleChainVisitor implements RuleChainVisitor { * Index a single node for visitation by rules. */ protected void indexNode(Node node) { - List nodes = nodeNameToNodes.get(node.toString()); + List nodes = nodeNameToNodes.get(node.getXPathNodeName()); if (nodes != null) { nodes.add(node); } diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/rule/xpath/JaxenXPathRuleQuery.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/rule/xpath/JaxenXPathRuleQuery.java index 1faf947042..06aef08e0e 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/rule/xpath/JaxenXPathRuleQuery.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/rule/xpath/JaxenXPathRuleQuery.java @@ -70,7 +70,7 @@ public class JaxenXPathRuleQuery extends AbstractXPathRuleQuery { try { initializeXPathExpression( data.getLanguageVersion().getLanguageVersionHandler().getXPathHandler().getNavigator()); - List xpaths = nodeNameToXPaths.get(node.toString()); + List xpaths = nodeNameToXPaths.get(node.getXPathNodeName()); if (xpaths == null) { xpaths = nodeNameToXPaths.get(AST_ROOT); } diff --git a/pmd-core/src/test/java/net/sourceforge/pmd/jaxen/MatchesFunctionTest.java b/pmd-core/src/test/java/net/sourceforge/pmd/jaxen/MatchesFunctionTest.java index f5dfd14f05..5bbedef6df 100644 --- a/pmd-core/src/test/java/net/sourceforge/pmd/jaxen/MatchesFunctionTest.java +++ b/pmd-core/src/test/java/net/sourceforge/pmd/jaxen/MatchesFunctionTest.java @@ -38,6 +38,12 @@ public class MatchesFunctionTest { public String getClassName() { return className; } + + + @Override + public String getXPathNodeName() { + return "MyNode"; + } } @Test diff --git a/pmd-core/src/test/java/net/sourceforge/pmd/lang/ast/DummyNode.java b/pmd-core/src/test/java/net/sourceforge/pmd/lang/ast/DummyNode.java index 3043df1f84..c17f306145 100644 --- a/pmd-core/src/test/java/net/sourceforge/pmd/lang/ast/DummyNode.java +++ b/pmd-core/src/test/java/net/sourceforge/pmd/lang/ast/DummyNode.java @@ -13,4 +13,9 @@ public class DummyNode extends AbstractNode { public String toString() { return "dummyNode"; } + + @Override + public String getXPathNodeName() { + return "dummyNode"; + } } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java index ab6130ea2f..ba96042dac 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/AbstractJavaNode.java @@ -78,7 +78,13 @@ public abstract class AbstractJavaNode extends AbstractNode implements JavaNode return comment; } + @Override public String toString() { + return getXPathNodeName(); + } + + @Override + public final String getXPathNodeName() { return JavaParserTreeConstants.jjtNodeName[id]; } } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/DumpFacade.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/DumpFacade.java index d4306a08c7..ec158983da 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/DumpFacade.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/DumpFacade.java @@ -45,7 +45,7 @@ public class DumpFacade extends JavaParserVisitorAdapter { writer.print(prefix); // 2) JJT Name of the Node - writer.print(node.toString()); + writer.print(node.getXPathNodeName()); // // If there are any additional details, then: diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/FormalComment.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/FormalComment.java index 18542c0e5f..7e9b11ffc1 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/FormalComment.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/FormalComment.java @@ -10,4 +10,9 @@ public class FormalComment extends Comment { super(t); } + + @Override + public String getXPathNodeName() { + return "FormalComment"; + } } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavadocElement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavadocElement.java index 4ea05c2193..e795daca6d 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavadocElement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/JavadocElement.java @@ -23,6 +23,12 @@ public class JavadocElement extends AbstractNode { @Override public String toString() { + return getXPathNodeName(); + } + + + @Override + public String getXPathNodeName() { return tag.label + " : " + tag.description; } } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/MultiLineComment.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/MultiLineComment.java index 5f447ca400..99302ed5bf 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/MultiLineComment.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/MultiLineComment.java @@ -10,4 +10,10 @@ public class MultiLineComment extends Comment { super(t); } + + @Override + public String getXPathNodeName() { + return "MultiLineComment"; + } + } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/SingleLineComment.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/SingleLineComment.java index ef4646510f..2c730bb08d 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/SingleLineComment.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/SingleLineComment.java @@ -10,4 +10,9 @@ public class SingleLineComment extends Comment { super(t); } + + @Override + public String getXPathNodeName() { + return "SingleLineComment"; + } } diff --git a/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/ast/AbstractEcmascriptNode.java b/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/ast/AbstractEcmascriptNode.java index 3d34c7d356..aade523031 100644 --- a/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/ast/AbstractEcmascriptNode.java +++ b/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/ast/AbstractEcmascriptNode.java @@ -70,6 +70,12 @@ public abstract class AbstractEcmascriptNode extends Abstract @Override public String toString() { + return getXPathNodeName(); + } + + + @Override + public String getXPathNodeName() { return node.shortName(); } } diff --git a/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/ast/DumpFacade.java b/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/ast/DumpFacade.java index d9058d8e0a..4c2910248b 100644 --- a/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/ast/DumpFacade.java +++ b/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/ast/DumpFacade.java @@ -49,7 +49,7 @@ public class DumpFacade { writer.print(prefix); // 2) JJT Name of the Node - writer.print(node.toString()); + writer.print(node.getXPathNodeName()); // // If there are any additional details, then: diff --git a/pmd-jsp/src/main/java/net/sourceforge/pmd/lang/jsp/ast/AbstractJspNode.java b/pmd-jsp/src/main/java/net/sourceforge/pmd/lang/jsp/ast/AbstractJspNode.java index 6ddb35f76f..1e96610176 100644 --- a/pmd-jsp/src/main/java/net/sourceforge/pmd/lang/jsp/ast/AbstractJspNode.java +++ b/pmd-jsp/src/main/java/net/sourceforge/pmd/lang/jsp/ast/AbstractJspNode.java @@ -6,7 +6,7 @@ package net.sourceforge.pmd.lang.jsp.ast; import net.sourceforge.pmd.lang.ast.AbstractNode; -public class AbstractJspNode extends AbstractNode implements JspNode { +public abstract class AbstractJspNode extends AbstractNode implements JspNode { protected JspParser parser; @@ -57,6 +57,12 @@ public class AbstractJspNode extends AbstractNode implements JspNode { } public String toString() { + return getXPathNodeName(); + } + + + @Override + public String getXPathNodeName() { return JspParserTreeConstants.jjtNodeName[id]; } } diff --git a/pmd-jsp/src/main/java/net/sourceforge/pmd/lang/jsp/ast/DumpFacade.java b/pmd-jsp/src/main/java/net/sourceforge/pmd/lang/jsp/ast/DumpFacade.java index 0179275e95..e1381a9626 100644 --- a/pmd-jsp/src/main/java/net/sourceforge/pmd/lang/jsp/ast/DumpFacade.java +++ b/pmd-jsp/src/main/java/net/sourceforge/pmd/lang/jsp/ast/DumpFacade.java @@ -47,7 +47,7 @@ public class DumpFacade extends JspParserVisitorAdapter { writer.print(prefix); // 2) JJT Name of the Node - writer.print(node.toString()); + writer.print(node.getXPathNodeName()); // // If there are any additional details, then: diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/AbstractPLSQLNode.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/AbstractPLSQLNode.java index 16415788e9..a99e864437 100644 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/AbstractPLSQLNode.java +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/AbstractPLSQLNode.java @@ -64,6 +64,12 @@ public abstract class AbstractPLSQLNode extends net.sourceforge.pmd.lang.ast.Abs return data; } + + @Override + public String getXPathNodeName() { + return PLSQLParserTreeConstants.jjtNodeName[id]; + } + /* * You can override these two methods in subclasses of SimpleNode to * customize the way the node appears when the tree is dumped. If your @@ -72,7 +78,7 @@ public abstract class AbstractPLSQLNode extends net.sourceforge.pmd.lang.ast.Abs */ public String toString() { - return PLSQLParserTreeConstants.jjtNodeName[id]; + return getXPathNodeName(); } public String toString(String prefix) { diff --git a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/DumpFacade.java b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/DumpFacade.java index 4841521acc..d6be0486fe 100644 --- a/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/DumpFacade.java +++ b/pmd-plsql/src/main/java/net/sourceforge/pmd/lang/plsql/ast/DumpFacade.java @@ -45,7 +45,7 @@ public class DumpFacade extends PLSQLParserVisitorAdapter { writer.print(prefix); // 2) JJT Name of the Node - writer.print(node.toString()); + writer.print(node.getXPathNodeName()); // // If there are any additional details, then: diff --git a/pmd-test/src/main/java/net/sourceforge/pmd/test/lang/ast/DummyNode.java b/pmd-test/src/main/java/net/sourceforge/pmd/test/lang/ast/DummyNode.java index c6f67a7d9b..42136ddca5 100644 --- a/pmd-test/src/main/java/net/sourceforge/pmd/test/lang/ast/DummyNode.java +++ b/pmd-test/src/main/java/net/sourceforge/pmd/test/lang/ast/DummyNode.java @@ -15,4 +15,10 @@ public class DummyNode extends AbstractNode { public String toString() { return "dummyNode"; } + + + @Override + public String getXPathNodeName() { + return "dummyNode"; + } } diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/AbstractVFNode.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/AbstractVFNode.java index 00b8c3d880..2719f75649 100644 --- a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/AbstractVFNode.java +++ b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/AbstractVFNode.java @@ -6,7 +6,7 @@ package net.sourceforge.pmd.lang.vf.ast; import net.sourceforge.pmd.lang.ast.AbstractNode; -public class AbstractVFNode extends AbstractNode implements VfNode { +public abstract class AbstractVFNode extends AbstractNode implements VfNode { protected VfParser parser; @@ -57,6 +57,12 @@ public class AbstractVFNode extends AbstractNode implements VfNode { } public String toString() { + return getXPathNodeName(); + } + + + @Override + public String getXPathNodeName() { return VfParserTreeConstants.jjtNodeName[id]; } } diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/DumpFacade.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/DumpFacade.java index 8f37a4d67f..704ae8e1a3 100644 --- a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/DumpFacade.java +++ b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/DumpFacade.java @@ -47,7 +47,7 @@ public class DumpFacade extends VfParserVisitorAdapter { writer.print(prefix); // 2) JJT Name of the Node - writer.print(node.toString()); + writer.print(node.getXPathNodeName()); // // If there are any additional details, then: diff --git a/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/AbstractVmNode.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/AbstractVmNode.java index f877d2a973..ac8f7be506 100644 --- a/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/AbstractVmNode.java +++ b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/AbstractVmNode.java @@ -121,6 +121,12 @@ public class AbstractVmNode extends AbstractNode implements VmNode { return data; } + + @Override + public String getXPathNodeName() { + return VmParserTreeConstants.jjtNodeName[id]; + } + /* * You can override these two methods in subclasses of SimpleNode to * customize the way the node appears when the tree is dumped. If your @@ -129,7 +135,7 @@ public class AbstractVmNode extends AbstractNode implements VmNode { */ public String toString() { - return VmParserTreeConstants.jjtNodeName[id]; + return getXPathNodeName(); } /** diff --git a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/ast/DumpFacade.java b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/ast/DumpFacade.java index 0d224c9b83..888995fe9b 100644 --- a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/ast/DumpFacade.java +++ b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/ast/DumpFacade.java @@ -51,7 +51,7 @@ public class DumpFacade { writer.print(prefix); // 2) JJT Name of the Node - writer.print(node.toString()); + writer.print(node.getXPathNodeName()); // // If there are any additional details, then: diff --git a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/ast/XmlNodeInvocationHandler.java b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/ast/XmlNodeInvocationHandler.java index 8ab5dc8115..ff15670428 100644 --- a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/ast/XmlNodeInvocationHandler.java +++ b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/ast/XmlNodeInvocationHandler.java @@ -121,17 +121,16 @@ public class XmlNodeInvocationHandler implements InvocationHandler { return null; } else if ("isFindBoundary".equals(method.getName())) { return false; + } else if ("getXPathNodeName".equals(method.getName())) { + return node.getNodeName().replace("#", ""); } throw new UnsupportedOperationException("Method not supported for XmlNode: " + method); } else { if ("toString".equals(method.getName())) { - String s = node.getNodeName(); - s = s.replace("#", ""); - return s; + return node.getNodeName().replace("#", ""); } // Delegate method - Object result = method.invoke(node, args); - return result; + return method.invoke(node, args); } }