bind/java: do not return null String for empty Go string
Fixes golang/go#13430
Change-Id: Ic018761af6a40f6b04ec4449110f54af8f543a53
Reviewed-on: https://go-review.googlesource.com/17273
Reviewed-by: David Crawshaw <crawshaw@golang.org>
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 @@
}
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 @@
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 @@
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 @@
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 @@
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 @@
_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 @@
_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 @@
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 @@
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 @@
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;