bind: support underscores in identifiers
Fixes golang/go#18536 Change-Id: I82c5993547e4d1d0df14726ccc569e1f57128072 Reviewed-on: https://go-review.googlesource.com/101156 Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
This commit is contained in:
parent
671e1c1ae2
commit
8ee74ac900
|
@ -44,6 +44,7 @@ var tests = []string{
|
|||
"testdata/vars.go",
|
||||
"testdata/ignore.go",
|
||||
"testdata/doc.go",
|
||||
"testdata/underscores.go",
|
||||
}
|
||||
|
||||
var javaTests = []string{
|
||||
|
|
|
@ -749,10 +749,7 @@ func (g *JavaGen) genJNIFuncSignature(o *types.Func, sName string, jm *java.Func
|
|||
g.Printf(jm.JNIName)
|
||||
} else {
|
||||
oName := javaNameReplacer(lowerFirst(o.Name()))
|
||||
if strings.HasSuffix(oName, "_") {
|
||||
oName += "1" // JNI doesn't like methods ending with underscore, needs the _1 suffixing
|
||||
}
|
||||
g.Printf(oName)
|
||||
g.Printf(java.JNIMangle(oName))
|
||||
}
|
||||
g.Printf("(JNIEnv* env, ")
|
||||
if sName != "" {
|
||||
|
@ -777,7 +774,7 @@ func (g *JavaGen) genJNIFuncSignature(o *types.Func, sName string, jm *java.Func
|
|||
}
|
||||
|
||||
func (g *JavaGen) jniPkgName() string {
|
||||
return strings.Replace(g.javaPkgName(g.Pkg), ".", "_", -1)
|
||||
return strings.Replace(java.JNIMangle(g.javaPkgName(g.Pkg)), ".", "_", -1)
|
||||
}
|
||||
|
||||
var javaLetterDigitRE = regexp.MustCompile(`[0-9a-zA-Z$_]`)
|
||||
|
@ -1064,7 +1061,7 @@ func (g *JavaGen) genJNIField(o *types.TypeName, f *types.Var) {
|
|||
n := java.JNIMangle(g.javaTypeName(o.Name()))
|
||||
// setter
|
||||
g.Printf("JNIEXPORT void JNICALL\n")
|
||||
g.Printf("Java_%s_%s_set%s(JNIEnv *env, jobject this, %s v) {\n", g.jniPkgName(), n, f.Name(), g.jniType(f.Type()))
|
||||
g.Printf("Java_%s_%s_set%s(JNIEnv *env, jobject this, %s v) {\n", g.jniPkgName(), n, java.JNIMangle(f.Name()), g.jniType(f.Type()))
|
||||
g.Indent()
|
||||
g.Printf("int32_t o = go_seq_to_refnum_go(env, this);\n")
|
||||
g.genJavaToC("v", f.Type(), modeRetained)
|
||||
|
@ -1075,7 +1072,7 @@ func (g *JavaGen) genJNIField(o *types.TypeName, f *types.Var) {
|
|||
|
||||
// getter
|
||||
g.Printf("JNIEXPORT %s JNICALL\n", g.jniType(f.Type()))
|
||||
g.Printf("Java_%s_%s_get%s(JNIEnv *env, jobject this) {\n", g.jniPkgName(), n, f.Name())
|
||||
g.Printf("Java_%s_%s_get%s(JNIEnv *env, jobject this) {\n", g.jniPkgName(), n, java.JNIMangle(f.Name()))
|
||||
g.Indent()
|
||||
g.Printf("int32_t o = go_seq_to_refnum_go(env, this);\n")
|
||||
g.Printf("%s r0 = ", g.cgoType(f.Type()))
|
||||
|
@ -1471,7 +1468,7 @@ func (g *JavaGen) GenC() error {
|
|||
}
|
||||
g.Printf("\n")
|
||||
g.Printf("JNIEXPORT void JNICALL\n")
|
||||
g.Printf("Java_%s_%s__1init(JNIEnv *env, jclass _unused) {\n", g.jniPkgName(), g.className())
|
||||
g.Printf("Java_%s_%s__1init(JNIEnv *env, jclass _unused) {\n", g.jniPkgName(), java.JNIMangle(g.className()))
|
||||
g.Indent()
|
||||
g.Printf("jclass clazz;\n")
|
||||
for _, s := range g.structs {
|
||||
|
|
|
@ -11,12 +11,12 @@
|
|||
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_try__Try__1init(JNIEnv *env, jclass _unused) {
|
||||
Java_try_1_Try__1init(JNIEnv *env, jclass _unused) {
|
||||
jclass clazz;
|
||||
}
|
||||
|
||||
JNIEXPORT jstring JNICALL
|
||||
Java_try__Try_this_1(JNIEnv* env, jclass _clazz) {
|
||||
Java_try_1_Try_this_1(JNIEnv* env, jclass _clazz) {
|
||||
nstring r0 = proxytry__This();
|
||||
jstring _r0 = go_seq_to_java_string(env, r0);
|
||||
return _r0;
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
// Copyright 2018 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package underscore_pkg
|
||||
|
||||
type Underscore_struct struct {
|
||||
Underscore_field string
|
||||
}
|
||||
|
||||
var Underscore_var int
|
||||
|
||||
func Underscore_func() {}
|
|
@ -0,0 +1,60 @@
|
|||
// Package main is an autogenerated binder stub for package underscore_pkg.
|
||||
// gobind -lang=go underscores
|
||||
//
|
||||
// File is generated by gobind. Do not edit.
|
||||
package main
|
||||
|
||||
/*
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include "seq.h"
|
||||
#include "underscore_pkg.h"
|
||||
|
||||
*/
|
||||
import "C"
|
||||
|
||||
import (
|
||||
_seq "golang.org/x/mobile/bind/seq"
|
||||
"underscores"
|
||||
)
|
||||
|
||||
// suppress the error if seq ends up unused
|
||||
var _ = _seq.FromRefNum
|
||||
|
||||
//export proxyunderscore_pkg_Underscore_struct_Underscore_field_Set
|
||||
func proxyunderscore_pkg_Underscore_struct_Underscore_field_Set(refnum C.int32_t, v C.nstring) {
|
||||
ref := _seq.FromRefNum(int32(refnum))
|
||||
_v := decodeString(v)
|
||||
ref.Get().(*underscore_pkg.Underscore_struct).Underscore_field = _v
|
||||
}
|
||||
|
||||
//export proxyunderscore_pkg_Underscore_struct_Underscore_field_Get
|
||||
func proxyunderscore_pkg_Underscore_struct_Underscore_field_Get(refnum C.int32_t) C.nstring {
|
||||
ref := _seq.FromRefNum(int32(refnum))
|
||||
v := ref.Get().(*underscore_pkg.Underscore_struct).Underscore_field
|
||||
_v := encodeString(v)
|
||||
return _v
|
||||
}
|
||||
|
||||
//export new_underscore_pkg_Underscore_struct
|
||||
func new_underscore_pkg_Underscore_struct() C.int32_t {
|
||||
return C.int32_t(_seq.ToRefNum(new(underscore_pkg.Underscore_struct)))
|
||||
}
|
||||
|
||||
//export var_setunderscore_pkg_Underscore_var
|
||||
func var_setunderscore_pkg_Underscore_var(v C.nint) {
|
||||
_v := int(v)
|
||||
underscore_pkg.Underscore_var = _v
|
||||
}
|
||||
|
||||
//export var_getunderscore_pkg_Underscore_var
|
||||
func var_getunderscore_pkg_Underscore_var() C.nint {
|
||||
v := underscore_pkg.Underscore_var
|
||||
_v := C.nint(v)
|
||||
return _v
|
||||
}
|
||||
|
||||
//export proxyunderscore_pkg__Underscore_func
|
||||
func proxyunderscore_pkg__Underscore_func() {
|
||||
underscore_pkg.Underscore_func()
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
// JNI functions for the Go <=> Java bridge.
|
||||
// gobind -lang=java underscores
|
||||
//
|
||||
// File is generated by gobind. Do not edit.
|
||||
|
||||
#include <android/log.h>
|
||||
#include <stdint.h>
|
||||
#include "seq.h"
|
||||
#include "_cgo_export.h"
|
||||
#include "underscore_pkg.h"
|
||||
|
||||
jclass proxy_class_underscore_pkg_Underscore_struct;
|
||||
jmethodID proxy_class_underscore_pkg_Underscore_struct_cons;
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_underscore_1pkg_Underscore_1pkg__1init(JNIEnv *env, jclass _unused) {
|
||||
jclass clazz;
|
||||
clazz = (*env)->FindClass(env, "underscore_pkg/Underscore_struct");
|
||||
proxy_class_underscore_pkg_Underscore_struct = (*env)->NewGlobalRef(env, clazz);
|
||||
proxy_class_underscore_pkg_Underscore_struct_cons = (*env)->GetMethodID(env, clazz, "<init>", "(Lgo/Seq$Ref;)V");
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_underscore_1pkg_Underscore_pkg_underscore_1func(JNIEnv* env, jclass _clazz) {
|
||||
proxyunderscore_pkg__Underscore_func();
|
||||
}
|
||||
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_underscore_1pkg_Underscore_1struct__1_1New(JNIEnv *env, jclass clazz) {
|
||||
int32_t refnum = new_underscore_pkg_Underscore_struct();
|
||||
return go_seq_from_refnum(env, refnum, NULL, NULL);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_underscore_1pkg_Underscore_1struct_setUnderscore_1field(JNIEnv *env, jobject this, jstring v) {
|
||||
int32_t o = go_seq_to_refnum_go(env, this);
|
||||
nstring _v = go_seq_from_java_string(env, v);
|
||||
proxyunderscore_pkg_Underscore_struct_Underscore_field_Set(o, _v);
|
||||
}
|
||||
|
||||
JNIEXPORT jstring JNICALL
|
||||
Java_underscore_1pkg_Underscore_1struct_getUnderscore_1field(JNIEnv *env, jobject this) {
|
||||
int32_t o = go_seq_to_refnum_go(env, this);
|
||||
nstring r0 = proxyunderscore_pkg_Underscore_struct_Underscore_field_Get(o);
|
||||
jstring _r0 = go_seq_to_java_string(env, r0);
|
||||
return _r0;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_underscore_1pkg_Underscore_pkg_setUnderscore_1var(JNIEnv *env, jclass clazz, jlong v) {
|
||||
nint _v = (nint)v;
|
||||
var_setunderscore_pkg_Underscore_var(_v);
|
||||
}
|
||||
|
||||
JNIEXPORT jlong JNICALL
|
||||
Java_underscore_1pkg_Underscore_pkg_getUnderscore_1var(JNIEnv *env, jclass clazz) {
|
||||
nint r0 = var_getunderscore_pkg_Underscore_var();
|
||||
jlong _r0 = (jlong)r0;
|
||||
return _r0;
|
||||
}
|
||||
|
|
@ -0,0 +1,85 @@
|
|||
// Java class underscore_pkg.Underscore_struct is a proxy for talking to a Go program.
|
||||
// gobind -lang=java underscores
|
||||
//
|
||||
// File is generated by gobind. Do not edit.
|
||||
package underscore_pkg;
|
||||
|
||||
import go.Seq;
|
||||
|
||||
public final class Underscore_struct implements Seq.Proxy {
|
||||
static { Underscore_pkg.touch(); }
|
||||
|
||||
private final Seq.Ref ref;
|
||||
|
||||
@Override public final int incRefnum() {
|
||||
int refnum = ref.refnum;
|
||||
Seq.incGoRef(refnum);
|
||||
return refnum;
|
||||
}
|
||||
|
||||
Underscore_struct(Seq.Ref ref) { this.ref = ref; }
|
||||
|
||||
public Underscore_struct() { this.ref = __New(); }
|
||||
|
||||
private static native Seq.Ref __New();
|
||||
|
||||
public final native String getUnderscore_field();
|
||||
public final native void setUnderscore_field(String v);
|
||||
|
||||
@Override public boolean equals(Object o) {
|
||||
if (o == null || !(o instanceof Underscore_struct)) {
|
||||
return false;
|
||||
}
|
||||
Underscore_struct that = (Underscore_struct)o;
|
||||
String thisUnderscore_field = getUnderscore_field();
|
||||
String thatUnderscore_field = that.getUnderscore_field();
|
||||
if (thisUnderscore_field == null) {
|
||||
if (thatUnderscore_field != null) {
|
||||
return false;
|
||||
}
|
||||
} else if (!thisUnderscore_field.equals(thatUnderscore_field)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override public int hashCode() {
|
||||
return java.util.Arrays.hashCode(new Object[] {getUnderscore_field()});
|
||||
}
|
||||
|
||||
@Override public String toString() {
|
||||
StringBuilder b = new StringBuilder();
|
||||
b.append("Underscore_struct").append("{");
|
||||
b.append("Underscore_field:").append(getUnderscore_field()).append(",");
|
||||
return b.append("}").toString();
|
||||
}
|
||||
}
|
||||
|
||||
// Java class underscore_pkg.Underscore_pkg is a proxy for talking to a Go program.
|
||||
// gobind -lang=java underscores
|
||||
//
|
||||
// File is generated by gobind. Do not edit.
|
||||
package underscore_pkg;
|
||||
|
||||
import go.Seq;
|
||||
|
||||
public abstract class Underscore_pkg {
|
||||
static {
|
||||
Seq.touch(); // for loading the native library
|
||||
_init();
|
||||
}
|
||||
|
||||
private Underscore_pkg() {} // uninstantiable
|
||||
|
||||
// touch is called from other bound packages to initialize this package
|
||||
public static void touch() {}
|
||||
|
||||
private static native void _init();
|
||||
|
||||
|
||||
|
||||
public static native void setUnderscore_var(long v);
|
||||
public static native long getUnderscore_var();
|
||||
|
||||
public static native void underscore_func();
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
// JNI function headers for the Go <=> Java bridge.
|
||||
// gobind -lang=java underscores
|
||||
//
|
||||
// File is generated by gobind. Do not edit.
|
||||
|
||||
#ifndef __Underscore_pkg_H__
|
||||
#define __Underscore_pkg_H__
|
||||
|
||||
#include <jni.h>
|
||||
|
||||
extern jclass proxy_class_underscore_pkg_Underscore_struct;
|
||||
extern jmethodID proxy_class_underscore_pkg_Underscore_struct_cons;
|
||||
#endif
|
|
@ -0,0 +1,11 @@
|
|||
// Objective-C API for talking to underscores Go package.
|
||||
// gobind -lang=objc underscores
|
||||
//
|
||||
// File is generated by gobind. Do not edit.
|
||||
|
||||
#ifndef __GO_underscore_pkg_H__
|
||||
#define __GO_underscore_pkg_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include <objc/objc.h>
|
||||
#endif
|
|
@ -0,0 +1,33 @@
|
|||
// Objective-C API for talking to underscores Go package.
|
||||
// gobind -lang=objc underscores
|
||||
//
|
||||
// File is generated by gobind. Do not edit.
|
||||
|
||||
#ifndef __Underscore_pkg_H__
|
||||
#define __Underscore_pkg_H__
|
||||
|
||||
@import Foundation;
|
||||
#include "Universe.objc.h"
|
||||
|
||||
|
||||
@class Underscore_pkgUnderscore_struct;
|
||||
|
||||
@interface Underscore_pkgUnderscore_struct : NSObject <goSeqRefInterface> {
|
||||
}
|
||||
@property(strong, readonly) id _ref;
|
||||
|
||||
- (instancetype)initWithRef:(id)ref;
|
||||
- (instancetype)init;
|
||||
- (NSString*)underscore_field;
|
||||
- (void)setUnderscore_field:(NSString*)v;
|
||||
@end
|
||||
|
||||
@interface Underscore_pkg : NSObject
|
||||
+ (long) underscore_var;
|
||||
+ (void) setUnderscore_var:(long)v;
|
||||
|
||||
@end
|
||||
|
||||
FOUNDATION_EXPORT void Underscore_pkgUnderscore_func(void);
|
||||
|
||||
#endif
|
|
@ -0,0 +1,66 @@
|
|||
// Objective-C API for talking to underscores Go package.
|
||||
// gobind -lang=objc underscores
|
||||
//
|
||||
// File is generated by gobind. Do not edit.
|
||||
|
||||
#include <Foundation/Foundation.h>
|
||||
#include "seq.h"
|
||||
#include "_cgo_export.h"
|
||||
#include "Underscore_pkg.objc.h"
|
||||
|
||||
|
||||
@implementation Underscore_pkgUnderscore_struct {
|
||||
}
|
||||
|
||||
- (instancetype)initWithRef:(id)ref {
|
||||
self = [super init];
|
||||
if (self) { __ref = ref; }
|
||||
return self;
|
||||
}
|
||||
|
||||
- (instancetype)init {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
__ref = go_seq_from_refnum(new_underscore_pkg_Underscore_struct());
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (NSString*)underscore_field {
|
||||
int32_t refnum = go_seq_go_to_refnum(self._ref);
|
||||
nstring r0 = proxyunderscore_pkg_Underscore_struct_Underscore_field_Get(refnum);
|
||||
NSString *_r0 = go_seq_to_objc_string(r0);
|
||||
return _r0;
|
||||
}
|
||||
|
||||
- (void)setUnderscore_field:(NSString*)v {
|
||||
int32_t refnum = go_seq_go_to_refnum(self._ref);
|
||||
nstring _v = go_seq_from_objc_string(v);
|
||||
proxyunderscore_pkg_Underscore_struct_Underscore_field_Set(refnum, _v);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation Underscore_pkg
|
||||
+ (void) setUnderscore_var:(long)v {
|
||||
nint _v = (nint)v;
|
||||
var_setunderscore_pkg_Underscore_var(_v);
|
||||
}
|
||||
|
||||
+ (long) underscore_var {
|
||||
nint r0 = var_getunderscore_pkg_Underscore_var();
|
||||
long _r0 = (long)r0;
|
||||
return _r0;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
void Underscore_pkgUnderscore_func(void) {
|
||||
proxyunderscore_pkg__Underscore_func();
|
||||
}
|
||||
|
||||
__attribute__((constructor)) static void init() {
|
||||
init_seq();
|
||||
}
|
Loading…
Reference in New Issue