Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: third_party/go/src/golang.org/x/mobile/cmd/gobind/gen.go

Issue 1275153002: Remove third_party/golang.org/x/mobile as it is no longer used with Go 1.5. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Remove golang.org/x/mobile Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 package main
6
7 import (
8 "fmt"
9 "io"
10 "os"
11 "path/filepath"
12 "unicode"
13 "unicode/utf8"
14
15 "go/ast"
16 "go/build"
17 "go/parser"
18 "go/scanner"
19 "go/token"
20
21 "golang.org/x/mobile/bind"
22 "golang.org/x/tools/go/loader"
23 "golang.org/x/tools/go/types"
24 )
25
26 func genPkg(pkg *build.Package) {
27 if len(pkg.CgoFiles) > 0 {
28 errorf("gobind: cannot use cgo-dependent package as service defi nition: %s", pkg.CgoFiles[0])
29 return
30 }
31
32 files := parseFiles(pkg.Dir, pkg.GoFiles)
33 if len(files) == 0 {
34 return // some error has been reported
35 }
36
37 conf := loader.Config{
38 Fset: fset,
39 }
40 conf.TypeChecker.Error = func(err error) {
41 errorf("%v", err)
42 }
43 conf.CreateFromFiles(pkg.ImportPath, files...)
44 program, err := conf.Load()
45 if err != nil {
46 errorf("%v", err)
47 return
48 }
49 p := program.Created[0].Pkg
50
51 w, closer, err := writer(*lang, p)
52 if err != nil {
53 errorf("%v", err)
54 return
55 }
56
57 switch *lang {
58 case "java":
59 err = bind.GenJava(w, fset, p)
60 case "go":
61 err = bind.GenGo(w, fset, p)
62 default:
63 errorf("unknown target language: %q", *lang)
64 }
65
66 if err != nil {
67 if list, _ := err.(bind.ErrorList); len(list) > 0 {
68 for _, err := range list {
69 errorf("%v", err)
70 }
71 } else {
72 errorf("%v", err)
73 }
74 }
75 if err := closer(); err != nil {
76 errorf("error in closing output: %v", err)
77 }
78 }
79
80 var fset = token.NewFileSet()
81
82 func parseFiles(dir string, filenames []string) []*ast.File {
83 var files []*ast.File
84 hasErr := false
85 for _, filename := range filenames {
86 path := filepath.Join(dir, filename)
87 file, err := parser.ParseFile(fset, path, nil, parser.AllErrors)
88 if err != nil {
89 hasErr = true
90 if list, _ := err.(scanner.ErrorList); len(list) > 0 {
91 for _, err := range list {
92 errorf("%v", err)
93 }
94 } else {
95 errorf("%v", err)
96 }
97 }
98 files = append(files, file)
99 }
100 if hasErr {
101 return nil
102 }
103 return files
104 }
105
106 func writer(lang string, pkg *types.Package) (w io.Writer, closer func() error, err error) {
107 if *outdir == "" {
108 return os.Stdout, func() error { return nil }, nil
109 }
110
111 // TODO(hakim): support output of multiple files e.g. .h/.m files for ob jc.
112
113 if err := os.MkdirAll(*outdir, 0755); err != nil {
114 return nil, nil, fmt.Errorf("invalid output dir: %v\n", err)
115 }
116 fname := defaultFileName(lang, pkg)
117 f, err := os.Create(filepath.Join(*outdir, fname))
118 if err != nil {
119 return nil, nil, fmt.Errorf("invalid output dir: %v\n", err)
120 }
121 return f, f.Close, nil
122 }
123
124 func defaultFileName(lang string, pkg *types.Package) string {
125 switch lang {
126 case "java":
127 firstRune, size := utf8.DecodeRuneInString(pkg.Name())
128 className := string(unicode.ToUpper(firstRune)) + pkg.Name()[siz e:]
129 return className + ".java"
130 case "go":
131 return "go_" + pkg.Name() + ".go"
132 }
133 errorf("unknown target language: %q", lang)
134 os.Exit(exitStatus)
135 return ""
136 }
OLDNEW
« no previous file with comments | « third_party/go/src/golang.org/x/mobile/cmd/gobind/doc.go ('k') | third_party/go/src/golang.org/x/mobile/cmd/gobind/main.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698