From 1663ffa95c10f3a8688de0c22ea2e5d1479bc585 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Thu, 29 Sep 2016 14:19:38 +0300 Subject: [PATCH] bind: initialize JNI library on any class load With the introduction of constructors Java side, all types become entry points into the library. However the library was only initialized by the main class until now, resulting in all other constructors hitting linker errors until an interaction with the main library class. This CL fixes that by changing each generated type to touch the main library class, ensuring that the underlying native library is loaded. Change-Id: I640d1dc329e072f8d0753f74ccce87cd9e5aaea8 Reviewed-on: https://go-review.googlesource.com/29994 Reviewed-by: Elias Naur --- bind/genjava.go | 2 +- bind/testdata/classes.java.golden | 8 ++++---- bind/testdata/ignore.java.golden | 2 +- bind/testdata/issue10788.java.golden | 2 +- bind/testdata/issue12328.java.golden | 2 +- bind/testdata/structs.java.golden | 4 ++-- bind/testdata/vars.java.golden | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/bind/genjava.go b/bind/genjava.go index 9e3ab62..2b86b98 100644 --- a/bind/genjava.go +++ b/bind/genjava.go @@ -171,7 +171,7 @@ func (g *JavaGen) genStruct(s structInfo) { g.Printf(" {\n") g.Indent() - g.Printf("{ Seq.touch(); }\n\n") + g.Printf("static { %s.touch(); }\n\n", g.className()) if jinf != nil { g.Printf("private final Seq.Ref ref;\n\n") for _, f := range jinf.cons { diff --git a/bind/testdata/classes.java.golden b/bind/testdata/classes.java.golden index 6ef0594..aaba116 100644 --- a/bind/testdata/classes.java.golden +++ b/bind/testdata/classes.java.golden @@ -7,7 +7,7 @@ package go.java; import go.Seq; public final class Future implements Seq.GoObject, java.util.concurrent.Future { - { Seq.touch(); } + static { Java.touch(); } private final Seq.Ref ref; @@ -39,7 +39,7 @@ package go.java; import go.Seq; public final class InputStream extends java.io.InputStream implements Seq.GoObject { - { Seq.touch(); } + static { Java.touch(); } private final Seq.Ref ref; @@ -71,7 +71,7 @@ package go.java; import go.Seq; public final class Object extends java.lang.Object implements Seq.GoObject { - { Seq.touch(); } + static { Java.touch(); } private final Seq.Ref ref; @@ -95,7 +95,7 @@ package go.java; import go.Seq; public final class Runnable implements Seq.GoObject, java.lang.Runnable { - { Seq.touch(); } + static { Java.touch(); } private final Seq.Ref ref; diff --git a/bind/testdata/ignore.java.golden b/bind/testdata/ignore.java.golden index ae48e95..b273056 100644 --- a/bind/testdata/ignore.java.golden +++ b/bind/testdata/ignore.java.golden @@ -7,7 +7,7 @@ package go.ignore; import go.Seq; public final class S extends Seq.Proxy implements I { - { Seq.touch(); } + static { Ignore.touch(); } S(Seq.Ref ref) { super(ref); } diff --git a/bind/testdata/issue10788.java.golden b/bind/testdata/issue10788.java.golden index 52e6214..4f23190 100644 --- a/bind/testdata/issue10788.java.golden +++ b/bind/testdata/issue10788.java.golden @@ -7,7 +7,7 @@ package go.issue10788; import go.Seq; public final class TestStruct extends Seq.Proxy { - { Seq.touch(); } + static { Issue10788.touch(); } TestStruct(Seq.Ref ref) { super(ref); } diff --git a/bind/testdata/issue12328.java.golden b/bind/testdata/issue12328.java.golden index 13f5c71..1afcc1d 100644 --- a/bind/testdata/issue12328.java.golden +++ b/bind/testdata/issue12328.java.golden @@ -7,7 +7,7 @@ package go.issue12328; import go.Seq; public final class T extends Seq.Proxy { - { Seq.touch(); } + static { Issue12328.touch(); } T(Seq.Ref ref) { super(ref); } diff --git a/bind/testdata/structs.java.golden b/bind/testdata/structs.java.golden index 73c9c41..61402a3 100644 --- a/bind/testdata/structs.java.golden +++ b/bind/testdata/structs.java.golden @@ -7,7 +7,7 @@ package go.structs; import go.Seq; public final class S extends Seq.Proxy { - { Seq.touch(); } + static { Structs.touch(); } S(Seq.Ref ref) { super(ref); } @@ -59,7 +59,7 @@ package go.structs; import go.Seq; public final class S2 extends Seq.Proxy implements I { - { Seq.touch(); } + static { Structs.touch(); } S2(Seq.Ref ref) { super(ref); } diff --git a/bind/testdata/vars.java.golden b/bind/testdata/vars.java.golden index ffe88a3..665910c 100644 --- a/bind/testdata/vars.java.golden +++ b/bind/testdata/vars.java.golden @@ -7,7 +7,7 @@ package go.vars; import go.Seq; public final class S extends Seq.Proxy implements I { - { Seq.touch(); } + static { Vars.touch(); } S(Seq.Ref ref) { super(ref); }