package bluej.parser.nodes;

import bluej.debugger.gentype.Reflective;
import bluej.editor.moe.MoeSyntaxDocument;
import bluej.parser.ImportsCollection;
import bluej.parser.entity.EntityResolver;
import bluej.parser.entity.JavaEntity;
import bluej.parser.entity.PackageOrClass;
import bluej.parser.entity.TypeEntity;
import bluej.parser.nodes.NodeTree.NodeAndPosition;
import bluej.utility.JavaNames;

import java.util.List;


| A parsed compilation unit node. | | @author Davin McCall | public class ParsedCUNode extends IncrementalParsingNode{ private EntityResolver parentResolver; private ImportsCollection imports = new ImportsCollection(); private int size = 0;
| Construct a parsed node for as yet unknown source. | public ParsedCUNode() { super(null); }
| Construct a parsed node for the given document. The node will | assume its size is 0; the text from the document (if any) should | be explicitly inserted. | public ParsedCUNode(MoeSyntaxDocument document) { super(null); size = 0; }
| Set the entity resolver used to resolve symbols. | public void setParentResolver(EntityResolver parentResolver) { this.parentResolver = parentResolver; } public ImportsCollection getImports() { return imports; } public EntityResolver getParentResolver() { return parentResolver; }
| Overridden getSize() which returns the document size. | | @see bluej.parser.nodes.ParsedNode#getSize() | public int getSize() { return size; } @Override public void resize(int newSize) { size = newSize; } @Override public void setSize(int newSize) { size = newSize; } @Override protected int doPartialParse(ParseParams params, int state) { last = params.tokenStream.LA(1); if (checkBoundary(params, last)) { return PP_PULL_UP_CHILD; } params.parser.parseCUpart(state); return PP_OK; }; @Override protected boolean isDelimitingNode(NodeAndPosition<ParsedNode> nap) { int nt = nap.getNode().getNodeType(); return nt != ParsedNode.NODETYPE_COMMENT; } @Override protected boolean isNodeEndMarker(int tokenType) { return false; } @Override protected boolean marksOwnEnd() { return true; } @Override public PackageOrClass resolvePackageOrClass(String name, Reflective querySource) { PackageOrClass poc = super.resolvePackageOrClass(name, querySource); if (poc == null) { poc = imports.getTypeImport(name); } if (poc == null && parentResolver != null && querySource != null) { String prefix = JavaNames.getPrefix(querySource.getName()); String fqName = JavaNames.combineNames(prefix, name); poc = parentResolver.resolveQualifiedClass(fqName); } if (poc == null) { poc = imports.getTypeImportWC(name); } if (poc == null && parentResolver != null) { poc = parentResolver.resolveQualifiedClass("java.lang." + name); } if (poc == null && parentResolver != null) { return parentResolver.resolvePackageOrClass(name, querySource); } return poc; } @Override public JavaEntity getValueEntity(String name, Reflective querySource) { List<JavaEntity> simports = imports.getStaticImports(name); for (JavaEntity importType : simports) { importType = importType.resolveAsType(); if (importType == null) { continue; } JavaEntity subEnt = importType.getSubentity(name, querySource); if (subEnt != null) { JavaEntity value = subEnt.resolveAsValue(); if (value != null) { return value; } } } simports = imports.getStaticWildcardImports(); for (JavaEntity importType : simports) { importType = importType.resolveAsType(); if (importType == null) { continue; } JavaEntity subEnt = importType.getSubentity(name, querySource); if (subEnt != null) { JavaEntity value = subEnt.resolveAsValue(); if (value != null) { return value; } } } return resolvePackageOrClass(name, querySource); } @Override public TypeEntity resolveQualifiedClass(String name) { if (parentResolver != null) { return parentResolver.resolveQualifiedClass(name); } return null; } }
top, use, map, class ParsedCUNode

.   ParsedCUNode
.   ParsedCUNode
.   setParentResolver
.   getImports
.   getParentResolver
.   getSize
.   resize
.   setSize
.   doPartialParse
.   isDelimitingNode
.   isNodeEndMarker
.   marksOwnEnd
.   resolvePackageOrClass
.   getValueEntity
.   resolveQualifiedClass




242 neLoCode + 9 LoComm