/* * Copyright (C) 2006, 2007 Dennis Hunziker, Ueli Kistler * Copyright (C) 2007 Reto Schuettel, Robin Stocker * * IFS Institute for Software, HSR Rapperswil, Switzerland * */ package org.python.pydev.refactoring.ast.adapters; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.Assert; import org.python.pydev.core.docutils.StringUtils; import org.python.pydev.parser.jython.ast.argumentsType; import org.python.pydev.parser.jython.ast.exprType; import org.python.pydev.parser.jython.ast.factory.AdapterPrefs; import org.python.pydev.refactoring.ast.visitors.rewriter.Rewriter; public class FunctionArgAdapter extends AbstractNodeAdapter<argumentsType> { public FunctionArgAdapter(ModuleAdapter module, FunctionDefAdapter parent, argumentsType node, AdapterPrefs adapterPrefs) { super(module, parent, node, adapterPrefs); Assert.isNotNull(module); } public boolean hasKwArg() { return getASTNode().kwarg != null; } public boolean hasVarArg() { return (getASTNode().vararg != null); } public boolean hasArg() { return (getASTNode().args != null) && (getASTNode().args.length > 0); } public List<String> getArgOnly() { List<String> args = new ArrayList<String>(); for (exprType arg : getASTNode().args) { args.add(nodeHelper.getName(arg)); } return args; } public List<String> getSelfFilteredArgNames() { List<String> args = new ArrayList<String>(); for (exprType arg : getSelfFilteredArgs()) { args.add(nodeHelper.getName(arg)); } return args; } public List<exprType> getSelfFilteredArgs() { List<exprType> args = new ArrayList<exprType>(); if (getASTNode().args == null) { return args; } for (exprType arg : getASTNode().args) { String argument = nodeHelper.getName(arg); if (!nodeHelper.isSelf(argument)) { args.add((exprType) arg.createCopy()); //We have to create a copy because we don't want specials. } } return args; } public boolean isEmptyArgument() { return (!hasArg()) && (!(hasVarArg())) && (!(hasKwArg())); } public boolean hasOnlySelf() { return getSelfFilteredArgs().size() == 0 && (!(hasVarArg())) && (!(hasKwArg())); } public String getSignature() { argumentsType astNode = this.getASTNode().createCopy(); AdapterPrefs adapterPrefs = new AdapterPrefs(getModule().getEndLineDelimiter(), this.getModule().nature); String ret = StringUtils.replaceNewLines(Rewriter.createSourceFromAST(astNode, true, adapterPrefs), ""); return ret; } }