Deprecate childrenAccept in all modules

This commit is contained in:
Clément Fournier
2019-12-16 23:58:18 +01:00
parent 98df6bda1c
commit 1aabc53fa2
22 changed files with 296 additions and 23 deletions

View File

@ -31,7 +31,7 @@ import net.sourceforge.pmd.lang.java.ast.impl.javacc.AbstractJjtreeNode;
/**
*
*/
public class AbstractVmNode extends AbstractJjtreeNode<Token> implements VmNode {
public class AbstractVmNode extends AbstractJjtreeNode<VmNode, Token> implements VmNode {
/** */
// TODO - It seems that this field is only valid when parsing, and should

View File

@ -13,9 +13,22 @@ public interface VmNode extends Node, TokenBasedNode<Token> {
*/
Object jjtAccept(VmParserVisitor visitor, Object data);
/**
* Accept the visitor. *
*
* @deprecated This method is not useful, the logic for combining
* children values should be present on the visitor, not the node
*/
@Deprecated
Object childrenAccept(VmParserVisitor visitor, Object data);
@Override
VmNode getChild(int index);
@Override
VmNode getParent();
}

View File

@ -3,10 +3,24 @@ package net.sourceforge.pmd.lang.vm.ast;
public class VmParserVisitorAdapter implements VmParserVisitor {
/** Initial value when combining values returned by children. */
protected Object zero() {
return null;
}
/** Merge two values of type R, used to combine values returned by children. */
protected Object combine(Object acc, Object r) {
return r;
}
@Override
public Object visit(final VmNode node, final Object data) {
node.childrenAccept(this, data);
return null;
Object returnValue = zero();
for (int i = 0; i < node.jjtGetNumChildren(); ++i) {
returnValue = combine(returnValue, node.getChild(i).jjtAccept(this, data));
}
return returnValue;
}
@Override

View File

@ -82,7 +82,9 @@ public abstract class AbstractVmRule extends AbstractRule implements VmParserVis
@Override
public Object visit(final VmNode node, final Object data) {
node.childrenAccept(this, data);
for (int i = 0; i < node.jjtGetNumChildren(); ++i) {
node.getChild(i).jjtAccept(this, data);
}
return null;
}