Revert
This commit is contained in:
@@ -77,6 +77,9 @@ You can identify them with the `@InternalApi` annotation. You'll also get a depr
|
||||
{% jdoc !!java::lang.java.ast.ASTClassOrInterfaceDeclaration#getImage() %}, and
|
||||
{% jdoc !!java::lang.java.ast.ASTEnumDeclaration#getImage() %}.
|
||||
|
||||
* Many methods on the {% jdoc core::lang.ast.Node %} interface
|
||||
and {% jdoc core::lang.ast.AbstractNode %} base class. See their javadoc for details.
|
||||
|
||||
|
||||
### External Contributions
|
||||
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
/*
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
package net.sourceforge.pmd.lang.java.ast.impl;
|
||||
|
||||
import net.sourceforge.pmd.annotation.Experimental;
|
||||
import net.sourceforge.pmd.lang.ast.Node;
|
||||
|
||||
/**
|
||||
* Base class for tree visitors that take one parameter, and return a
|
||||
* value.
|
||||
*
|
||||
* <p>Non-generic subclasses extend only the raw type of this class.
|
||||
* This is to avoid source-level incompatibilities when generifying
|
||||
* those classes. For example, For now {@code JavaParserVisitor <: BaseGenericVisitor},
|
||||
* where the {@code AbstractVisitorAdapter} is a raw type. For 7.0.0,
|
||||
* this relation will become {@code JavaParserVisitor<R, P> <: BaseGenericVisitor<JavaNode, R, P>}.
|
||||
* Because {@code JavaParserVisitor} used to extend the raw type, the
|
||||
* relation {@code JavaParserVisitor <: BaseGenericVisitor}, where
|
||||
* now both are raw types, will still hold. On the other hand, if we today
|
||||
* make {@code JavaParserVisitor} extend {@code BaseGenericVisitor<JavaNode, Object, Object>},
|
||||
* then that relation will break in 7.0.0, as {@code JavaParserVisitor}
|
||||
* as a raw type is not convertible to {@code BaseGenericVisitor<JavaNode, Object, Object>}
|
||||
* anymore, only to the other raw type {@code BaseGenericVisitor}.
|
||||
*
|
||||
* @param <N> Type of node this visitor accepts
|
||||
* @param <P> Type of parameter for the visitor
|
||||
* @param <R> Return type of the visit methods
|
||||
*/
|
||||
@Experimental
|
||||
public abstract class BaseGenericVisitor<N extends Node, R, P> {
|
||||
|
||||
/**
|
||||
* Initial value when combining values returned by children.
|
||||
* Note that non-generic subclasses return {@code data} today,
|
||||
* which is only valid if {@code R = P}. In 7.0.0 this will
|
||||
* be changed to return null.
|
||||
*
|
||||
* @param parent Parent node
|
||||
* @param data Value of the parameter for the parent
|
||||
*/
|
||||
protected R zero(N parent, P data) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Merge two values of type Object, used to combine values returned by children.
|
||||
* By default returns the [newest] value.
|
||||
*
|
||||
* @param acc Accumulated value for the children preceding the current one
|
||||
* @param newest Newest value to combine with the accumulator
|
||||
* @param parent Parent node
|
||||
* @param data Value of the parameter for the parent
|
||||
* @param idx Index of the child in the parent, for which [newest] is the corresponding value
|
||||
*/
|
||||
protected R combine(R acc, R newest, N parent, P data, int idx) {
|
||||
return newest;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make the node accept this visitor with parameter [data].
|
||||
*/
|
||||
protected abstract R visitChildAt(N node, int idx, P data);
|
||||
|
||||
|
||||
public R visit(N node, P data) {
|
||||
R returnValue = zero(node, data);
|
||||
for (int i = 0; i < node.getNumChildren(); ++i) {
|
||||
returnValue = combine(returnValue, visitChildAt(node, i, data), node, data, i);
|
||||
}
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
}
|
||||
+5
@@ -4,6 +4,7 @@
|
||||
|
||||
package net.sourceforge.pmd.lang.java.ast.impl.javacc;
|
||||
|
||||
import net.sourceforge.pmd.annotation.Experimental;
|
||||
import net.sourceforge.pmd.lang.ast.AbstractNode;
|
||||
import net.sourceforge.pmd.lang.ast.GenericToken;
|
||||
import net.sourceforge.pmd.lang.ast.Node;
|
||||
@@ -13,7 +14,11 @@ import net.sourceforge.pmd.lang.ast.TokenBasedNode;
|
||||
* Base class for node produced by JJTree. JJTree specific functionality
|
||||
* present on the API of {@link Node} and {@link AbstractNode} will be
|
||||
* moved here for 7.0.0.
|
||||
*
|
||||
* <p>This is experimental because it's expected to change for 7.0.0 in
|
||||
* unforeseeable ways. Don't use it directly, use the node interfaces.
|
||||
*/
|
||||
@Experimental
|
||||
public abstract class AbstractJjtreeNode<N extends Node, T extends GenericToken> extends AbstractNode implements TokenBasedNode<T> {
|
||||
|
||||
public AbstractJjtreeNode(int id) {
|
||||
|
||||
+2
-16
@@ -4,25 +4,11 @@
|
||||
|
||||
package net.sourceforge.pmd.lang.java.ast;
|
||||
|
||||
import net.sourceforge.pmd.lang.ast.Node;
|
||||
import net.sourceforge.pmd.lang.java.ast.impl.BaseGenericVisitor;
|
||||
|
||||
public class JavaParserVisitorAdapter extends BaseGenericVisitor implements JavaParserVisitor {
|
||||
public class JavaParserVisitorAdapter implements JavaParserVisitor {
|
||||
|
||||
@Override
|
||||
protected Object zero(Node parent, Object data) {
|
||||
return data;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object visitChildAt(Node node, int idx, Object data) {
|
||||
return ((JavaNode) node).getChild(idx).jjtAccept(this, data);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public Object visit(JavaNode node, Object data) {
|
||||
return super.visit(node, data);
|
||||
return node.childrenAccept(this, data);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+3
-16
@@ -4,25 +4,12 @@
|
||||
|
||||
package net.sourceforge.pmd.lang.jsp.ast;
|
||||
|
||||
import net.sourceforge.pmd.lang.ast.Node;
|
||||
import net.sourceforge.pmd.lang.java.ast.impl.BaseGenericVisitor;
|
||||
|
||||
public class JspParserVisitorAdapter extends BaseGenericVisitor implements JspParserVisitor {
|
||||
public class JspParserVisitorAdapter implements JspParserVisitor {
|
||||
|
||||
@Override
|
||||
protected Object zero(Node parent, Object data) {
|
||||
return data;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object visitChildAt(Node node, int idx, Object data) {
|
||||
return ((JspNode) node).getChild(idx).jjtAccept(this, data);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public Object visit(JspNode node, Object data) {
|
||||
return super.visit(node, data);
|
||||
node.childrenAccept(this, data);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
-12
@@ -4,7 +4,6 @@
|
||||
|
||||
package net.sourceforge.pmd.lang.modelica.ast;
|
||||
|
||||
import net.sourceforge.pmd.lang.ast.Node;
|
||||
import net.sourceforge.pmd.lang.java.ast.impl.javacc.AbstractJjtreeNode;
|
||||
import net.sourceforge.pmd.lang.modelica.resolver.ModelicaScope;
|
||||
|
||||
@@ -17,7 +16,7 @@ import net.sourceforge.pmd.lang.modelica.resolver.ModelicaScope;
|
||||
*
|
||||
* @see ModelicaNode for public API.
|
||||
*/
|
||||
abstract class AbstractModelicaNode extends AbstractJjtreeNode<ModelicaNode, Token> implements Node, ModelicaNode {
|
||||
abstract class AbstractModelicaNode extends AbstractJjtreeNode<ModelicaNode, Token> implements ModelicaNode {
|
||||
private ModelicaParser parser;
|
||||
private ModelicaScope ownScope;
|
||||
|
||||
@@ -38,16 +37,6 @@ abstract class AbstractModelicaNode extends AbstractJjtreeNode<ModelicaNode, Tok
|
||||
return getClass().getSimpleName().substring(3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelicaNode jjtGetParent() {
|
||||
return (ModelicaNode) super.jjtGetParent();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelicaNode jjtGetChild(int index) {
|
||||
return (ModelicaNode) super.jjtGetChild(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void jjtOpen() {
|
||||
if (beginLine == -1 && parser.token.next != null) {
|
||||
|
||||
+5
-12
@@ -4,19 +4,12 @@
|
||||
|
||||
package net.sourceforge.pmd.lang.modelica.ast;
|
||||
|
||||
import net.sourceforge.pmd.lang.ast.Node;
|
||||
import net.sourceforge.pmd.lang.java.ast.impl.BaseGenericVisitor;
|
||||
|
||||
public class ModelicaParserVisitorAdapter extends BaseGenericVisitor implements ModelicaParserVisitor {
|
||||
|
||||
@Override
|
||||
protected Object visitChildAt(Node node, int idx, Object data) {
|
||||
return ((ModelicaNode) node).getChild(idx).jjtAccept(this, data);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public class ModelicaParserVisitorAdapter implements ModelicaParserVisitor {
|
||||
public Object visit(ModelicaNode node, Object data) {
|
||||
return super.visit(node, data);
|
||||
for (int i = 0; i < node.getNumChildren(); ++i) {
|
||||
node.getChild(i).jjtAccept(this, data);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+2
-16
@@ -4,25 +4,11 @@
|
||||
|
||||
package net.sourceforge.pmd.lang.plsql.ast;
|
||||
|
||||
import net.sourceforge.pmd.lang.ast.Node;
|
||||
import net.sourceforge.pmd.lang.java.ast.impl.BaseGenericVisitor;
|
||||
|
||||
public class PLSQLParserVisitorAdapter extends BaseGenericVisitor implements PLSQLParserVisitor {
|
||||
public class PLSQLParserVisitorAdapter implements PLSQLParserVisitor {
|
||||
|
||||
@Override
|
||||
protected Object zero(Node parent, Object data) {
|
||||
return data;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object visitChildAt(Node node, int idx, Object data) {
|
||||
return ((PLSQLNode) node).getChild(idx).jjtAccept(this, data);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public Object visit(PLSQLNode node, Object data) {
|
||||
return super.visit(node, data);
|
||||
return node.childrenAccept(this, data);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+17
-5
@@ -4,8 +4,6 @@
|
||||
|
||||
package net.sourceforge.pmd.lang.scala.ast;
|
||||
|
||||
import net.sourceforge.pmd.lang.java.ast.impl.BaseGenericVisitor;
|
||||
|
||||
import scala.meta.Case;
|
||||
import scala.meta.Ctor;
|
||||
import scala.meta.Decl;
|
||||
@@ -35,11 +33,25 @@ import scala.meta.Type;
|
||||
* @param <R>
|
||||
* The type of the returned data
|
||||
*/
|
||||
public class ScalaParserVisitorAdapter<D, R> extends BaseGenericVisitor<ScalaNode<?>, R, D> implements ScalaParserVisitor<D, R> {
|
||||
public class ScalaParserVisitorAdapter<D, R> implements ScalaParserVisitor<D, R> {
|
||||
|
||||
/** Initial value when combining values returned by children. */
|
||||
protected R zero() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/** Merge two values of type R, used to combine values returned by children. */
|
||||
protected R combine(R acc, R r) {
|
||||
return r;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected R visitChildAt(ScalaNode<?> node, int idx, D data) {
|
||||
return node.getChild(idx).accept(this, data);
|
||||
public R visit(ScalaNode<?> node, D data) {
|
||||
R returnValue = zero();
|
||||
for (int i = 0; i < node.jjtGetNumChildren(); ++i) {
|
||||
returnValue = combine(returnValue, node.jjtGetChild(i).accept(this, data));
|
||||
}
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+3
-17
@@ -4,28 +4,14 @@
|
||||
|
||||
package net.sourceforge.pmd.lang.vf.ast;
|
||||
|
||||
import net.sourceforge.pmd.lang.ast.Node;
|
||||
import net.sourceforge.pmd.lang.java.ast.impl.BaseGenericVisitor;
|
||||
|
||||
public class VfParserVisitorAdapter extends BaseGenericVisitor implements VfParserVisitor {
|
||||
public class VfParserVisitorAdapter implements VfParserVisitor {
|
||||
|
||||
@Override
|
||||
protected Object zero(Node parent, Object data) {
|
||||
public Object visit(VfNode node, Object data) {
|
||||
node.childrenAccept(this, data);
|
||||
return data;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object visitChildAt(Node node, int idx, Object data) {
|
||||
return ((VfNode) node).getChild(idx).jjtAccept(this, data);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public Object visit(VfNode node, Object data) {
|
||||
return super.visit(node, data);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Object visit(ASTCompilationUnit node, Object data) {
|
||||
return visit((VfNode) node, data);
|
||||
|
||||
@@ -1,25 +1,12 @@
|
||||
|
||||
package net.sourceforge.pmd.lang.vm.ast;
|
||||
|
||||
import net.sourceforge.pmd.lang.ast.Node;
|
||||
import net.sourceforge.pmd.lang.java.ast.impl.BaseGenericVisitor;
|
||||
|
||||
public class VmParserVisitorAdapter extends BaseGenericVisitor implements VmParserVisitor {
|
||||
public class VmParserVisitorAdapter implements VmParserVisitor {
|
||||
|
||||
@Override
|
||||
protected Object zero(Node parent, Object data) {
|
||||
return data;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object visitChildAt(Node node, int idx, Object data) {
|
||||
return ((VmNode) node).getChild(idx).jjtAccept(this, data);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public Object visit(VmNode node, Object data) {
|
||||
return super.visit(node, data);
|
||||
public Object visit(final VmNode node, final Object data) {
|
||||
node.childrenAccept(this, data);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user