diff --git a/bind/genjava.go b/bind/genjava.go index a373854..4ffccf2 100644 --- a/bind/genjava.go +++ b/bind/genjava.go @@ -530,7 +530,7 @@ func (g *javaGen) genFunc(o *types.Func, method bool) { } if returnsError { g.Printf(`String _err = _out.readString(); -if (_err != null) { +if (_err != null && !_err.isEmpty()) { throw new Exception(_err); } `) diff --git a/bind/java/SeqTest.java b/bind/java/SeqTest.java index a797543..b4f0f7a 100644 --- a/bind/java/SeqTest.java +++ b/bind/java/SeqTest.java @@ -81,6 +81,13 @@ public class SeqTest extends AndroidTestCase { String want = "a short string"; String got = Testpkg.StrDup(want); assertEquals("Strings should match", want, got); + + want = ""; + got = Testpkg.StrDup(want); + assertEquals("Strings should match (empty string)", want, got); + + got = Testpkg.StrDup(null); + assertEquals("Strings should match (null string)", want, got); } public void testLongString() { diff --git a/bind/java/seq_android.c b/bind/java/seq_android.c index dfb2988..52f7901 100644 --- a/bind/java/seq_android.c +++ b/bind/java/seq_android.c @@ -282,7 +282,7 @@ JNIEXPORT jstring JNICALL Java_go_Seq_readUTF16(JNIEnv *env, jobject obj) { int32_t size = *MEM_READ(obj, int32_t); if (size == 0) { - return NULL; + return (*env)->NewString(env, NULL, 0); } return (*env)->NewString(env, (jchar*)mem_read(env, obj, 2*size, 1), size); } diff --git a/bind/testdata/basictypes.java.golden b/bind/testdata/basictypes.java.golden index 98aed25..d0ad787 100644 --- a/bind/testdata/basictypes.java.golden +++ b/bind/testdata/basictypes.java.golden @@ -40,7 +40,7 @@ public abstract class Basictypes { go.Seq _out = new go.Seq(); Seq.send(DESCRIPTOR, CALL_Error, _in, _out); String _err = _out.readString(); - if (_err != null) { + if (_err != null && !_err.isEmpty()) { throw new Exception(_err); } } @@ -52,7 +52,7 @@ public abstract class Basictypes { Seq.send(DESCRIPTOR, CALL_ErrorPair, _in, _out); _result = _out.readInt(); String _err = _out.readString(); - if (_err != null) { + if (_err != null && !_err.isEmpty()) { throw new Exception(_err); } return _result; diff --git a/bind/testdata/interfaces.java.golden b/bind/testdata/interfaces.java.golden index 7fd2425..25b0a36 100644 --- a/bind/testdata/interfaces.java.golden +++ b/bind/testdata/interfaces.java.golden @@ -25,7 +25,7 @@ public abstract class Interfaces { _in.writeRef(e.ref()); Seq.send(DESCRIPTOR, CALL_CallErr, _in, _out); String _err = _out.readString(); - if (_err != null) { + if (_err != null && !_err.isEmpty()) { throw new Exception(_err); } } @@ -79,7 +79,7 @@ public abstract class Interfaces { _in.writeRef(ref); Seq.send(DESCRIPTOR, CALL_Err, _in, _out); String _err = _out.readString(); - if (_err != null) { + if (_err != null && !_err.isEmpty()) { throw new Exception(_err); } } diff --git a/bind/testdata/issue12403.java.golden b/bind/testdata/issue12403.java.golden index e98508e..a925bac 100644 --- a/bind/testdata/issue12403.java.golden +++ b/bind/testdata/issue12403.java.golden @@ -83,7 +83,7 @@ public abstract class Issue12403 { Seq.send(DESCRIPTOR, CALL_ToJSON, _in, _out); _result = _out.readString(); String _err = _out.readString(); - if (_err != null) { + if (_err != null && !_err.isEmpty()) { throw new Exception(_err); } return _result; diff --git a/bind/testdata/structs.java.golden b/bind/testdata/structs.java.golden index 62b5e9c..332c03e 100644 --- a/bind/testdata/structs.java.golden +++ b/bind/testdata/structs.java.golden @@ -27,7 +27,7 @@ public abstract class Structs { Seq.send(DESCRIPTOR, CALL_IdentityWithError, _in, _out); _result = new S(_out.readRef()); String _err = _out.readString(); - if (_err != null) { + if (_err != null && !_err.isEmpty()) { throw new Exception(_err); } return _result; @@ -92,7 +92,7 @@ public abstract class Structs { Seq.send(DESCRIPTOR, CALL_Identity, _in, _out); _result = new S(_out.readRef()); String _err = _out.readString(); - if (_err != null) { + if (_err != null && !_err.isEmpty()) { throw new Exception(_err); } return _result;