[Pydev-cvs] org.python.pydev.refactoring/src/org/python/pydev/refactoring/ast/visitors/context Pro
Brought to you by:
fabioz
From: Fabio Z. <fa...@us...> - 2008-09-27 20:01:41
|
Update of /cvsroot/pydev/org.python.pydev.refactoring/src/org/python/pydev/refactoring/ast/visitors/context In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21605/src/org/python/pydev/refactoring/ast/visitors/context Modified Files: PropertyVisitor.java AbstractContextVisitor.java ScopeAssignedVisitor.java LocalAttributeVisitor.java GlobalFunctionDefVisitor.java ScopeVariablesVisitor.java GlobalAttributeVisitor.java LocalFunctionDefVisitor.java ClassDefVisitor.java Log Message: Synching to latest changes: Pydev <ul> <li><strong>Editor</strong>: Cursor settings no longer overridden</li> <li><strong>Code-completion</strong>: If __all__ is defined with runtime elements (and not only in a single assign statement), it's ignored for code-completion purposes</li> <li><strong>Debugger</strong>: Pythonpath the same in debug and regular modes (sys.path[0] is the same directory as the file run)</li> <li><strong>Debugger</strong>: Persist choices done in the debugger when files from the debugger are not found</li> <li><strong>Interpreter config</strong>: "email" automatically added to the "forced builtins"</li> <li><strong>Parser</strong>: Correctly recognizing absolute import with 3 or more levels</li> <li><strong>Syntax check</strong>: Option to do only on active editor</li> </ul> Also: tabs changed for spaces Index: AbstractContextVisitor.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.refactoring/src/org/python/pydev/refactoring/ast/visitors/context/AbstractContextVisitor.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** AbstractContextVisitor.java 20 Oct 2007 19:30:59 -0000 1.5 --- AbstractContextVisitor.java 27 Sep 2008 20:00:47 -0000 1.6 *************** *** 28,196 **** public abstract class AbstractContextVisitor<T> extends VisitorBase { ! protected NodeHelper nodeHelper; ! protected List<T> nodes; ! protected final FastStack<AbstractScopeNode<?>> parents; ! protected final FastStack<SimpleNode> stack; ! protected ModuleAdapter moduleAdapter; ! public AbstractContextVisitor(ModuleAdapter module, AbstractNodeAdapter<? extends SimpleNode> parent) { ! super(); ! assert(module != null); ! this.moduleAdapter = module; ! nodeHelper = new NodeHelper(module.getEndLineDelimiter()); ! stack = new FastStack<SimpleNode>(); ! parents = new FastStack<AbstractScopeNode<?>>(); ! parents.push(moduleAdapter); ! stack.push(module.getASTNode()); ! nodes = new ArrayList<T>(); ! } ! private void add(T node) { ! nodes.add(node); ! } ! protected void after() { ! stack.pop(); ! } ! protected AbstractNodeAdapter<? extends SimpleNode> before(SimpleNode node) { ! AbstractNodeAdapter<? extends SimpleNode> context = createContext(node); ! stack.push(node); ! return context; ! } ! private AbstractNodeAdapter<? extends SimpleNode> create(SimpleNode node) { ! AbstractScopeNode<?> parent = parents.peek(); ! if (nodeHelper.isClassDef(node)) { ! return new ClassDefAdapter(moduleAdapter, parent, (ClassDef) node, moduleAdapter.getEndLineDelimiter()); ! } else if (nodeHelper.isFunctionDef(node)) { ! return new FunctionDefAdapter(moduleAdapter, parent, (FunctionDef) node, moduleAdapter.getEndLineDelimiter()); ! } else ! return new SimpleAdapter(moduleAdapter, parent, node, moduleAdapter.getEndLineDelimiter()); ! } ! protected abstract T createAdapter(AbstractScopeNode<?> parent, SimpleNode node); ! protected AbstractNodeAdapter<? extends SimpleNode> createContext(SimpleNode node) { ! if (nodeHelper.isModule(node)) { ! assert (node == moduleAdapter.getASTNode()); ! return moduleAdapter; ! } ! return create(node); ! } ! public List<T> getAll() { ! return nodes; ! } ! protected boolean isInClassDef() { ! for (SimpleNode node : stack) { ! if (nodeHelper.isClassDef(node)) ! return true; ! } ! return false; ! } ! protected boolean isInFunctionDef() { ! for (SimpleNode node : stack) { ! if (nodeHelper.isFunctionDef(node)) ! return true; ! } ! return false; ! } ! protected boolean isParentClassDecl() { ! return nodeHelper.isClassDef(parents.peek().getASTNode()); ! } ! public Iterator<T> iterator() { ! return nodes.iterator(); ! } ! protected void registerInContext(SimpleNode node) { ! T context = createAdapter(parents.peek(), node); ! add(context); ! } ! protected void trackContext(SimpleNode node) throws Exception { ! AbstractNodeAdapter<? extends SimpleNode> context = before(node); ! pushParent(context); ! traverse(node); ! parents.pop(); ! after(); ! } ! protected void updateASTContext(SimpleNode node) throws Exception { ! before(node); ! traverse(node); ! after(); ! } ! public void traverse(FunctionDef node) throws Exception { ! visit(node.decs); ! visit(node.name); ! visit(node.args); ! visit(node.body); ! } ! @Override ! public void traverse(SimpleNode node) throws Exception { ! if (nodeHelper.isFunctionDef(node)) { ! traverse((FunctionDef) node); ! } else ! node.traverse(this); ! } ! @Override ! protected Object unhandled_node(SimpleNode node) throws Exception { ! return null; ! } ! public void visit(SimpleNode node) throws Exception { ! if (node == null) ! return; ! node.accept(this); ! } ! protected void visit(SimpleNode[] body) throws Exception { ! if (body == null) ! return; ! for (SimpleNode node : body) { ! visit(node); ! } ! } ! public Object visitClassDef(ClassDef node) throws Exception { ! trackContext(node); ! return null; ! } ! @Override ! public Object visitFunctionDef(FunctionDef node) throws Exception { ! AbstractNodeAdapter<? extends SimpleNode> context = before(node); ! pushParent(context); ! traverse(node); ! parents.pop(); ! after(); ! return null; ! } ! protected void pushParent(AbstractNodeAdapter<? extends SimpleNode> context) { ! if (context instanceof AbstractScopeNode<?>) { ! parents.push((AbstractScopeNode<?>) context); ! } ! } } --- 28,196 ---- public abstract class AbstractContextVisitor<T> extends VisitorBase { ! protected NodeHelper nodeHelper; ! protected List<T> nodes; ! protected final FastStack<AbstractScopeNode<?>> parents; ! protected final FastStack<SimpleNode> stack; ! protected ModuleAdapter moduleAdapter; ! public AbstractContextVisitor(ModuleAdapter module, AbstractNodeAdapter<? extends SimpleNode> parent) { ! super(); ! assert(module != null); ! this.moduleAdapter = module; ! nodeHelper = new NodeHelper(module.getEndLineDelimiter()); ! stack = new FastStack<SimpleNode>(); ! parents = new FastStack<AbstractScopeNode<?>>(); ! parents.push(moduleAdapter); ! stack.push(module.getASTNode()); ! nodes = new ArrayList<T>(); ! } ! private void add(T node) { ! nodes.add(node); ! } ! protected void after() { ! stack.pop(); ! } ! protected AbstractNodeAdapter<? extends SimpleNode> before(SimpleNode node) { ! AbstractNodeAdapter<? extends SimpleNode> context = createContext(node); ! stack.push(node); ! return context; ! } ! private AbstractNodeAdapter<? extends SimpleNode> create(SimpleNode node) { ! AbstractScopeNode<?> parent = parents.peek(); ! if (nodeHelper.isClassDef(node)) { ! return new ClassDefAdapter(moduleAdapter, parent, (ClassDef) node, moduleAdapter.getEndLineDelimiter()); ! } else if (nodeHelper.isFunctionDef(node)) { ! return new FunctionDefAdapter(moduleAdapter, parent, (FunctionDef) node, moduleAdapter.getEndLineDelimiter()); ! } else ! return new SimpleAdapter(moduleAdapter, parent, node, moduleAdapter.getEndLineDelimiter()); ! } ! protected abstract T createAdapter(AbstractScopeNode<?> parent, SimpleNode node); ! protected AbstractNodeAdapter<? extends SimpleNode> createContext(SimpleNode node) { ! if (nodeHelper.isModule(node)) { ! assert (node == moduleAdapter.getASTNode()); ! return moduleAdapter; ! } ! return create(node); ! } ! public List<T> getAll() { ! return nodes; ! } ! protected boolean isInClassDef() { ! for (SimpleNode node : stack) { ! if (nodeHelper.isClassDef(node)) ! return true; ! } ! return false; ! } ! protected boolean isInFunctionDef() { ! for (SimpleNode node : stack) { ! if (nodeHelper.isFunctionDef(node)) ! return true; ! } ! return false; ! } ! protected boolean isParentClassDecl() { ! return nodeHelper.isClassDef(parents.peek().getASTNode()); ! } ! public Iterator<T> iterator() { ! return nodes.iterator(); ! } ! protected void registerInContext(SimpleNode node) { ! T context = createAdapter(parents.peek(), node); ! add(context); ! } ! protected void trackContext(SimpleNode node) throws Exception { ! AbstractNodeAdapter<? extends SimpleNode> context = before(node); ! pushParent(context); ! traverse(node); ! parents.pop(); ! after(); ! } ! protected void updateASTContext(SimpleNode node) throws Exception { ! before(node); ! traverse(node); ! after(); ! } ! public void traverse(FunctionDef node) throws Exception { ! visit(node.decs); ! visit(node.name); ! visit(node.args); ! visit(node.body); ! } ! @Override ! public void traverse(SimpleNode node) throws Exception { ! if (nodeHelper.isFunctionDef(node)) { ! traverse((FunctionDef) node); ! } else ! node.traverse(this); ! } ! @Override ! protected Object unhandled_node(SimpleNode node) throws Exception { ! return null; ! } ! public void visit(SimpleNode node) throws Exception { ! if (node == null) ! return; ! node.accept(this); ! } ! protected void visit(SimpleNode[] body) throws Exception { ! if (body == null) ! return; ! for (SimpleNode node : body) { ! visit(node); ! } ! } ! public Object visitClassDef(ClassDef node) throws Exception { ! trackContext(node); ! return null; ! } ! @Override ! public Object visitFunctionDef(FunctionDef node) throws Exception { ! AbstractNodeAdapter<? extends SimpleNode> context = before(node); ! pushParent(context); ! traverse(node); ! parents.pop(); ! after(); ! return null; ! } ! protected void pushParent(AbstractNodeAdapter<? extends SimpleNode> context) { ! if (context instanceof AbstractScopeNode<?>) { ! parents.push((AbstractScopeNode<?>) context); ! } ! } } Index: ScopeAssignedVisitor.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.refactoring/src/org/python/pydev/refactoring/ast/visitors/context/ScopeAssignedVisitor.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** ScopeAssignedVisitor.java 20 Oct 2007 19:30:59 -0000 1.4 --- ScopeAssignedVisitor.java 27 Sep 2008 20:00:47 -0000 1.5 *************** *** 26,97 **** public class ScopeAssignedVisitor extends AbstractContextVisitor<SimpleAdapter> { ! private List<String> globalVars; ! public ScopeAssignedVisitor(ModuleAdapter module, AbstractScopeNode<?> parent) { ! super(module, parent); ! globalVars = new ArrayList<String>(); ! } ! @Override ! protected void registerInContext(SimpleNode node) { ! String varName = nodeHelper.getName(node); ! if (!(globalVars.contains(varName))) { ! globalVars.add(varName); ! super.registerInContext(node); ! } ! } ! @Override ! public Object visitImport(Import node) throws Exception { ! return null; ! } ! @Override ! public Object visitImportFrom(ImportFrom node) throws Exception { ! return null; ! } ! @Override ! public Object visitName(Name node) throws Exception { ! if (nodeHelper.isAssign(stack.peek())) ! registerInContext(node); ! return null; ! } ! @Override ! public Object visitAttribute(Attribute node) throws Exception { ! // ignore attribute (must) ! return null; ! } ! @Override ! public Object visitAssign(Assign node) throws Exception { ! before(node); ! visit(node.targets); ! after(); ! return null; ! } ! @Override ! public Object visitModule(Module node) throws Exception { ! visit(node.body); ! return null; ! } ! @Override ! public Object visitFunctionDef(FunctionDef node) throws Exception { ! return null; ! } ! @Override ! public Object visitClassDef(ClassDef node) throws Exception { ! return null; ! } ! @Override ! protected SimpleAdapter createAdapter(AbstractScopeNode<?> parent, SimpleNode node) { ! return new SimpleAdapter(moduleAdapter, parent, node, moduleAdapter.getEndLineDelimiter()); ! } } --- 26,97 ---- public class ScopeAssignedVisitor extends AbstractContextVisitor<SimpleAdapter> { ! private List<String> globalVars; ! public ScopeAssignedVisitor(ModuleAdapter module, AbstractScopeNode<?> parent) { ! super(module, parent); ! globalVars = new ArrayList<String>(); ! } ! @Override ! protected void registerInContext(SimpleNode node) { ! String varName = nodeHelper.getName(node); ! if (!(globalVars.contains(varName))) { ! globalVars.add(varName); ! super.registerInContext(node); ! } ! } ! @Override ! public Object visitImport(Import node) throws Exception { ! return null; ! } ! @Override ! public Object visitImportFrom(ImportFrom node) throws Exception { ! return null; ! } ! @Override ! public Object visitName(Name node) throws Exception { ! if (nodeHelper.isAssign(stack.peek())) ! registerInContext(node); ! return null; ! } ! @Override ! public Object visitAttribute(Attribute node) throws Exception { ! // ignore attribute (must) ! return null; ! } ! @Override ! public Object visitAssign(Assign node) throws Exception { ! before(node); ! visit(node.targets); ! after(); ! return null; ! } ! @Override ! public Object visitModule(Module node) throws Exception { ! visit(node.body); ! return null; ! } ! @Override ! public Object visitFunctionDef(FunctionDef node) throws Exception { ! return null; ! } ! @Override ! public Object visitClassDef(ClassDef node) throws Exception { ! return null; ! } ! @Override ! protected SimpleAdapter createAdapter(AbstractScopeNode<?> parent, SimpleNode node) { ! return new SimpleAdapter(moduleAdapter, parent, node, moduleAdapter.getEndLineDelimiter()); ! } } Index: LocalFunctionDefVisitor.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.refactoring/src/org/python/pydev/refactoring/ast/visitors/context/LocalFunctionDefVisitor.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** LocalFunctionDefVisitor.java 20 Oct 2007 19:30:59 -0000 1.3 --- LocalFunctionDefVisitor.java 27 Sep 2008 20:00:47 -0000 1.4 *************** *** 14,27 **** public class LocalFunctionDefVisitor extends GlobalFunctionDefVisitor { ! public LocalFunctionDefVisitor(ModuleAdapter module, AbstractScopeNode<?> parent) { ! super(module, parent); ! } ! @Override ! public void visit(SimpleNode node) throws Exception { ! if (nodeHelper.isClassDef(node)) { ! return; ! } ! super.visit(node); ! } } --- 14,27 ---- public class LocalFunctionDefVisitor extends GlobalFunctionDefVisitor { ! public LocalFunctionDefVisitor(ModuleAdapter module, AbstractScopeNode<?> parent) { ! super(module, parent); ! } ! @Override ! public void visit(SimpleNode node) throws Exception { ! if (nodeHelper.isClassDef(node)) { ! return; ! } ! super.visit(node); ! } } Index: ClassDefVisitor.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.refactoring/src/org/python/pydev/refactoring/ast/visitors/context/ClassDefVisitor.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** ClassDefVisitor.java 20 Oct 2007 19:30:59 -0000 1.5 --- ClassDefVisitor.java 27 Sep 2008 20:00:47 -0000 1.6 *************** *** 19,36 **** public class ClassDefVisitor extends AbstractContextVisitor<IClassDefAdapter> { ! public ClassDefVisitor(ModuleAdapter module, AbstractNodeAdapter<? extends SimpleNode> parent) { ! super(module, parent); ! } ! @Override ! protected IClassDefAdapter createAdapter(AbstractScopeNode<?> parent, SimpleNode node) { ! return new ClassDefAdapter(moduleAdapter, parent, (ClassDef) node, moduleAdapter.getEndLineDelimiter()); ! } ! @Override ! public Object visitClassDef(ClassDef node) throws Exception { ! registerInContext(node); ! return super.visitClassDef(node); ! } } --- 19,36 ---- public class ClassDefVisitor extends AbstractContextVisitor<IClassDefAdapter> { ! public ClassDefVisitor(ModuleAdapter module, AbstractNodeAdapter<? extends SimpleNode> parent) { ! super(module, parent); ! } ! @Override ! protected IClassDefAdapter createAdapter(AbstractScopeNode<?> parent, SimpleNode node) { ! return new ClassDefAdapter(moduleAdapter, parent, (ClassDef) node, moduleAdapter.getEndLineDelimiter()); ! } ! @Override ! public Object visitClassDef(ClassDef node) throws Exception { ! registerInContext(node); ! return super.visitClassDef(node); ! } } Index: GlobalFunctionDefVisitor.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.refactoring/src/org/python/pydev/refactoring/ast/visitors/context/GlobalFunctionDefVisitor.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** GlobalFunctionDefVisitor.java 20 Oct 2007 19:30:59 -0000 1.4 --- GlobalFunctionDefVisitor.java 27 Sep 2008 20:00:47 -0000 1.5 *************** *** 16,38 **** public class GlobalFunctionDefVisitor extends AbstractContextVisitor<FunctionDefAdapter> { ! public GlobalFunctionDefVisitor(ModuleAdapter module, AbstractScopeNode<?> parent) { ! super(module, parent); ! } ! @Override ! protected FunctionDefAdapter createAdapter(AbstractScopeNode<?> parent, SimpleNode node) { ! return new FunctionDefAdapter(moduleAdapter, parent, (FunctionDef) node, moduleAdapter.getEndLineDelimiter()); ! } ! @Override ! public void visit(SimpleNode node) throws Exception { ! super.visit(node); ! } ! @Override ! public Object visitFunctionDef(FunctionDef node) throws Exception { ! registerInContext(node); ! return super.visitFunctionDef(node); ! } } --- 16,38 ---- public class GlobalFunctionDefVisitor extends AbstractContextVisitor<FunctionDefAdapter> { ! public GlobalFunctionDefVisitor(ModuleAdapter module, AbstractScopeNode<?> parent) { ! super(module, parent); ! } ! @Override ! protected FunctionDefAdapter createAdapter(AbstractScopeNode<?> parent, SimpleNode node) { ! return new FunctionDefAdapter(moduleAdapter, parent, (FunctionDef) node, moduleAdapter.getEndLineDelimiter()); ! } ! @Override ! public void visit(SimpleNode node) throws Exception { ! super.visit(node); ! } ! @Override ! public Object visitFunctionDef(FunctionDef node) throws Exception { ! registerInContext(node); ! return super.visitFunctionDef(node); ! } } Index: LocalAttributeVisitor.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.refactoring/src/org/python/pydev/refactoring/ast/visitors/context/LocalAttributeVisitor.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** LocalAttributeVisitor.java 20 Oct 2007 19:30:59 -0000 1.2 --- LocalAttributeVisitor.java 27 Sep 2008 20:00:47 -0000 1.3 *************** *** 15,42 **** public class LocalAttributeVisitor extends GlobalAttributeVisitor { ! private boolean inLocalScope; ! public LocalAttributeVisitor(ModuleAdapter module, AbstractScopeNode<?> parent) { ! super(module, parent); ! inLocalScope = false; ! } ! @Override ! public void traverse(SimpleNode node) throws Exception { ! if (nodeHelper.isClassDef(node)) { ! ClassDef classDef = (ClassDef) node; ! visit(classDef.body); ! } else ! super.traverse(node); ! } ! @Override ! public Object visitClassDef(ClassDef node) throws Exception { ! if (inLocalScope) ! return null; ! else { ! inLocalScope = true; ! return super.visitClassDef(node); ! } ! } } --- 15,42 ---- public class LocalAttributeVisitor extends GlobalAttributeVisitor { ! private boolean inLocalScope; ! public LocalAttributeVisitor(ModuleAdapter module, AbstractScopeNode<?> parent) { ! super(module, parent); ! inLocalScope = false; ! } ! @Override ! public void traverse(SimpleNode node) throws Exception { ! if (nodeHelper.isClassDef(node)) { ! ClassDef classDef = (ClassDef) node; ! visit(classDef.body); ! } else ! super.traverse(node); ! } ! @Override ! public Object visitClassDef(ClassDef node) throws Exception { ! if (inLocalScope) ! return null; ! else { ! inLocalScope = true; ! return super.visitClassDef(node); ! } ! } } Index: PropertyVisitor.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.refactoring/src/org/python/pydev/refactoring/ast/visitors/context/PropertyVisitor.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** PropertyVisitor.java 20 Oct 2007 19:30:59 -0000 1.4 --- PropertyVisitor.java 27 Sep 2008 20:00:47 -0000 1.5 *************** *** 21,68 **** public class PropertyVisitor extends AbstractContextVisitor<PropertyAdapter> { ! public PropertyVisitor(ModuleAdapter module, AbstractScopeNode<?> parent) { ! super(module, parent); ! } ! @Override ! protected PropertyAdapter createAdapter(AbstractScopeNode<?> parent, SimpleNode node) { ! return new PropertyAdapter(moduleAdapter, parent, node, moduleAdapter.getEndLineDelimiter()); ! } ! @Override ! public Object visitCall(Call node) throws Exception { ! if (nodeHelper.isAssign(stack.peek())) { ! registerInContext(stack.peek()); ! } ! return null; ! } ! @Override ! public Object visitAssign(Assign node) throws Exception { ! if (nodeHelper.isPropertyAssign(node)) { ! stack.push(node); ! visit(node.value); ! stack.pop(); ! } ! return null; ! } ! @Override ! public Object visitFunctionDef(FunctionDef node) throws Exception { ! return null; ! } ! /** ! * Traverse class body only ! */ ! @Override ! public Object visitClassDef(ClassDef node) throws Exception { ! AbstractNodeAdapter<? extends SimpleNode> context = before(node); ! pushParent(context); ! visit(node.body); ! parents.pop(); ! after(); ! return null; ! } } --- 21,68 ---- public class PropertyVisitor extends AbstractContextVisitor<PropertyAdapter> { ! public PropertyVisitor(ModuleAdapter module, AbstractScopeNode<?> parent) { ! super(module, parent); ! } ! @Override ! protected PropertyAdapter createAdapter(AbstractScopeNode<?> parent, SimpleNode node) { ! return new PropertyAdapter(moduleAdapter, parent, node, moduleAdapter.getEndLineDelimiter()); ! } ! @Override ! public Object visitCall(Call node) throws Exception { ! if (nodeHelper.isAssign(stack.peek())) { ! registerInContext(stack.peek()); ! } ! return null; ! } ! @Override ! public Object visitAssign(Assign node) throws Exception { ! if (nodeHelper.isPropertyAssign(node)) { ! stack.push(node); ! visit(node.value); ! stack.pop(); ! } ! return null; ! } ! @Override ! public Object visitFunctionDef(FunctionDef node) throws Exception { ! return null; ! } ! /** ! * Traverse class body only ! */ ! @Override ! public Object visitClassDef(ClassDef node) throws Exception { ! AbstractNodeAdapter<? extends SimpleNode> context = before(node); ! pushParent(context); ! visit(node.body); ! parents.pop(); ! after(); ! return null; ! } } Index: GlobalAttributeVisitor.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.refactoring/src/org/python/pydev/refactoring/ast/visitors/context/GlobalAttributeVisitor.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** GlobalAttributeVisitor.java 20 Oct 2007 19:30:59 -0000 1.4 --- GlobalAttributeVisitor.java 27 Sep 2008 20:00:47 -0000 1.5 *************** *** 30,170 **** public class GlobalAttributeVisitor extends AbstractContextVisitor<SimpleAdapter> { ! private SortedSet<String> uniqueAttributes; ! private FunctionDef lastFunctionDef; ! public GlobalAttributeVisitor(ModuleAdapter module, AbstractScopeNode<?> parent) { ! super(module, parent); ! uniqueAttributes = new TreeSet<String>(); ! } ! @Override ! protected void registerInContext(SimpleNode node) { ! addUniqueOnly(node); ! } ! private void addUniqueOnly(SimpleNode node) { ! if (!(uniqueAttributes.contains(getUniqueID(node)))) { ! uniqueAttributes.add(getUniqueID(node)); ! if (!(moduleAdapter.isImport(nodeHelper.getName(node)))) ! super.registerInContext(node); ! } ! } ! private String getUniqueID(SimpleNode node) { ! String parentName = nodeHelper.getName(parents.peek().getASTNode()); ! String nodeName = nodeHelper.getName(node); ! return parentName + nodeName; ! } ! protected boolean isInAttribute() { ! for (SimpleNode node : stack) { ! if (nodeHelper.isAttribute(node)) ! return true; ! } ! return false; ! } ! @Override ! public Object visitImport(Import node) throws Exception { ! return null; ! } ! @Override ! public Object visitImportFrom(ImportFrom node) throws Exception { ! return null; ! } ! @Override ! public Object visitName(Name node) throws Exception { ! if (nodeHelper.isSelf(node.id)) ! return null; ! if (isInClassDef()) { ! if (!isInFunctionDef()) { ! if (!(moduleAdapter.isGlobal(nodeHelper.getName(node)))) { ! registerInContext(node); ! } ! } else if (lastFunctionDef != null) { ! for (stmtType stmt : lastFunctionDef.body) { ! if (nodeHelper.isClassDef(stmt)) { ! if (stmt.equals(parents.peek().getASTNode())) { ! registerInContext(node); ! } ! } ! } ! } ! } ! return null; ! } ! @Override ! public Object visitNameTok(NameTok node) throws Exception { ! if (isParentClassDecl() && isInAttribute()) { ! if (nodeHelper.isAttribute(stack.peek())) { ! registerInContext(node); ! } ! } ! return super.visitNameTok(node); ! } ! @Override ! public Object visitAttribute(Attribute node) throws Exception { ! before(node); ! if (isParentClassDecl()) { ! if (nodeHelper.isName(node.value)) { ! SimpleNode parent = parents.peek().getASTNode(); ! if (nodeHelper.isFullyQualified(node.value, parent)) { ! if (nodeHelper.isNameTok(node.attr)) ! visit(node.attr); ! } ! } ! } ! after(); ! return null; ! } ! @Override ! public Object visitCall(Call node) throws Exception { ! // ignore name! ! visit(node.args); ! visit(node.keywords); ! visit(node.starargs); ! visit(node.kwargs); ! return null; ! } ! @Override ! public Object visitFunctionDef(FunctionDef node) throws Exception { ! lastFunctionDef = node; ! // Track by class only (avoid function tracking) ! updateASTContext(node); ! return null; ! } ! @Override ! public Object visitClassDef(ClassDef node) throws Exception { ! AbstractNodeAdapter<? extends SimpleNode> context = before(node); ! pushParent(context); ! visit(node.body); ! parents.pop(); ! after(); ! return null; ! } ! @Override ! public Object visitAssign(Assign node) throws Exception { ! if (nodeHelper.isPropertyAssign(node)) ! return null; ! before(node); ! visit(node.targets); ! after(); ! return null; ! } ! @Override ! protected SimpleAdapter createAdapter(AbstractScopeNode<?> parent, SimpleNode node) { ! return new SimpleAdapter(moduleAdapter, parent, node, moduleAdapter.getEndLineDelimiter()); ! } } --- 30,170 ---- public class GlobalAttributeVisitor extends AbstractContextVisitor<SimpleAdapter> { ! private SortedSet<String> uniqueAttributes; ! private FunctionDef lastFunctionDef; ! public GlobalAttributeVisitor(ModuleAdapter module, AbstractScopeNode<?> parent) { ! super(module, parent); ! uniqueAttributes = new TreeSet<String>(); ! } ! @Override ! protected void registerInContext(SimpleNode node) { ! addUniqueOnly(node); ! } ! private void addUniqueOnly(SimpleNode node) { ! if (!(uniqueAttributes.contains(getUniqueID(node)))) { ! uniqueAttributes.add(getUniqueID(node)); ! if (!(moduleAdapter.isImport(nodeHelper.getName(node)))) ! super.registerInContext(node); ! } ! } ! private String getUniqueID(SimpleNode node) { ! String parentName = nodeHelper.getName(parents.peek().getASTNode()); ! String nodeName = nodeHelper.getName(node); ! return parentName + nodeName; ! } ! protected boolean isInAttribute() { ! for (SimpleNode node : stack) { ! if (nodeHelper.isAttribute(node)) ! return true; ! } ! return false; ! } ! @Override ! public Object visitImport(Import node) throws Exception { ! return null; ! } ! @Override ! public Object visitImportFrom(ImportFrom node) throws Exception { ! return null; ! } ! @Override ! public Object visitName(Name node) throws Exception { ! if (nodeHelper.isSelf(node.id)) ! return null; ! if (isInClassDef()) { ! if (!isInFunctionDef()) { ! if (!(moduleAdapter.isGlobal(nodeHelper.getName(node)))) { ! registerInContext(node); ! } ! } else if (lastFunctionDef != null) { ! for (stmtType stmt : lastFunctionDef.body) { ! if (nodeHelper.isClassDef(stmt)) { ! if (stmt.equals(parents.peek().getASTNode())) { ! registerInContext(node); ! } ! } ! } ! } ! } ! return null; ! } ! @Override ! public Object visitNameTok(NameTok node) throws Exception { ! if (isParentClassDecl() && isInAttribute()) { ! if (nodeHelper.isAttribute(stack.peek())) { ! registerInContext(node); ! } ! } ! return super.visitNameTok(node); ! } ! @Override ! public Object visitAttribute(Attribute node) throws Exception { ! before(node); ! if (isParentClassDecl()) { ! if (nodeHelper.isName(node.value)) { ! SimpleNode parent = parents.peek().getASTNode(); ! if (nodeHelper.isFullyQualified(node.value, parent)) { ! if (nodeHelper.isNameTok(node.attr)) ! visit(node.attr); ! } ! } ! } ! after(); ! return null; ! } ! @Override ! public Object visitCall(Call node) throws Exception { ! // ignore name! ! visit(node.args); ! visit(node.keywords); ! visit(node.starargs); ! visit(node.kwargs); ! return null; ! } ! @Override ! public Object visitFunctionDef(FunctionDef node) throws Exception { ! lastFunctionDef = node; ! // Track by class only (avoid function tracking) ! updateASTContext(node); ! return null; ! } ! @Override ! public Object visitClassDef(ClassDef node) throws Exception { ! AbstractNodeAdapter<? extends SimpleNode> context = before(node); ! pushParent(context); ! visit(node.body); ! parents.pop(); ! after(); ! return null; ! } ! @Override ! public Object visitAssign(Assign node) throws Exception { ! if (nodeHelper.isPropertyAssign(node)) ! return null; ! before(node); ! visit(node.targets); ! after(); ! return null; ! } ! @Override ! protected SimpleAdapter createAdapter(AbstractScopeNode<?> parent, SimpleNode node) { ! return new SimpleAdapter(moduleAdapter, parent, node, moduleAdapter.getEndLineDelimiter()); ! } } Index: ScopeVariablesVisitor.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.refactoring/src/org/python/pydev/refactoring/ast/visitors/context/ScopeVariablesVisitor.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** ScopeVariablesVisitor.java 20 Oct 2007 19:30:59 -0000 1.4 --- ScopeVariablesVisitor.java 27 Sep 2008 20:00:47 -0000 1.5 *************** *** 22,90 **** public class ScopeVariablesVisitor extends AbstractContextVisitor<SimpleAdapter> { ! public ScopeVariablesVisitor(ModuleAdapter module, AbstractScopeNode<?> parent) { ! super(module, parent); ! } ! @Override ! public void visit(SimpleNode node) throws Exception { ! if (nodeHelper.isClassDef(node)) ! return; ! if (nodeHelper.isFunctionDef(node)) ! return; ! super.visit(node); ! } ! @Override ! public void traverse(SimpleNode node) throws Exception { ! if (nodeHelper.isClassDef(node)) ! return; ! if (nodeHelper.isFunctionDef(node)) ! return; ! super.traverse(node); ! } ! @Override ! public Object visitImport(Import node) throws Exception { ! return null; ! } ! @Override ! public Object visitImportFrom(ImportFrom node) throws Exception { ! return null; ! } ! @Override ! protected SimpleAdapter createAdapter(AbstractScopeNode<?> parent, SimpleNode node) { ! return new SimpleAdapter(this.moduleAdapter, parent, node, moduleAdapter.getEndLineDelimiter()); ! } ! @Override ! public Object visitAttribute(Attribute node) throws Exception { ! visit(node.value); // could be a local variable if not self ! return null; ! } ! @Override ! public Object visitClassDef(ClassDef node) throws Exception { ! visit(node.body); ! return null; ! } ! @Override ! public Object visitModule(Module node) throws Exception { ! visit(node.body); ! return null; ! } ! @Override ! public Object visitName(Name node) throws Exception { ! if (node.id.compareTo(NodeHelper.KEYWORD_SELF) == 0) ! return null; ! registerInContext(node); ! return null; ! } } --- 22,90 ---- public class ScopeVariablesVisitor extends AbstractContextVisitor<SimpleAdapter> { ! public ScopeVariablesVisitor(ModuleAdapter module, AbstractScopeNode<?> parent) { ! super(module, parent); ! } ! @Override ! public void visit(SimpleNode node) throws Exception { ! if (nodeHelper.isClassDef(node)) ! return; ! if (nodeHelper.isFunctionDef(node)) ! return; ! super.visit(node); ! } ! @Override ! public void traverse(SimpleNode node) throws Exception { ! if (nodeHelper.isClassDef(node)) ! return; ! if (nodeHelper.isFunctionDef(node)) ! return; ! super.traverse(node); ! } ! @Override ! public Object visitImport(Import node) throws Exception { ! return null; ! } ! @Override ! public Object visitImportFrom(ImportFrom node) throws Exception { ! return null; ! } ! @Override ! protected SimpleAdapter createAdapter(AbstractScopeNode<?> parent, SimpleNode node) { ! return new SimpleAdapter(this.moduleAdapter, parent, node, moduleAdapter.getEndLineDelimiter()); ! } ! @Override ! public Object visitAttribute(Attribute node) throws Exception { ! visit(node.value); // could be a local variable if not self ! return null; ! } ! @Override ! public Object visitClassDef(ClassDef node) throws Exception { ! visit(node.body); ! return null; ! } ! @Override ! public Object visitModule(Module node) throws Exception { ! visit(node.body); ! return null; ! } ! @Override ! public Object visitName(Name node) throws Exception { ! if (node.id.compareTo(NodeHelper.KEYWORD_SELF) == 0) ! return null; ! registerInContext(node); ! return null; ! } } |