bind: skip unsupported functions in function sets
Change-Id: Ibac8f11503ff088600e75c16edab7d20d8128157
Reviewed-on: https://go-review.googlesource.com/35332
Reviewed-by: David Crawshaw <crawshaw@golang.org>
diff --git a/bind/genclasses.go b/bind/genclasses.go
index 4aa903b..7e99683 100644
--- a/bind/genclasses.go
+++ b/bind/genclasses.go
@@ -585,7 +585,12 @@
minp := maxp
// sort the function variants into argument sizes.
buckets := make(map[int][]*java.Func)
+ numF := 0
for _, f := range fs.Funcs {
+ if !g.isFuncSupported(f) {
+ continue
+ }
+ numF++
n := len(f.Params)
if n < minp {
minp = n
@@ -596,7 +601,7 @@
}
g.Printf(" {\n")
g.Indent()
- if fs.Variadic {
+ if len(buckets) != 1 {
// Switch over the number of arguments.
g.Printf("switch %d + len(a%d) {\n", minp, minp)
}
@@ -605,7 +610,7 @@
if len(funcs) == 0 {
continue
}
- if fs.Variadic {
+ if len(buckets) != 1 {
g.Printf("case %d:\n", i)
g.Indent()
}
@@ -651,7 +656,7 @@
g.Printf("__a%d", i)
}
g.Printf(")\n")
- g.genFuncRet(fs, f)
+ g.genFuncRet(fs, f, numF > 1)
if len(preds) > 0 {
g.Outdent()
g.Printf("}\n")
@@ -661,21 +666,21 @@
g.Printf("}\n")
}
}
- if fs.Variadic {
+ if len(buckets) != 1 {
g.Outdent()
}
}
- if fs.Variadic {
+ if len(buckets) != 1 {
g.Printf("}\n")
}
- if fs.Variadic || len(fs.Funcs) > 1 {
+ if numF > 1 {
g.Printf("panic(\"no overloaded method found for %s.%s that matched the arguments\")\n", cls.Name, fs.Name)
}
g.Outdent()
g.Printf("}\n\n")
}
-func (g *ClassGen) genFuncRet(fs *java.FuncSet, f *java.Func) {
+func (g *ClassGen) genFuncRet(fs *java.FuncSet, f *java.Func, mustReturn bool) {
if f.Ret != nil {
g.genRead("_res", "res.res", f.Ret, modeRetained)
g.genRefRead("_exc", "res.exc", "error", "proxy_error", true)
@@ -692,7 +697,7 @@
// signature does. Use nil as a placeholder return value.
g.Printf("return nil\n")
}
- } else if fs.Variadic || len(fs.Funcs) > 1 {
+ } else if mustReturn {
// If there are overloaded variants, return here to avoid the fallback
// panic generated in genFuncBody.
g.Printf("return\n")
diff --git a/bind/testpkg/javapkg/classes.go b/bind/testpkg/javapkg/classes.go
index b4fea5a..f6cd17b 100644
--- a/bind/testpkg/javapkg/classes.go
+++ b/bind/testpkg/javapkg/classes.go
@@ -16,6 +16,7 @@
"Java/java/lang/Object"
"Java/java/lang/Runnable"
"Java/java/net"
+ "Java/java/nio"
"Java/java/util"
"Java/java/util/concurrent"
gopkg "Java/javapkg"
@@ -192,3 +193,8 @@
// works.
func NameClashingPackages(_ net.Socket, _ xnet.SocketFactory) {
}
+
+func testReferenceToUnsupportedParameters() {
+ var ib nio.IntBuffer
+ ib.Put(nil)
+}