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

Method genJNIConstructor

bind/genjava.go:1120–1166  ·  view source on GitHub ↗
(f *types.Func, sName string)

Source from the content-addressed store, hash-verified

1118}
1119
1120func (g *JavaGen) genJNIConstructor(f *types.Func, sName string) {
1121 if !g.isConsSigSupported(f.Type()) {
1122 return
1123 }
1124 sig := f.Type().(*types.Signature)
1125 res := sig.Results()
1126
1127 g.Printf("JNIEXPORT jint JNICALL\n")
1128 g.Printf("Java_%s_%s_%s(JNIEnv *env, jclass clazz", g.jniPkgName(), java.JNIMangle(g.javaTypeName(sName)), java.JNIMangle("__"+f.Name()))
1129 params := sig.Params()
1130 for i := 0; i < params.Len(); i++ {
1131 v := params.At(i)
1132 jt := g.jniType(v.Type())
1133 g.Printf(", %s %s", jt, g.paramName(params, i))
1134 }
1135 g.Printf(") {\n")
1136 g.Indent()
1137 for i := 0; i < params.Len(); i++ {
1138 name := g.paramName(params, i)
1139 g.genJavaToC(name, params.At(i).Type(), modeTransient)
1140 }
1141 // Constructors always return a mandatory *T and an optional error
1142 if res.Len() == 1 {
1143 g.Printf("int32_t refnum = proxy%s__%s(", g.pkgPrefix, f.Name())
1144 } else {
1145 g.Printf("struct proxy%s__%s_return res = proxy%s__%s(", g.pkgPrefix, f.Name(), g.pkgPrefix, f.Name())
1146 }
1147 for i := 0; i < params.Len(); i++ {
1148 if i > 0 {
1149 g.Printf(", ")
1150 }
1151 g.Printf("_%s", g.paramName(params, i))
1152 }
1153 g.Printf(");\n")
1154 for i := 0; i < params.Len(); i++ {
1155 g.genRelease(g.paramName(params, i), params.At(i).Type(), modeTransient)
1156 }
1157 // Extract multi returns and handle errors
1158 if res.Len() == 2 {
1159 g.Printf("int32_t refnum = res.r0;\n")
1160 g.genCToJava("_err", "res.r1", res.At(1).Type(), modeRetained)
1161 g.Printf("go_seq_maybe_throw_exception(env, _err);\n")
1162 }
1163 g.Printf("return refnum;\n")
1164 g.Outdent()
1165 g.Printf("}\n\n")
1166}
1167
1168func (g *JavaGen) genJNIFunc(o *types.Func, sName string, jm *java.Func, proxy, isjava bool) {
1169 if !g.isSigSupported(o.Type()) {

Callers 1

GenCMethod · 0.95

Calls 14

isConsSigSupportedMethod · 0.95
jniPkgNameMethod · 0.95
javaTypeNameMethod · 0.95
jniTypeMethod · 0.95
paramNameMethod · 0.95
genJavaToCMethod · 0.95
genReleaseMethod · 0.95
genCToJavaMethod · 0.95
JNIMangleFunction · 0.92
TypeMethod · 0.80
PrintfMethod · 0.80
IndentMethod · 0.80

Tested by

no test coverage detected