package org.erlide.engine.services.search;
import org.erlide.engine.model.root.IErlModule;
import com.ericsson.otp.erlang.OtpErlangAtom;
import com.ericsson.otp.erlang.OtpErlangLong;
import com.ericsson.otp.erlang.OtpErlangObject;
import com.ericsson.otp.erlang.OtpErlangString;
import com.ericsson.otp.erlang.OtpErlangTuple;
public class VariablePattern extends ErlangSearchPattern {
private final String functionName;
private final int arity;
private final String head;
private final String name;
private final IErlModule module;
public VariablePattern(final String functionName, final int arity, final String head,
final String name, final LimitTo limitTo, final IErlModule module) {
super(limitTo);
this.functionName = functionName;
this.arity = arity;
this.head = head;
this.name = name;
this.module = module;
}
@Override
public OtpErlangObject getSearchObject() {
final OtpErlangObject t = makeSPatternObject(VARIABLE_DEF_ATOM, VARIABLE_REF_ATOM,
name);
return new OtpErlangTuple(new OtpErlangObject[] { VARIABLE_PATTERN_ATOM, t,
new OtpErlangAtom(functionName), new OtpErlangLong(arity),
new OtpErlangString(head) });
}
@Override
public String patternString() {
return name;
}
@Override
public SearchFor getSearchFor() {
return SearchFor.VARIABLE;
}
@Override
public String labelString() {
return name;
}
@Override
public ErlSearchScope reduceScope(final ErlSearchScope scope) {
if (scope.getModules().contains(module)) {
return new ErlSearchScope(module);
}
return scope;
}
}