diff options
Diffstat (limited to 'lib/jinterface')
50 files changed, 610 insertions, 327 deletions
| diff --git a/lib/jinterface/doc/src/notes.xml b/lib/jinterface/doc/src/notes.xml index e81a9f82d2..fc5f8be53e 100644 --- a/lib/jinterface/doc/src/notes.xml +++ b/lib/jinterface/doc/src/notes.xml @@ -30,6 +30,90 @@    </header>    <p>This document describes the changes made to the Jinterface application.</p> +<section><title>Jinterface 1.5.12</title> + +    <section><title>Fixed Bugs and Malfunctions</title> +      <list> +        <item> +          <p> +	    handle empty .erlang.cookie without crashing and +	    OtpErlangList.clone must not return null</p> +          <p> +	    Own Id: OTP-12210</p> +        </item> +        <item> +          <p> +	    This fixes all the compilation warnings in the Java code</p> +          <p> +	    Own Id: OTP-12211</p> +        </item> +      </list> +    </section> + + +    <section><title>Improvements and New Features</title> +      <list> +        <item> +          <p> +	    Added an .appup file for the application.</p> +          <p> +	    Own Id: OTP-12358 Aux Id: OTP-12178 </p> +        </item> +      </list> +    </section> + +</section> + +<section><title>Jinterface 1.5.11</title> + +    <section><title>Fixed Bugs and Malfunctions</title> +      <list> +        <item> +          <p> +	    Added a <c>.app</c> file for the application.</p> +          <p> +	    Own Id: OTP-12178</p> +        </item> +      </list> +    </section> + +</section> + +<section><title>Jinterface 1.5.10</title> + +    <section><title>Fixed Bugs and Malfunctions</title> +      <list> +        <item> +          <p> +	    Array now show meaningful values in exceptions.</p> +          <p> +	    Own Id: OTP-12049</p> +        </item> +        <item> +          <p> +	    Documentation improvements.</p> +          <p> +	    Own Id: OTP-12050</p> +        </item> +        <item> +          <p> +	    Include the cause when raising a new IOException, which +	    should make the reason for the exception clearer.</p> +          <p> +	    Own Id: OTP-12075</p> +        </item> +        <item> +          <p> +	    Arrays (here: md5 and freeVars) must not be compared with +	    equals, which is broken (compares identity).</p> +          <p> +	    Own Id: OTP-12121</p> +        </item> +      </list> +    </section> + +</section> +  <section><title>Jinterface 1.5.9</title>      <section><title>Improvements and New Features</title> diff --git a/lib/jinterface/ebin/.gitignore b/lib/jinterface/ebin/.gitignore new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/lib/jinterface/ebin/.gitignore diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java index 9ba6a4a0ab..b8a973753a 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractConnection.java @@ -20,7 +20,6 @@  package com.ericsson.otp.erlang;  import java.io.IOException; -import java.io.InputStream;  import java.net.Socket;  import java.util.Random; @@ -87,7 +86,7 @@ public abstract class AbstractConnection extends Thread {      protected boolean connected = false; // connection status      protected Socket socket; // communication channel      protected OtpPeer peer; // who are we connected to -    protected OtpLocalNode self; // this nodes id +    protected OtpLocalNode localNode; // this nodes id      String name; // local name of this connection      protected boolean cookieOk = false; // already checked the cookie for this @@ -137,7 +136,7 @@ public abstract class AbstractConnection extends Thread {       */      protected AbstractConnection(final OtpLocalNode self, final Socket s)  	    throws IOException, OtpAuthException { -	this.self = self; +	this.localNode = self;  	peer = new OtpPeer();  	socket = s; @@ -181,7 +180,7 @@ public abstract class AbstractConnection extends Thread {      protected AbstractConnection(final OtpLocalNode self, final OtpPeer other)  	    throws IOException, OtpAuthException {  	peer = other; -	this.self = self; +	this.localNode = self;  	socket = null;  	int port; @@ -234,6 +233,7 @@ public abstract class AbstractConnection extends Thread {  	if (!connected) {  	    throw new IOException("Not connected");  	} +    @SuppressWarnings("resource")  	final OtpOutputStream header = new OtpOutputStream(headerLen);  	// preamble: 4 byte length + "passthrough" tag + version @@ -246,7 +246,7 @@ public abstract class AbstractConnection extends Thread {  	header.write_long(regSendTag);  	header.write_any(from);  	if (sendCookie) { -	    header.write_atom(self.cookie()); +	    header.write_atom(localNode.cookie());  	} else {  	    header.write_atom("");  	} @@ -266,7 +266,7 @@ public abstract class AbstractConnection extends Thread {       *        * @param dest       *            the Erlang PID of the remote process. -     * @param msg +     * @param payload       *            the encoded message to send.       *        * @exception java.io.IOException @@ -278,6 +278,7 @@ public abstract class AbstractConnection extends Thread {  	if (!connected) {  	    throw new IOException("Not connected");  	} +    @SuppressWarnings("resource")  	final OtpOutputStream header = new OtpOutputStream(headerLen);  	// preamble: 4 byte length + "passthrough" tag + version @@ -289,7 +290,7 @@ public abstract class AbstractConnection extends Thread {  	header.write_tuple_head(3);  	header.write_long(sendTag);  	if (sendCookie) { -	    header.write_atom(self.cookie()); +	    header.write_atom(localNode.cookie());  	} else {  	    header.write_atom("");  	} @@ -312,6 +313,7 @@ public abstract class AbstractConnection extends Thread {      private void cookieError(final OtpLocalNode local,  	    final OtpErlangAtom cookie) throws OtpAuthException {  	try { +        @SuppressWarnings("resource")  	    final OtpOutputStream header = new OtpOutputStream(headerLen);  	    // preamble: 4 byte length + "passthrough" tag + version @@ -347,6 +349,7 @@ public abstract class AbstractConnection extends Thread {  	    msg[0] = new OtpErlangAtom("$gen_cast");  	    msg[1] = new OtpErlangTuple(msgbody); +        @SuppressWarnings("resource")  	    final OtpOutputStream payload = new OtpOutputStream(  		    new OtpErlangTuple(msg)); @@ -384,6 +387,7 @@ public abstract class AbstractConnection extends Thread {  	if (!connected) {  	    throw new IOException("Not connected");  	} +    @SuppressWarnings("resource")  	final OtpOutputStream header = new OtpOutputStream(headerLen);  	// preamble: 4 byte length + "passthrough" tag @@ -420,6 +424,7 @@ public abstract class AbstractConnection extends Thread {  	if (!connected) {  	    throw new IOException("Not connected");  	} +    @SuppressWarnings("resource")  	final OtpOutputStream header = new OtpOutputStream(headerLen);  	// preamble: 4 byte length + "passthrough" tag @@ -468,6 +473,7 @@ public abstract class AbstractConnection extends Thread {  	if (!connected) {  	    throw new IOException("Not connected");  	} +    @SuppressWarnings("resource")  	final OtpOutputStream header = new OtpOutputStream(headerLen);  	// preamble: 4 byte length + "passthrough" tag @@ -488,6 +494,7 @@ public abstract class AbstractConnection extends Thread {  	do_send(header);      } +    @SuppressWarnings("resource")      @Override      public void run() {  	if (!connected) { @@ -506,7 +513,7 @@ public abstract class AbstractConnection extends Thread {  		// don't return until we get a real message  		// or a failure of some kind (e.g. EXIT)  		// read length and read buffer must be atomic! -		tick_loop: do { +        do {  		    // read 4 bytes - get length of incoming packet  		    // socket.getInputStream().read(lbuf);  		    readSock(socket, lbuf); @@ -526,6 +533,7 @@ public abstract class AbstractConnection extends Thread {  		final byte[] tmpbuf = new byte[len];  		// i = socket.getInputStream().read(tmpbuf);  		readSock(socket, tmpbuf); +        ibuf.close();  		ibuf = new OtpInputStream(tmpbuf, flags);  		if (ibuf.read1() != passThrough) { @@ -567,12 +575,12 @@ public abstract class AbstractConnection extends Thread {  			}  			cookie = (OtpErlangAtom) head.elementAt(1);  			if (sendCookie) { -			    if (!cookie.atomValue().equals(self.cookie())) { -				cookieError(self, cookie); +			    if (!cookie.atomValue().equals(localNode.cookie())) { +				cookieError(localNode, cookie);  			    }  			} else {  			    if (!cookie.atomValue().equals("")) { -				cookieError(self, cookie); +				cookieError(localNode, cookie);  			    }  			}  			cookieOk = true; @@ -610,12 +618,12 @@ public abstract class AbstractConnection extends Thread {  			}  			cookie = (OtpErlangAtom) head.elementAt(2);  			if (sendCookie) { -			    if (!cookie.atomValue().equals(self.cookie())) { -				cookieError(self, cookie); +			    if (!cookie.atomValue().equals(localNode.cookie())) { +				cookieError(localNode, cookie);  			    }  			} else {  			    if (!cookie.atomValue().equals("")) { -				cookieError(self, cookie); +				cookieError(localNode, cookie);  			    }  			}  			cookieOk = true; @@ -749,13 +757,14 @@ public abstract class AbstractConnection extends Thread {  	final int oldLevel = traceLevel;  	// pin the value +    int theLevel = level;  	if (level < 0) { -	    level = 0; +        theLevel = 0;  	} else if (level > 4) { -	    level = 4; +        theLevel = 4;  	} -	traceLevel = level; +    traceLevel = theLevel;  	return oldLevel;      } @@ -908,18 +917,16 @@ public abstract class AbstractConnection extends Thread {  	int got = 0;  	final int len = b.length;  	int i; -	InputStream is = null;  	synchronized (this) {  	    if (s == null) {  		throw new IOException("expected " + len  			+ " bytes, socket was closed");  	    } -	    is = s.getInputStream();  	}  	while (got < len) { -	    i = is.read(b, got, len - got); +        i = s.getInputStream().read(b, got, len - got);  	    if (i < 0) {  		throw new IOException("expected " + len @@ -943,9 +950,9 @@ public abstract class AbstractConnection extends Thread {  	try {  	    sendStatus("ok");  	    final int our_challenge = genChallenge(); -	    sendChallenge(peer.distChoose, self.flags, our_challenge); +	    sendChallenge(peer.distChoose, localNode.flags, our_challenge);  	    final int her_challenge = recvChallengeReply(our_challenge); -	    final byte[] our_digest = genDigest(her_challenge, self.cookie()); +	    final byte[] our_digest = genDigest(her_challenge, localNode.cookie());  	    sendChallengeAck(our_digest);  	    connected = true;  	    cookieOk = true; @@ -959,7 +966,9 @@ public abstract class AbstractConnection extends Thread {  	} catch (final Exception e) {  	    final String nn = peer.node();  	    close(); -	    throw new IOException("Error accepting connection from " + nn); +	    IOException ioe = new IOException("Error accepting connection from " + nn); +	    ioe.initCause(e); +	    throw ioe;  	}  	if (traceLevel >= handshakeThreshold) {  	    System.out.println("<- MD5 ACCEPTED " + peer.host()); @@ -976,10 +985,10 @@ public abstract class AbstractConnection extends Thread {  		System.out.println("-> MD5 CONNECT TO " + peer.host() + ":"  			+ port);  	    } -	    sendName(peer.distChoose, self.flags); +	    sendName(peer.distChoose, localNode.flags);  	    recvStatus();  	    final int her_challenge = recvChallenge(); -	    final byte[] our_digest = genDigest(her_challenge, self.cookie()); +	    final byte[] our_digest = genDigest(her_challenge, localNode.cookie());  	    final int our_challenge = genChallenge();  	    sendChallengeReply(our_challenge, our_digest);  	    recvChallengeAck(our_challenge); @@ -990,7 +999,9 @@ public abstract class AbstractConnection extends Thread {  	    throw ae;  	} catch (final Exception e) {  	    close(); -	    throw new IOException("Cannot connect to peer node"); +	    IOException ioe = new IOException("Cannot connect to peer node"); +	    ioe.initCause(e); +	    throw ioe;  	}      } @@ -1050,33 +1061,35 @@ public abstract class AbstractConnection extends Thread {  	return res;      } -    protected void sendName(final int dist, final int flags) throws IOException { +    protected void sendName(final int dist, final int aflags) throws IOException { +    @SuppressWarnings("resource")  	final OtpOutputStream obuf = new OtpOutputStream(); -	final String str = self.node(); +	final String str = localNode.node();  	obuf.write2BE(str.length() + 7); // 7 bytes + nodename  	obuf.write1(AbstractNode.NTYPE_R6);  	obuf.write2BE(dist); -	obuf.write4BE(flags); +	obuf.write4BE(aflags);  	obuf.write(str.getBytes());  	obuf.writeTo(socket.getOutputStream());  	if (traceLevel >= handshakeThreshold) { -	    System.out.println("-> " + "HANDSHAKE sendName" + " flags=" + flags -		    + " dist=" + dist + " local=" + self); +	    System.out.println("-> " + "HANDSHAKE sendName" + " flags=" + aflags +		    + " dist=" + dist + " local=" + localNode);  	}      } -    protected void sendChallenge(final int dist, final int flags, +    protected void sendChallenge(final int dist, final int aflags,  	    final int challenge) throws IOException { +    @SuppressWarnings("resource")  	final OtpOutputStream obuf = new OtpOutputStream(); -	final String str = self.node(); +	final String str = localNode.node();  	obuf.write2BE(str.length() + 11); // 11 bytes + nodename  	obuf.write1(AbstractNode.NTYPE_R6);  	obuf.write2BE(dist); -	obuf.write4BE(flags); +	obuf.write4BE(aflags);  	obuf.write4BE(challenge);  	obuf.write(str.getBytes()); @@ -1084,8 +1097,8 @@ public abstract class AbstractConnection extends Thread {  	if (traceLevel >= handshakeThreshold) {  	    System.out.println("-> " + "HANDSHAKE sendChallenge" + " flags=" -		    + flags + " dist=" + dist + " challenge=" + challenge -		    + " local=" + self); +		    + aflags + " dist=" + dist + " challenge=" + challenge +		    + " local=" + localNode);  	}      } @@ -1096,6 +1109,7 @@ public abstract class AbstractConnection extends Thread {  	byte[] tmpbuf;  	readSock(socket, lbuf); +    @SuppressWarnings("resource")  	final OtpInputStream ibuf = new OtpInputStream(lbuf, 0);  	final int len = ibuf.read2BE();  	tmpbuf = new byte[len]; @@ -1103,41 +1117,42 @@ public abstract class AbstractConnection extends Thread {  	return tmpbuf;      } -    protected void recvName(final OtpPeer peer) throws IOException { +    protected void recvName(final OtpPeer apeer) throws IOException {  	String hisname = "";  	try {  	    final byte[] tmpbuf = read2BytePackage(); +        @SuppressWarnings("resource")  	    final OtpInputStream ibuf = new OtpInputStream(tmpbuf, 0);  	    byte[] tmpname;  	    final int len = tmpbuf.length; -	    peer.ntype = ibuf.read1(); -	    if (peer.ntype != AbstractNode.NTYPE_R6) { +	    apeer.ntype = ibuf.read1(); +	    if (apeer.ntype != AbstractNode.NTYPE_R6) {  		throw new IOException("Unknown remote node type");  	    } -	    peer.distLow = peer.distHigh = ibuf.read2BE(); -	    if (peer.distLow < 5) { +	    apeer.distLow = apeer.distHigh = ibuf.read2BE(); +	    if (apeer.distLow < 5) {  		throw new IOException("Unknown remote node type");  	    } -	    peer.flags = ibuf.read4BE(); +	    apeer.flags = ibuf.read4BE();  	    tmpname = new byte[len - 7];  	    ibuf.readN(tmpname);  	    hisname = OtpErlangString.newString(tmpname);  	    // Set the old nodetype parameter to indicate hidden/normal status  	    // When the old handshake is removed, the ntype should also be. -	    if ((peer.flags & AbstractNode.dFlagPublished) != 0) { -		peer.ntype = AbstractNode.NTYPE_R4_ERLANG; +	    if ((apeer.flags & AbstractNode.dFlagPublished) != 0) { +		apeer.ntype = AbstractNode.NTYPE_R4_ERLANG;  	    } else { -		peer.ntype = AbstractNode.NTYPE_R4_HIDDEN; +		apeer.ntype = AbstractNode.NTYPE_R4_HIDDEN;  	    } -	    if ((peer.flags & AbstractNode.dFlagExtendedReferences) == 0) { +	    if ((apeer.flags & AbstractNode.dFlagExtendedReferences) == 0) {  		throw new IOException(  			"Handshake failed - peer cannot handle extended references");  	    } -	    if ((peer.flags & AbstractNode.dFlagExtendedPidsPorts) == 0) { +	    if ((apeer.flags & AbstractNode.dFlagExtendedPidsPorts) == 0) {  		throw new IOException(  			"Handshake failed - peer cannot handle extended pids and ports");  	    } @@ -1147,13 +1162,13 @@ public abstract class AbstractConnection extends Thread {  	}  	final int i = hisname.indexOf('@', 0); -	peer.node = hisname; -	peer.alive = hisname.substring(0, i); -	peer.host = hisname.substring(i + 1, hisname.length()); +	apeer.node = hisname; +	apeer.alive = hisname.substring(0, i); +	apeer.host = hisname.substring(i + 1, hisname.length());  	if (traceLevel >= handshakeThreshold) { -	    System.out.println("<- " + "HANDSHAKE" + " ntype=" + peer.ntype -		    + " dist=" + peer.distHigh + " remote=" + peer); +	    System.out.println("<- " + "HANDSHAKE" + " ntype=" + apeer.ntype +		    + " dist=" + apeer.distHigh + " remote=" + apeer);  	}      } @@ -1163,6 +1178,7 @@ public abstract class AbstractConnection extends Thread {  	try {  	    final byte[] buf = read2BytePackage(); +        @SuppressWarnings("resource")  	    final OtpInputStream ibuf = new OtpInputStream(buf, 0);  	    peer.ntype = ibuf.read1();  	    if (peer.ntype != AbstractNode.NTYPE_R6) { @@ -1195,7 +1211,7 @@ public abstract class AbstractConnection extends Thread {  	if (traceLevel >= handshakeThreshold) {  	    System.out.println("<- " + "HANDSHAKE recvChallenge" + " from=" -		    + peer.node + " challenge=" + challenge + " local=" + self); +		    + peer.node + " challenge=" + challenge + " local=" + localNode);  	}  	return challenge; @@ -1204,6 +1220,7 @@ public abstract class AbstractConnection extends Thread {      protected void sendChallengeReply(final int challenge, final byte[] digest)  	    throws IOException { +    @SuppressWarnings("resource")  	final OtpOutputStream obuf = new OtpOutputStream();  	obuf.write2BE(21);  	obuf.write1(ChallengeReply); @@ -1214,7 +1231,7 @@ public abstract class AbstractConnection extends Thread {  	if (traceLevel >= handshakeThreshold) {  	    System.out.println("-> " + "HANDSHAKE sendChallengeReply"  		    + " challenge=" + challenge + " digest=" + hex(digest) -		    + " local=" + self); +		    + " local=" + localNode);  	}      } @@ -1237,6 +1254,7 @@ public abstract class AbstractConnection extends Thread {  	try {  	    final byte[] buf = read2BytePackage(); +        @SuppressWarnings("resource")  	    final OtpInputStream ibuf = new OtpInputStream(buf, 0);  	    final int tag = ibuf.read1();  	    if (tag != ChallengeReply) { @@ -1244,7 +1262,7 @@ public abstract class AbstractConnection extends Thread {  	    }  	    challenge = ibuf.read4BE();  	    ibuf.readN(her_digest); -	    final byte[] our_digest = genDigest(our_challenge, self.cookie()); +	    final byte[] our_digest = genDigest(our_challenge, localNode.cookie());  	    if (!digests_equals(her_digest, our_digest)) {  		throw new OtpAuthException("Peer authentication error.");  	    } @@ -1255,7 +1273,7 @@ public abstract class AbstractConnection extends Thread {  	if (traceLevel >= handshakeThreshold) {  	    System.out.println("<- " + "HANDSHAKE recvChallengeReply"  		    + " from=" + peer.node + " challenge=" + challenge -		    + " digest=" + hex(her_digest) + " local=" + self); +		    + " digest=" + hex(her_digest) + " local=" + localNode);  	}  	return challenge; @@ -1263,6 +1281,7 @@ public abstract class AbstractConnection extends Thread {      protected void sendChallengeAck(final byte[] digest) throws IOException { +    @SuppressWarnings("resource")  	final OtpOutputStream obuf = new OtpOutputStream();  	obuf.write2BE(17);  	obuf.write1(ChallengeAck); @@ -1272,7 +1291,7 @@ public abstract class AbstractConnection extends Thread {  	if (traceLevel >= handshakeThreshold) {  	    System.out.println("-> " + "HANDSHAKE sendChallengeAck" -		    + " digest=" + hex(digest) + " local=" + self); +		    + " digest=" + hex(digest) + " local=" + localNode);  	}      } @@ -1282,13 +1301,14 @@ public abstract class AbstractConnection extends Thread {  	final byte[] her_digest = new byte[16];  	try {  	    final byte[] buf = read2BytePackage(); +        @SuppressWarnings("resource")  	    final OtpInputStream ibuf = new OtpInputStream(buf, 0);  	    final int tag = ibuf.read1();  	    if (tag != ChallengeAck) {  		throw new IOException("Handshake protocol error");  	    }  	    ibuf.readN(her_digest); -	    final byte[] our_digest = genDigest(our_challenge, self.cookie()); +	    final byte[] our_digest = genDigest(our_challenge, localNode.cookie());  	    if (!digests_equals(her_digest, our_digest)) {  		throw new OtpAuthException("Peer authentication error.");  	    } @@ -1301,12 +1321,13 @@ public abstract class AbstractConnection extends Thread {  	if (traceLevel >= handshakeThreshold) {  	    System.out.println("<- " + "HANDSHAKE recvChallengeAck" + " from="  		    + peer.node + " digest=" + hex(her_digest) + " local=" -		    + self); +		    + localNode);  	}      }      protected void sendStatus(final String status) throws IOException { +    @SuppressWarnings("resource")  	final OtpOutputStream obuf = new OtpOutputStream();  	obuf.write2BE(status.length() + 1);  	obuf.write1(ChallengeStatus); @@ -1316,7 +1337,7 @@ public abstract class AbstractConnection extends Thread {  	if (traceLevel >= handshakeThreshold) {  	    System.out.println("-> " + "HANDSHAKE sendStatus" + " status=" -		    + status + " local=" + self); +		    + status + " local=" + localNode);  	}      } @@ -1324,6 +1345,7 @@ public abstract class AbstractConnection extends Thread {  	try {  	    final byte[] buf = read2BytePackage(); +        @SuppressWarnings("resource")  	    final OtpInputStream ibuf = new OtpInputStream(buf, 0);  	    final int tag = ibuf.read1();  	    if (tag != ChallengeStatus) { @@ -1342,7 +1364,7 @@ public abstract class AbstractConnection extends Thread {  	}  	if (traceLevel >= handshakeThreshold) {  	    System.out.println("<- " + "HANDSHAKE recvStatus (ok)" + " local=" -		    + self); +		    + localNode);  	}      } diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java index 3ef44b8851..3bb1bbbd18 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/AbstractNode.java @@ -128,7 +128,12 @@ public class AbstractNode {  	    final File dotCookieFile = new File(dotCookieFilename);  	    br = new BufferedReader(new FileReader(dotCookieFile)); -	    defaultCookie = br.readLine().trim(); +			final String line = br.readLine(); +			if (line == null) { +				defaultCookie = ""; +			} else { +				defaultCookie = line.trim(); +			}  	} catch (final IOException e) {  	    defaultCookie = "";  	} finally { @@ -260,8 +265,7 @@ public class AbstractNode {  	    final String drive = System.getenv("HOMEDRIVE");  	    final String path = System.getenv("HOMEPATH");  	    return (drive != null && path != null) ? drive + path : home; -	} else { -	    return home;  	} +    return home;      }  } diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/Link.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/Link.java index 2b085761e3..c8b4fcebde 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/Link.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/Link.java @@ -41,11 +41,12 @@ class Link {  	return local.equals(pid) || remote.equals(pid);      } -    public boolean equals(final OtpErlangPid local, final OtpErlangPid remote) { -	return this.local.equals(local) && this.remote.equals(remote) -		|| this.local.equals(remote) && this.remote.equals(local); +    public boolean equals(final OtpErlangPid alocal, final OtpErlangPid aremote) { +    return local.equals(alocal) && remote.equals(aremote) +        || local.equals(aremote) && remote.equals(alocal);      } +    @Override      public int hashCode() {  	if (hashCodeValue == 0) {  	    OtpErlangObject.Hash hash = new OtpErlangObject.Hash(5); diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/Makefile b/lib/jinterface/java_src/com/ericsson/otp/erlang/Makefile index f476d4594d..ea3ab770ce 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/Makefile +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/Makefile @@ -32,6 +32,18 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk  include $(ERL_TOP)/lib/jinterface/vsn.mk  VSN=$(JINTERFACE_VSN) +# + +EBINDIR=$(ERL_TOP)/lib/jinterface/ebin + +APP_FILE= jinterface.app +APP_SRC= $(APP_FILE).src +APP_TARGET= $(EBINDIR)/$(APP_FILE) + +APPUP_FILE= jinterface.appup +APPUP_SRC= $(APPUP_FILE).src +APPUP_TARGET= $(EBINDIR)/$(APPUP_FILE) +  # ----------------------------------------------------  # Release directory specification  # ---------------------------------------------------- @@ -45,7 +57,7 @@ RELSYSDIR = $(RELEASE_PATH)/lib/jinterface-$(VSN)  # all java sourcefiles listed in common include file  include $(ERL_TOP)/lib/jinterface/java_src/$(JAVA_CLASS_SUBDIR)/java_files -TARGET_FILES= $(JAVA_FILES:%=$(JAVA_DEST_ROOT)$(JAVA_CLASS_SUBDIR)%.class) +TARGET_FILES= $(JAVA_FILES:%=$(JAVA_DEST_ROOT)$(JAVA_CLASS_SUBDIR)%.class) $(APP_TARGET) $(APPUP_TARGET)  JAVA_SRC= $(JAVA_FILES:%=%.java)  JARFILE= OtpErlang.jar @@ -66,7 +78,7 @@ ifneq ($(V),0)  JARFLAGS=-cfv  endif -JAVA_OPTIONS =  +JAVA_OPTIONS = -Xlint   ifeq ($(TESTROOT),)  RELEASE_PATH="$(ERL_TOP)/release/$(TARGET)" @@ -79,6 +91,11 @@ endif  # Make Rules  # ---------------------------------------------------- +$(APP_TARGET): $(APP_SRC) $(ERL_TOP)/lib/jinterface/vsn.mk +	$(vsn_verbose)sed -e 's;%VSN%;$(JINTERFACE_VSN);' $< > $@ +$(APPUP_TARGET): $(APPUP_SRC) $(ERL_TOP)/lib/jinterface/vsn.mk +	$(vsn_verbose)sed -e 's;%VSN%;$(JINTERFACE_VSN);' $< > $@ +  debug opt: make_dirs $(JAVA_DEST_ROOT)$(JARFILE)  make_dirs: @@ -106,6 +123,9 @@ release_spec: opt  	$(V_at)$(INSTALL_DATA) $(JAVA_SRC) "$(RELSYSDIR)/java_src/com/ericsson/otp/erlang"  	$(V_at)$(INSTALL_DIR) "$(RELSYSDIR)/priv"  	$(V_at)$(INSTALL_DATA) $(JAVA_DEST_ROOT)$(JARFILE) "$(RELSYSDIR)/priv" +	$(V_at)$(INSTALL_DIR) "$(RELSYSDIR)/ebin" +	$(V_at)$(INSTALL_DATA) $(APP_TARGET) "$(RELSYSDIR)/ebin/$(APP_FILE)" +	$(V_at)$(INSTALL_DATA) $(APPUP_TARGET) "$(RELSYSDIR)/ebin/$(APPUP_FILE)"  release_docs_spec: @@ -113,4 +133,3 @@ release_docs_spec:  # ---------------------------------------------------- - diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpConnection.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpConnection.java index 8e8bd473c8..9ad02506fd 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpConnection.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpConnection.java @@ -358,6 +358,7 @@ public class OtpConnection extends AbstractConnection {       *                    if the connection is not active or a communication       *                    error occurs.       */ +    @SuppressWarnings("resource")      public void send(final OtpErlangPid dest, final OtpErlangObject msg)  	    throws IOException {  	// encode and send the message @@ -376,6 +377,7 @@ public class OtpConnection extends AbstractConnection {       *                    if the connection is not active or a communication       *                    error occurs.       */ +    @SuppressWarnings("resource")      public void send(final String dest, final OtpErlangObject msg)  	    throws IOException {  	// encode and send the message @@ -404,7 +406,7 @@ public class OtpConnection extends AbstractConnection {       *        * @param dest       *                the Erlang PID of the remote process. -     * @param msg +     * @param payload       *                the encoded message to send.       *        * @exception java.io.IOException diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpCookedConnection.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpCookedConnection.java index 5abf6e33f7..43b0cad222 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpCookedConnection.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpCookedConnection.java @@ -149,6 +149,7 @@ public class OtpCookedConnection extends AbstractConnection {      /*       * send to pid       */ +    @SuppressWarnings("resource")      void send(final OtpErlangPid from, final OtpErlangPid dest,  	    final OtpErlangObject msg) throws IOException {  	// encode and send the message @@ -159,6 +160,7 @@ public class OtpCookedConnection extends AbstractConnection {       * send to remote name dest is recipient's registered name, the nodename is       * implied by the choice of connection.       */ +    @SuppressWarnings("resource")      void send(final OtpErlangPid from, final String dest,  	    final OtpErlangObject msg) throws IOException {  	// encode and send the message diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpEpmd.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpEpmd.java index 1868dc7740..8a8ba785d9 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpEpmd.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpEpmd.java @@ -160,6 +160,7 @@ public class OtpEpmd {  	try {  	    s = new Socket((String) null, EpmdPort.get()); +        @SuppressWarnings("resource")  	    final OtpOutputStream obuf = new OtpOutputStream();  	    obuf.write2BE(node.alive().length() + 1);  	    obuf.write1(stopReq); @@ -189,6 +190,7 @@ public class OtpEpmd {  	Socket s = null;  	try { +        @SuppressWarnings("resource")  	    final OtpOutputStream obuf = new OtpOutputStream();  	    s = new Socket(node.host(), EpmdPort.get()); @@ -219,6 +221,7 @@ public class OtpEpmd {  			+ node.host() + " when looking up " + node.alive());  	    } +        @SuppressWarnings("resource")  	    final OtpInputStream ibuf = new OtpInputStream(tmpbuf, 0);  	    final int response = ibuf.read1(); @@ -279,6 +282,7 @@ public class OtpEpmd {  	Socket s = null;  	try { +        @SuppressWarnings("resource")  	    final OtpOutputStream obuf = new OtpOutputStream();  	    s = new Socket((String) null, EpmdPort.get()); @@ -310,13 +314,12 @@ public class OtpEpmd {  	    final int n = s.getInputStream().read(tmpbuf);  	    if (n < 0) { -		if (s != null) {  		    s.close(); -		}  		throw new IOException("Nameserver not responding on "  			+ node.host() + " when publishing " + node.alive());  	    } +        @SuppressWarnings("resource")  	    final OtpInputStream ibuf = new OtpInputStream(tmpbuf, 0);  	    final int response = ibuf.read1(); @@ -341,9 +344,7 @@ public class OtpEpmd {  	    throw new IOException("Nameserver not responding on " + node.host()  		    + " when publishing " + node.alive());  	} catch (final OtpErlangDecodeException e) { -	    if (s != null) {  		s.close(); -	    }  	    if (traceLevel >= traceThreshold) {  		System.out.println("<- (invalid response)");  	    } @@ -351,9 +352,7 @@ public class OtpEpmd {  		    + " when publishing " + node.alive());  	} -	if (s != null) {  	    s.close(); -	}  	return null;      } @@ -366,6 +365,7 @@ public class OtpEpmd {  	Socket s = null;  	try { +        @SuppressWarnings("resource")  	    final OtpOutputStream obuf = new OtpOutputStream();  	    try {  		s = new Socket(address, EpmdPort.get()); @@ -390,6 +390,7 @@ public class OtpEpmd {  		    out.write(buffer, 0, bytesRead);  		}  		final byte[] tmpbuf = out.toByteArray(); +        @SuppressWarnings("resource")  		final OtpInputStream ibuf = new OtpInputStream(tmpbuf, 0);  		ibuf.read4BE(); // read port int  		// final int port = ibuf.read4BE(); diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangAtom.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangAtom.java index 0371740b26..bff3e2c0e3 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangAtom.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangAtom.java @@ -18,17 +18,15 @@   */  package com.ericsson.otp.erlang; -import java.io.Serializable;  /**   * Provides a Java representation of Erlang atoms. Atoms can be created from   * strings whose length is not more than {@link #maxAtomLength maxAtomLength}   * characters.   */ -public class OtpErlangAtom extends OtpErlangObject implements Serializable, -	Cloneable { +public class OtpErlangAtom extends OtpErlangObject {      // don't change this! -    static final long serialVersionUID = -3204386396807876641L; +    private static final long serialVersionUID = -3204386396807876641L;      /** The maximun allowed length of an atom, in characters */      public static final int maxAtomLength = 0xff; // one byte length @@ -119,9 +117,8 @@ public class OtpErlangAtom extends OtpErlangObject implements Serializable,      public String toString() {  	if (atomNeedsQuoting(atom)) {  	    return "'" + escapeSpecialChars(atom) + "'"; -	} else { -	    return atom;  	} +    return atom;      }      /** @@ -139,8 +136,8 @@ public class OtpErlangAtom extends OtpErlangObject implements Serializable,  	    return false;  	} -	final OtpErlangAtom atom = (OtpErlangAtom) o; -	return this.atom.compareTo(atom.atom) == 0; +	final OtpErlangAtom other = (OtpErlangAtom) o; +	return this.atom.compareTo(other.atom) == 0;      }      @Override diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBinary.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBinary.java index a9eaad540e..0891781f8d 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBinary.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBinary.java @@ -18,16 +18,14 @@   */  package com.ericsson.otp.erlang; -import java.io.Serializable;  /**   * Provides a Java representation of Erlang binaries. Anything that can be   * represented as a sequence of bytes can be made into an Erlang binary.   */ -public class OtpErlangBinary extends OtpErlangBitstr implements Serializable, -	Cloneable { +public class OtpErlangBinary extends OtpErlangBitstr {      // don't change this! -    static final long serialVersionUID = -3781009633593609217L; +    private static final long serialVersionUID = -3781009633593609217L;      /**       * Create a binary from a byte array diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBitstr.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBitstr.java index 97897fe182..8cb4e0e685 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBitstr.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBitstr.java @@ -20,17 +20,15 @@ package com.ericsson.otp.erlang;  import java.io.ByteArrayOutputStream;  import java.io.IOException; -import java.io.Serializable;  /**   * Provides a Java representation of Erlang bitstrs. An Erlang bitstr is an   * Erlang binary with a length not an integral number of bytes (8-bit). Anything   * can be represented as a sequence of bytes can be made into an Erlang bitstr.   */ -public class OtpErlangBitstr extends OtpErlangObject implements Serializable, -	Cloneable { +public class OtpErlangBitstr extends OtpErlangObject {      // don't change this! -    static final long serialVersionUID = -3781009633593609217L; +    private static final long serialVersionUID = -3781009633593609217L;      protected byte[] bin;      protected int pad_bits; @@ -63,18 +61,18 @@ public class OtpErlangBitstr extends OtpErlangObject implements Serializable,  	check_bitstr(this.bin, this.pad_bits);      } -    private void check_bitstr(final byte[] bin, final int pad_bits) { -	if (pad_bits < 0 || 7 < pad_bits) { +    private void check_bitstr(final byte[] abin, final int a_pad_bits) { +	if (a_pad_bits < 0 || 7 < a_pad_bits) {  	    throw new java.lang.IllegalArgumentException(  		    "Padding must be in range 0..7");  	} -	if (pad_bits != 0 && bin.length == 0) { +	if (a_pad_bits != 0 && abin.length == 0) {  	    throw new java.lang.IllegalArgumentException(  		    "Padding on zero length bitstr");  	} -	if (bin.length != 0) { +	if (abin.length != 0) {  	    // Make sure padding is zero -	    bin[bin.length - 1] &= ~((1 << pad_bits) - 1); +	    abin[abin.length - 1] &= ~((1 << a_pad_bits) - 1);  	}      } diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBoolean.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBoolean.java index b97b5b7d90..eecd2ea288 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBoolean.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangBoolean.java @@ -18,14 +18,12 @@   */  package com.ericsson.otp.erlang; -import java.io.Serializable;  /**   * Provides a Java representation of Erlang booleans, which are special cases of   * atoms with values 'true' and 'false'.   */ -public class OtpErlangBoolean extends OtpErlangAtom implements Serializable, -	Cloneable { +public class OtpErlangBoolean extends OtpErlangAtom {      // don't change this!      static final long serialVersionUID = 1087178844844988393L; diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangByte.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangByte.java index 2d598c119e..eb6f3d8aba 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangByte.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangByte.java @@ -18,15 +18,13 @@   */  package com.ericsson.otp.erlang; -import java.io.Serializable;  /**   * Provides a Java representation of Erlang integral types.   */ -public class OtpErlangByte extends OtpErlangLong implements Serializable, -	Cloneable { +public class OtpErlangByte extends OtpErlangLong {      // don't change this! -    static final long serialVersionUID = 5778019796466613446L; +    private static final long serialVersionUID = 5778019796466613446L;      /**       * Create an Erlang integer from the given value. @@ -56,6 +54,6 @@ public class OtpErlangByte extends OtpErlangLong implements Serializable,  	    throws OtpErlangRangeException, OtpErlangDecodeException {  	super(buf); -	final byte i = byteValue(); +    byteValue();      }  } diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangChar.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangChar.java index b442bbcec1..e7c6dd8ad4 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangChar.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangChar.java @@ -18,15 +18,13 @@   */  package com.ericsson.otp.erlang; -import java.io.Serializable;  /**   * Provides a Java representation of Erlang integral types.   */ -public class OtpErlangChar extends OtpErlangLong implements Serializable, -	Cloneable { +public class OtpErlangChar extends OtpErlangLong {      // don't change this! -    static final long serialVersionUID = 3225337815669398204L; +    private static final long serialVersionUID = 3225337815669398204L;      /**       * Create an Erlang integer from the given value. @@ -56,6 +54,6 @@ public class OtpErlangChar extends OtpErlangLong implements Serializable,  	    throws OtpErlangRangeException, OtpErlangDecodeException {  	super(buf); -	final char i = charValue(); +    charValue();      }  } diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDecodeException.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDecodeException.java index db55deaedf..6986e26908 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDecodeException.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDecodeException.java @@ -26,6 +26,8 @@ package com.ericsson.otp.erlang;   * @see OtpInputStream   */  public class OtpErlangDecodeException extends OtpErlangException { +    private static final long serialVersionUID = 1L; +      /**       * Provides a detailed message.       */ diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDouble.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDouble.java index 793940e858..e92ce11431 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDouble.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangDouble.java @@ -18,7 +18,6 @@   */  package com.ericsson.otp.erlang; -import java.io.Serializable;  /**   * Provides a Java representation of Erlang floats and doubles. Erlang defines @@ -26,10 +25,9 @@ import java.io.Serializable;   * {@link OtpErlangFloat} are used to provide representations corresponding to   * the Java types Double and Float.   */ -public class OtpErlangDouble extends OtpErlangObject implements Serializable, -	Cloneable { +public class OtpErlangDouble extends OtpErlangObject {      // don't change this! -    static final long serialVersionUID = 132947104811974021L; +    private static final long serialVersionUID = 132947104811974021L;      private final double d; @@ -120,8 +118,8 @@ public class OtpErlangDouble extends OtpErlangObject implements Serializable,  	    return false;  	} -	final OtpErlangDouble d = (OtpErlangDouble) o; -	return this.d == d.d; +	final OtpErlangDouble other = (OtpErlangDouble) o; +	return this.d == other.d;      }      @Override diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangFloat.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangFloat.java index 8662b74c53..7d48f848f0 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangFloat.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangFloat.java @@ -18,15 +18,13 @@   */  package com.ericsson.otp.erlang; -import java.io.Serializable;  /**   * Provides a Java representation of Erlang floats and doubles.   */ -public class OtpErlangFloat extends OtpErlangDouble implements Serializable, -	Cloneable { +public class OtpErlangFloat extends OtpErlangDouble {      // don't change this! -    static final long serialVersionUID = -2231546377289456934L; +    private static final long serialVersionUID = -2231546377289456934L;      /**       * Create an Erlang float from the given float value. @@ -53,6 +51,6 @@ public class OtpErlangFloat extends OtpErlangDouble implements Serializable,  	    throws OtpErlangDecodeException, OtpErlangRangeException {  	super(buf); -	final float f = floatValue(); +    floatValue();      }  } diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangFun.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangFun.java index fc104e9564..05fa0cbb23 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangFun.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangFun.java @@ -18,10 +18,9 @@   */  package com.ericsson.otp.erlang; -import java.io.Serializable;  import java.util.Arrays; -public class OtpErlangFun extends OtpErlangObject implements Serializable { +public class OtpErlangFun extends OtpErlangObject {      // don't change this!      private static final long serialVersionUID = -3423031125356706472L; @@ -94,7 +93,7 @@ public class OtpErlangFun extends OtpErlangObject implements Serializable {  		return false;  	    }  	} else { -	    if (!md5.equals(f.md5)) { +	    if (!Arrays.equals(md5, f.md5)) {  		return false;  	    }  	} @@ -104,7 +103,7 @@ public class OtpErlangFun extends OtpErlangObject implements Serializable {  	if (freeVars == null) {  	    return f.freeVars == null;  	} -	return freeVars.equals(f.freeVars); +	return Arrays.equals(freeVars, f.freeVars);      }      @Override diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangInt.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangInt.java index d947421459..741fc29dd0 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangInt.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangInt.java @@ -18,15 +18,13 @@   */  package com.ericsson.otp.erlang; -import java.io.Serializable;  /**   * Provides a Java representation of Erlang integral types.   */ -public class OtpErlangInt extends OtpErlangLong implements Serializable, -	Cloneable { +public class OtpErlangInt extends OtpErlangLong {      // don't change this! -    static final long serialVersionUID = 1229430977614805556L; +    private static final long serialVersionUID = 1229430977614805556L;      /**       * Create an Erlang integer from the given value. @@ -56,6 +54,6 @@ public class OtpErlangInt extends OtpErlangLong implements Serializable,  	    throws OtpErlangRangeException, OtpErlangDecodeException {  	super(buf); -	final int j = intValue(); +    intValue();      }  } diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangList.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangList.java index 3456fd7412..9f7c5f5499 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangList.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangList.java @@ -18,7 +18,6 @@   */  package com.ericsson.otp.erlang; -import java.io.Serializable;  import java.util.Iterator;  import java.util.NoSuchElementException; @@ -30,9 +29,9 @@ import java.util.NoSuchElementException;   * The arity of the list is the number of elements it contains.   */  public class OtpErlangList extends OtpErlangObject implements -	Iterable<OtpErlangObject>, Serializable, Cloneable { +    Iterable<OtpErlangObject> {      // don't change this! -    static final long serialVersionUID = 5999112769036676548L; +    private static final long serialVersionUID = 5999112769036676548L;      private static final OtpErlangObject[] NO_ELEMENTS = new OtpErlangObject[0]; @@ -187,12 +186,11 @@ public class OtpErlangList extends OtpErlangObject implements      public OtpErlangObject[] elements() {  	if (arity() == 0) {  	    return NO_ELEMENTS; -	} else { +    }  	    final OtpErlangObject[] res = new OtpErlangObject[arity()];  	    System.arraycopy(elems, 0, res, 0, res.length);  	    return res;  	} -    }      /**       * Get the string representation of the list. @@ -326,7 +324,7 @@ public class OtpErlangList extends OtpErlangObject implements  	try {  	    return new OtpErlangList(elements(), getLastTail());  	} catch (final OtpErlangException e) { -	    return null; +			throw new AssertionError(this);  	}      } @@ -361,9 +359,8 @@ public class OtpErlangList extends OtpErlangObject implements  	if (arity >= n) {  	    if (arity == n && lastTail != null) {  		return lastTail; -	    } else { -		return new SubList(this, n);  	    } +        return new SubList(this, n);  	}  	return null;      } diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangLong.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangLong.java index 7e3e2a7296..c6021a6ae1 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangLong.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangLong.java @@ -18,7 +18,6 @@   */  package com.ericsson.otp.erlang; -import java.io.Serializable;  import java.math.BigInteger;  /** @@ -30,10 +29,9 @@ import java.math.BigInteger;   * {@link OtpErlangUInt} and {@link OtpErlangUShort} are provided for Corba   * compatibility. See the documentation for IC for more information.   */ -public class OtpErlangLong extends OtpErlangObject implements Serializable, -	Cloneable { +public class OtpErlangLong extends OtpErlangObject {      // don't change this! -    static final long serialVersionUID = 1610466859236755096L; +    private static final long serialVersionUID = 1610466859236755096L;      private long val;      private BigInteger bigVal = null; @@ -51,8 +49,8 @@ public class OtpErlangLong extends OtpErlangObject implements Serializable,      /**       * Create an Erlang integer from the given value.       *  -     * @param val -     *                the long value to use. +     * @param v +     *                the big integer value to use.       */      public OtpErlangLong(final BigInteger v) {  	if (v == null) { @@ -94,9 +92,8 @@ public class OtpErlangLong extends OtpErlangObject implements Serializable,      public BigInteger bigIntegerValue() {  	if (bigVal != null) {  	    return bigVal; -	} else { -	    return BigInteger.valueOf(val);  	} +    return BigInteger.valueOf(val);      }      /** @@ -109,9 +106,8 @@ public class OtpErlangLong extends OtpErlangObject implements Serializable,      public long longValue() {  	if (bigVal != null) {  	    return bigVal.longValue(); -	} else { -	    return val;  	} +    return val;      }      /** @@ -159,7 +155,7 @@ public class OtpErlangLong extends OtpErlangObject implements Serializable,  	}  	if (val == 0 || val == -1) {  	    return 0; -	} else { +    }  	    // Binary search for bit length  	    int i = 32; // mask length  	    long m = (1L << i) - 1; // AND mask with ones in little end @@ -193,7 +189,6 @@ public class OtpErlangLong extends OtpErlangObject implements Serializable,  	    }  	    return i;  	} -    }      /**       * Return the signum function of this object. @@ -203,9 +198,8 @@ public class OtpErlangLong extends OtpErlangObject implements Serializable,      public int signum() {  	if (bigVal != null) {  	    return bigVal.signum(); -	} else { -	    return val > 0 ? 1 : val < 0 ? -1 : 0;  	} +    return val > 0 ? 1 : val < 0 ? -1 : 0;      }      /** @@ -342,9 +336,8 @@ public class OtpErlangLong extends OtpErlangObject implements Serializable,      public String toString() {  	if (bigVal != null) {  	    return "" + bigVal; -	} else { -	    return "" + val;  	} +    return "" + val;      }      /** @@ -392,8 +385,7 @@ public class OtpErlangLong extends OtpErlangObject implements Serializable,      protected int doHashCode() {  	if (bigVal != null) {  	    return bigVal.hashCode(); -	} else { -	    return BigInteger.valueOf(val).hashCode();  	} +    return BigInteger.valueOf(val).hashCode();      }  } diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangMap.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangMap.java index 03c18e55a2..7f1a64b87d 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangMap.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangMap.java @@ -18,7 +18,6 @@   */  package com.ericsson.otp.erlang; -import java.io.Serializable;  /**   * Provides a Java representation of Erlang maps. Maps are created from one or @@ -29,8 +28,7 @@ import java.io.Serializable;   * values can be retrieved as arrays and the value for a key can be queried.   *    */ -public class OtpErlangMap extends OtpErlangObject implements Serializable, -	Cloneable { +public class OtpErlangMap extends OtpErlangObject {      // don't change this!      private static final long serialVersionUID = -6410770117696198497L; @@ -58,15 +56,23 @@ public class OtpErlangMap extends OtpErlangObject implements Serializable,      /**       * Create a map from an array of terms.       *  -     * @param elems +     * @param keys       *            the array of terms to create the map from. -     * @param start -     *            the offset of the first term to insert. +     * @param kstart +     *            the offset of the first key to insert. +     * @param kcount +     *            the number of keys to insert. +     * @param values +     *            the array of values to create the map from. +     * @param vstart +     *            the offset of the first value to insert.       * @param vcount -     *            the number of terms to insert. +     *            the number of values to insert.       *        * @exception java.lang.IllegalArgumentException       *                if any array is empty (null) or contains null elements. +     * @exception java.lang.IllegalArgumentException +     *                if kcount and vcount differ.       */      public OtpErlangMap(final OtpErlangObject[] keys, final int kstart,  	    final int kcount, final OtpErlangObject[] values, final int vstart, diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangObject.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangObject.java index 81220c5685..5215e5887b 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangObject.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangObject.java @@ -171,14 +171,14 @@ public abstract class OtpErlangObject implements Serializable, Cloneable {  	    for (j = 0, k = 0;    		 j + 4 < b.length;    		 j += 4, k += 1, k %= 3) { -		abc[k] += ((int)b[j+0] & 0xFF) + ((int)b[j+1]<<8 & 0xFF00) -		    + ((int)b[j+2]<<16 & 0xFF0000) + ((int)b[j+3]<<24); +        abc[k] += (b[j+0] & 0xFF) + (b[j+1]<<8 & 0xFF00) +            + (b[j+2]<<16 & 0xFF0000) + (b[j+3]<<24);  		mix();  	    }  	    for (int n = 0, m = 0xFF;  		 j < b.length;  		 j++, n += 8, m <<= 8) { -		abc[k] += (int)b[j]<<n & m; +        abc[k] += b[j]<<n & m;  	    }  	    mix();  	} diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPid.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPid.java index fe81ce302d..4c9f5c78a3 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPid.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPid.java @@ -18,16 +18,14 @@   */  package com.ericsson.otp.erlang; -import java.io.Serializable;  /**   * Provides a Java representation of Erlang PIDs. PIDs represent Erlang   * processes and consist of a nodename and a number of integers.   */ -public class OtpErlangPid extends OtpErlangObject implements Serializable, -	Cloneable, Comparable<Object> { +public class OtpErlangPid extends OtpErlangObject implements Comparable<Object> {      // don't change this! -    static final long serialVersionUID = 1664394142301803659L; +    private static final long serialVersionUID = 1664394142301803659L;      private final String node;      private final int id; @@ -162,7 +160,7 @@ public class OtpErlangPid extends OtpErlangObject implements Serializable,       * Determine if two PIDs are equal. PIDs are equal if their components are       * equal.       *  -     * @param port +     * @param o       *                the other PID to compare to.       *        * @return true if the PIDs are equal, false otherwise. @@ -197,14 +195,11 @@ public class OtpErlangPid extends OtpErlangObject implements Serializable,  	    if (serial == pid.serial) {  		if (id == pid.id) {  		    return node.compareTo(pid.node); -		} else { +        }  		    return id - pid.id;  		} -	    } else {  		return serial - pid.serial;  	    } -	} else {  	    return creation - pid.creation;  	}      } -} diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPort.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPort.java index 2a0eab0a9c..8557e17325 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPort.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangPort.java @@ -18,15 +18,13 @@   */  package com.ericsson.otp.erlang; -import java.io.Serializable;  /**   * Provides a Java representation of Erlang ports.   */ -public class OtpErlangPort extends OtpErlangObject implements Serializable, -	Cloneable { +public class OtpErlangPort extends OtpErlangObject {      // don't change this! -    static final long serialVersionUID = 4037115468007644704L; +    private static final long serialVersionUID = 4037115468007644704L;      private final String node;      private final int id; @@ -40,6 +38,7 @@ public class OtpErlangPort extends OtpErlangObject implements Serializable,       *        * @deprecated use OtpLocalNode:createPort() instead       */ +    @SuppressWarnings("unused")      private OtpErlangPort(final OtpSelf self) {  	final OtpErlangPort p = self.createPort(); diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangRef.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangRef.java index 8056439962..13a83333fa 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangRef.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangRef.java @@ -18,17 +18,15 @@   */  package com.ericsson.otp.erlang; -import java.io.Serializable;  /**   * Provides a Java representation of Erlang refs. There are two styles of Erlang   * refs, old style (one id value) and new style (array of id values). This class   * manages both types.   */ -public class OtpErlangRef extends OtpErlangObject implements Serializable, -	Cloneable { +public class OtpErlangRef extends OtpErlangObject {      // don't change this! -    static final long serialVersionUID = -7022666480768586521L; +    private static final long serialVersionUID = -7022666480768586521L;      private final String node;      private final int creation; diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangShort.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangShort.java index cd232570dd..6ef56defbd 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangShort.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangShort.java @@ -18,13 +18,11 @@   */  package com.ericsson.otp.erlang; -import java.io.Serializable;  /**   * Provides a Java representation of Erlang integral types.   */ -public class OtpErlangShort extends OtpErlangLong implements Serializable, -	Cloneable { +public class OtpErlangShort extends OtpErlangLong {      // don't change this!      static final long serialVersionUID = 7162345156603088099L; @@ -57,7 +55,7 @@ public class OtpErlangShort extends OtpErlangLong implements Serializable,  	    throws OtpErlangRangeException, OtpErlangDecodeException {  	super(buf); -	final short j = shortValue(); +    shortValue();      }  } diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangString.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangString.java index 6766b52ce5..1bccfcc567 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangString.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangString.java @@ -18,17 +18,14 @@   */  package com.ericsson.otp.erlang; -import java.io.Serializable; -import java.lang.Character;  import java.io.UnsupportedEncodingException;  /**   * Provides a Java representation of Erlang strings.   */ -public class OtpErlangString extends OtpErlangObject implements Serializable, -	Cloneable { +public class OtpErlangString extends OtpErlangObject {      // don't change this! -    static final long serialVersionUID = -7053595217604929233L; +    private static final long serialVersionUID = -7053595217604929233L;      private final String str; @@ -41,8 +38,6 @@ public class OtpErlangString extends OtpErlangObject implements Serializable,      /**       * Create an Erlang string from a list of integers. -     *  -     * @return an Erlang string with Unicode code units.       *       * @throws OtpErlangException       *                for non-proper and non-integer lists. @@ -140,6 +135,7 @@ public class OtpErlangString extends OtpErlangObject implements Serializable,  	return false;      } +    @Override      protected int doHashCode() {  	return str.hashCode();      } diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangTuple.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangTuple.java index bffce7f14d..dffaa530cd 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangTuple.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangTuple.java @@ -18,7 +18,6 @@   */  package com.ericsson.otp.erlang; -import java.io.Serializable;  /**   * Provides a Java representation of Erlang tuples. Tuples are created from one @@ -29,10 +28,9 @@ import java.io.Serializable;   * indexed from 0 to (arity-1) and can be retrieved individually by using the   * appropriate index.   */ -public class OtpErlangTuple extends OtpErlangObject implements Serializable, -	Cloneable { +public class OtpErlangTuple extends OtpErlangObject {      // don't change this! -    static final long serialVersionUID = 9163498658004915935L; +    private static final long serialVersionUID = 9163498658004915935L;      private static final OtpErlangObject[] NO_ELEMENTS = new OtpErlangObject[0]; @@ -51,9 +49,8 @@ public class OtpErlangTuple extends OtpErlangObject implements Serializable,  	if (elem == null) {  	    throw new java.lang.IllegalArgumentException(  		    "Tuple element cannot be null"); -	} else { -	    elems = new OtpErlangObject[] { elem };  	} +    elems = new OtpErlangObject[] { elem };      }      /** @@ -242,6 +239,7 @@ public class OtpErlangTuple extends OtpErlangObject implements Serializable,  	return true;      } +    @Override      protected int doHashCode() {  	OtpErlangObject.Hash hash = new OtpErlangObject.Hash(9);  	final int a = arity(); diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangUInt.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangUInt.java index f01354d821..a02996e437 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangUInt.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangUInt.java @@ -18,13 +18,11 @@   */  package com.ericsson.otp.erlang; -import java.io.Serializable;  /**   * Provides a Java representation of Erlang integral types.   */ -public class OtpErlangUInt extends OtpErlangLong implements Serializable, -	Cloneable { +public class OtpErlangUInt extends OtpErlangLong {      // don't change this!      static final long serialVersionUID = -1450956122937471885L; @@ -40,7 +38,7 @@ public class OtpErlangUInt extends OtpErlangLong implements Serializable,      public OtpErlangUInt(final int i) throws OtpErlangRangeException {  	super(i); -	final int j = uIntValue(); +    uIntValue();      }      /** @@ -62,6 +60,6 @@ public class OtpErlangUInt extends OtpErlangLong implements Serializable,  	    throws OtpErlangRangeException, OtpErlangDecodeException {  	super(buf); -	final int j = uIntValue(); +    uIntValue();      }  } diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangUShort.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangUShort.java index 6b6bc7a56b..e9d251f815 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangUShort.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpErlangUShort.java @@ -18,13 +18,11 @@   */  package com.ericsson.otp.erlang; -import java.io.Serializable;  /**   * Provides a Java representation of Erlang integral types.   */ -public class OtpErlangUShort extends OtpErlangLong implements Serializable, -	Cloneable { +public class OtpErlangUShort extends OtpErlangLong {      // don't change this!      static final long serialVersionUID = 300370950578307246L; @@ -40,7 +38,7 @@ public class OtpErlangUShort extends OtpErlangLong implements Serializable,      public OtpErlangUShort(final short s) throws OtpErlangRangeException {  	super(s); -	final short j = uShortValue(); +    uShortValue();      }      /** @@ -62,6 +60,6 @@ public class OtpErlangUShort extends OtpErlangLong implements Serializable,  	    throws OtpErlangRangeException, OtpErlangDecodeException {  	super(buf); -	final short j = uShortValue(); +    uShortValue();      }  } diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpException.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpException.java index 33d25b6021..874c7da104 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpException.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpException.java @@ -22,6 +22,8 @@ package com.ericsson.otp.erlang;   * Base class for the other OTP exception classes.   */  public abstract class OtpException extends Exception { +    private static final long serialVersionUID = 1L; +      /**       * Provides no message.       */ diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpInputStream.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpInputStream.java index 0d1342d796..bab0629382 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpInputStream.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpInputStream.java @@ -21,6 +21,7 @@ package com.ericsson.otp.erlang;  import java.io.ByteArrayInputStream;  import java.io.IOException;  import java.math.BigDecimal; +import java.util.Arrays;  /**   * Provides a stream for decoding Erlang terms from external format. @@ -84,16 +85,17 @@ public class OtpInputStream extends ByteArrayInputStream {       *        * @return the previous position in the stream.       */ -    public int setPos(int pos) { +    public int setPos(final int pos) {  	final int oldpos = super.pos; +    int apos = pos;  	if (pos > super.count) { -	    pos = super.count; +        apos = super.count;  	} else if (pos < 0) { -	    pos = 0; +        apos = 0;  	} -	super.pos = pos; +    super.pos = apos;  	return oldpos;      } @@ -107,8 +109,8 @@ public class OtpInputStream extends ByteArrayInputStream {       * @exception OtpErlangDecodeException       *                if the next byte cannot be read.       */ -    public int readN(final byte[] buf) throws OtpErlangDecodeException { -	return this.readN(buf, 0, buf.length); +    public int readN(final byte[] abuf) throws OtpErlangDecodeException { +	return this.readN(abuf, 0, abuf.length);      }      /** @@ -120,12 +122,12 @@ public class OtpInputStream extends ByteArrayInputStream {       * @exception OtpErlangDecodeException       *                if the next byte cannot be read.       */ -    public int readN(final byte[] buf, final int off, final int len) +    public int readN(final byte[] abuf, final int off, final int len)  	    throws OtpErlangDecodeException {  	if (len == 0 && available() == 0) {  	    return 0;  	} -	final int i = super.read(buf, off, len); +	final int i = super.read(abuf, off, len);  	if (i < 0) {  	    throw new OtpErlangDecodeException("Cannot read from input stream");  	} @@ -213,7 +215,6 @@ public class OtpInputStream extends ByteArrayInputStream {  	} catch (final IOException e) {  	    throw new OtpErlangDecodeException("Cannot read from input stream");  	} -	;  	return (b[0] << 8 & 0xff00) + (b[1] & 0xff);      } @@ -232,7 +233,6 @@ public class OtpInputStream extends ByteArrayInputStream {  	} catch (final IOException e) {  	    throw new OtpErlangDecodeException("Cannot read from input stream");  	} -	;  	return (b[0] << 24 & 0xff000000) + (b[1] << 16 & 0xff0000)  		+ (b[2] << 8 & 0xff00) + (b[3] & 0xff);      } @@ -252,7 +252,6 @@ public class OtpInputStream extends ByteArrayInputStream {  	} catch (final IOException e) {  	    throw new OtpErlangDecodeException("Cannot read from input stream");  	} -	;  	return (b[1] << 8 & 0xff00) + (b[0] & 0xff);      } @@ -271,7 +270,6 @@ public class OtpInputStream extends ByteArrayInputStream {  	} catch (final IOException e) {  	    throw new OtpErlangDecodeException("Cannot read from input stream");  	} -	;  	return (b[3] << 24 & 0xff000000) + (b[2] << 16 & 0xff0000)  		+ (b[1] << 8 & 0xff00) + (b[0] & 0xff);      } @@ -287,17 +285,17 @@ public class OtpInputStream extends ByteArrayInputStream {       * @exception OtpErlangDecodeException       *                if the next byte cannot be read.       */ -    public long readLE(int n) throws OtpErlangDecodeException { +    public long readLE(final int n) throws OtpErlangDecodeException {  	final byte[] b = new byte[n];  	try {  	    super.read(b);  	} catch (final IOException e) {  	    throw new OtpErlangDecodeException("Cannot read from input stream");  	} -	;  	long v = 0; -	while (n-- > 0) { -	    v = v << 8 | (long) b[n] & 0xff; +    int i = n; +    while (i-- > 0) { +        v = v << 8 | (long) b[i] & 0xff;  	}  	return v;      } @@ -320,7 +318,6 @@ public class OtpInputStream extends ByteArrayInputStream {  	} catch (final IOException e) {  	    throw new OtpErlangDecodeException("Cannot read from input stream");  	} -	;  	long v = 0;  	for (int i = 0; i < n; i++) {  	    v = v << 8 | (long) b[i] & 0xff; @@ -349,6 +346,7 @@ public class OtpInputStream extends ByteArrayInputStream {       * @exception OtpErlangDecodeException       *                if the next term in the stream is not an atom.       */ +    @SuppressWarnings("fallthrough")      public String read_atom() throws OtpErlangDecodeException {  	int tag;  	int len = -1; @@ -381,7 +379,7 @@ public class OtpInputStream extends ByteArrayInputStream {  	case OtpExternal.smallAtomUtf8Tag:  	    len = read1(); -	    /* fall through */ +        // fall-through  	case OtpExternal.atomUtf8Tag:  	    if (len < 0) {  		len = read2BE(); @@ -819,7 +817,7 @@ public class OtpInputStream extends ByteArrayInputStream {  	    if (unsigned) {  		if (c < 0) {  		    throw new OtpErlangDecodeException("Value not unsigned: " -			    + b); +			    + Arrays.toString(b));  		}  		while (b[i] == 0) {  		    i++; // Skip leading zero sign bytes @@ -844,7 +842,7 @@ public class OtpInputStream extends ByteArrayInputStream {  	    if (b.length - i > 8) {  		// More than 64 bits of value  		throw new OtpErlangDecodeException( -			"Value does not fit in long: " + b); +			"Value does not fit in long: " + Arrays.toString(b));  	    }  	    // Convert the necessary bytes  	    for (v = c < 0 ? -1 : 0; i < b.length; i++) { @@ -1054,7 +1052,7 @@ public class OtpInputStream extends ByteArrayInputStream {  	    }  	    return new OtpErlangFun(pid, module, index, uniq, freeVars);  	} else if (tag == OtpExternal.newFunTag) { -	    final int n = read4BE(); +        read4BE();  	    final int arity = read1();  	    final byte[] md5 = new byte[16];  	    readN(md5); @@ -1148,13 +1146,13 @@ public class OtpInputStream extends ByteArrayInputStream {  	}  	final int size = read4BE(); -	final byte[] buf = new byte[size]; +	final byte[] abuf = new byte[size];  	final java.util.zip.InflaterInputStream is =   	    new java.util.zip.InflaterInputStream(this, new java.util.zip.Inflater(), size);  	int curPos = 0;  	try {  	    int curRead; -	    while(curPos < size && (curRead = is.read(buf, curPos, size - curPos)) != -1) { +	    while(curPos < size && (curRead = is.read(abuf, curPos, size - curPos)) != -1) {  		curPos += curRead;  	    }  	    if (curPos != size) { @@ -1165,7 +1163,8 @@ public class OtpInputStream extends ByteArrayInputStream {  	    throw new OtpErlangDecodeException("Cannot read from input stream");  	} -	final OtpInputStream ois = new OtpInputStream(buf, flags); +    @SuppressWarnings("resource") +	final OtpInputStream ois = new OtpInputStream(abuf, flags);  	return ois.read_any();      } diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMD5.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMD5.java index 903a446258..a5a4d86602 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMD5.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMD5.java @@ -101,8 +101,11 @@ class OtpMD5 {      private void to_buffer(int to_start, final int[] from, int from_start,  	    int num) { -	while (num-- > 0) { -	    buffer[to_start++] = from[from_start++]; +    int ix = num; +    int to_ix = to_start; +    int from_ix = from_start; +    while (ix-- > 0) { +        buffer[to_ix++] = from[from_ix++];  	}      } @@ -121,7 +124,7 @@ class OtpMD5 {  	count[1] = plus(count[1], shr(inlen, 29)); -	/* dumpstate(); */ +    // dumpstate();  	if (inlen >= partlen) {  	    to_buffer(index, bytes, 0, (int) partlen); @@ -144,6 +147,7 @@ class OtpMD5 {      } +    @SuppressWarnings("unused")      private void dumpstate() {  	System.out.println("state = {" + state[0] + ", " + state[1] + ", "  		+ state[2] + ", " + state[3] + "}"); @@ -185,30 +189,30 @@ class OtpMD5 {      private long FF(long a, final long b, final long c, final long d,  	    final long x, final long s, final long ac) { -	a = plus(a, plus(plus(F(b, c, d), x), ac)); -	a = ROTATE_LEFT(a, s); -	return plus(a, b); +    long tmp = plus(a, plus(plus(F(b, c, d), x), ac)); +    tmp = ROTATE_LEFT(tmp, s); +    return plus(tmp, b);      }      private long GG(long a, final long b, final long c, final long d,  	    final long x, final long s, final long ac) { -	a = plus(a, plus(plus(G(b, c, d), x), ac)); -	a = ROTATE_LEFT(a, s); -	return plus(a, b); +    long tmp = plus(a, plus(plus(G(b, c, d), x), ac)); +    tmp = ROTATE_LEFT(tmp, s); +    return plus(tmp, b);      }      private long HH(long a, final long b, final long c, final long d,  	    final long x, final long s, final long ac) { -	a = plus(a, plus(plus(H(b, c, d), x), ac)); -	a = ROTATE_LEFT(a, s); -	return plus(a, b); +    long tmp = plus(a, plus(plus(H(b, c, d), x), ac)); +    tmp = ROTATE_LEFT(tmp, s); +    return plus(tmp, b);      }      private long II(long a, final long b, final long c, final long d,  	    final long x, final long s, final long ac) { -	a = plus(a, plus(plus(I(b, c, d), x), ac)); -	a = ROTATE_LEFT(a, s); -	return plus(a, b); +    long tmp = plus(a, plus(plus(I(b, c, d), x), ac)); +    tmp = ROTATE_LEFT(tmp, s); +    return plus(tmp, b);      }      private void decode(final long output[], final int input[], diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMbox.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMbox.java index 0fd93b09f4..fc592c222c 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMbox.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMbox.java @@ -69,6 +69,7 @@ package com.ericsson.otp.erlang;   * notify other parties in a timely manner.   * </p>   *  + * <p>   * When retrieving messages from a mailbox that has received an exit signal, an   * {@link OtpErlangExit OtpErlangExit} exception will be raised. Note that the   * exception is queued in the mailbox along with other messages, and will not be @@ -127,14 +128,14 @@ public class OtpMbox {       * supercede that name.       * </p>       *  -     * @param name +     * @param aname       *                the name to register for the mailbox. Specify null to       *                unregister the existing name from this mailbox.       *        * @return true if the name was available, or false otherwise.       */ -    public synchronized boolean registerName(final String name) { -	return home.registerName(name, this); +    public synchronized boolean registerName(final String aname) { +	return home.registerName(aname, this);      }      /** @@ -349,21 +350,21 @@ public class OtpMbox {       * Send a message to a named mailbox created from the same node as this       * mailbox.       *  -     * @param name +     * @param aname       *                the registered name of recipient mailbox.       *        * @param msg       *                the body of the message to send.       *        */ -    public void send(final String name, final OtpErlangObject msg) { -	home.deliver(new OtpMsg(self, name, (OtpErlangObject) msg.clone())); +    public void send(final String aname, final OtpErlangObject msg) { +	home.deliver(new OtpMsg(self, aname, (OtpErlangObject) msg.clone()));      }      /**       * Send a message to a named mailbox created from another node.       *  -     * @param name +     * @param aname       *                the registered name of recipient mailbox.       *        * @param node @@ -374,23 +375,23 @@ public class OtpMbox {       *                the body of the message to send.       *        */ -    public void send(final String name, final String node, +    public void send(final String aname, final String node,  	    final OtpErlangObject msg) {  	try {  	    final String currentNode = home.node();  	    if (node.equals(currentNode)) { -		send(name, msg); +		send(aname, msg);  	    } else if (node.indexOf('@', 0) < 0  		    && node.equals(currentNode.substring(0, currentNode  			    .indexOf('@', 0)))) { -		send(name, msg); +		send(aname, msg);  	    } else {  		// other node  		final OtpCookedConnection conn = home.getConnection(node);  		if (conn == null) {  		    return;  		} -		conn.send(self, name, msg); +		conn.send(self, aname, msg);  	    }  	} catch (final Exception e) {  	} @@ -420,7 +421,6 @@ public class OtpMbox {      /**       * Equivalent to <code>exit(new OtpErlangAtom(reason))</code>. -     * </p>       *        * @see #exit(OtpErlangObject)       */ @@ -629,8 +629,8 @@ public class OtpMbox {       * @return the {@link OtpErlangPid pid} corresponding to the registered       *         name, or null if the name is not known on this node.       */ -    public OtpErlangPid whereis(final String name) { -	return home.whereis(name); +    public OtpErlangPid whereis(final String aname) { +	return home.whereis(aname);      }      /** diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMsg.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMsg.java index 6f507bf4bb..7c5bc69361 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMsg.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpMsg.java @@ -30,14 +30,14 @@ package com.ericsson.otp.erlang;   * </p>   *    * <p> - * The header information that is available is as follows: <lu> + * The header information that is available is as follows: <ul>   * <li> a tag indicating the type of message   * <li> the intended recipient of the message, either as a   * {@link OtpErlangPid pid} or as a String, but never both.   * <li> (sometimes) the sender of the message. Due to some eccentric   * characteristics of the Erlang distribution protocol, not all messages have   * information about the sending process. In particular, only messages whose tag - * is {@link OtpMsg#regSendTag regSendTag} contain sender information. </lu> + * is {@link OtpMsg#regSendTag regSendTag} contain sender information. </ul>   *    * <p>   * Message are sent using the Erlang external format (see separate @@ -129,13 +129,14 @@ public class OtpMsg {      }      // other message types (link, unlink) -    OtpMsg(int tag, final OtpErlangPid from, final OtpErlangPid to) { +    OtpMsg(final int tag, final OtpErlangPid from, final OtpErlangPid to) {  	// convert TT-tags to equiv non-TT versions +    int atag = tag;  	if (tag > 10) { -	    tag -= 10; +        atag -= 10;  	} -	this.tag = tag; +    this.tag = atag;  	this.from = from;  	this.to = to;      } diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpNode.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpNode.java index 7ead0b9c54..68addb9f2c 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpNode.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpNode.java @@ -74,7 +74,7 @@ public class OtpNode extends OtpLocalNode {      OtpNodeStatus handler;      // flags -    private int flags = 0; +    private int connFlags = 0;      /**       * <p> @@ -143,12 +143,12 @@ public class OtpNode extends OtpLocalNode {  	init(port);      } -    private synchronized void init(final int port) throws IOException { +    private synchronized void init(final int aport) throws IOException {  	if (!initDone) {  	    connections = new Hashtable<String, OtpCookedConnection>(17,  		    (float) 0.95);  	    mboxes = new Mailboxes(); -	    acceptor = new Acceptor(port); +	    acceptor = new Acceptor(aport);  	    initDone = true;  	}      } @@ -314,13 +314,13 @@ public class OtpNode extends OtpLocalNode {       * OtpNodeStatus} handler object contains callback methods, that will be       * called when certain events occur.       *  -     * @param handler +     * @param ahandler       *            the callback object to register. To clear the handler, specify       *            null as the handler to use.       *        */ -    public synchronized void registerStatusHandler(final OtpNodeStatus handler) { -	this.handler = handler; +    public synchronized void registerStatusHandler(final OtpNodeStatus ahandler) { +	this.handler = ahandler;      }      /** @@ -344,7 +344,7 @@ public class OtpNode extends OtpLocalNode {       *     ;       * </pre>       *  -     * @param node +     * @param anode       *            the name of the node to ping.       *        * @param timeout @@ -362,11 +362,11 @@ public class OtpNode extends OtpLocalNode {       *        * the reply: <- SEND {2,'',#Pid<[email protected]>} {#Ref<[email protected]>,yes}       */ -    public boolean ping(final String node, final long timeout) { -	if (node.equals(this.node)) { +    public boolean ping(final String anode, final long timeout) { +	if (anode.equals(this.node)) {  	    return true; -	} else if (node.indexOf('@', 0) < 0 -		&& node.equals(this.node +	} else if (anode.indexOf('@', 0) < 0 +		&& anode.equals(this.node  			.substring(0, this.node.indexOf('@', 0)))) {  	    return true;  	} @@ -375,7 +375,7 @@ public class OtpNode extends OtpLocalNode {  	OtpMbox mbox = null;  	try {  	    mbox = createMbox(); -	    mbox.send("net_kernel", node, getPingTuple(mbox)); +	    mbox.send("net_kernel", anode, getPingTuple(mbox));  	    final OtpErlangObject reply = mbox.receive(timeout);  	    final OtpErlangTuple t = (OtpErlangTuple) reply; @@ -392,17 +392,17 @@ public class OtpNode extends OtpLocalNode {      private OtpErlangTuple getPingTuple(final OtpMbox mbox) {  	final OtpErlangObject[] ping = new OtpErlangObject[3];  	final OtpErlangObject[] pid = new OtpErlangObject[2]; -	final OtpErlangObject[] node = new OtpErlangObject[2]; +	final OtpErlangObject[] anode = new OtpErlangObject[2];  	pid[0] = mbox.self();  	pid[1] = createRef(); -	node[0] = new OtpErlangAtom("is_auth"); -	node[1] = new OtpErlangAtom(node()); +	anode[0] = new OtpErlangAtom("is_auth"); +	anode[1] = new OtpErlangAtom(node());  	ping[0] = new OtpErlangAtom("$gen_call");  	ping[1] = new OtpErlangTuple(pid); -	ping[2] = new OtpErlangTuple(node); +	ping[2] = new OtpErlangTuple(anode);  	return new OtpErlangTuple(ping);      } @@ -450,9 +450,8 @@ public class OtpNode extends OtpLocalNode {  		/* special case for netKernel requests */  		if (name.equals("net_kernel")) {  		    return netKernel(m); -		} else { -		    mbox = mboxes.get(name);  		} +        mbox = mboxes.get(name);  	    } else {  		mbox = mboxes.get(m.getRecipientPid());  	    } @@ -480,23 +479,23 @@ public class OtpNode extends OtpLocalNode {      /*       * find or create a connection to the given node       */ -    OtpCookedConnection getConnection(final String node) { +    OtpCookedConnection getConnection(final String anode) {  	OtpPeer peer = null;  	OtpCookedConnection conn = null;  	synchronized (connections) {  	    // first just try looking up the name as-is -	    conn = connections.get(node); +	    conn = connections.get(anode);  	    if (conn == null) {  		// in case node had no '@' add localhost info and try again -		peer = new OtpPeer(node); +		peer = new OtpPeer(anode);  		conn = connections.get(peer.node());  		if (conn == null) {  		    try {  			conn = new OtpCookedConnection(this, peer); -			conn.setFlags(flags); +			conn.setFlags(connFlags);  			addConnection(conn);  		    } catch (final Exception e) {  			/* false = outgoing */ @@ -522,35 +521,35 @@ public class OtpNode extends OtpLocalNode {      }      /* use these wrappers to call handler functions */ -    private synchronized void remoteStatus(final String node, final boolean up, +    private synchronized void remoteStatus(final String anode, final boolean up,  	    final Object info) {  	if (handler == null) {  	    return;  	}  	try { -	    handler.remoteStatus(node, up, info); +	    handler.remoteStatus(anode, up, info);  	} catch (final Exception e) {  	}      } -    synchronized void localStatus(final String node, final boolean up, +    synchronized void localStatus(final String anode, final boolean up,  	    final Object info) {  	if (handler == null) {  	    return;  	}  	try { -	    handler.localStatus(node, up, info); +	    handler.localStatus(anode, up, info);  	} catch (final Exception e) {  	}      } -    synchronized void connAttempt(final String node, final boolean incoming, +    synchronized void connAttempt(final String anode, final boolean incoming,  	    final Object info) {  	if (handler == null) {  	    return;  	}  	try { -	    handler.connAttempt(node, incoming, info); +	    handler.connAttempt(anode, incoming, info);  	} catch (final Exception e) {  	}      } @@ -684,13 +683,13 @@ public class OtpNode extends OtpLocalNode {       */      public class Acceptor extends Thread {  	private final ServerSocket sock; -	private final int port; +	private final int acceptorPort;  	private volatile boolean done = false;  	Acceptor(final int port) throws IOException {  	    sock = new ServerSocket(port); -	    this.port = sock.getLocalPort(); -	    OtpNode.this.port = this.port; +	    this.acceptorPort = sock.getLocalPort(); +	    OtpNode.this.port = this.acceptorPort;  	    setDaemon(true);  	    setName("acceptor"); @@ -741,7 +740,7 @@ public class OtpNode extends OtpLocalNode {  	}  	public int port() { -	    return port; +	    return acceptorPort;  	}  	@Override @@ -771,7 +770,7 @@ public class OtpNode extends OtpLocalNode {  		try {  		    synchronized (connections) {  			conn = new OtpCookedConnection(OtpNode.this, newsock); -			conn.setFlags(flags); +			conn.setFlags(connFlags);  			addConnection(conn);  		    }  		} catch (final OtpAuthException e) { @@ -802,6 +801,6 @@ public class OtpNode extends OtpLocalNode {      }      public void setFlags(final int flags) { -	this.flags = flags; +	this.connFlags = flags;      }  } diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpOutputStream.java b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpOutputStream.java index a78423db44..ef60a9f38a 100644 --- a/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpOutputStream.java +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/OtpOutputStream.java @@ -25,7 +25,6 @@ import java.io.UnsupportedEncodingException;  import java.math.BigDecimal;  import java.math.BigInteger;  import java.text.DecimalFormat; -import java.util.Arrays;  import java.util.zip.Deflater;  /** @@ -45,8 +44,11 @@ public class OtpOutputStream extends ByteArrayOutputStream {      public static final int defaultIncrement = 2048;      // static formats, used to encode floats and doubles +    @SuppressWarnings("unused")      private static final DecimalFormat eform = new DecimalFormat("e+00;e-00"); +    @SuppressWarnings("unused")      private static final BigDecimal ten = new BigDecimal(10.0); +    @SuppressWarnings("unused")      private static final BigDecimal one = new BigDecimal(1.0);      private int fixedSize = Integer.MAX_VALUE; @@ -159,9 +161,9 @@ public class OtpOutputStream extends ByteArrayOutputStream {       * @see java.io.ByteArrayOutputStream#write(byte[])       */      @Override -    public void write(final byte[] buf) { +    public void write(final byte[] abuf) {  	// don't assume that super.write(byte[]) calls write(buf, 0, buf.length) -	write(buf, 0, buf.length); +	write(abuf, 0, abuf.length);      }      /* (non-Javadoc) @@ -202,7 +204,7 @@ public class OtpOutputStream extends ByteArrayOutputStream {      /**       * Write an array of bytes to the stream.       *  -     * @param buf +     * @param bytes       *            the array of bytes to write.       *        */ @@ -285,10 +287,11 @@ public class OtpOutputStream extends ByteArrayOutputStream {       * @param b       *            the number of bytes to write from the little end.       */ -    public void writeLE(long n, final int b) { +    public void writeLE(final long n, final int b) { +    long v = n;  	for (int i = 0; i < b; i++) { -	    write((byte) (n & 0xff)); -	    n >>= 8; +        write((byte) (v & 0xff)); +        v >>= 8;  	}      } @@ -518,16 +521,17 @@ public class OtpOutputStream extends ByteArrayOutputStream {  	write_double(f);      } -    public void write_big_integer(BigInteger v) { +    public void write_big_integer(final BigInteger v) {  	if (v.bitLength() < 64) {  	    this.write_long(v.longValue(), true);  	    return;  	}  	final int signum = v.signum(); +    BigInteger val = v;  	if (signum < 0) { -	    v = v.negate(); +        val = val.negate();  	} -	final byte[] magnitude = v.toByteArray(); +    final byte[] magnitude = val.toByteArray();  	final int n = magnitude.length;  	// Reverse the array to make it little endian.  	for (int i = 0, j = n; i < j--; i++) { @@ -568,7 +572,7 @@ public class OtpOutputStream extends ByteArrayOutputStream {  		int n;  		long mask;  		for (mask = 0xFFFFffffL, n = 4; (abs & mask) != abs; n++, mask = mask << 8 | 0xffL) { -		    ; // count nonzero bytes +            // count nonzero bytes  		}  		write1(OtpExternal.smallBigTag);  		write1(n); // length @@ -637,7 +641,7 @@ public class OtpOutputStream extends ByteArrayOutputStream {       * Write a positive short to the stream. The short is interpreted as a two's       * complement unsigned short even if it is negative.       *  -     * @param s +     * @param us       *            the short to use.       */      public void write_ushort(final short us) { @@ -827,7 +831,6 @@ public class OtpOutputStream extends ByteArrayOutputStream {  		    write_nil(); // it should never ever get here...  		}  	    } else { // unicode or longer, must code as list -		final char[] charbuf = s.toCharArray();  		final int[] codePoints = OtpErlangString.stringToCodePoints(s);  		write_list_head(codePoints.length);  		for (final int codePoint : codePoints) { @@ -867,6 +870,7 @@ public class OtpOutputStream extends ByteArrayOutputStream {       *            the compression level (<tt>0..9</tt>)       */      public void write_compressed(final OtpErlangObject o, int level) { +    @SuppressWarnings("resource")  	final OtpOutputStream oos = new OtpOutputStream(o);  	/*  	 * similar to erts_term_to_binary() in external.c: @@ -920,6 +924,11 @@ public class OtpOutputStream extends ByteArrayOutputStream {  			"Intermediate stream failed for Erlang object " + o);  	    } finally {  		this.fixedSize = Integer.MAX_VALUE; +        try { +            dos.close(); +        } catch (IOException e) { +            // ignore +        }  	    }  	}      } diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/jinterface.app.src b/lib/jinterface/java_src/com/ericsson/otp/erlang/jinterface.app.src new file mode 100644 index 0000000000..d25d9bc142 --- /dev/null +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/jinterface.app.src @@ -0,0 +1,32 @@ +%% +%% %CopyrightBegin% +%%  +%% Copyright Ericsson AB 2014. All Rights Reserved. +%%  +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%%  +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%%  +%% %CopyrightEnd% +%% +%% This is an -*- erlang -*- file. +%% + +{application, jinterface, + [ +  {description, "Jinterface"}, +  {vsn, "%VSN%"}, +  {modules, []}, +  {registered, []}, +  {applications, []}, +  {env, []}, +  {runtime_dependencies, []} + ] +}. diff --git a/lib/jinterface/java_src/com/ericsson/otp/erlang/jinterface.appup.src b/lib/jinterface/java_src/com/ericsson/otp/erlang/jinterface.appup.src new file mode 100644 index 0000000000..d267e3d3d5 --- /dev/null +++ b/lib/jinterface/java_src/com/ericsson/otp/erlang/jinterface.appup.src @@ -0,0 +1,18 @@ +%% -*- erlang -*- +%% %CopyrightBegin% +%%  +%% Copyright Ericsson AB 2014. All Rights Reserved. +%%  +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%%  +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%%  +%% %CopyrightEnd% +{"%VSN%", [], []}. diff --git a/lib/jinterface/test/jinterface_SUITE.erl b/lib/jinterface/test/jinterface_SUITE.erl index cb725164cd..00abc97ff5 100644 --- a/lib/jinterface/test/jinterface_SUITE.erl +++ b/lib/jinterface/test/jinterface_SUITE.erl @@ -38,7 +38,8 @@  	 java_exit_with_reason_any_term/1,  	 status_handler_localStatus/1, status_handler_remoteStatus/1,  	 status_handler_connAttempt/1, -	 maps/1 +	 maps/1, +	 fun_equals/1       ]).  -include_lib("common_test/include/ct.hrl"). @@ -106,7 +107,8 @@ fundamental() ->       register_and_whereis, % RegisterAndWhereis.java       get_names,            % GetNames.java       boolean_atom,         % BooleanAtom.java -     maps                  % Maps.java +     maps,                 % Maps.java +     fun_equals            % FunEquals.java      ].  ping() -> @@ -691,6 +693,18 @@ maps(Config) when is_list(Config) ->             []).  %%%----------------------------------------------------------------- +fun_equals(doc) -> +    ["FunEquals.java: " +     "Test OtpErlangFun.equals()"]; +fun_equals(suite) -> +    []; +fun_equals(Config) when is_list(Config) -> +    ok = jitu:java(?config(java, Config), +           ?config(data_dir, Config), +           "FunEquals", +           []). + +%%%-----------------------------------------------------------------  %%% INTERNAL FUNCTIONS  %%%-----------------------------------------------------------------  send_receive(TestCaseTag,Fun,Config) -> diff --git a/lib/jinterface/test/jinterface_SUITE_data/FunEquals.java b/lib/jinterface/test/jinterface_SUITE_data/FunEquals.java new file mode 100644 index 0000000000..961e462cb3 --- /dev/null +++ b/lib/jinterface/test/jinterface_SUITE_data/FunEquals.java @@ -0,0 +1,73 @@ +/* + * %CopyrightBegin% + * + * Copyright Ericsson AB 2004-2010. All Rights Reserved. + * + * The contents of this file are subject to the Erlang Public License, + * Version 1.1, (the "License"); you may not use this file except in + * compliance with the License. You should have received a copy of the + * Erlang Public License along with this software. If not, it can be + * retrieved online at http://www.erlang.org/. + * + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + * the License for the specific language governing rights and limitations + * under the License. + * + * %CopyrightEnd% + */ + +import com.ericsson.otp.erlang.OtpErlangAtom; +import com.ericsson.otp.erlang.OtpErlangFun; +import com.ericsson.otp.erlang.OtpErlangLong; +import com.ericsson.otp.erlang.OtpErlangObject; +import com.ericsson.otp.erlang.OtpErlangPid; + +public class FunEquals { + +    /* +      Implements test case jinterface_SUITE:fun_equals/1 + +      Test the function OtpErlangFun.equals() +    */ + +    public static void main(String argv[]) { + +        OtpErlangPid pid = new OtpErlangPid("here", 4, 5, 0); +        String module = "mod"; +        int arity = 2; +        byte[] md5 = new byte[]{3,5,7}; +        int index = 2; +        long old_index = 1; +        long uniq= 2; +        OtpErlangObject[] freeVars = new OtpErlangObject[]{ +                new OtpErlangAtom("hej"), new OtpErlangLong(9) +            }; + +        OtpErlangFun f1 = new OtpErlangFun(pid, module, arity, md5, +                index, old_index, uniq, freeVars); +        OtpErlangFun f2 = new OtpErlangFun(pid, module, arity, copyArray(md5), +                index, old_index, uniq, copyArray(freeVars)); + +        if(!f1.equals(f2)) +            fail(1); + +    } + +    private static void fail(int reason) { +        System.exit(reason); +    } + +    private static byte[] copyArray(byte[] source) { +        byte[] result = new byte[source.length]; +        System.arraycopy(source, 0, result, 0, source.length); +        return result; +    } + +    private static OtpErlangObject[] copyArray(OtpErlangObject[] source) { +        OtpErlangObject[] result = new OtpErlangObject[source.length]; +        System.arraycopy(source, 0, result, 0, source.length); +        return result; +    } + +} diff --git a/lib/jinterface/test/jinterface_SUITE_data/GetNames.java b/lib/jinterface/test/jinterface_SUITE_data/GetNames.java index 3d2bc4ac84..54efaad242 100644 --- a/lib/jinterface/test/jinterface_SUITE_data/GetNames.java +++ b/lib/jinterface/test/jinterface_SUITE_data/GetNames.java @@ -18,7 +18,9 @@   */  import java.util.ArrayList; -import com.ericsson.otp.erlang.*; + +import com.ericsson.otp.erlang.OtpMbox; +import com.ericsson.otp.erlang.OtpNode;  class GetNames { @@ -37,7 +39,7 @@ class GetNames {  	    OtpMbox mbox3 = node.createMbox();  	    node.registerName("mbox3",mbox3); -	    ArrayList existing_names = new ArrayList(); +        ArrayList<String> existing_names = new ArrayList<String>();  	    existing_names.add("mbox3");  	    existing_names.add("mbox2");  	    existing_names.add("mbox1"); diff --git a/lib/jinterface/test/jinterface_SUITE_data/Makefile.src b/lib/jinterface/test/jinterface_SUITE_data/Makefile.src index a15ed1aa63..cd68f1ead5 100644 --- a/lib/jinterface/test/jinterface_SUITE_data/Makefile.src +++ b/lib/jinterface/test/jinterface_SUITE_data/Makefile.src @@ -47,7 +47,8 @@ JAVA_FILES = \  	MboxSendReceive.java \  	MboxLinkUnlink.java \  	NodeStatusHandler.java \ -	Maps.java +	Maps.java \ +	FunEquals.java  CLASS_FILES = $(JAVA_FILES:.java=.class) diff --git a/lib/jinterface/test/jinterface_SUITE_data/MboxLinkUnlink.java b/lib/jinterface/test/jinterface_SUITE_data/MboxLinkUnlink.java index 5d1d097cc8..470fdb4a14 100644 --- a/lib/jinterface/test/jinterface_SUITE_data/MboxLinkUnlink.java +++ b/lib/jinterface/test/jinterface_SUITE_data/MboxLinkUnlink.java @@ -17,7 +17,14 @@   * %CopyrightEnd%   */ -import com.ericsson.otp.erlang.*; +import com.ericsson.otp.erlang.OtpErlangAtom; +import com.ericsson.otp.erlang.OtpErlangExit; +import com.ericsson.otp.erlang.OtpErlangLong; +import com.ericsson.otp.erlang.OtpErlangObject; +import com.ericsson.otp.erlang.OtpErlangPid; +import com.ericsson.otp.erlang.OtpErlangTuple; +import com.ericsson.otp.erlang.OtpMbox; +import com.ericsson.otp.erlang.OtpNode;  class MboxLinkUnlink { @@ -66,7 +73,10 @@ class MboxLinkUnlink {  		OtpErlangObject[] msg = {mainMbox.self(),mbox.self()};  		mbox.send("erl_link_server", erlNode, new OtpErlangTuple(msg));  		OtpErlangObject o = mbox.receive(1000); -		if (o == null) System.exit(1); +        if (o == null) { +            System.exit(1); +            return; +        }  		OtpErlangTuple tuple = (OtpErlangTuple)o;  		int tag = (int)((OtpErlangLong)tuple.elementAt(0)).longValue(); @@ -91,6 +101,7 @@ class MboxLinkUnlink {  		    expected = tuple.elementAt(2);  		    mbox.receive(1000);  		    System.exit(2); +            break;  		case erl_link_java_exit:  		    dbg("Java got \"erl_link_java_exit\"");  		    mbox.exit(tuple.elementAt(2)); @@ -104,6 +115,7 @@ class MboxLinkUnlink {  		    expected = tuple.elementAt(2);  		    mbox.receive(1000);  		    System.exit(3); +            break;  		case internal_link_linking_exits:  		    dbg("Java got \"internal_link_linking_exits\"");  		    mbox2 = node.createMbox(); @@ -113,6 +125,7 @@ class MboxLinkUnlink {  		    expected = tuple.elementAt(2);  		    mbox2.receive(1000); // hanging waiting for exit  		    System.exit(4);  // got someting other than exit +            break;  		case internal_link_linked_exits:  		    dbg("Java got \"internal_link_linked_exits\"");  		    mbox2 = node.createMbox(); @@ -122,6 +135,7 @@ class MboxLinkUnlink {  		    expected = tuple.elementAt(2);  		    mbox.receive(1000); // hanging waiting for exit  		    System.exit(5);  // got someting other than exit +            break;  		case internal_unlink_linking_exits:  		    dbg("Java got \"internal_unlink_linking_exits\"");  		    mbox2 = node.createMbox(); diff --git a/lib/jinterface/test/jinterface_SUITE_data/MboxSendReceive.java b/lib/jinterface/test/jinterface_SUITE_data/MboxSendReceive.java index 2db71bb5cd..44433aa619 100644 --- a/lib/jinterface/test/jinterface_SUITE_data/MboxSendReceive.java +++ b/lib/jinterface/test/jinterface_SUITE_data/MboxSendReceive.java @@ -17,7 +17,13 @@   * %CopyrightEnd%   */ -import com.ericsson.otp.erlang.*; +import com.ericsson.otp.erlang.OtpErlangAtom; +import com.ericsson.otp.erlang.OtpErlangLong; +import com.ericsson.otp.erlang.OtpErlangObject; +import com.ericsson.otp.erlang.OtpErlangPid; +import com.ericsson.otp.erlang.OtpErlangTuple; +import com.ericsson.otp.erlang.OtpMbox; +import com.ericsson.otp.erlang.OtpNode;  class MboxSendReceive { @@ -35,6 +41,7 @@ class MboxSendReceive {      private static final int java_internal_send_receive_different_nodes = 3;      private static final int java_internal_send_receive_self = 4; +    @SuppressWarnings("null")      public static void main(String argv[]) {  	String cookie = argv[0]; diff --git a/lib/jinterface/test/jinterface_SUITE_data/NodeStatusHandler.java b/lib/jinterface/test/jinterface_SUITE_data/NodeStatusHandler.java index 51ea15b5ef..06ddfa2d61 100644 --- a/lib/jinterface/test/jinterface_SUITE_data/NodeStatusHandler.java +++ b/lib/jinterface/test/jinterface_SUITE_data/NodeStatusHandler.java @@ -17,7 +17,14 @@   * %CopyrightEnd%   */ -import com.ericsson.otp.erlang.*; +import com.ericsson.otp.erlang.OtpErlangAtom; +import com.ericsson.otp.erlang.OtpErlangBoolean; +import com.ericsson.otp.erlang.OtpErlangObject; +import com.ericsson.otp.erlang.OtpErlangString; +import com.ericsson.otp.erlang.OtpErlangTuple; +import com.ericsson.otp.erlang.OtpMbox; +import com.ericsson.otp.erlang.OtpNode; +import com.ericsson.otp.erlang.OtpNodeStatus;  public class NodeStatusHandler extends OtpNodeStatus {      /* @@ -86,7 +93,10 @@ public class NodeStatusHandler extends OtpNodeStatus {  	    }  	    OtpErlangObject o = mbox.receive(recTime); -	    if (o == null) System.exit(2); +        if (o == null) { +            System.exit(2); +            return; +        }  	    if (! ((OtpErlangAtom)o).atomValue().equals("done"))  		System.exit(3); @@ -100,6 +110,7 @@ public class NodeStatusHandler extends OtpNodeStatus { +  @Override    public void remoteStatus(String node, boolean up, Object info) {        try {  	  dbg("Got remoteStatus: " + node + " " + up + " "  + info); @@ -120,6 +131,7 @@ public class NodeStatusHandler extends OtpNodeStatus {    } +  @Override    public void localStatus(String node, boolean up, Object info) {        try {  	  dbg("Got localStatus: " + node + " " + up + " "  + info); @@ -141,6 +153,7 @@ public class NodeStatusHandler extends OtpNodeStatus { +@Override    public void connAttempt(String node, boolean incoming, Object info) {        try {  	  dbg("Got connAttempt: " + node + " " + incoming + " "  + info); diff --git a/lib/jinterface/test/nc_SUITE_data/echo_server.java b/lib/jinterface/test/nc_SUITE_data/echo_server.java index 2e18e908d4..0e43ea0680 100644 --- a/lib/jinterface/test/nc_SUITE_data/echo_server.java +++ b/lib/jinterface/test/nc_SUITE_data/echo_server.java @@ -148,11 +148,13 @@ public class echo_server {  	    final String atomValue = ((OtpErlangAtom) t).atomValue();  	    if (atomValue.equals("binary") && i instanceof OtpErlangBinary) {  		final OtpErlangBinary b = (OtpErlangBinary) i; +        @SuppressWarnings("resource")  		final OtpInputStream bis = new OtpInputStream(b.binaryValue(),  			0);  		final OtpErlangObject o = bis.read_any();  		return o;  	    } else if (atomValue.equals("compress")) { +        @SuppressWarnings("resource")  		final OtpOutputStream oos = new OtpOutputStream();  		oos.write1(OtpExternal.versionTag);  		oos.write_compressed(i); @@ -206,6 +208,7 @@ public class echo_server {  		    && i instanceof OtpErlangString) {  		final OtpErlangString s = (OtpErlangString) i;  		final String ss = s.stringValue().substring(3, 6); +        @SuppressWarnings("unused")  		final int[] cps = OtpErlangString.stringToCodePoints(ss);  		return s;  	    } else if (atomValue.equals("utf8")) { diff --git a/lib/jinterface/vsn.mk b/lib/jinterface/vsn.mk index c50200fab6..72ad316333 100644 --- a/lib/jinterface/vsn.mk +++ b/lib/jinterface/vsn.mk @@ -1 +1 @@ -JINTERFACE_VSN = 1.5.9 +JINTERFACE_VSN = 1.5.12 | 
