From 6a3b332aee740f06b7e8968b4ef5d666ec6d1fa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Thu, 25 Jan 2018 03:02:44 +0100 Subject: [PATCH] Abstract toString into AbstractNode, deprecate the implementation Log that the default implementation will be removed --- .../pmd/lang/apex/ast/AbstractApexNode.java | 6 ++--- .../pmd/lang/ast/AbstractNode.java | 23 ++++++++++++++++++- .../pmd/jaxen/MatchesFunctionTest.java | 1 + .../sourceforge/pmd/lang/ast/DummyNode.java | 1 + .../pmd/lang/java/ast/AbstractJavaNode.java | 5 +--- .../pmd/lang/java/ast/Comment.java | 1 + .../pmd/lang/java/ast/JavadocElement.java | 5 +--- .../ast/AbstractEcmascriptNode.java | 5 +--- .../pmd/lang/jsp/ast/AbstractJspNode.java | 4 +--- .../pmd/lang/plsql/ast/AbstractPLSQLNode.java | 4 +--- .../pmd/test/lang/ast/DummyNode.java | 1 + .../pmd/lang/vf/ast/AbstractVFNode.java | 4 +--- .../pmd/lang/vm/ast/ASTDirective.java | 1 + .../pmd/lang/vm/ast/AbstractVmNode.java | 4 +--- 14 files changed, 36 insertions(+), 29 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 ccc6d05e99..54105b6cc6 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 @@ -130,14 +130,12 @@ public abstract class AbstractApexNode extends AbstractNode i } } - @Override - public String toString() { - return getXPathNodeName(); - } + @Override public final String getXPathNodeName() { + new ASTMapEntryNode(null).toString(); return this.getClass().getSimpleName().replaceFirst("^AST", ""); } 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 8a0c748660..e184690d74 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 @@ -7,7 +7,7 @@ package net.sourceforge.pmd.lang.ast; import java.util.ArrayList; import java.util.Iterator; import java.util.List; - +import java.util.logging.Logger; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -18,12 +18,16 @@ import org.jaxen.JaxenException; import org.w3c.dom.Document; import org.w3c.dom.Element; +import net.sourceforge.pmd.PMDVersion; import net.sourceforge.pmd.lang.ast.xpath.Attribute; import net.sourceforge.pmd.lang.ast.xpath.DocumentNavigator; import net.sourceforge.pmd.lang.dfa.DataFlowNode; public abstract class AbstractNode implements Node { + private static final Logger LOG = Logger.getLogger(AbstractNode.class.getName()); + + protected Node parent; protected Node[] children; protected int childIndex; @@ -448,6 +452,23 @@ public abstract class AbstractNode implements Node { */ @Override public String getXPathNodeName() { + LOG.warning("getXPathNodeName should be overriden in classes derived from AbstractNode. " + + "The implementation is provided for compatibility with existing implementors," + + "but could be declared abstract as soon as release " + PMDVersion.getNextMajorRelease() + + "."); return toString(); } + + + /** + * {@inheritDoc} + * + * @deprecated The equivalence between toString and a node's name could be broken as soon as release 7.0.0. + * Use getXPathNodeName for that purpose. The use for debugging purposes is not deprecated. + */ + @Deprecated + @Override + public String toString() { + return getXPathNodeName(); + } } 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 5bbedef6df..a39ffb58d6 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 @@ -26,6 +26,7 @@ public class MatchesFunctionTest { super(1); } + @Deprecated @Override public String toString() { return "MyNode"; 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 c17f306145..35e7a3e94a 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 @@ -9,6 +9,7 @@ public class DummyNode extends AbstractNode { super(id); } + @Deprecated @Override public String toString() { 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 ba96042dac..eb23f05577 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,10 +78,7 @@ public abstract class AbstractJavaNode extends AbstractNode implements JavaNode return comment; } - @Override - public String toString() { - return getXPathNodeName(); - } + @Override public final String getXPathNodeName() { diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/Comment.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/Comment.java index 26479840e2..a0343f1bc0 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/Comment.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/Comment.java @@ -23,6 +23,7 @@ public abstract class Comment extends AbstractNode { } } + @Deprecated public String toString() { return getImage(); } 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 e795daca6d..54f489499f 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 @@ -21,10 +21,7 @@ public class JavadocElement extends AbstractNode { return tag; } - @Override - public String toString() { - return getXPathNodeName(); - } + @Override 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 aade523031..1ac8078adf 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 @@ -68,10 +68,7 @@ public abstract class AbstractEcmascriptNode extends Abstract return node.hasSideEffects(); } - @Override - public String toString() { - return getXPathNodeName(); - } + @Override 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 1e96610176..334d4795c8 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 @@ -56,9 +56,7 @@ public abstract class AbstractJspNode extends AbstractNode implements JspNode { return data; } - public String toString() { - return getXPathNodeName(); - } + @Override 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 a99e864437..b9991fa763 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 @@ -77,9 +77,7 @@ public abstract class AbstractPLSQLNode extends net.sourceforge.pmd.lang.ast.Abs * otherwise overriding toString() is probably all you need to do. */ - public String toString() { - return getXPathNodeName(); - } + public String toString(String prefix) { return prefix + toString(); 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 42136ddca5..1f7a0d4e82 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 @@ -11,6 +11,7 @@ public class DummyNode extends AbstractNode { super(id); } + @Deprecated @Override public String toString() { 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 2719f75649..6630bb6068 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 @@ -56,9 +56,7 @@ public abstract class AbstractVFNode extends AbstractNode implements VfNode { return data; } - public String toString() { - return getXPathNodeName(); - } + @Override diff --git a/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTDirective.java b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTDirective.java index 548291c821..c54db7f35d 100644 --- a/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTDirective.java +++ b/pmd-vm/src/main/java/net/sourceforge/pmd/lang/vm/ast/ASTDirective.java @@ -81,6 +81,7 @@ public class ASTDirective extends AbstractVmNode { /** * @since 1.5 */ + @Deprecated @Override public String toString() { return new ToStringBuilder(this).appendSuper(super.toString()).append("directiveName", getDirectiveName()) 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 ac8f7be506..152c1d1e8e 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 @@ -134,9 +134,7 @@ public class AbstractVmNode extends AbstractNode implements VmNode { * otherwise overriding toString() is probably all you need to do. */ - public String toString() { - return getXPathNodeName(); - } + /** * @param prefix