package bluej.parser.nodes;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import bluej.parser.lexer.JavaTokenTypes;
import bluej.parser.lexer.LocatableToken;
import bluej.parser.nodes.NodeTree.NodeAndPosition;


| Node for the inner part of a type definition. This contains the declarations inside | the type. | | @author Davin McCall | public class TypeInnerNode extends IncrementalParsingNode{ private Map<String,Set<MethodNode>> methods = new HashMap<String,Set<MethodNode>>(); public TypeInnerNode(JavaParentNode parent) { super(parent); } @Override public boolean isInner() { return true; }
| A method was added. | public void methodAdded(MethodNode method) { String name = method.getName(); Set<MethodNode> methodSet = methods.get(name); if (methodSet == null) { methodSet = new HashSet<MethodNode>(); methods.put(name, methodSet); } methodSet.add(method); } @Override public void childChangedName(ParsedNode child, String oldName) { super.childChangedName(child, oldName); if (child.getNodeType() == NODETYPE_METHODDEF) { Set<MethodNode> methodSet = methods.get(oldName); methodSet.remove(child); methodAdded((MethodNode) child); } } @Override protected void childRemoved(NodeAndPosition<ParsedNode> child, NodeStructureListener listener) { super.childRemoved(child, listener); if (child.getNode().getNodeType() == NODETYPE_METHODDEF) { Set<MethodNode> methodSet = methods.get(child.getNode().getName()); methodSet.remove(child.getNode()); } }
| Get the fields defined in this type. | public Map> getFields() { return variables; }
| Get the methods defined in this type. | public Map> getMethods() { return methods; } @Override protected int doPartialParse(ParseParams params, int state) { last = null; LocatableToken nextToken = params.tokenStream.nextToken(); if (nextToken.getType() == JavaTokenTypes.RCURLY) { last = nextToken; return PP_ENDS_NODE; } if (nextToken.getType() == JavaTokenTypes.EOF) { last = nextToken; return PP_INCOMPLETE; } if (checkBoundary(params, nextToken)) { last = nextToken; return PP_PULL_UP_CHILD; } params.parser.parseClassElement(nextToken); complete = false; return PP_OK; } @Override protected boolean isDelimitingNode(NodeAndPosition<ParsedNode> nap) { return nap.getNode().isContainer(); } @Override protected boolean marksOwnEnd() { return false; } @Override public boolean growsForward() { return true; }
| Get a reference to the map of inner classes of this node (live; should not be mutated). | public Map getContainedClasses() { return classNodes; } }
top, use, map, class TypeInnerNode

.   TypeInnerNode
.   isInner
.   methodAdded
.   childChangedName
.   childRemoved
.   getFields
.   getMethods
.   doPartialParse
.   isDelimitingNode
.   marksOwnEnd
.   growsForward
.   getContainedClasses




166 neLoCode + 7 LoComm