public static OtpNode getLocalNode() throws IOException { if (localNode == null) { localNode = new OtpNode("intellij-elixir@127.0.0.1", "intellij_elixir"); } return localNode; } }
/** * Receives a list of tuples and returns the first tuple where the item at {@code position} in the tuple matches the * given {@code item}. * * @param tupleList List of tuples. Tuples don't all have to be the same size or have position as a valid offset. * @param key key to search for at * @param position position of the * @param defaultValue * @return tuple with equal {@code key} or {@code defaultValue} if {@code key} is not found. */ public static OtpErlangObject keyfind(OtpErlangList tupleList, OtpErlangObject key, int position, OtpErlangObject defaultValue) { OtpErlangObject matchTuple = defaultValue; for (OtpErlangObject element : tupleList) { OtpErlangTuple tuple = (OtpErlangTuple) element; if (tuple.elementAt(position).equals(key)) { matchTuple = tuple; break; } } return matchTuple; } }
public String name() { OtpErlangTuple quotedDefmodule = (OtpErlangTuple) defmodule.quote(); OtpErlangList callArguments = Macro.INSTANCE.callArguments(quotedDefmodule); // Alias + block assert callArguments.arity() == 2; OtpErlangObject quotedName = callArguments.elementAt(0); // TODO handle other forms for module names assert Macro.INSTANCE.isAliases(quotedName); return Macro.INSTANCE.toString(quotedName); }
private static void renderList(OtpErlangList list, XValueTextRenderer renderer) { int i; renderer.renderSpecialSymbol("["); for (i = 0; i < list.arity(); i++) { if (i > 0) { renderer.renderSpecialSymbol(", "); } renderObject(list.elementAt(i), renderer); } // Improper lists have a lastTail OtpErlangObject lastTail = list.getLastTail(); if (lastTail != null) { // Improper lists need to render the head tail joiner, `|`, explicitly renderer.renderSpecialSymbol(" | "); renderObject(lastTail, renderer); } renderer.renderSpecialSymbol("]"); }
@Nullable private static String structType(OtpErlangMap map) { OtpErlangObject structValue = map.get(new OtpErlangAtom("__struct__")); if (structValue instanceof OtpErlangAtom) { return ElixirModulesUtil.INSTANCE.erlangModuleNameToElixir(((OtpErlangAtom) structValue).atomValue()); } else { return null; } }
public static void assertError(PsiFile file) { final String text = file.getText(); try { OtpErlangTuple quotedMessage = Quoter.quote(text); Quoter.assertMessageReceived(quotedMessage); OtpErlangAtom status = (OtpErlangAtom) quotedMessage.elementAt(0); String statusString = status.atomValue(); assertEquals(statusString, "error"); } catch (IOException | OtpErlangDecodeException | OtpErlangExit e) { throw new RuntimeException(e); } }
private static void renderErlangString(OtpErlangString str, XValueTextRenderer renderer) { if (isPrintable(str)) { renderer.renderSpecialSymbol("'"); renderer.renderValue( str .stringValue() .replace("'", "\\'") ); renderer.renderSpecialSymbol("'"); } else { renderObject(new OtpErlangList(str.stringValue()), renderer); } }
boolean symbolKeys = hasSymbolKeys(map); for (final Map.Entry<OtpErlangObject, OtpErlangObject> e : map.entrySet()) { OtpErlangObject key = e.getKey(); if (!(isStruct(map) && key instanceof OtpErlangAtom && ((OtpErlangAtom) key).atomValue().equals("__struct__"))) { if (first) { first = false; assert key instanceof OtpErlangAtom; renderer.renderKeywordValue(((OtpErlangAtom) key).atomValue()); renderer.renderKeywordValue(": "); } else {
@Nullable public static OtpErlangPid whereis(OtpMbox localMbox, OtpNode localNode, String remoteName, String remoteNode, int timeout) throws OtpErlangExit, OtpErlangDecodeException { OtpErlangObject response = RPC.INSTANCE.unmonitoredCall( remoteNode, localMbox, localNode, timeout, new OtpErlangAtom("Elixir.Process"), new OtpErlangAtom("whereis"), new OtpErlangAtom(remoteName) ); OtpErlangPid pid; if (response instanceof OtpErlangAtom) { if (response.equals(NIL)) { pid = null; } else { throw new NotImplementedException("Expected atoms to be nil, but got" + response); } } else { pid = (OtpErlangPid) response; } return pid; } }
private static void renderAtom(OtpErlangAtom atom, XValueTextRenderer renderer) { renderer.renderKeywordValue(ElixirModulesUtil.INSTANCE.erlangModuleNameToElixir(atom.atomValue())); }
@NotNull public static String javaString(@NotNull OtpErlangBinary elixirString) { byte[] bytes = elixirString.binaryValue(); return new String(bytes, Charset.forName("UTF-8")); }
private static void renderBitstr(OtpErlangBitstr bitstr, XValueTextRenderer renderer) { java.lang.String utf8String = toUtf8String(bitstr); if (utf8String != null) { renderer.renderStringValue(utf8String); } else { renderer.renderSpecialSymbol("<<"); boolean first = true; for (byte b : bitstr.binaryValue()) { if (!first) renderer.renderSpecialSymbol(", "); renderer.renderValue("" + ((int) b & 0xFF)); first = false; } if (bitstr.pad_bits() > 0) { renderer.renderSpecialSymbol("::size(" + (8 - bitstr.pad_bits()) + ")"); } renderer.renderSpecialSymbol(">>"); } }
private static void assertQuotedCorrectly(@NotNull OtpErlangObject expectedQuoted, @NotNull OtpErlangObject actualQuoted) { if (!expectedQuoted.equals(actualQuoted)) { throw new ComparisonFailure(null, toString(expectedQuoted), toString(actualQuoted)); } }
@NotNull private static String toString(@NotNull OtpErlangBitstr quoted) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append('"'); for (byte element : quoted.binaryValue()) { if (element == 0x0A) { stringBuilder.append("\\n"); } else if (isAsciiPrintable((char) element)) { stringBuilder.append((char) element); } else { stringBuilder.append(String.format("\\x%02X", element)); } } stringBuilder.append('"'); return stringBuilder.toString(); }
public static OtpErlangTuple quote(@NotNull String code) throws IOException, OtpErlangExit, OtpErlangDecodeException { final OtpNode otpNode = IntellijElixir.getLocalNode(); final OtpMbox otpMbox = otpNode.createMbox(); OtpErlangObject request = elixirString(code); return (OtpErlangTuple) GenericServer.INSTANCE.call( otpMbox, otpNode, REMOTE_NAME, IntellijElixir.REMOTE_NODE, request, TIMEOUT_IN_MILLISECONDS ); }
public static boolean isPrintable(OtpErlangString s) { java.lang.String str = s.toString(); for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (!isPrintable(c)) return false; } return true; }
@NotNull private static String toString(@NotNull OtpErlangList quoted) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("["); for (int i = 0; i < quoted.arity(); i++) { if (i > 0) { stringBuilder.append(","); } stringBuilder.append(toString(quoted.elementAt(i))); } stringBuilder.append("]"); return stringBuilder.toString(); }
@NotNull private static String toString(@NotNull OtpErlangTuple quoted) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("{"); for (int i = 0; i < quoted.arity(); i++) { if (i > 0) { stringBuilder.append(","); } stringBuilder.append(toString(quoted.elementAt(i))); } stringBuilder.append("}"); return stringBuilder.toString(); } }