⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 innermodelvisitor.java

📁 Python Development Environment (Python IDE plugin for Eclipse). Features editor, code completion, re
💻 JAVA
字号:
/*
 * Created on Dec 21, 2004
 *
 * @author Fabio Zadrozny
 */
package org.python.pydev.editor.codecompletion.revisited.visitors;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.python.pydev.core.ICompletionState;
import org.python.pydev.parser.jython.SimpleNode;
import org.python.pydev.parser.jython.ast.Assign;
import org.python.pydev.parser.jython.ast.Call;
import org.python.pydev.parser.jython.ast.ClassDef;
import org.python.pydev.parser.jython.ast.FunctionDef;

/**
 * This class is used to visit the inner context of class or a function. 
 * 
 * @author Fabio Zadrozny
 */
public class InnerModelVisitor extends AbstractVisitor {

    /**
     * List that contains heuristics to find attributes.
     */
    private List attrsHeuristics = new ArrayList();

    public InnerModelVisitor(String moduleName, ICompletionState state){
    	this.moduleName = moduleName;
        attrsHeuristics.add(new HeuristicFindAttrs(HeuristicFindAttrs.WHITIN_METHOD_CALL, HeuristicFindAttrs.IN_KEYWORDS, "properties.create", moduleName, state));
        attrsHeuristics.add(new HeuristicFindAttrs(HeuristicFindAttrs.WHITIN_ANY	    , HeuristicFindAttrs.IN_ASSIGN  , "", moduleName, state));
    }
    
    /**
     * This should be changed as soon as we know what should we visit.
     */
    private static int VISITING_NOTHING = -1;
    
    /**
     * When visiting class, get attributes and methods
     */
    private static int VISITING_CLASS = 0;
    
    /**
     * Initially, we're visiting nothing.
     */
    private int visiting = VISITING_NOTHING;
    
    
    /**
     * @see org.python.pydev.parser.jython.ast.VisitorBase#unhandled_node(org.python.pydev.parser.jython.SimpleNode)
     */
    protected Object unhandled_node(SimpleNode node) throws Exception {
        return null;
    }

    /**
     * @see org.python.pydev.parser.jython.ast.VisitorBase#traverse(org.python.pydev.parser.jython.SimpleNode)
     */
    public void traverse(SimpleNode node) throws Exception {
        node.traverse(this);
    }

    public Object visitClassDef(ClassDef node) throws Exception {
        if(visiting == VISITING_NOTHING){
            visiting = VISITING_CLASS;
	        node.traverse(this);
	        
        }else if(visiting == VISITING_CLASS){ 
            //that's a class within the class we're visiting
            addToken(node);
        }
        
        return null;
    }

    public Object visitFunctionDef(FunctionDef node) throws Exception {
        if(visiting == VISITING_CLASS){
            addToken(node);
            
            //iterate heuristics to find attributes
            for (Iterator iter = attrsHeuristics.iterator(); iter.hasNext();) {
                HeuristicFindAttrs element = (HeuristicFindAttrs) iter.next();
                element.visitFunctionDef(node);
                addElementTokens(element);
            }

        }
        return null;
    }
        
    /**
     * @see org.python.pydev.parser.jython.ast.VisitorBase#visitAssign(org.python.pydev.parser.jython.ast.Assign)
     */
    public Object visitAssign(Assign node) throws Exception {
        if(visiting == VISITING_CLASS){
            
            //iterate heuristics to find attributes
	        for (Iterator iter = attrsHeuristics.iterator(); iter.hasNext();) {
	            HeuristicFindAttrs element = (HeuristicFindAttrs) iter.next();
	            element.visitAssign(node);
	            addElementTokens(element);
	        }
        }
        return null;
    }
    
    /**
     * @see org.python.pydev.parser.jython.ast.VisitorBase#visitCall(org.python.pydev.parser.jython.ast.Call)
     */
    public Object visitCall(Call node) throws Exception {
        if(visiting == VISITING_CLASS){
            
            //iterate heuristics to find attributes
	        for (Iterator iter = attrsHeuristics.iterator(); iter.hasNext();) {
	            HeuristicFindAttrs element = (HeuristicFindAttrs) iter.next();
	            element.visitCall(node);
	            addElementTokens(element);
	        }
        }
        return null;
    }
    
    /**
     * @param element
     */
    private void addElementTokens(HeuristicFindAttrs element) {
        tokens.addAll(element.tokens);
        element.tokens.clear();
    }

    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -