57 lines
1.3 KiB
Go
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"
|
|
|
|
"golang.org/x/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
|
|
}
|