Introduce options -javapkg and -prefix for gobind command. The following generates java class Testpkg with package name com.example. gobind -lang=java -javapkg=com.example testpkg The following generates objective-c files where function and type names are prefixed with ExampleTestpkg. gobind -lang=objc -prefix=Example testpkg As discussed in golang/go#9660 and golang/go#12245. Gomobile support is not yet implemented. Change-Id: Ib9e39997ce915580a5a2e25643c0c28373f27ee1 Reviewed-on: https://go-review.googlesource.com/13969 Reviewed-by: David Crawshaw <crawshaw@golang.org>
88 lines
2.0 KiB
Go
88 lines
2.0 KiB
Go
// Copyright 2014 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 bind implements a code generator for gobind.
|
|
//
|
|
// See the documentation on the gobind command for usage details
|
|
// and the list of currently supported types.
|
|
// (http://godoc.org/golang.org/x/mobile/cmd/gobind)
|
|
package bind // import "golang.org/x/mobile/bind"
|
|
|
|
// TODO(crawshaw): slice support
|
|
// TODO(crawshaw): channel support
|
|
|
|
import (
|
|
"bytes"
|
|
"go/format"
|
|
"go/token"
|
|
"go/types"
|
|
"io"
|
|
)
|
|
|
|
// GenJava generates a Java API from a Go package.
|
|
func GenJava(w io.Writer, fset *token.FileSet, pkg *types.Package, javaPkg string) error {
|
|
if javaPkg == "" {
|
|
javaPkg = javaPkgName(pkg.Name())
|
|
}
|
|
buf := new(bytes.Buffer)
|
|
g := &javaGen{
|
|
printer: &printer{buf: buf, indentEach: []byte(" ")},
|
|
fset: fset,
|
|
pkg: pkg,
|
|
javaPkg: javaPkg,
|
|
}
|
|
if err := g.gen(); err != nil {
|
|
return err
|
|
}
|
|
_, err := io.Copy(w, buf)
|
|
return err
|
|
}
|
|
|
|
// GenGo generates a Go stub to support foreign language APIs.
|
|
func GenGo(w io.Writer, fset *token.FileSet, pkg *types.Package) error {
|
|
buf := new(bytes.Buffer)
|
|
g := &goGen{
|
|
printer: &printer{buf: buf, indentEach: []byte("\t")},
|
|
fset: fset,
|
|
pkg: pkg,
|
|
}
|
|
if err := g.gen(); err != nil {
|
|
return err
|
|
}
|
|
src := buf.Bytes()
|
|
srcf, err := format.Source(src)
|
|
if err != nil {
|
|
w.Write(src) // for debugging
|
|
return err
|
|
}
|
|
_, err = w.Write(srcf)
|
|
return err
|
|
}
|
|
|
|
// GenObjc generates the Objective-C API from a Go package.
|
|
func GenObjc(w io.Writer, fset *token.FileSet, pkg *types.Package, prefix string, isHeader bool) error {
|
|
if prefix == "" {
|
|
prefix = "Go"
|
|
}
|
|
|
|
buf := new(bytes.Buffer)
|
|
g := &objcGen{
|
|
printer: &printer{buf: buf, indentEach: []byte("\t")},
|
|
fset: fset,
|
|
pkg: pkg,
|
|
prefix: prefix,
|
|
}
|
|
var err error
|
|
if isHeader {
|
|
err = g.genH()
|
|
} else {
|
|
err = g.genM()
|
|
}
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = io.Copy(w, buf)
|
|
return err
|
|
}
|