package org.erlide.backend.internal; import org.erlide.runtime.rpc.IOtpRpc; import org.erlide.runtime.rpc.RpcException; import org.erlide.util.ErlLogger; import org.erlide.util.erlang.OtpBindings; import org.erlide.util.erlang.OtpErlang; import com.ericsson.otp.erlang.OtpErlangBinary; import com.ericsson.otp.erlang.OtpErlangList; import com.ericsson.otp.erlang.OtpErlangObject; import com.ericsson.otp.erlang.OtpErlangString; public final class ErlangCode { private static final String CODE = "code"; private ErlangCode() { } public static void addPathA(final IOtpRpc backend, final String path) { try { backend.call(CODE, "add_patha", "s", path); } catch (final Exception e) { ErlLogger.debug(e); } } public static void addPathZ(final IOtpRpc backend, final String path) { try { backend.call(CODE, "add_pathz", "s", path); } catch (final Exception e) { ErlLogger.debug(e); } } public static void removePath(final IOtpRpc backend, final String path0) { String path = path0; try { // workaround for bug in code:del_path try { final OtpErlangObject rr = backend.call("filename", "join", "x", new OtpErlangList(new OtpErlangString(path))); path = ((OtpErlangString) rr).stringValue(); } catch (final Exception e) { // ignore } backend.call(CODE, "del_path", "s", path); } catch (final Exception e) { } } public static OtpErlangObject loadBinary(final IOtpRpc b, final String beamf, final OtpErlangBinary code) throws RpcException { OtpErlangObject result; result = b.call(CODE, "load_binary", "asb", beamf, beamf, code); return result; } public static void delete(final IOtpRpc fBackend, final String moduleName) { try { fBackend.call(CODE, "delete", "a", moduleName); } catch (final Exception e) { ErlLogger.debug(e); } } public static void load(final IOtpRpc backend, final String name0) { String name = name0; if (name.endsWith(".beam")) { name = name.substring(0, name.length() - 5); } try { backend.call("c", "l", "a", name); } catch (final Exception e) { ErlLogger.debug(e); } } public static boolean isEmbedded(final IOtpRpc backend) { try { final OtpErlangObject r = backend.call(CODE, "ensure_loaded", "a", "funny_module_name_that_nobody_would_use"); final OtpBindings b = OtpErlang.match("{error, What}", r); if (b.getAtom("What").equals("embedded")) { return true; } } catch (final Exception e) { // ignore errors } return false; } }