From 16fd47fa04e0a40c643b41876f91f3d06dded396 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Fri, 30 Sep 2016 22:03:25 +0200 Subject: [PATCH] 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 --- bind/java/ClassesTest.java | 2 +- bind/testpkg/javapkg/classes.go | 1 + internal/importers/java/java.go | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/bind/java/ClassesTest.java b/bind/java/ClassesTest.java index 54d3f4e..6193307 100644 --- a/bind/java/ClassesTest.java +++ b/bind/java/ClassesTest.java @@ -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(); diff --git a/bind/testpkg/javapkg/classes.go b/bind/testpkg/javapkg/classes.go index 9915391..865c0ab 100644 --- a/bind/testpkg/javapkg/classes.go +++ b/bind/testpkg/javapkg/classes.go @@ -22,6 +22,7 @@ const ( ) type GoRunnable struct { + lang.Object lang.Runnable this lang.Runnable } diff --git a/internal/importers/java/java.go b/internal/importers/java/java.go index 0eb4764..69b2254 100644 --- a/internal/importers/java/java.go +++ b/internal/importers/java/java.go @@ -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") } }