package org.erlide.engine.services.codeassist; import java.util.ArrayList; import java.util.List; import com.ericsson.otp.erlang.OtpErlangAtom; import com.ericsson.otp.erlang.OtpErlangList; import com.ericsson.otp.erlang.OtpErlangLong; import com.ericsson.otp.erlang.OtpErlangObject; import com.ericsson.otp.erlang.OtpErlangRangeException; import com.ericsson.otp.erlang.OtpErlangTuple; public class RecordCompletion { private final int kind; private final String name; private String prefix; private final List<String> fields; public RecordCompletion(final OtpErlangTuple r) throws OtpErlangRangeException { final OtpErlangLong kindL = (OtpErlangLong) r.elementAt(0); final OtpErlangAtom nameA = (OtpErlangAtom) r.elementAt(1); final OtpErlangAtom prefixA = (OtpErlangAtom) r.elementAt(2); final OtpErlangList fieldL = (OtpErlangList) r.elementAt(3); kind = kindL.intValue(); name = nameA.atomValue(); prefix = prefixA.atomValue(); // TODO we probably need another way to signal this... if (prefix.endsWith("><")) { prefix = "'" + prefix.substring(0, prefix.length() - 2); } else if ("<>".equals(prefix)) { prefix = ""; } else { prefix = prefixA.toString(); if (prefix.endsWith("'")) { prefix = prefix.substring(0, prefix.length() - 1); } } fields = new ArrayList<>(fieldL.arity()); for (final OtpErlangObject object : fieldL) { final OtpErlangAtom f = (OtpErlangAtom) object; getFields().add(f.atomValue()); } } public boolean isNameWanted() { return kind == ContextAssistService.RECORD_NAME; } public boolean isFieldWanted() { return kind == ContextAssistService.RECORD_FIELD; } public String getName() { return name; } public String getPrefix() { return prefix; } public List<String> getFields() { return fields; } }