Remove TokenBasedNode
I don't think we should expose tokens as an API yet. They're an implementation detail, not used much, and the AST should be able to reflect all the information that can be found in the tokens. The methods of AbstractNode can be pulled down to AbstractJjtreeNode and made protected.
This commit is contained in:
@@ -530,7 +530,7 @@ public abstract class AbstractNode implements Node {
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Not all nodes have access to their tokens, use the interface {@link TokenBasedNode} instead
|
||||
* @deprecated Not all nodes are based on tokens, and this is an implementation detail
|
||||
*/
|
||||
@Deprecated
|
||||
public GenericToken jjtGetFirstToken() {
|
||||
@@ -546,7 +546,7 @@ public abstract class AbstractNode implements Node {
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Not all nodes have access to their tokens, use the interface {@link TokenBasedNode} instead
|
||||
* @deprecated Not all nodes are based on tokens, and this is an implementation detail
|
||||
*/
|
||||
@Deprecated
|
||||
public GenericToken jjtGetLastToken() {
|
||||
|
@@ -1,30 +0,0 @@
|
||||
/*
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
package net.sourceforge.pmd.lang.ast;
|
||||
|
||||
/**
|
||||
* A {@link Node} that can provide access to the underlying
|
||||
* {@linkplain GenericToken tokens} produced by the lexer.
|
||||
* Not all nodes do, as some are produced from external parsers.
|
||||
*/
|
||||
public interface TokenBasedNode<T extends GenericToken> extends Node {
|
||||
|
||||
/**
|
||||
* Returns the first token producing this node.
|
||||
* This is not a special token. Never null.
|
||||
*/
|
||||
// @NotNull
|
||||
T getFirstToken();
|
||||
|
||||
|
||||
/**
|
||||
* Returns the last token producing this node.
|
||||
* This is not a special token. Never null.
|
||||
*/
|
||||
// @NotNull
|
||||
T getLastToken();
|
||||
|
||||
|
||||
}
|
@@ -2,13 +2,11 @@
|
||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||
*/
|
||||
|
||||
package net.sourceforge.pmd.lang.java.ast.impl.javacc;
|
||||
package net.sourceforge.pmd.lang.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;
|
||||
import net.sourceforge.pmd.lang.ast.TokenBasedNode;
|
||||
|
||||
/**
|
||||
* Base class for node produced by JJTree. JJTree specific functionality
|
||||
@@ -19,7 +17,7 @@ import net.sourceforge.pmd.lang.ast.TokenBasedNode;
|
||||
* 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 abstract class AbstractJjtreeNode<N extends Node> extends AbstractNode {
|
||||
|
||||
public AbstractJjtreeNode(int id) {
|
||||
super(id);
|
||||
@@ -30,18 +28,6 @@ public abstract class AbstractJjtreeNode<N extends Node, T extends GenericToken>
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public T getFirstToken() {
|
||||
return (T) super.jjtGetFirstToken();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public T getLastToken() {
|
||||
return (T) super.jjtGetLastToken();
|
||||
}
|
||||
|
||||
@Override
|
||||
public N getChild(int index) {
|
||||
return (N) super.getChild(index);
|
@@ -5,12 +5,12 @@
|
||||
package net.sourceforge.pmd.lang.java.ast;
|
||||
|
||||
import net.sourceforge.pmd.annotation.InternalApi;
|
||||
import net.sourceforge.pmd.lang.java.ast.impl.javacc.AbstractJjtreeNode;
|
||||
import net.sourceforge.pmd.lang.ast.impl.javacc.AbstractJjtreeNode;
|
||||
import net.sourceforge.pmd.lang.symboltable.Scope;
|
||||
|
||||
@Deprecated
|
||||
@InternalApi
|
||||
public abstract class AbstractJavaNode extends AbstractJjtreeNode<JavaNode, Token> implements JavaNode {
|
||||
public abstract class AbstractJavaNode extends AbstractJjtreeNode<JavaNode> implements JavaNode {
|
||||
|
||||
protected JavaParser parser;
|
||||
private Scope scope;
|
||||
|
@@ -6,7 +6,6 @@ package net.sourceforge.pmd.lang.java.ast;
|
||||
|
||||
|
||||
import net.sourceforge.pmd.annotation.InternalApi;
|
||||
import net.sourceforge.pmd.lang.ast.TokenBasedNode;
|
||||
import net.sourceforge.pmd.lang.symboltable.Scope;
|
||||
import net.sourceforge.pmd.lang.symboltable.ScopedNode;
|
||||
|
||||
@@ -14,7 +13,7 @@ import net.sourceforge.pmd.lang.symboltable.ScopedNode;
|
||||
/**
|
||||
* Root interface for all Nodes of the Java AST.
|
||||
*/
|
||||
public interface JavaNode extends ScopedNode, TokenBasedNode<Token> {
|
||||
public interface JavaNode extends ScopedNode {
|
||||
|
||||
/**
|
||||
* Calls back the visitor's visit method corresponding to the runtime type of this Node.
|
||||
|
@@ -4,9 +4,9 @@
|
||||
|
||||
package net.sourceforge.pmd.lang.jsp.ast;
|
||||
|
||||
import net.sourceforge.pmd.lang.java.ast.impl.javacc.AbstractJjtreeNode;
|
||||
import net.sourceforge.pmd.lang.ast.impl.javacc.AbstractJjtreeNode;
|
||||
|
||||
public class AbstractJspNode extends AbstractJjtreeNode<JspNode, Token> implements JspNode {
|
||||
public class AbstractJspNode extends AbstractJjtreeNode<JspNode> implements JspNode {
|
||||
|
||||
protected JspParser parser;
|
||||
|
||||
|
@@ -5,9 +5,8 @@
|
||||
package net.sourceforge.pmd.lang.jsp.ast;
|
||||
|
||||
import net.sourceforge.pmd.lang.ast.Node;
|
||||
import net.sourceforge.pmd.lang.ast.TokenBasedNode;
|
||||
|
||||
public interface JspNode extends Node, TokenBasedNode<Token> {
|
||||
public interface JspNode extends Node {
|
||||
|
||||
/**
|
||||
* Accept the visitor. *
|
||||
|
@@ -4,7 +4,7 @@
|
||||
|
||||
package net.sourceforge.pmd.lang.modelica.ast;
|
||||
|
||||
import net.sourceforge.pmd.lang.java.ast.impl.javacc.AbstractJjtreeNode;
|
||||
import net.sourceforge.pmd.lang.ast.impl.javacc.AbstractJjtreeNode;
|
||||
import net.sourceforge.pmd.lang.modelica.resolver.ModelicaScope;
|
||||
|
||||
/**
|
||||
@@ -16,7 +16,7 @@ import net.sourceforge.pmd.lang.modelica.resolver.ModelicaScope;
|
||||
*
|
||||
* @see ModelicaNode for public API.
|
||||
*/
|
||||
abstract class AbstractModelicaNode extends AbstractJjtreeNode<ModelicaNode, Token> implements ModelicaNode {
|
||||
abstract class AbstractModelicaNode extends AbstractJjtreeNode<ModelicaNode> implements ModelicaNode {
|
||||
private ModelicaParser parser;
|
||||
private ModelicaScope ownScope;
|
||||
|
||||
|
@@ -7,10 +7,10 @@
|
||||
|
||||
package net.sourceforge.pmd.lang.plsql.ast;
|
||||
|
||||
import net.sourceforge.pmd.lang.java.ast.impl.javacc.AbstractJjtreeNode;
|
||||
import net.sourceforge.pmd.lang.ast.impl.javacc.AbstractJjtreeNode;
|
||||
import net.sourceforge.pmd.lang.symboltable.Scope;
|
||||
|
||||
public abstract class AbstractPLSQLNode extends AbstractJjtreeNode<PLSQLNode, Token> implements PLSQLNode {
|
||||
public abstract class AbstractPLSQLNode extends AbstractJjtreeNode<PLSQLNode> implements PLSQLNode {
|
||||
protected Object value;
|
||||
protected PLSQLParser parser;
|
||||
protected Scope scope;
|
||||
|
@@ -5,11 +5,10 @@
|
||||
package net.sourceforge.pmd.lang.plsql.ast;
|
||||
|
||||
import net.sourceforge.pmd.lang.ast.Node;
|
||||
import net.sourceforge.pmd.lang.ast.TokenBasedNode;
|
||||
import net.sourceforge.pmd.lang.symboltable.Scope;
|
||||
import net.sourceforge.pmd.lang.symboltable.ScopedNode;
|
||||
|
||||
public interface PLSQLNode extends Node, ScopedNode, TokenBasedNode<Token> {
|
||||
public interface PLSQLNode extends Node, ScopedNode {
|
||||
|
||||
/** Accept the visitor. **/
|
||||
Object jjtAccept(PLSQLParserVisitor visitor, Object data);
|
||||
|
@@ -4,9 +4,9 @@
|
||||
|
||||
package net.sourceforge.pmd.lang.vf.ast;
|
||||
|
||||
import net.sourceforge.pmd.lang.java.ast.impl.javacc.AbstractJjtreeNode;
|
||||
import net.sourceforge.pmd.lang.ast.impl.javacc.AbstractJjtreeNode;
|
||||
|
||||
public class AbstractVFNode extends AbstractJjtreeNode<VfNode, Token> implements VfNode {
|
||||
public class AbstractVFNode extends AbstractJjtreeNode<VfNode> implements VfNode {
|
||||
|
||||
protected VfParser parser;
|
||||
|
||||
|
@@ -5,9 +5,8 @@
|
||||
package net.sourceforge.pmd.lang.vf.ast;
|
||||
|
||||
import net.sourceforge.pmd.lang.ast.Node;
|
||||
import net.sourceforge.pmd.lang.ast.TokenBasedNode;
|
||||
|
||||
public interface VfNode extends Node, TokenBasedNode<Token> {
|
||||
public interface VfNode extends Node {
|
||||
|
||||
/**
|
||||
* Accept the visitor. *
|
||||
|
@@ -26,12 +26,12 @@ import java.io.Writer;
|
||||
import org.apache.commons.lang3.text.StrBuilder;
|
||||
|
||||
import net.sourceforge.pmd.annotation.InternalApi;
|
||||
import net.sourceforge.pmd.lang.java.ast.impl.javacc.AbstractJjtreeNode;
|
||||
import net.sourceforge.pmd.lang.ast.impl.javacc.AbstractJjtreeNode;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class AbstractVmNode extends AbstractJjtreeNode<VmNode, Token> implements VmNode {
|
||||
public class AbstractVmNode extends AbstractJjtreeNode<VmNode> implements VmNode {
|
||||
|
||||
/** */
|
||||
// TODO - It seems that this field is only valid when parsing, and should
|
||||
@@ -100,16 +100,6 @@ public class AbstractVmNode extends AbstractJjtreeNode<VmNode, Token> implements
|
||||
this.first = t;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Token getFirstToken() {
|
||||
return first;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Token getLastToken() {
|
||||
return last;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object jjtAccept(final VmParserVisitor visitor, final Object data) {
|
||||
return visitor.visit(this, data);
|
||||
|
@@ -5,9 +5,8 @@
|
||||
package net.sourceforge.pmd.lang.vm.ast;
|
||||
|
||||
import net.sourceforge.pmd.lang.ast.Node;
|
||||
import net.sourceforge.pmd.lang.ast.TokenBasedNode;
|
||||
|
||||
public interface VmNode extends Node, TokenBasedNode<Token> {
|
||||
public interface VmNode extends Node {
|
||||
/**
|
||||
* Accept the visitor. *
|
||||
*/
|
||||
|
Reference in New Issue
Block a user