Skip to content

Commit d3c38a4

Browse files
dsnetneild
authored andcommitted
protoc-gen-go/grpc: use status and code packages only if needed (#820)
In the rare event that a proto file only has a service declaration with no declared methods, it will not depend on status and code. Make sure these are not imported in such cases.
1 parent b85cd75 commit d3c38a4

File tree

3 files changed

+121
-6
lines changed

3 files changed

+121
-6
lines changed

protoc-gen-go/grpc/grpc.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,10 @@ const generatedCodeVersion = 4
5252
// Paths for packages used by code generated in this file,
5353
// relative to the import_prefix of the generator.Generator.
5454
const (
55-
errorPkgPath = "google.golang.org/grpc/status"
5655
contextPkgPath = "context"
5756
grpcPkgPath = "google.golang.org/grpc"
5857
codePkgPath = "google.golang.org/grpc/codes"
58+
statusPkgPath = "google.golang.org/grpc/status"
5959
)
6060

6161
func init() {
@@ -79,8 +79,6 @@ func (g *grpc) Name() string {
7979
var (
8080
contextPkg string
8181
grpcPkg string
82-
errorPkg string
83-
codePkg string
8482
)
8583

8684
// Init initializes the plugin.
@@ -109,8 +107,6 @@ func (g *grpc) Generate(file *generator.FileDescriptor) {
109107
return
110108
}
111109

112-
errorPkg = string(g.gen.AddImport(errorPkgPath))
113-
codePkg = string(g.gen.AddImport(codePkgPath))
114110
contextPkg = string(g.gen.AddImport(contextPkgPath))
115111
grpcPkg = string(g.gen.AddImport(grpcPkgPath))
116112

@@ -304,7 +300,9 @@ func (g *grpc) generateServerMethodConcrete(servName string, method *pb.MethodDe
304300
nilArg = "nil, "
305301
}
306302
methName := generator.CamelCase(method.GetName())
307-
g.P("return ", nilArg, errorPkg, `.Errorf(codes.Unimplemented, "method `, methName, ` not implemented")`)
303+
statusPkg := string(g.gen.AddImport(statusPkgPath))
304+
codePkg := string(g.gen.AddImport(codePkgPath))
305+
g.P("return ", nilArg, statusPkg, `.Errorf(`, codePkg, `.Unimplemented, "method `, methName, ` not implemented")`)
308306
g.P("}")
309307
}
310308

protoc-gen-go/testdata/grpc/grpc_empty.pb.go

Lines changed: 79 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// Go support for Protocol Buffers - Google's data interchange format
2+
//
3+
// Copyright 2019 The Go Authors. All rights reserved.
4+
// https://github.com/golang/protobuf
5+
//
6+
// Redistribution and use in source and binary forms, with or without
7+
// modification, are permitted provided that the following conditions are
8+
// met:
9+
//
10+
// * Redistributions of source code must retain the above copyright
11+
// notice, this list of conditions and the following disclaimer.
12+
// * Redistributions in binary form must reproduce the above
13+
// copyright notice, this list of conditions and the following disclaimer
14+
// in the documentation and/or other materials provided with the
15+
// distribution.
16+
// * Neither the name of Google Inc. nor the names of its
17+
// contributors may be used to endorse or promote products derived from
18+
// this software without specific prior written permission.
19+
//
20+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21+
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22+
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23+
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24+
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25+
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26+
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27+
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28+
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29+
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30+
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31+
32+
syntax = "proto3";
33+
34+
package grpc.testing;
35+
36+
option go_package = "github.com/golang/protobuf/protoc-gen-go/testdata/grpc;testing";
37+
38+
service EmptyService {}

0 commit comments

Comments
 (0)