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:
Clément Fournier
2020-01-05 23:10:09 +01:00
parent 9023d86945
commit 0ff87229ff
14 changed files with 21 additions and 80 deletions

View File

@@ -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() {

View File

@@ -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();
}

View File

@@ -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);

View File

@@ -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;

View File

@@ -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.

View File

@@ -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;

View File

@@ -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. *

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;

View File

@@ -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. *

View File

@@ -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);

View File

@@ -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. *
*/