package bluej.parser.nodes;
import bluej.debugger.gentype.Reflective;
import bluej.parser.entity.JavaEntity;
import bluej.parser.entity.PackageOrClass;
import bluej.parser.entity.ParsedReflective;
import bluej.parser.entity.TypeEntity;
import bluej.parser.lexer.JavaTokenTypes;
import bluej.parser.nodes.NodeTree.NodeAndPosition;
| A node representing a method or constructor inner body (the part between, but not
| including, the '{} and '}').
|
| @author Davin McCall
|
public class MethodBodyNode
extends IncrementalParsingNode{
public MethodBodyNode(JavaParentNode parent)
{
super(parent);
complete = true;
setInner(true);
}
@Override
protected boolean isDelimitingNode(NodeAndPosition<ParsedNode> nap)
{
ParsedNode pn = nap.getNode();
return pn.isContainer() || pn.getNodeType() == ParsedNode.NODETYPE_FIELD;
}
@Override
protected int doPartialParse(ParseParams params, int state)
{
last = params.tokenStream.nextToken();
if (last.getType() == JavaTokenTypes.RCURLY) {
return PP_ENDS_NODE;
}
if (last.getType() == JavaTokenTypes.EOF) {
return complete ? PP_OK : PP_INCOMPLETE;
}
if (checkBoundary(params, last)) {
return PP_PULL_UP_CHILD;
}
last = params.parser.parseStatement(last, false);
if (last == null) {
last = params.tokenStream.LA(1);
if (last.getType() == JavaTokenTypes.EOF) {
return PP_INCOMPLETE;
}
}
return PP_OK;
}
@Override
protected boolean marksOwnEnd()
{
return false;
}
@Override
public boolean growsForward()
{
return true;
}
@Override
public JavaEntity getValueEntity(String name, Reflective querySource, int fromPosition)
{
return getPositionedValueEntity(name, querySource, fromPosition);
}
@Override
public PackageOrClass resolvePackageOrClass(String name,
Reflective querySource, int fromPosition)
{
ParsedNode cnode = classNodes.get(name);
if (cnode != null && cnode.getOffsetFromParent() <= fromPosition) {
return new TypeEntity(new ParsedReflective((ParsedTypeNode) cnode));
}
PackageOrClass rval = null;
if (parentNode != null) {
rval = parentNode.resolvePackageOrClass(name, querySource);
}
return rval;
}
}
top,
use,
map,
class MethodBodyNode
. MethodBodyNode
. isDelimitingNode
. doPartialParse
. marksOwnEnd
. growsForward
. getValueEntity
. resolvePackageOrClass
114 neLoCode
+ 3 LoComm