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

📄 extractcalledit.java

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

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

import org.python.pydev.parser.jython.SimpleNode;
import org.python.pydev.parser.jython.ast.Assign;
import org.python.pydev.parser.jython.ast.Attribute;
import org.python.pydev.parser.jython.ast.Call;
import org.python.pydev.parser.jython.ast.Name;
import org.python.pydev.parser.jython.ast.NameTok;
import org.python.pydev.parser.jython.ast.exprType;
import org.python.pydev.refactoring.ast.adapters.IASTNodeAdapter;
import org.python.pydev.refactoring.ast.adapters.IClassDefAdapter;
import org.python.pydev.refactoring.coderefactoring.extractmethod.request.ExtractMethodRequest;
import org.python.pydev.refactoring.core.edit.AbstractReplaceEdit;

public class ExtractCallEdit extends AbstractReplaceEdit {

	private String methodName;

	private int offset;

	private IASTNodeAdapter<?> offsetAdapter;

	private int replaceLength;

	private List<String> callParameters;

	private List<String> returnVariables;

	public ExtractCallEdit(ExtractMethodRequest req) {
		super(req);
		this.methodName = req.getMethodName();
		this.offset = req.getSelection().getOffset();

		this.replaceLength = req.getSelection().getLength();
		this.offsetAdapter = req.getOffsetNode();

		this.callParameters = req.getParameters();
		this.returnVariables = req.getReturnVariables();
	}

	@Override
	protected SimpleNode getEditNode() {

		List<exprType> argsList = initCallArguments();
		Call methodCall = new Call(createCallAttribute(), argsList.toArray(new exprType[0]), null, null, null);

		return initSubstituteCall(methodCall);

	}

	private SimpleNode initSubstituteCall(Call methodCall) {
		if (returnVariables.size() == 0) {
			return methodCall;
		} else {
			List<exprType> returnExpr = new ArrayList<exprType>();
			for (String returnVar : returnVariables) {
				returnExpr.add(new Name(returnVar, Name.Store));
			}

			return new Assign(returnExpr.toArray(new exprType[0]), methodCall);
		}
	}

	private List<exprType> initCallArguments() {
		List<exprType> argsList = new ArrayList<exprType>();
		for (String parameter : callParameters) {
			argsList.add(new Name(parameter, Name.Load));
		}
		return argsList;
	}

	private exprType createCallAttribute() {
		if (this.offsetAdapter instanceof IClassDefAdapter) {
			return new Attribute(new Name("self", Name.Load), new NameTok(this.methodName, NameTok.Attrib), Attribute.Load);
		} else {
			return new Name(this.methodName, Name.Load);
		}
	}

	@Override
	public int getOffsetStrategy() {
		return 0;
	}

	@Override
	public int getOffset() {
		return offset;
	}

	@Override
	protected int getReplaceLength() {
		return replaceLength;
	}

}

⌨️ 快捷键说明

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