2
0
mirror of synced 2025-02-23 23:08:14 +00:00
mobile/bind/bind.go
David Crawshaw 9f144f9410 go.mobile/bind: language binding generator
Details: http://golang.org/s/gobind

LGTM=adonovan
R=adonovan
CC=golang-codereviews
https://golang.org/cl/118240044
2014-07-31 15:09:13 -04:00

57 lines
1.3 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.
package bind
// TODO(crawshaw): slice support
// TODO(crawshaw): channel support
import (
"bytes"
"go/format"
"go/token"
"io"
"code.google.com/p/go.tools/go/types"
)
// GenJava generates a Java API from a Go package.
func GenJava(w io.Writer, fset *token.FileSet, pkg *types.Package) error {
buf := new(bytes.Buffer)
g := &javaGen{
printer: &printer{buf: buf, indentEach: []byte(" ")},
fset: fset,
pkg: pkg,
}
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
}