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

📄 propertyadapter.java

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

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.Name;
import org.python.pydev.parser.jython.ast.exprType;
import org.python.pydev.parser.jython.ast.keywordType;

public class PropertyAdapter extends AbstractNodeAdapter<SimpleNode> {

	private Name getter;

	private Name setter;

	private Name delete;

	private SimpleNode doc;

	public PropertyAdapter(ModuleAdapter module, AbstractScopeNode<?> parent, SimpleNode node, String endLineDelim) {
		super(module, parent, node, endLineDelim);
		if (nodeHelper.isAssign(getASTNode())) {
			initByAssign();
		} else {
			// functiondef not supported yet
		}
	}

	private void initByAssign() {
		getter = null;
		setter = null;
		delete = null;
		doc = null;

		exprType[] args = getPropertyArgs();
		for (int i = 0; i < args.length; i++) {
			setMethod(args[i], i);
		}
		keywordType[] kws = getValue().keywords;
		for (int i = 0; i < kws.length; i++) {
			setKeyword(kws[i]);
		}
		if (getter == null)
			getter = createNone();
		if (setter == null)
			setter = createNone();
		if (delete == null)
			delete = createNone();

	}

	private void setKeyword(keywordType kw) {
		if (nodeHelper.isFGet(kw)) {
			this.getter = (Name) kw.value;
		} else if (nodeHelper.isFSet(kw)) {
			this.setter = (Name) kw.value;
		} else if (nodeHelper.isFDel(kw)) {
			this.delete = (Name) kw.value;
		} else if (nodeHelper.isKeywordStr(kw)) {
			this.doc = kw;
		}
	}

	private Name createNone() {
		return new Name("None", Name.Param);
	}

	private void setMethod(exprType expr, int i) {
		if (nodeHelper.isStr(expr)) {
			doc = expr;
		} else if (nodeHelper.isName(expr)) {
			Name name = (Name) expr;
			switch (i) {
			case 0:
				getter = name;
				break;
			case 1:
				setter = name;
				break;
			case 2:
				delete = name;
				break;
			case 3:
				if (!(nodeHelper.isNone(name)))
					doc = name;
			default:
				break;
			}
		}
	}

	@Override
	public String getName() {
		return nodeHelper.getName(getTarget());
	}

	public boolean isComplete() {
		return hasGetter() && hasSetter() && hasDelete() && hasDocString();
	}

	public boolean hasSetter() {
		return (!(nodeHelper.isNone(setter)));
	}

	public boolean hasDelete() {
		return (!(nodeHelper.isNone(delete)));
	}

	public boolean hasDocString() {
		return doc != null;
	}

	public boolean hasGetter() {
		return (!(nodeHelper.isNone(getter)));
	}

	private Assign getAssign() {
		return (Assign) getASTNode();
	}

	private exprType[] getPropertyArgs() {
		return getValue().args;
	}

	private Name getTarget() {
		return (Name) getAssign().targets[0];
	}

	private Call getValue() {
		return (Call) getAssign().value;
	}
}

⌨️ 快捷键说明

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