[Pydev-cvs] org.python.pydev/src/org/python/pydev/editor/codecompletion/revisited/visitors Scope.jav
Brought to you by:
fabioz
Update of /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/revisited/visitors In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26937/src/org/python/pydev/editor/codecompletion/revisited/visitors Modified Files: AssignDefinition.java FindDefinitionModelVisitor.java AbstractVisitor.java Added Files: Scope.java FindScopeVisitor.java Log Message: First phase of code completion finished?? Waiting for bugs... --- NEW FILE: Scope.java --- /* * Created on Jan 20, 2005 * * @author Fabio Zadrozny */ package org.python.pydev.editor.codecompletion.revisited.visitors; import java.util.Iterator; import java.util.Stack; import org.python.parser.SimpleNode; /** * @author Fabio Zadrozny */ public class Scope { public Stack scope = new Stack(); public Scope(Stack scope){ this.scope.addAll(scope); } /** * @see java.lang.Object#equals(java.lang.Object) */ public boolean equals(Object obj) { if (!(obj instanceof Scope)) { return false; } Scope s = (Scope) obj; if(this.scope.size() != s.scope.size()){ return false; } return checkIfScopesMatch(s); } /** * Checks if this scope is an outer scope of the scope passed as a param (s). * Or if it is the same scope. * * @param s * @return */ public boolean isOuterOrSameScope(Scope s){ if(this.scope.size() > s.scope.size()){ return false; } return checkIfScopesMatch(s); } /** * @param s * @return */ private boolean checkIfScopesMatch(Scope s) { Iterator otIt = s.scope.iterator(); for (Iterator iter = this.scope.iterator(); iter.hasNext();) { SimpleNode element = (SimpleNode) iter.next(); SimpleNode otElement = (SimpleNode) otIt.next(); if(element.beginColumn != otElement.beginColumn) return false; if(element.beginLine != otElement.beginLine) return false; if(! element.getClass().equals(otElement.getClass())) return false; if(! AbstractVisitor.getFullRepresentationString(element).equals( AbstractVisitor.getFullRepresentationString(otElement))) return false; } return true; } } Index: FindDefinitionModelVisitor.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/revisited/visitors/FindDefinitionModelVisitor.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** FindDefinitionModelVisitor.java 20 Jan 2005 10:25:00 -0000 1.1 --- FindDefinitionModelVisitor.java 20 Jan 2005 14:47:59 -0000 1.2 *************** *** 86,96 **** for (int i = 0; i < node.targets.length; i++) { ! String rep = getRepresentationString(node.targets[i]); if(rep != null && rep.equals(tokenToFind)){ ! String value = getRepresentationString(node.value); ! AssignDefinition definition = new AssignDefinition(value, rep, i, node, node.beginLine, node.beginColumn); ! definition.nodeStack.addAll(this.defsStack); definitions.add(definition); } --- 86,95 ---- for (int i = 0; i < node.targets.length; i++) { ! String rep = getFullRepresentationString(node.targets[i]); if(rep != null && rep.equals(tokenToFind)){ ! String value = getFullRepresentationString(node.value); ! AssignDefinition definition = new AssignDefinition(value, rep, i, node, node.beginLine, node.beginColumn, new Scope(this.defsStack)); definitions.add(definition); } Index: AbstractVisitor.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/revisited/visitors/AbstractVisitor.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** AbstractVisitor.java 20 Jan 2005 10:25:00 -0000 1.1 --- AbstractVisitor.java 20 Jan 2005 14:47:59 -0000 1.2 *************** *** 11,14 **** --- 11,15 ---- import org.python.parser.SimpleNode; + import org.python.parser.ast.Attribute; import org.python.parser.ast.Call; import org.python.parser.ast.Expr; *************** *** 42,45 **** --- 43,55 ---- protected String moduleName; + public static String getFullRepresentationString(SimpleNode node) { + if (node instanceof Attribute){ + Attribute a = (Attribute)node; + return getRepresentationString(a.value) + "."+ a.attr; + } else { + return getRepresentationString(node); + } + + } /** * @param node *************** *** 47,51 **** */ public static String getRepresentationString(SimpleNode node) { ! if (REF.hasAttr(node, "name")) { return REF.getAttrObj(node, "name").toString(); --- 57,62 ---- */ public static String getRepresentationString(SimpleNode node) { ! ! if (REF.hasAttr(node, "name")) { return REF.getAttrObj(node, "name").toString(); --- NEW FILE: FindScopeVisitor.java --- /* * Created on Jan 20, 2005 * * @author Fabio Zadrozny */ package org.python.pydev.editor.codecompletion.revisited.visitors; import java.util.Stack; import org.python.parser.SimpleNode; import org.python.parser.ast.ClassDef; import org.python.parser.ast.FunctionDef; /** * @author Fabio Zadrozny */ public class FindScopeVisitor extends AbstractVisitor { /** * Stack of classes / methods representing the scope. */ private Stack stackScope = new Stack(); /** * This is the scope. */ public Scope scope; /** * Variable to mark if we found scope. */ private boolean found = false; /** * line to find */ private int line; /** * column to find */ private int col; /** * Constructor * * @param line * @param col */ public FindScopeVisitor(int line, int col){ this.line = line; this.col = col; } /** * @see org.python.parser.ast.VisitorBase#unhandled_node(org.python.parser.SimpleNode) */ protected Object unhandled_node(SimpleNode node) throws Exception { //the line passed in starts at 1 and the lines for the visitor nodes start at 0 if(! found){ if(line <= node.beginLine - 1 ){ //scope is locked at this time. found = true; scope = new Scope(this.stackScope); } } return null; } /** * @see org.python.parser.ast.VisitorBase#traverse(org.python.parser.SimpleNode) */ public void traverse(SimpleNode node) throws Exception { node.traverse(this); } /** * @see org.python.parser.ast.VisitorBase#visitClassDef(org.python.parser.ast.ClassDef) */ public Object visitClassDef(ClassDef node) throws Exception { if(!found){ stackScope.push(node); node.traverse(this); stackScope.pop(); } return null; } /** * @see org.python.parser.ast.VisitorBase#visitFunctionDef(org.python.parser.ast.FunctionDef) */ public Object visitFunctionDef(FunctionDef node) throws Exception { if(!found){ stackScope.push(node); node.traverse(this); stackScope.pop(); } return null; } } Index: AssignDefinition.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/revisited/visitors/AssignDefinition.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** AssignDefinition.java 20 Jan 2005 10:25:00 -0000 1.1 --- AssignDefinition.java 20 Jan 2005 14:47:59 -0000 1.2 *************** *** 6,11 **** package org.python.pydev.editor.codecompletion.revisited.visitors; - import java.util.Stack; - import org.python.parser.ast.Assign; --- 6,9 ---- *************** *** 48,52 **** * Node with the path of classes / funcs to get to an assign. */ ! public Stack nodeStack = new Stack(); /** --- 46,50 ---- * Node with the path of classes / funcs to get to an assign. */ ! public Scope scope; /** *************** *** 65,69 **** * @param col */ ! public AssignDefinition(String value, String target, int targetPos, Assign ast, int line, int col){ super(line, col); this.target = target; --- 63,67 ---- * @param col */ ! public AssignDefinition(String value, String target, int targetPos, Assign ast, int line, int col, Scope scope){ super(line, col); this.target = target; *************** *** 71,74 **** --- 69,73 ---- this.value = value; this.ast = ast; + this.scope = scope; } } \ No newline at end of file |