cmd/protoc-gen-go: generate blank imports for unused proto dependencies
Generate Go imports for all packages imported by the .proto source file,
even if they are not referenced.
Change-Id: I116bdf460ab441d205b42606b2b05b315ed68954
Reviewed-on: https://go-review.googlesource.com/136358
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
diff --git a/protogen/protogen.go b/protogen/protogen.go
index 753325e..9db98b1 100644
--- a/protogen/protogen.go
+++ b/protogen/protogen.go
@@ -706,6 +706,7 @@
buf bytes.Buffer
packageNames map[GoImportPath]GoPackageName
usedPackageNames map[GoPackageName]bool
+ manualImports map[GoImportPath]bool
}
// NewGeneratedFile creates a new generated file with the given filename
@@ -716,6 +717,7 @@
goImportPath: goImportPath,
packageNames: make(map[GoImportPath]GoPackageName),
usedPackageNames: make(map[GoPackageName]bool),
+ manualImports: make(map[GoImportPath]bool),
}
gen.genFiles = append(gen.genFiles, g)
return g
@@ -759,6 +761,15 @@
return string(packageName) + "." + ident.GoName
}
+// Import ensures a package is imported by the generated file.
+//
+// Packages referenced by QualifiedGoIdent are automatically imported.
+// Explicitly importing a package with Import is generally only necessary
+// when the import will be blank (import _ "package").
+func (g *GeneratedFile) Import(importPath GoImportPath) {
+ g.manualImports[importPath] = true
+}
+
// Write implements io.Writer.
func (g *GeneratedFile) Write(p []byte) (n int, err error) {
return g.buf.Write(p)
@@ -795,6 +806,12 @@
for _, importPath := range importPaths {
astutil.AddNamedImport(fset, file, string(g.packageNames[GoImportPath(importPath)]), importPath)
}
+ for importPath := range g.manualImports {
+ if _, ok := g.packageNames[importPath]; ok {
+ continue
+ }
+ astutil.AddNamedImport(fset, file, "_", string(importPath))
+ }
ast.SortImports(fset, file)
var out bytes.Buffer