Add TokenBasedNode, AbstractJjtreeNode

This commit is contained in:
Clément Fournier
2019-12-16 23:36:53 +01:00
parent cf843a845b
commit 98df6bda1c
13 changed files with 101 additions and 19 deletions

View File

@ -533,7 +533,10 @@ public abstract class AbstractNode implements Node {
this.userData = userData;
}
// TODO should we deprecate this too?
/**
* @deprecated Not all nodes have access to their tokens, use the interface {@link TokenBasedNode} instead
*/
@Deprecated
public GenericToken jjtGetFirstToken() {
return firstToken;
}
@ -546,7 +549,10 @@ public abstract class AbstractNode implements Node {
this.firstToken = token;
}
// TODO should we deprecate this too?
/**
* @deprecated Not all nodes have access to their tokens, use the interface {@link TokenBasedNode} instead
*/
@Deprecated
public GenericToken jjtGetLastToken() {
return lastToken;
}

View File

@ -0,0 +1,27 @@
/*
* 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.
*/
public interface TokenBasedNode<T extends GenericToken> {
/**
* Returns the first token producing this node.
* This is not a special token.
*/
T getFirstToken();
/**
* Returns the last token producing this node.
* This is not a special token.
*/
T getLastToken();
}

View File

@ -0,0 +1,39 @@
/*
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.lang.java.ast.impl.javacc;
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
* present on the API of {@link Node} and {@link AbstractNode} will be
* moved here for 7.0.0.
*/
public abstract class AbstractJjtreeNode<T extends GenericToken> extends AbstractNode implements TokenBasedNode<T> {
public AbstractJjtreeNode(int id) {
super(id);
}
public AbstractJjtreeNode(int id, int theBeginLine, int theEndLine, int theBeginColumn, int theEndColumn) {
super(id, theBeginLine, theEndLine, theBeginColumn, theEndColumn);
}
@Override
@SuppressWarnings("unchecked")
public T getFirstToken() {
return (T) super.jjtGetFirstToken();
}
@Override
@SuppressWarnings("unchecked")
public T getLastToken() {
return (T) super.jjtGetLastToken();
}
}

View File

@ -5,12 +5,12 @@
package net.sourceforge.pmd.lang.java.ast;
import net.sourceforge.pmd.annotation.InternalApi;
import net.sourceforge.pmd.lang.ast.AbstractNode;
import net.sourceforge.pmd.lang.java.ast.impl.javacc.AbstractJjtreeNode;
import net.sourceforge.pmd.lang.symboltable.Scope;
@Deprecated
@InternalApi
public abstract class AbstractJavaNode extends AbstractNode implements JavaNode {
public abstract class AbstractJavaNode extends AbstractJjtreeNode<Token> implements JavaNode {
protected JavaParser parser;
private Scope scope;

View File

@ -6,6 +6,7 @@ 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;
@ -13,7 +14,7 @@ import net.sourceforge.pmd.lang.symboltable.ScopedNode;
/**
* Root interface for all Nodes of the Java AST.
*/
public interface JavaNode extends ScopedNode {
public interface JavaNode extends ScopedNode, TokenBasedNode<Token> {
/**
* 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.ast.AbstractNode;
import net.sourceforge.pmd.lang.java.ast.impl.javacc.AbstractJjtreeNode;
public class AbstractJspNode extends AbstractNode implements JspNode {
public class AbstractJspNode extends AbstractJjtreeNode<Token> implements JspNode {
protected JspParser parser;

View File

@ -5,8 +5,9 @@
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 {
public interface JspNode extends Node, TokenBasedNode<Token> {
/**
* Accept the visitor. *
*/

View File

@ -7,9 +7,10 @@
package net.sourceforge.pmd.lang.plsql.ast;
import net.sourceforge.pmd.lang.java.ast.impl.javacc.AbstractJjtreeNode;
import net.sourceforge.pmd.lang.symboltable.Scope;
public abstract class AbstractPLSQLNode extends net.sourceforge.pmd.lang.ast.AbstractNode implements PLSQLNode {
public abstract class AbstractPLSQLNode extends AbstractJjtreeNode<Token> implements PLSQLNode {
protected Object value;
protected PLSQLParser parser;
protected Scope scope;

View File

@ -5,10 +5,11 @@
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 {
public interface PLSQLNode extends Node, ScopedNode, TokenBasedNode<Token> {
/** 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.ast.AbstractNode;
import net.sourceforge.pmd.lang.java.ast.impl.javacc.AbstractJjtreeNode;
public class AbstractVFNode extends AbstractNode implements VfNode {
public class AbstractVFNode extends AbstractJjtreeNode<Token> implements VfNode {
protected VfParser parser;

View File

@ -5,13 +5,16 @@
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. *
*/
Object jjtAccept(VfParserVisitor visitor, Object data);
/**
* Accept the visitor. *
*/

View File

@ -25,12 +25,13 @@ import java.io.Writer;
import org.apache.commons.lang3.text.StrBuilder;
import net.sourceforge.pmd.lang.ast.AbstractNode;
import net.sourceforge.pmd.annotation.InternalApi;
import net.sourceforge.pmd.lang.java.ast.impl.javacc.AbstractJjtreeNode;
/**
*
*/
public class AbstractVmNode extends AbstractNode implements VmNode {
public class AbstractVmNode extends AbstractJjtreeNode<Token> implements VmNode {
/** */
// TODO - It seems that this field is only valid when parsing, and should
@ -93,17 +94,18 @@ public class AbstractVmNode extends AbstractNode implements VmNode {
endColumn = parser.token.endColumn;
}
/**
* @param t
*/
@InternalApi
@Deprecated
public void setFirstToken(final Token t) {
this.first = t;
}
@Override
public Token getFirstToken() {
return first;
}
@Override
public Token getLastToken() {
return last;
}

View File

@ -5,8 +5,9 @@
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 {
public interface VmNode extends Node, TokenBasedNode<Token> {
/**
* Accept the visitor. *
*/