/**
* Aptana Studio
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the GNU Public License (GPL) v3 (with exceptions).
* Please see the license.html included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package com.aptana.ruby.internal.core;
import java.util.HashSet;
import java.util.Set;
import com.aptana.ruby.core.IRubyElement;
import com.aptana.ruby.core.IRubyMethod;
public class RubyMethod extends NamedMember implements IRubyMethod
{
private String[] fParameters;
private Visibility fVisibility;
private boolean isSingleton;
private Set<String> blockVars;
public RubyMethod(String name, String[] parameters, int start, int nameStart, int nameEnd)
{
super(name, start, nameStart, nameEnd);
fParameters = parameters;
blockVars = new HashSet<String>();
}
public void addBlockVar(String name)
{
blockVars.add(name);
}
public String[] getBlockVars()
{
return blockVars.toArray(new String[blockVars.size()]);
}
public String[] getParameters()
{
return fParameters;
}
public Visibility getVisibility()
{
return fVisibility;
}
@Override
public short getNodeType()
{
return IRubyElement.METHOD;
}
public boolean isSingleton()
{
return isSingleton;
}
public void setVisibility(Visibility visibility)
{
fVisibility = visibility;
}
public void setIsSingleton(boolean singleton)
{
isSingleton = singleton;
}
@Override
public String toString()
{
StringBuilder text = new StringBuilder();
text.append(getName());
text.append('(');
String[] params = getParameters();
for (int i = 0; i < params.length; ++i)
{
text.append(params[i]);
if (i < params.length - 1)
{
text.append(", "); //$NON-NLS-1$
}
}
text.append(')');
return text.toString();
}
public boolean isConstructor()
{
return !isSingleton() && getName().equals("initialize"); //$NON-NLS-1$
}
}