2
0
mirror of synced 2025-02-24 07:18:15 +00:00
mobile/bind/testdata/interfaces.java.golden
Elias Naur 89b8360218 bind: remove error wrappers to preserve error instance identity
CL 24800 changed the error representation from strings to objects.
However, since native errors types are not immediately compatible
across languages, wrapper types were introduced to bridge the gap.

This CL remove those wrappers and instead special case the error
proxy types to conform to their language error protocol.

Specifically:

 - The ObjC proxy for Go errors now extends NSError and calls
   initWithDomain to store the error message.
 - The Go proxy for ObjC NSError return the localizedDescription
    property for calls to Error.
 - The Java proxy for Go errors ow extends Exception and
   overrides getMessage() to return the error message.
 - The Go proxy for Java Exceptions returns getMessage whenever
   Error is called.

The end result is that error values behave more like normal objects
across the language boundary. In particular, instance identity is
now preserved: an error passed across the boundary and back will
result in the same instance.

There are two semantic changes that followed this change:

 - The domain for wrapped Go errors is now always "go".
   The domain wasn't useful before this CL: the domains were set to
   the package name of function or method where the error happened
   to cross the language boundary.
 - If a Go method that returns an error is implemented in ObjC, the
   implementation must now both return NO _and_ set the error result
   for the calling Go code to receive a non-nil error.
   Before this CL, because errors were always wrapped, a nil ObjC
   could be represented with a non-nil wrapper.

Change-Id: Idb415b6b13ecf79ccceb60f675059942bfc48fec
Reviewed-on: https://go-review.googlesource.com/29298
Reviewed-by: David Crawshaw <crawshaw@golang.org>
2016-10-04 09:11:42 +00:00

238 lines
5.8 KiB
Plaintext

// Java class go.interfaces.Error is a proxy for talking to a Go program.
// gobind -lang=java interfaces
//
// File is generated by gobind. Do not edit.
package go.interfaces;
import go.Seq;
public interface Error {
public void err() throws Exception;
}
// Java class go.interfaces.I is a proxy for talking to a Go program.
// gobind -lang=java interfaces
//
// File is generated by gobind. Do not edit.
package go.interfaces;
import go.Seq;
public interface I {
public int rand();
}
// Java class go.interfaces.I1 is a proxy for talking to a Go program.
// gobind -lang=java interfaces
//
// File is generated by gobind. Do not edit.
package go.interfaces;
import go.Seq;
public interface I1 {
public void j();
}
// Java class go.interfaces.I2 is a proxy for talking to a Go program.
// gobind -lang=java interfaces
//
// File is generated by gobind. Do not edit.
package go.interfaces;
import go.Seq;
public interface I2 {
public void g();
}
// Java class go.interfaces.I3 is a proxy for talking to a Go program.
// gobind -lang=java interfaces
//
// File is generated by gobind. Do not edit.
package go.interfaces;
import go.Seq;
public interface I3 {
public I1 f();
}
// Java class go.interfaces.LargerI is a proxy for talking to a Go program.
// gobind -lang=java interfaces
//
// File is generated by gobind. Do not edit.
package go.interfaces;
import go.Seq;
public interface LargerI extends I, SameI {
public void anotherFunc();
public int rand();
}
// Java class go.interfaces.SameI is a proxy for talking to a Go program.
// gobind -lang=java interfaces
//
// File is generated by gobind. Do not edit.
package go.interfaces;
import go.Seq;
public interface SameI {
public int rand();
}
// Java class go.interfaces.WithParam is a proxy for talking to a Go program.
// gobind -lang=java interfaces
//
// File is generated by gobind. Do not edit.
package go.interfaces;
import go.Seq;
public interface WithParam {
public void hasParam(boolean p0);
}
// Java class go.interfaces.Interfaces is a proxy for talking to a Go program.
// gobind -lang=java interfaces
//
// File is generated by gobind. Do not edit.
package go.interfaces;
import go.Seq;
public abstract class Interfaces {
static {
Seq.touch(); // for loading the native library
_init();
}
private Interfaces() {} // uninstantiable
// touch is called from other bound packages to initialize this package
public static void touch() {}
private static native void _init();
private static final class proxyError implements Seq.Proxy, Error {
private final Seq.Ref ref;
@Override public final int incRefnum() {
int refnum = ref.refnum;
Seq.incGoRef(refnum);
return refnum;
}
proxyError(Seq.Ref ref) { this.ref = ref; }
public native void err() throws Exception;
}
private static final class proxyI implements Seq.Proxy, I {
private final Seq.Ref ref;
@Override public final int incRefnum() {
int refnum = ref.refnum;
Seq.incGoRef(refnum);
return refnum;
}
proxyI(Seq.Ref ref) { this.ref = ref; }
public native int rand();
}
private static final class proxyI1 implements Seq.Proxy, I1 {
private final Seq.Ref ref;
@Override public final int incRefnum() {
int refnum = ref.refnum;
Seq.incGoRef(refnum);
return refnum;
}
proxyI1(Seq.Ref ref) { this.ref = ref; }
public native void j();
}
private static final class proxyI2 implements Seq.Proxy, I2 {
private final Seq.Ref ref;
@Override public final int incRefnum() {
int refnum = ref.refnum;
Seq.incGoRef(refnum);
return refnum;
}
proxyI2(Seq.Ref ref) { this.ref = ref; }
public native void g();
}
private static final class proxyI3 implements Seq.Proxy, I3 {
private final Seq.Ref ref;
@Override public final int incRefnum() {
int refnum = ref.refnum;
Seq.incGoRef(refnum);
return refnum;
}
proxyI3(Seq.Ref ref) { this.ref = ref; }
public native I1 f();
}
private static final class proxyLargerI implements Seq.Proxy, LargerI {
private final Seq.Ref ref;
@Override public final int incRefnum() {
int refnum = ref.refnum;
Seq.incGoRef(refnum);
return refnum;
}
proxyLargerI(Seq.Ref ref) { this.ref = ref; }
public native void anotherFunc();
public native int rand();
}
private static final class proxySameI implements Seq.Proxy, SameI {
private final Seq.Ref ref;
@Override public final int incRefnum() {
int refnum = ref.refnum;
Seq.incGoRef(refnum);
return refnum;
}
proxySameI(Seq.Ref ref) { this.ref = ref; }
public native int rand();
}
private static final class proxyWithParam implements Seq.Proxy, WithParam {
private final Seq.Ref ref;
@Override public final int incRefnum() {
int refnum = ref.refnum;
Seq.incGoRef(refnum);
return refnum;
}
proxyWithParam(Seq.Ref ref) { this.ref = ref; }
public native void hasParam(boolean p0);
}
public static native int add3(I r);
public static native void callErr(Error e) throws Exception;
public static native I seven();
}