[Pydev-cvs] org.python.pydev/src/org/python/pydev/parser PyParser.java,1.18,1.19
Brought to you by:
fabioz
From: Fabio Z. <fa...@us...> - 2005-03-14 16:49:39
|
Update of /cvsroot/pydev/org.python.pydev/src/org/python/pydev/parser In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3737/src/org/python/pydev/parser Modified Files: PyParser.java Log Message: seeing self. attrs inside if. Index: PyParser.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/parser/PyParser.java,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** PyParser.java 14 Mar 2005 16:01:50 -0000 1.18 --- PyParser.java 14 Mar 2005 16:49:30 -0000 1.19 *************** *** 9,12 **** --- 9,13 ---- import java.util.ArrayList; import java.util.Iterator; + import java.util.List; import org.eclipse.core.resources.IFile; *************** *** 208,224 **** public static class ParserInfo{ public IDocument document; ! public boolean reparseIfErrorFound=true; public PythonNature nature; public int currentLine=-1; public String initial = null; ! public ParserInfo(IDocument document, boolean reparseIfErrorFound, PythonNature nature){ this.document = document; ! this.reparseIfErrorFound = reparseIfErrorFound; this.nature = nature; } ! public ParserInfo(IDocument document, boolean reparseIfErrorFound, PythonNature nature, int currentLine){ ! this(document, reparseIfErrorFound, nature); this.currentLine = currentLine; } --- 209,226 ---- public static class ParserInfo{ public IDocument document; ! public boolean changedCurrentLine=true; public PythonNature nature; public int currentLine=-1; public String initial = null; + public List linesChanged = new ArrayList(); ! public ParserInfo(IDocument document, boolean changedCurrentLine, PythonNature nature){ this.document = document; ! this.changedCurrentLine = changedCurrentLine; this.nature = nature; } ! public ParserInfo(IDocument document, boolean changedCurrentLine, PythonNature nature, int currentLine){ ! this(document, changedCurrentLine, nature); this.currentLine = currentLine; } *************** *** 226,238 **** /** - * - * @param document the document that should be parsed. - * - * @param reparseIfErrorFound boolean indicating that another reparse should - * be attempted, changing the current text line for a 'pass', so that we can - * give outline and some feedback. - * (Maybe a good idea would be a fast parser that is error aware and that finds - * the information we need, as class and function definitions). - * * @return a tuple with the SimpleNode root(if parsed) and the error (if any). * if we are able to recover from a reparse, we have both, the root and the error. --- 228,231 ---- *************** *** 261,265 **** SimpleNode newRoot = null; ! if (info.reparseIfErrorFound){ newRoot = tryReparseAgain(info, parseErr); } else { --- 254,258 ---- SimpleNode newRoot = null; ! if (info.changedCurrentLine){ newRoot = tryReparseAgain(info, parseErr); } else { *************** *** 291,295 **** //END: HACK ! if (info.reparseIfErrorFound){ newRoot = tryReparseAgain(info, tokenErr); } --- 284,288 ---- //END: HACK ! if (info.changedCurrentLine){ newRoot = tryReparseAgain(info, tokenErr); } *************** *** 334,345 **** if(info.currentLine > -1){ line = info.currentLine; }else{ line = tokenErr.currentToken.beginLine-1; - } return tryReparseChangingLine(info, line); } /** * Try a reparse changing the offending line. * --- 327,369 ---- if(info.currentLine > -1){ line = info.currentLine; + }else{ line = tokenErr.currentToken.beginLine-1; + boolean okToGo = false; + + while(! okToGo){ + if(! lineIn(info.linesChanged, line)){ + info.linesChanged.add(new Integer(line)); + okToGo = true; + + } else if(info.linesChanged.size() < 10){ + line += 1; + + } else{ + return null; + } + } + } + return tryReparseChangingLine(info, line); } /** + * @param linesChanged + * @param line + * @return + */ + private static boolean lineIn(List linesChanged, int line) { + for (Iterator iter = linesChanged.iterator(); iter.hasNext();) { + Integer i = (Integer) iter.next(); + if (i.intValue() == line){ + return true; + } + } + return false; + } + + /** * Try a reparse changing the offending line. * *************** *** 350,358 **** private static SimpleNode tryReparseChangingLine(ParserInfo info, int line) { String docToParse = PyCodeCompletion.getDocToParseFromLine(info.document, line); ! if(docToParse != null && info.reparseIfErrorFound){ Document doc = new Document(docToParse); info.document = doc; ! info.reparseIfErrorFound = false; return (SimpleNode) reparseDocument(info)[0]; } --- 374,382 ---- private static SimpleNode tryReparseChangingLine(ParserInfo info, int line) { String docToParse = PyCodeCompletion.getDocToParseFromLine(info.document, line); ! if(docToParse != null){ Document doc = new Document(docToParse); info.document = doc; ! info.changedCurrentLine = false; return (SimpleNode) reparseDocument(info)[0]; } |