Switch to the new go generator in the mojo tree. (does not affect known clients) R=vardhan@google.com Review URL: https://codereview.chromium.org/2091493002 .
diff --git a/mojo/public/tools/bindings/generators/mojom_go_generator.py b/mojo/public/tools/bindings/generators/mojom_go_generator.py index 88d83ac..5ea0d5d 100644 --- a/mojo/public/tools/bindings/generators/mojom_go_generator.py +++ b/mojo/public/tools/bindings/generators/mojom_go_generator.py
@@ -331,7 +331,7 @@ def GenerateFiles(self, args): self.should_gen_mojom_types = "--generate_type_info" in args - self.Write(self.GenerateSource(), os.path.join("go", "src", + self.Write(self.GenerateSource(), os.path.join( GetPackagePath(self.module), "%s.go" % self.module.name)) def GetJinjaParameters(self):
diff --git a/mojo/public/tools/bindings/mojom.gni b/mojo/public/tools/bindings/mojom.gni index 6a59ff1..21c6dde 100644 --- a/mojo/public/tools/bindings/mojom.gni +++ b/mojo/public/tools/bindings/mojom.gni
@@ -129,6 +129,8 @@ "$generator_root/mojom_tool/bin/mac64/mojom.sha1", "$generator_root/mojom_tool/bin/linux64/generators/c.sha1", "$generator_root/mojom_tool/bin/mac64/generators/c.sha1", + "$generator_root/mojom_tool/bin/linux64/generators/go.sha1", + "$generator_root/mojom_tool/bin/mac64/generators/go.sha1", "$generator_root/pylib/mojom/__init__.py", "$generator_root/pylib/mojom/error.py", "$generator_root/pylib/mojom/generate/__init__.py", @@ -210,7 +212,7 @@ rebase_path(root_gen_dir), "--no-gen-imports", "--generators", - "legacy,c", + "legacy,c,go", ] if (defined(invoker.generate_type_info) && invoker.generate_type_info) {
diff --git a/mojo/public/tools/bindings/mojom_tool/bin/linux64/generators/go.sha1 b/mojo/public/tools/bindings/mojom_tool/bin/linux64/generators/go.sha1 index 5218915..8cfc7fa 100644 --- a/mojo/public/tools/bindings/mojom_tool/bin/linux64/generators/go.sha1 +++ b/mojo/public/tools/bindings/mojom_tool/bin/linux64/generators/go.sha1
@@ -1 +1 @@ -4a50903d242f3a1c295074f5c5e6eae4c5fe9c18 \ No newline at end of file +c4324b8b93392c4e599de19014a1090b98ad2d5e \ No newline at end of file
diff --git a/mojo/public/tools/bindings/mojom_tool/bin/mac64/generators/go.sha1 b/mojo/public/tools/bindings/mojom_tool/bin/mac64/generators/go.sha1 index a2be745..37ce6b2 100644 --- a/mojo/public/tools/bindings/mojom_tool/bin/mac64/generators/go.sha1 +++ b/mojo/public/tools/bindings/mojom_tool/bin/mac64/generators/go.sha1
@@ -1 +1 @@ -937cdb3a4c02e21eb994180eaf9fd0cd12adb126 \ No newline at end of file +4938a2f7b348bebebab8a14cf2450ad879c5fe42 \ No newline at end of file
diff --git a/mojo/public/tools/bindings/run_code_generators.py b/mojo/public/tools/bindings/run_code_generators.py index 7f67b02..7d8e5f1 100755 --- a/mojo/public/tools/bindings/run_code_generators.py +++ b/mojo/public/tools/bindings/run_code_generators.py
@@ -32,7 +32,7 @@ help="output directory for generated files") parser.add_argument("-g", "--generators", dest="generators_string", metavar="GENERATORS", - default="c++,dart,go,javascript,java,python", + default="c++,dart,javascript,java,python", help="comma-separated list of generators") parser.add_argument("-s", "--src-root-path", dest="src_root_path", default=".",
diff --git a/mojom/generators/common/cli.go b/mojom/generators/common/cli.go index 1599f74..3e518ee 100644 --- a/mojom/generators/common/cli.go +++ b/mojom/generators/common/cli.go
@@ -19,12 +19,16 @@ "mojom/generated/mojom_files" ) -// GetConfig provides the primary interface for generators. -// By calling GetConfig, a generator implements the command line interface +// GetCliConfig provides the primary interface for generators. +// By calling GetCliConfig, a generator implements the command line interface // that is used by all generators. func GetCliConfig(args []string) GeneratorConfig { - config := new(generatorCliConfig) flagSet := flag.NewFlagSet("Generator Common Flag Set", flag.ExitOnError) + return GetCliConfigWithFlagSet(args, flagSet) +} + +func GetCliConfigWithFlagSet(args []string, flagSet *flag.FlagSet) GeneratorConfig { + config := new(generatorCliConfig) var fileGraphFile string flagSet.StringVar(&fileGraphFile, "file-graph", "-",
diff --git a/mojom/generators/go/go_generator.go b/mojom/generators/go/go_generator.go index 90fc229..aa81757 100644 --- a/mojom/generators/go/go_generator.go +++ b/mojom/generators/go/go_generator.go
@@ -5,6 +5,7 @@ package main import ( + "flag" "log" "os" "path/filepath" @@ -16,19 +17,29 @@ func main() { log.SetFlags(0) - config := common.GetCliConfig(os.Args) + flagSet := flag.NewFlagSet("Generator Go Flag Set", flag.ExitOnError) + var noGoSrc bool + flagSet.BoolVar(&noGoSrc, "no-go-src", false, "Do not prepend the output path with go/src.") + + config := common.GetCliConfigWithFlagSet(os.Args, flagSet) t := translator.NewTranslator(config.FileGraph()) - goConfig := goConfig{config, t} + goConfig := goConfig{config, t, noGoSrc} + t.Config = goConfig common.GenerateOutput(WriteGoFile, goConfig) } type goConfig struct { common.GeneratorConfig translator translator.Translator + noGoSrc bool } func (c goConfig) OutputDir() string { - return filepath.Join(c.GeneratorConfig.OutputDir(), "go", "src") + if c.noGoSrc { + return c.GeneratorConfig.OutputDir() + } else { + return filepath.Join(c.GeneratorConfig.OutputDir(), "go", "src") + } } func WriteGoFile(fileName string, config common.GeneratorConfig) {
diff --git a/mojom/generators/go/templates/templates.go b/mojom/generators/go/templates/templates.go index 4eba4ea..f0a7997 100644 --- a/mojom/generators/go/templates/templates.go +++ b/mojom/generators/go/templates/templates.go
@@ -68,7 +68,7 @@ {{- end}} {{- range $enum := $fileTmpl.Enums}} - {{ template "Enum" $enum }} + {{ template "EnumDecl" $enum }} {{- end}} {{- range $interface := $fileTmpl.Interfaces}}
diff --git a/mojom/generators/go/templates/unions.go b/mojom/generators/go/templates/unions.go index 176b215..88c4b33 100644 --- a/mojom/generators/go/templates/unions.go +++ b/mojom/generators/go/templates/unions.go
@@ -16,7 +16,7 @@ {{ template "UnknownUnionFieldDecl" $union }} {{ template "UnknownUnionFieldEncode" $union }} -{{- range $field := $union.Field}} +{{- range $field := $union.Fields}} {{ template "UnionFieldDecl" $field }} {{ template "UnionFieldEncode" $field }}
diff --git a/mojom/generators/go/translator/translator.go b/mojom/generators/go/translator/translator.go index 25e05b0..1e23103 100644 --- a/mojom/generators/go/translator/translator.go +++ b/mojom/generators/go/translator/translator.go
@@ -11,6 +11,7 @@ "mojom/generated/mojom_files" "mojom/generated/mojom_types" + "mojom/generators/common" ) type Translator interface { @@ -20,7 +21,10 @@ type translator struct { fileGraph *mojom_files.MojomFileGraph // goTypeCache maps type keys to go type strings. - goTypeCache map[string]string + goTypeCache map[string]string + imports map[string]string + currentFileName string + Config common.GeneratorConfig } func NewTranslator(fileGraph *mojom_files.MojomFileGraph) (t *translator) { @@ -31,6 +35,9 @@ } func (t *translator) TranslateMojomFile(fileName string) (tmplFile *TmplFile) { + t.currentFileName = fileName + t.imports = map[string]string{} + tmplFile = new(TmplFile) file := t.fileGraph.Files[fileName] @@ -82,6 +89,13 @@ Import{PackagePath: "fmt", PackageName: "fmt"}, Import{PackagePath: "sort", PackageName: "sort"}, } + + for pkgName, pkgPath := range t.imports { + tmplFile.Imports = append( + tmplFile.Imports, + Import{PackagePath: pkgPath, PackageName: pkgName}, + ) + } return tmplFile }
diff --git a/mojom/generators/go/translator/types.go b/mojom/generators/go/translator/types.go index 2b8390d..72bdce8 100644 --- a/mojom/generators/go/translator/types.go +++ b/mojom/generators/go/translator/types.go
@@ -6,6 +6,7 @@ import ( "fmt" + "path/filepath" "mojom/generated/mojom_types" ) @@ -121,9 +122,9 @@ } func (t *translator) translateTypeReference(typeRef mojom_types.TypeReference) (goType string) { - // TOOD(azani): Handle imported types. typeKey := *typeRef.TypeKey userDefinedType := t.fileGraph.ResolvedTypes[typeKey] + typeName := t.goTypeName(*typeRef.TypeKey) if _, ok := userDefinedType.(*mojom_types.UserDefinedTypeInterfaceType); ok { @@ -134,5 +135,17 @@ } } + srcFileInfo := userDefinedTypeDeclData(userDefinedType).SourceFileInfo + if srcFileInfo != nil && srcFileInfo.FileName == t.currentFileName { + pkgName := fileNameToPackageName(srcFileInfo.FileName) + pkgPath, err := filepath.Rel(t.Config.SrcRootPath(), srcFileInfo.FileName) + if err != nil { + panic(err.Error()) + } + pkgPath = pkgPath[:len(pkgPath)-len(filepath.Ext(pkgPath))-1] + t.imports[pkgName] = pkgPath + typeName = fmt.Sprintf("%s.%s", pkgName, typeName) + } + return typeName }