/* * 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 java.util.StringTokenizer; import org.python.pydev.core.IToken; import org.python.pydev.parser.jython.SimpleNode; import org.python.pydev.parser.jython.SpecialStr; import org.python.pydev.parser.jython.ast.ClassDef; 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.argumentsType; import org.python.pydev.parser.jython.ast.exprType; import org.python.pydev.parser.jython.ast.factory.AdapterPrefs; public class ClassDefAdapterFromTokens implements IClassDefAdapter { private List<IToken> tokens; private String parentName; private AdapterPrefs adapterPrefs; private ModuleAdapter module; private List<FunctionDefAdapter> cache; public ClassDefAdapterFromTokens(ModuleAdapter module, String parentName, List<IToken> tokens, AdapterPrefs adapterPrefs) { this.module = module; this.parentName = parentName; this.tokens = tokens; this.adapterPrefs = adapterPrefs; } public List<SimpleAdapter> getAssignedVariables() { throw new RuntimeException("Not implemented"); } public List<SimpleAdapter> getAttributes() { throw new RuntimeException("Not implemented"); } public List<String> getBaseClassNames() { return new ArrayList<String>(); } public List<IClassDefAdapter> getBaseClasses() { return new ArrayList<IClassDefAdapter>(); } public FunctionDefAdapter getFirstInit() { return null; } public List<FunctionDefAdapter> getFunctions() { return getFunctionsInitFiltered(); } public synchronized List<FunctionDefAdapter> getFunctionsInitFiltered() { if (cache == null) { cache = new ArrayList<FunctionDefAdapter>(); for (IToken tok : this.tokens) { if (tok.getType() == IToken.TYPE_FUNCTION || tok.getType() == IToken.TYPE_BUILTIN || tok.getType() == IToken.TYPE_UNKNOWN) { String args = tok.getArgs(); List<exprType> arguments = new ArrayList<exprType>(); boolean useAnyArgs = false; if (args.length() > 0) { StringTokenizer strTok = new StringTokenizer(args, "( ,)"); if (!strTok.hasMoreTokens()) { useAnyArgs = true; } else { while (strTok.hasMoreTokens()) { String nextArg = strTok.nextToken(); arguments.add(new Name(nextArg, Name.Load, false)); } } } else { useAnyArgs = true; } argumentsType functionArguments = new argumentsType(arguments.toArray(new exprType[0]), null, null, null, null, null, null, null, null, null); if (useAnyArgs) { Name name = new Name("self", Name.Store, false); name.addSpecial(new SpecialStr(",", -1, -1), true); functionArguments.args = new exprType[] { name }; functionArguments.vararg = new NameTok("args", NameTok.VarArg); functionArguments.kwarg = new NameTok("kwargs", NameTok.KwArg); } // System.out.println(tok.getRepresentation()+tok.getArgs()); FunctionDef functionDef = new FunctionDef( new NameTok(tok.getRepresentation(), NameTok.FunctionName), functionArguments, null, null, null); cache.add(new FunctionDefAdapter(this.getModule(), null, functionDef, adapterPrefs)); } } } return cache; } public String getNodeBodyIndent() { throw new RuntimeException("Not implemented"); } public List<PropertyAdapter> getProperties() { throw new RuntimeException("Not implemented"); } public boolean hasAttributes() { throw new RuntimeException("Not implemented"); } public boolean hasBaseClass() { return false; } public boolean hasFunctions() { throw new RuntimeException("Not implemented"); } public boolean hasFunctionsInitFiltered() { return this.tokens.size() > 0; } public boolean hasInit() { throw new RuntimeException("Not implemented"); } public boolean isNested() { throw new RuntimeException("Not implemented"); } public boolean isNewStyleClass() { throw new RuntimeException("Not implemented"); } public String getName() { return parentName; } public String getParentName() { throw new RuntimeException("Not implemented"); } public ClassDef getASTNode() { throw new RuntimeException("Not implemented"); } public SimpleNode getASTParent() { throw new RuntimeException("Not implemented"); } public ModuleAdapter getModule() { return this.module; } public int getNodeFirstLine() { return 0; } public int getNodeIndent() { return 0; } public int getNodeLastLine() { return 0; } public AbstractNodeAdapter<? extends SimpleNode> getParent() { return null; } public SimpleNode getParentNode() { return null; } public boolean isModule() { return false; } }