package bluej.parser;

import java.io.Reader;
import java.io.StringReader;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;

import bluej.debugger.gentype.JavaType;
import bluej.debugmgr.codepad.DeclaredVar;
import bluej.parser.entity.EntityResolver;
import bluej.parser.entity.JavaEntity;
import bluej.parser.lexer.JavaTokenTypes;
import bluej.parser.lexer.LocatableToken;
import threadchecker.OnThread;
import threadchecker.Tag;


| Parse variable declarations/initializations (for the codepad). | | @author Davin McCall | @OnThread(Tag.FXPlatform) public class CodepadVarParser extends JavaParser{ private EntityResolver resolver; private int arrayCount = 0; private int modifiers = 0; private boolean gotFirstVar = false; private JavaType baseType; private List<DeclaredVar> variables = new ArrayList<DeclaredVar>(); public CodepadVarParser(EntityResolver resolver, Reader reader) { super(reader); this.resolver = resolver; } public CodepadVarParser(EntityResolver resolver, String text) { this(resolver, new StringReader(text)); }
| Get the variables found to be declared by the parsed text. This should be called after | first calling "parseVariableDeclarations()". | */ public List<DeclaredVar> getVariables() { return variables; } @Override @OnThread(value = Tag.FXPlatform, ignoreParent = true) protected void gotTypeSpec(List<LocatableToken> tokens) | |
{ | |
if (! gotFirstVar) { | | JavaEntity bent = ParseUtils.getTypeEntity(resolver, null, tokens); | | if (bent == null) { | | return; | | } | | bent = bent.resolveAsType(); | | if (bent != null) { | | baseType = bent.getType(); | | } | | } | | } | | @Override | | protected void gotArrayDeclarator() | | { | | arrayCount++; | | } | | @Override | | protected void gotVariableDecl(LocatableToken first, LocatableToken idToken, boolean inited) | | { | | gotFirstVar = true; | | if (baseType != null) { | | JavaType vtype = baseType; | | while (arrayCount > 0){ | | vtype = vtype.getArray(); | | arrayCount--; | | } | | variables.add(new DeclaredVar(inited, Modifier.isFinal(modifiers), | | vtype, idToken.getText())); | | } | | } | | @Override | | protected void gotSubsequentVar(LocatableToken first, LocatableToken idToken, boolean inited) | | { | | if (baseType != null) { | | JavaType vtype = baseType; | | while (arrayCount > 0){ | | vtype = vtype.getArray(); | | arrayCount--; | | } | | variables.add(new DeclaredVar(inited, Modifier.isFinal(modifiers), | | vtype, idToken.getText())); | | } | | } | | @Override | | protected void gotModifier(LocatableToken token) | | { | | if (! gotFirstVar) { | | if (token.getType() == JavaTokenTypes.FINAL) { | | modifiers |= Modifier.FINAL; | | } | | } | | } | | }
top, use, map, class CodepadVarParser

.   CodepadVarParser
.   CodepadVarParser




48 neLoCode + 58 LoComm