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

📄 localvarrenamevisitor.java

📁 Python Development Environment (Python IDE plugin for Eclipse). Features editor, code completion, re
💻 JAVA
字号:
package org.python.pydev.refactoring.ast.visitors.renamer;

import java.util.HashMap;
import java.util.Map;

import org.python.pydev.parser.jython.SimpleNode;
import org.python.pydev.parser.jython.ast.Attribute;
import org.python.pydev.parser.jython.ast.FunctionDef;
import org.python.pydev.parser.jython.ast.Name;
import org.python.pydev.parser.jython.ast.NameTok;
import org.python.pydev.parser.jython.ast.VisitorBase;
import org.python.pydev.parser.jython.ast.argumentsType;
import org.python.pydev.refactoring.ast.visitors.NodeHelper;

public class LocalVarRenameVisitor extends VisitorBase {

	private Map<String, String> renameMap;

	private NodeHelper nodeHelper;

	public LocalVarRenameVisitor(String endLineDelim) {
		this.renameMap = new HashMap<String, String>();
		this.nodeHelper = new NodeHelper(endLineDelim);
	}

	public void visit(SimpleNode node) throws Exception {
		if (node == null)
			return;

		if (nodeHelper.isFunctionOrClassDef(node))
			return;

		node.accept(this);
	}

	@Override
	public void traverse(SimpleNode node) throws Exception {
		if (node != null) {
			node.traverse(this);
		}
	}

	@Override
	public Object visitName(Name node) throws Exception {
		if (renameMap.containsKey(node.id)) {
			node.id = renameMap.get(node.id);
		}
		return null;
	}

	@Override
	public Object visitNameTok(NameTok node) throws Exception {
		if (renameMap.containsKey(node.id)) {
			node.id = renameMap.get(node.id);
		}
		return null;
	}

	@Override
	public Object visitFunctionDef(FunctionDef node) throws Exception {
		// ignore function name
		visit(node.args);
		visit(node.body);
		return null;
	}

	private void visit(argumentsType args) throws Exception {
		visit(args.args);
		visit(args.vararg);
		visit(args.kwarg);
	}

	@Override
	public Object visitAttribute(Attribute node) throws Exception {
		visit(node.value);
		return null;
	}

	private void visit(SimpleNode[] nodes) throws Exception {
		for (SimpleNode node : nodes) {
			visit(node);
		}
	}

	@Override
	protected Object unhandled_node(SimpleNode node) throws Exception {
		return null;
	}

	/**
	 * 
	 * @param renameMap
	 *            Contains association oldName => newName
	 */
	public void setRenameMap(Map<String, String> renameMap) {
		this.renameMap = renameMap;
	}

}

⌨️ 快捷键说明

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