2
0
mirror of synced 2025-02-23 06:48:15 +00:00

bind: don't inherit java.lang.Object methods to Java interfaces

Before, the Java generator let Java interfaces inherit java.lang.Object
methods. However, interfaces strictly doesn't inherit Object and since
the JNI GetMethodID returns NULL for Object methods on interface classes,
stop making Object a super class to interfaces.

Change-Id: I3757c1ed02c07ccffab74a30132d5197742c6513
Reviewed-on: https://go-review.googlesource.com/30096
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
This commit is contained in:
Elias Naur 2016-09-30 22:03:25 +02:00
parent e04a76eb64
commit 16fd47fa04
3 changed files with 3 additions and 2 deletions

View File

@ -73,7 +73,7 @@ public class ClassesTest extends InstrumentationTestCase {
public void testGoObject() {
Runnable r = new GoRunnable();
r.run();
assertTrue("GoRunnable.toString", r.toString().equals(Javapkg.ToStringPrefix));
assertEquals("GoRunnable.toString", r.toString(), Javapkg.ToStringPrefix);
Runnable r2 = ((GoRunnable)r).getThis();
assertTrue("GoObject.this", r == r2);
Object o = new GoObject();

View File

@ -22,6 +22,7 @@ const (
)
type GoRunnable struct {
lang.Object
lang.Runnable
this lang.Runnable
}

View File

@ -454,7 +454,7 @@ func (j *importer) scanClass(s *bufio.Scanner, name string) (*Class, error) {
if len(cls.Supers) == 0 {
if name == "java.lang.Object" {
cls.HasNoArgCon = true
} else {
} else if !cls.Interface {
cls.Supers = append(cls.Supers, "java.lang.Object")
}
}