blob: 6cfee60ce9aa445f55a8f2fdf7b1582e5733b9be [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 NumberFour AG
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* NumberFour AG - initial API and Implementation (Alex Panchenko)
*******************************************************************************/
package org.eclipse.dltk.javascript.internal.core;
import java.util.List;
import org.eclipse.dltk.internal.javascript.ti.TypeSystemImpl;
import org.eclipse.dltk.javascript.typeinfo.IRMethod;
import org.eclipse.dltk.javascript.typeinfo.IRParameter;
import org.eclipse.dltk.javascript.typeinfo.IRType;
import org.eclipse.dltk.javascript.typeinfo.IRTypeDeclaration;
import org.eclipse.dltk.javascript.typeinfo.ITypeSystem;
import org.eclipse.dltk.javascript.typeinfo.RTypes;
import org.eclipse.dltk.javascript.typeinfo.model.GenericMethod;
import org.eclipse.dltk.javascript.typeinfo.model.Method;
import org.eclipse.dltk.javascript.typeinfo.model.ParameterKind;
public class RMethod extends RMember<Method> implements IRMethod {
private List<IRParameter> parameters;
public RMethod(Method method, IRType type, List<IRParameter> parameters,
IRTypeDeclaration typeDeclaration) {
super(method, type, typeDeclaration);
this.parameters = parameters;
}
public RMethod(Method method, IRTypeDeclaration typeDeclaration) {
super(method, typeDeclaration);
}
@Override
protected void initialize(ITypeSystem typeSystem) {
super.initialize(typeSystem);
parameters = TypeSystemImpl.convertParameters(typeSystem,
member.getParameters());
}
public int getParameterCount() {
checkInitialized();
return parameters.size();
}
public List<IRParameter> getParameters() {
checkInitialized();
return parameters;
}
public boolean isTyped() {
if (getType() != null) { // checkInitialized() is called there
return true;
}
for (int i = 0; i < parameters.size(); ++i) {
final IRParameter parameter = parameters.get(i);
if (parameter.getType() != RTypes.any()
|| parameter.getKind() != ParameterKind.NORMAL) {
return true;
}
}
return false;
}
@Override
public String toString() {
checkInitialized();
final StringBuilder sb = new StringBuilder();
sb.append(getName()).append('(');
for (int i = 0; i < getParameterCount(); ++i) {
if (i != 0) {
sb.append(',');
}
sb.append(parameters.get(i).toString());
}
sb.append(')');
sb.append(':');
sb.append(getType());
return sb.toString();
}
public boolean isAbstract() {
return member.isAbstract();
}
public boolean isGeneric() {
return member instanceof GenericMethod;
}
}