[Pydev-cvs] org.python.pydev.parser/src/org/python/pydev/parser/visitors/scope DefinitionsASTIterato
Brought to you by:
fabioz
From: Fabio Z. <fa...@us...> - 2006-04-09 20:42:25
|
Update of /cvsroot/pydev/org.python.pydev.parser/src/org/python/pydev/parser/visitors/scope In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7800/src/org/python/pydev/parser/visitors/scope Modified Files: DefinitionsASTIteratorVisitor.java EasyAstIteratorBase.java Log Message: Making index for all names found (so that we can do a search reference that is not slow). Missing: keep info on the disk and not in the memory at all times. Index: EasyAstIteratorBase.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.parser/src/org/python/pydev/parser/visitors/scope/EasyAstIteratorBase.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** EasyAstIteratorBase.java 8 Apr 2006 21:23:02 -0000 1.5 --- EasyAstIteratorBase.java 9 Apr 2006 20:42:19 -0000 1.6 *************** *** 2,7 **** --- 2,9 ---- import java.util.ArrayList; + import java.util.HashMap; import java.util.Iterator; import java.util.List; + import java.util.Map; import java.util.Stack; *************** *** 15,23 **** * Iterator base. Keeps track of the current scope (method or class). * * @author fabioz */ public abstract class EasyAstIteratorBase extends VisitorBase{ ! protected List<ASTEntry> nodes = new ArrayList<ASTEntry>(); protected Stack<SimpleNode> stack = new Stack<SimpleNode>(); --- 17,28 ---- * Iterator base. Keeps track of the current scope (method or class). * + * This object (and subclasses) are 'disposable', meaning that they should only do 1 visit and after that + * only the methods to get the classes should be called. + * * @author fabioz */ public abstract class EasyAstIteratorBase extends VisitorBase{ ! private List<ASTEntry> nodes = new ArrayList<ASTEntry>(); protected Stack<SimpleNode> stack = new Stack<SimpleNode>(); *************** *** 53,61 **** entry.node = node; ! nodes.add(entry); stack.push(node); return entry; } /** * @param entry --- 58,67 ---- entry.node = node; ! addNode(entry); stack.push(node); return entry; } + /** * @param entry *************** *** 74,78 **** entry.node = node; entry.endLine = NodeUtils.getLineEnd(node); ! nodes.add(entry); } --- 80,84 ---- entry.node = node; entry.endLine = NodeUtils.getLineEnd(node); ! addNode(entry); } *************** *** 91,105 **** /** * @param o * @return */ protected ASTEntry getEntryWithNode(SimpleNode o) { ! for (Iterator iter = nodes.iterator(); iter.hasNext();) { ! ASTEntry entry = (ASTEntry) iter.next(); ! if(entry.node == o){ ! return entry; ! } ! } ! return null; } --- 97,117 ---- /** + * Cache to keep track of the nodes and the entries they generated (this is done while visiting). + */ + private Map<SimpleNode, ASTEntry> nodeCache = new HashMap<SimpleNode, ASTEntry>(); + + /** + * @param entry + */ + private void addNode(ASTEntry entry) { + nodes.add(entry); + nodeCache.put(entry.node, entry); + } + /** * @param o * @return */ protected ASTEntry getEntryWithNode(SimpleNode o) { ! return nodeCache.get(o); } Index: DefinitionsASTIteratorVisitor.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.parser/src/org/python/pydev/parser/visitors/scope/DefinitionsASTIteratorVisitor.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** DefinitionsASTIteratorVisitor.java 20 Mar 2006 19:37:34 -0000 1.4 --- DefinitionsASTIteratorVisitor.java 9 Apr 2006 20:42:19 -0000 1.5 *************** *** 11,18 **** import org.python.pydev.parser.jython.ast.ClassDef; import org.python.pydev.parser.jython.ast.FunctionDef; - import org.python.pydev.parser.jython.ast.Import; - import org.python.pydev.parser.jython.ast.ImportFrom; import org.python.pydev.parser.jython.ast.Name; - import org.python.pydev.parser.jython.ast.VisitorBase; import org.python.pydev.parser.jython.ast.exprType; --- 11,15 ---- |