package org.erlide.engine.model.erlang;
import org.erlide.util.erlang.OtpBindings;
import org.erlide.util.erlang.OtpErlang;
import com.ericsson.otp.erlang.OtpErlangObject;
import com.ericsson.otp.erlang.OtpErlangTuple;
public class FunctionRef {
public final String module;
public final String function;
public final int arity;
public FunctionRef(final String module, final String function, final int arity) {
this.module = module;
this.function = function;
this.arity = arity;
}
@SuppressWarnings("boxing")
public FunctionRef(final OtpErlangObject e) {
if (e instanceof OtpErlangTuple) {
final OtpErlangTuple t = (OtpErlangTuple) e;
try {
final OtpBindings bb = OtpErlang.match("{M:a, F:a, A:i}", t);
final String m = bb.getAs("M", String.class);
final String f = bb.getAs("F", String.class);
final int a = bb.getAs("A", Integer.class);
module = m;
function = f;
arity = a;
} catch (final Exception e2) {
throw new IllegalArgumentException();
}
} else {
throw new IllegalArgumentException();
}
}
public FunctionRef(final IErlFunction parent) {
module = parent.getModuleName();
function = parent.getName();
arity = parent.getArity();
}
@Override
public String toString() {
return module + ":" + function + "/" + arity;
}
}