package org.erlide.util;
import com.ericsson.otp.erlang.OtpErlangAtom;
import com.ericsson.otp.erlang.OtpErlangList;
import com.ericsson.otp.erlang.OtpErlangObject;
import com.ericsson.otp.erlang.OtpErlangTuple;
public class ErlangFunctionCall {
private final String module;
private final String function;
private final int arity;
private final String parameters;
public ErlangFunctionCall(final String module, final String function,
final int arity) {
this.module = module;
this.function = function;
this.arity = arity;
parameters = null;
}
public ErlangFunctionCall(final String module, final String function,
final String parameters) {
this.module = module;
this.function = function;
arity = -1;
this.parameters = parameters;
}
public ErlangFunctionCall(final OtpErlangTuple t) {
final OtpErlangAtom m = (OtpErlangAtom) t.elementAt(0);
final OtpErlangAtom f = (OtpErlangAtom) t.elementAt(1);
final OtpErlangList pars = Util.listValue(t.elementAt(2));
module = m.atomValue();
function = f.atomValue();
final StringBuilder sb = new StringBuilder("(");
for (final OtpErlangObject i : pars) {
sb.append(i.toString()).append(", ");
}
if (pars.arity() > 0) {
sb.delete(sb.length() - 2, Integer.MAX_VALUE);
}
sb.append(')');
parameters = sb.toString();
arity = pars.arity();
}
public String getModule() {
return module;
}
public String getName() {
return function;
}
public int getArity() {
return arity;
}
public String getParameters() {
return parameters;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append(module).append(':').append(function);
if (parameters != null) {
sb.append(parameters);
} else {
sb.append('/').append(arity);
}
return sb.toString();
}
}