MCPcopy Create free account
hub / github.com/golang/mobile / GenC

Method GenC

bind/genjava.go:1434–1566  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1432}
1433
1434func (g *JavaGen) GenC() error {
1435 var pkgName, pkgPath string
1436 if g.Pkg != nil {
1437 pkgName = g.Pkg.Name()
1438 pkgPath = g.Pkg.Path()
1439 } else {
1440 pkgName = "universe"
1441 }
1442 g.Printf(cPreamble, g.gobindOpts(), pkgPath)
1443 g.Printf("#include %q\n", pkgName+".h")
1444 if g.Pkg != nil {
1445 for _, pkg := range g.Pkg.Imports() {
1446 if g.validPkg(pkg) {
1447 g.Printf("#include \"%s.h\"\n", pkg.Name())
1448 }
1449 }
1450 }
1451 g.Printf("\n")
1452
1453 for _, iface := range g.interfaces {
1454 g.Printf("jclass proxy_class_%s_%s;\n", g.pkgPrefix, iface.obj.Name())
1455 g.Printf("jmethodID proxy_class_%s_%s_cons;\n", g.pkgPrefix, iface.obj.Name())
1456 for _, m := range iface.summary.callable {
1457 if !g.isSigSupported(m.Type()) {
1458 g.Printf("// skipped method %s.%s with unsupported parameter or return types\n\n", iface.obj.Name(), m.Name())
1459 continue
1460 }
1461 g.Printf("static jmethodID mid_%s_%s;\n", iface.obj.Name(), m.Name())
1462 }
1463 }
1464 for _, s := range g.structs {
1465 g.Printf("jclass proxy_class_%s_%s;\n", g.pkgPrefix, s.obj.Name())
1466 g.Printf("jmethodID proxy_class_%s_%s_cons;\n", g.pkgPrefix, s.obj.Name())
1467 }
1468 g.Printf("\n")
1469 g.Printf("JNIEXPORT void JNICALL\n")
1470 g.Printf("Java_%s_%s__1init(JNIEnv *env, jclass _unused) {\n", g.jniPkgName(), java.JNIMangle(g.className()))
1471 g.Indent()
1472 g.Printf("jclass clazz;\n")
1473 for _, s := range g.structs {
1474 if jinf, ok := g.jstructs[s.obj]; ok {
1475 // Leave the class and constructor NULL for Java classes with no
1476 // default constructor.
1477 if !jinf.genNoargCon {
1478 continue
1479 }
1480 }
1481 g.Printf("clazz = (*env)->FindClass(env, %q);\n", g.jniClassSigPrefix(s.obj.Pkg())+g.javaTypeName(s.obj.Name()))
1482 g.Printf("proxy_class_%s_%s = (*env)->NewGlobalRef(env, clazz);\n", g.pkgPrefix, s.obj.Name())
1483 g.Printf("proxy_class_%s_%s_cons = (*env)->GetMethodID(env, clazz, \"<init>\", \"(I)V\");\n", g.pkgPrefix, s.obj.Name())
1484 }
1485 for _, iface := range g.interfaces {
1486 pkg := iface.obj.Pkg()
1487 g.Printf("clazz = (*env)->FindClass(env, %q);\n", g.jniClassSigPrefix(pkg)+JavaClassName(pkg)+"$proxy"+iface.obj.Name())
1488 g.Printf("proxy_class_%s_%s = (*env)->NewGlobalRef(env, clazz);\n", g.pkgPrefix, iface.obj.Name())
1489 g.Printf("proxy_class_%s_%s_cons = (*env)->GetMethodID(env, clazz, \"<init>\", \"(I)V\");\n", g.pkgPrefix, iface.obj.Name())
1490 if isErrorType(iface.obj.Type()) {
1491 // As a special case, Java Exceptions are passed to Go pretending to implement the Go error interface.

Callers 3

TestGenJavaFunction · 0.95
TestCustomPrefixFunction · 0.95
genPkgFunction · 0.45

Calls 15

gobindOptsMethod · 0.95
jniPkgNameMethod · 0.95
classNameMethod · 0.95
jniClassSigPrefixMethod · 0.95
javaTypeNameMethod · 0.95
jniSigTypeMethod · 0.95
genJNIFuncMethod · 0.95
genJNIConstructorMethod · 0.95
hasThisMethod · 0.95
genJNIFieldMethod · 0.95
genJNIVarMethod · 0.95

Tested by 2

TestGenJavaFunction · 0.76
TestCustomPrefixFunction · 0.76