cmd/protoc-gen-go: add more flags to control generation of deprecated features
Change-Id: I57f5927c1d3a834de067a5e0a96d957a7af9aafe
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/172657
Reviewed-by: Herbie Ong <herbie@google.com>
diff --git a/cmd/protoc-gen-go/internal_gengo/main.go b/cmd/protoc-gen-go/internal_gengo/main.go
index 47c47aa..219d79a 100644
--- a/cmd/protoc-gen-go/internal_gengo/main.go
+++ b/cmd/protoc-gen-go/internal_gengo/main.go
@@ -30,6 +30,10 @@
// which provide a bi-directional mapping between enum numbers and names.
generateEnumMapVars = true
+ // generateEnumJSONMethods specifies whether to generate the UnmarshalJSON
+ // method for proto2 enums.
+ generateEnumJSONMethods = true
+
// generateRawDescMethods specifies whether to generate EnumDescriptor and
// Descriptor methods for enums and messages. These methods return the
// GZIP'd contents of the raw file descriptor and the path from the root
@@ -40,6 +44,10 @@
// XXX_OneofWrappers methods on messages with oneofs.
generateOneofWrapperMethods = false
+ // generateExtensionRangeMethods specifies whether to generate the
+ // ExtensionRangeArray method for messages that support extensions.
+ generateExtensionRangeMethods = true
+
// generateWKTMarkerMethods specifes whether to generate
// XXX_WellKnownType methods on well-known types.
generateWKTMarkerMethods = false
@@ -329,7 +337,7 @@
genReflectEnum(gen, g, f, enum)
// UnmarshalJSON method.
- if enum.Desc.Syntax() == protoreflect.Proto2 {
+ if generateEnumJSONMethods && enum.Desc.Syntax() == protoreflect.Proto2 {
g.P("// Deprecated: Do not use.")
g.P("func (x *", enum.GoIdent, ") UnmarshalJSON(b []byte) error {")
g.P("num, err := ", protoimplPackage.Ident("X"), ".UnmarshalJSONEnum(x.Descriptor(), b)")
@@ -493,21 +501,23 @@
}
// ExtensionRangeArray method.
- if extranges := message.Desc.ExtensionRanges(); extranges.Len() > 0 {
- protoExtRange := protoifacePackage.Ident("ExtensionRangeV1")
- extRangeVar := "extRange_" + message.GoIdent.GoName
- g.P("var ", extRangeVar, " = []", protoExtRange, " {")
- for i := 0; i < extranges.Len(); i++ {
- r := extranges.Get(i)
- g.P("{Start:", r[0], ", End:", r[1]-1 /* inclusive */, "},")
+ if generateExtensionRangeMethods {
+ if extranges := message.Desc.ExtensionRanges(); extranges.Len() > 0 {
+ protoExtRange := protoifacePackage.Ident("ExtensionRangeV1")
+ extRangeVar := "extRange_" + message.GoIdent.GoName
+ g.P("var ", extRangeVar, " = []", protoExtRange, " {")
+ for i := 0; i < extranges.Len(); i++ {
+ r := extranges.Get(i)
+ g.P("{Start:", r[0], ", End:", r[1]-1 /* inclusive */, "},")
+ }
+ g.P("}")
+ g.P()
+ g.P("// Deprecated: Use ", message.GoIdent, ".ProtoReflect.Type.ExtensionRanges instead.")
+ g.P("func (*", message.GoIdent, ") ExtensionRangeArray() []", protoExtRange, " {")
+ g.P("return ", extRangeVar)
+ g.P("}")
+ g.P()
}
- g.P("}")
- g.P()
- g.P("// Deprecated: Use ", message.GoIdent, ".ProtoReflect.Type.ExtensionRanges instead.")
- g.P("func (*", message.GoIdent, ") ExtensionRangeArray() []", protoExtRange, " {")
- g.P("return ", extRangeVar)
- g.P("}")
- g.P()
}
genWellKnownType(g, "*", message.GoIdent, message.Desc)