cmd/protoc-gen-go-grpc: switch to the stdlib "context" package
Also replace the ident function with the handy GoImportPath.Ident method.
Change-Id: Ie4e820556fb83e659ab7e7af98f27fc24cdcd760
Reviewed-on: https://go-review.googlesource.com/c/152177
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
diff --git a/cmd/protoc-gen-go-grpc/internal_gengogrpc/grpc.go b/cmd/protoc-gen-go-grpc/internal_gengogrpc/grpc.go
index a8283e1..c2fb179 100644
--- a/cmd/protoc-gen-go-grpc/internal_gengogrpc/grpc.go
+++ b/cmd/protoc-gen-go-grpc/internal_gengogrpc/grpc.go
@@ -14,6 +14,11 @@
"github.com/golang/protobuf/v2/protogen"
)
+const (
+ contextPackage = protogen.GoImportPath("context")
+ grpcPackage = protogen.GoImportPath("google.golang.org/grpc")
+)
+
// GenerateFile generates a _grpc.pb.go file containing gRPC service definitions.
func GenerateFile(gen *protogen.Plugin, file *protogen.File) {
if len(file.Services) == 0 {
@@ -36,13 +41,13 @@
// TODO: Remove this. We don't need to include these references any more.
g.P("// Reference imports to suppress errors if they are not otherwise used.")
- g.P("var _ ", ident("context.Context"))
- g.P("var _ ", ident("grpc.ClientConn"))
+ g.P("var _ ", contextPackage.Ident("Context"))
+ g.P("var _ ", grpcPackage.Ident("ClientConn"))
g.P()
g.P("// This is a compile-time assertion to ensure that this generated file")
g.P("// is compatible with the grpc package it is being compiled against.")
- g.P("const _ = ", ident("grpc.SupportPackageIsVersion4"))
+ g.P("const _ = ", grpcPackage.Ident("SupportPackageIsVersion4"))
g.P()
for _, service := range file.Services {
genService(gen, file, g, service)
@@ -73,7 +78,7 @@
// Client structure.
g.P("type ", unexport(clientName), " struct {")
- g.P("cc *", ident("grpc.ClientConn"))
+ g.P("cc *", grpcPackage.Ident("ClientConn"))
g.P("}")
g.P()
@@ -81,7 +86,7 @@
if service.Desc.Options().(*descpb.ServiceOptions).GetDeprecated() {
g.P(deprecationComment)
}
- g.P("func New", clientName, " (cc *", ident("grpc.ClientConn"), ") ", clientName, " {")
+ g.P("func New", clientName, " (cc *", grpcPackage.Ident("ClientConn"), ") ", clientName, " {")
g.P("return &", unexport(clientName), "{cc}")
g.P("}")
g.P()
@@ -122,7 +127,7 @@
g.P(deprecationComment)
}
serviceDescVar := "_" + service.GoName + "_serviceDesc"
- g.P("func Register", service.GoName, "Server(s *", ident("grpc.Server"), ", srv ", serverType, ") {")
+ g.P("func Register", service.GoName, "Server(s *", grpcPackage.Ident("Server"), ", srv ", serverType, ") {")
g.P("s.RegisterService(&", serviceDescVar, `, srv)`)
g.P("}")
g.P()
@@ -135,10 +140,10 @@
}
// Service descriptor.
- g.P("var ", serviceDescVar, " = ", ident("grpc.ServiceDesc"), " {")
+ g.P("var ", serviceDescVar, " = ", grpcPackage.Ident("ServiceDesc"), " {")
g.P("ServiceName: ", strconv.Quote(string(service.Desc.FullName())), ",")
g.P("HandlerType: (*", serverType, ")(nil),")
- g.P("Methods: []", ident("grpc.MethodDesc"), "{")
+ g.P("Methods: []", grpcPackage.Ident("MethodDesc"), "{")
for i, method := range service.Methods {
if method.Desc.IsStreamingClient() || method.Desc.IsStreamingServer() {
continue
@@ -149,7 +154,7 @@
g.P("},")
}
g.P("},")
- g.P("Streams: []", ident("grpc.StreamDesc"), "{")
+ g.P("Streams: []", grpcPackage.Ident("StreamDesc"), "{")
for i, method := range service.Methods {
if !method.Desc.IsStreamingClient() && !method.Desc.IsStreamingServer() {
continue
@@ -172,11 +177,11 @@
}
func clientSignature(g *protogen.GeneratedFile, method *protogen.Method) string {
- s := method.GoName + "(ctx " + g.QualifiedGoIdent(ident("context.Context"))
+ s := method.GoName + "(ctx " + g.QualifiedGoIdent(contextPackage.Ident("Context"))
if !method.Desc.IsStreamingClient() {
s += ", in *" + g.QualifiedGoIdent(method.InputType.GoIdent)
}
- s += ", opts ..." + g.QualifiedGoIdent(ident("grpc.CallOption")) + ") ("
+ s += ", opts ..." + g.QualifiedGoIdent(grpcPackage.Ident("CallOption")) + ") ("
if !method.Desc.IsStreamingClient() && !method.Desc.IsStreamingServer() {
s += "*" + g.QualifiedGoIdent(method.OutputType.GoIdent)
} else {
@@ -231,12 +236,12 @@
if genCloseAndRecv {
g.P("CloseAndRecv() (*", method.OutputType.GoIdent, ", error)")
}
- g.P(ident("grpc.ClientStream"))
+ g.P(grpcPackage.Ident("ClientStream"))
g.P("}")
g.P()
g.P("type ", streamType, " struct {")
- g.P(ident("grpc.ClientStream"))
+ g.P(grpcPackage.Ident("ClientStream"))
g.P("}")
g.P()
@@ -269,7 +274,7 @@
var reqArgs []string
ret := "error"
if !method.Desc.IsStreamingClient() && !method.Desc.IsStreamingServer() {
- reqArgs = append(reqArgs, g.QualifiedGoIdent(ident("context.Context")))
+ reqArgs = append(reqArgs, g.QualifiedGoIdent(contextPackage.Ident("Context")))
ret = "(*" + g.QualifiedGoIdent(method.OutputType.GoIdent) + ", error)"
}
if !method.Desc.IsStreamingClient() {
@@ -286,15 +291,15 @@
hname := fmt.Sprintf("_%s_%s_Handler", service.GoName, method.GoName)
if !method.Desc.IsStreamingClient() && !method.Desc.IsStreamingServer() {
- g.P("func ", hname, "(srv interface{}, ctx ", ident("context.Context"), ", dec func(interface{}) error, interceptor ", ident("grpc.UnaryServerInterceptor"), ") (interface{}, error) {")
+ g.P("func ", hname, "(srv interface{}, ctx ", contextPackage.Ident("Context"), ", dec func(interface{}) error, interceptor ", grpcPackage.Ident("UnaryServerInterceptor"), ") (interface{}, error) {")
g.P("in := new(", method.InputType.GoIdent, ")")
g.P("if err := dec(in); err != nil { return nil, err }")
g.P("if interceptor == nil { return srv.(", service.GoName, "Server).", method.GoName, "(ctx, in) }")
- g.P("info := &", ident("grpc.UnaryServerInfo"), "{")
+ g.P("info := &", grpcPackage.Ident("UnaryServerInfo"), "{")
g.P("Server: srv,")
g.P("FullMethod: ", strconv.Quote(fmt.Sprintf("/%s/%s", service.Desc.FullName(), method.Desc.Name())), ",")
g.P("}")
- g.P("handler := func(ctx ", ident("context.Context"), ", req interface{}) (interface{}, error) {")
+ g.P("handler := func(ctx ", contextPackage.Ident("Context"), ", req interface{}) (interface{}, error) {")
g.P("return srv.(", service.GoName, "Server).", method.GoName, "(ctx, req.(*", method.InputType.GoIdent, "))")
g.P("}")
g.P("return interceptor(ctx, in, info, handler)")
@@ -303,7 +308,7 @@
return hname
}
streamType := unexport(service.GoName) + method.GoName + "Server"
- g.P("func ", hname, "(srv interface{}, stream ", ident("grpc.ServerStream"), ") error {")
+ g.P("func ", hname, "(srv interface{}, stream ", grpcPackage.Ident("ServerStream"), ") error {")
if !method.Desc.IsStreamingClient() {
g.P("m := new(", method.InputType.GoIdent, ")")
g.P("if err := stream.RecvMsg(m); err != nil { return err }")
@@ -329,12 +334,12 @@
if genRecv {
g.P("Recv() (*", method.InputType.GoIdent, ", error)")
}
- g.P(ident("grpc.ServerStream"))
+ g.P(grpcPackage.Ident("ServerStream"))
g.P("}")
g.P()
g.P("type ", streamType, " struct {")
- g.P(ident("grpc.ServerStream"))
+ g.P(grpcPackage.Ident("ServerStream"))
g.P("}")
g.P()
@@ -362,19 +367,6 @@
return hname
}
-var packages = map[string]protogen.GoImportPath{
- "context": "golang.org/x/net/context",
- "grpc": "google.golang.org/grpc",
-}
-
-func ident(name string) protogen.GoIdent {
- idx := strings.LastIndex(name, ".")
- return protogen.GoIdent{
- GoImportPath: packages[name[:idx]],
- GoName: name[idx+1:],
- }
-}
-
const deprecationComment = "// Deprecated: Do not use."
func unexport(s string) string { return strings.ToLower(s[:1]) + s[1:] }
diff --git a/cmd/protoc-gen-go-grpc/testdata/grpc/deprecation_grpc.pb.go b/cmd/protoc-gen-go-grpc/testdata/grpc/deprecation_grpc.pb.go
index 1aff29c..fd5cbc2 100644
--- a/cmd/protoc-gen-go-grpc/testdata/grpc/deprecation_grpc.pb.go
+++ b/cmd/protoc-gen-go-grpc/testdata/grpc/deprecation_grpc.pb.go
@@ -3,7 +3,7 @@
package grpc
import (
- context "golang.org/x/net/context"
+ context "context"
grpc "google.golang.org/grpc"
)
diff --git a/cmd/protoc-gen-go-grpc/testdata/grpc/grpc_grpc.pb.go b/cmd/protoc-gen-go-grpc/testdata/grpc/grpc_grpc.pb.go
index 9db0a3a..189397a 100644
--- a/cmd/protoc-gen-go-grpc/testdata/grpc/grpc_grpc.pb.go
+++ b/cmd/protoc-gen-go-grpc/testdata/grpc/grpc_grpc.pb.go
@@ -3,7 +3,7 @@
package grpc
import (
- context "golang.org/x/net/context"
+ context "context"
grpc "google.golang.org/grpc"
)