reflect/protoreflect: add helper methods to FieldDescriptor
Added API:
FieldDescriptor.IsExtension
FieldDescriptor.IsList
FieldDescriptor.MapKey
FieldDescriptor.MapValue
FieldDescriptor.ContainingOneof
FieldDescriptor.ContainingMessage
Deprecated API (to be removed in subsequent CL):
FieldDescriptor.Oneof
FieldDescriptor.Extendee
These methods help cleanup several common usage patterns.
Change-Id: I9a3ffabc2edb2173c536509b22f330f98bba7cf3
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/176977
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/protogen/protogen.go b/protogen/protogen.go
index 41c2392..d84c6d0 100644
--- a/protogen/protogen.go
+++ b/protogen/protogen.go
@@ -637,9 +637,9 @@
func newField(gen *Plugin, f *File, message *Message, desc protoreflect.FieldDescriptor) *Field {
var loc Location
switch {
- case desc.Extendee() != nil && message == nil:
+ case desc.IsExtension() && message == nil:
loc = f.location(fieldnum.FileDescriptorProto_Extension, int32(desc.Index()))
- case desc.Extendee() != nil && message != nil:
+ case desc.IsExtension() && message != nil:
loc = message.Location.appendPath(fieldnum.DescriptorProto_Extension, int32(desc.Index()))
default:
loc = message.Location.appendPath(fieldnum.DescriptorProto_Field, int32(desc.Index()))
@@ -650,8 +650,8 @@
Parent: message,
Location: loc,
}
- if desc.Oneof() != nil {
- field.Oneof = message.Oneofs[desc.Oneof().Index()]
+ if desc.ContainingOneof() != nil {
+ field.Oneof = message.Oneofs[desc.ContainingOneof().Index()]
}
return field
}
@@ -677,8 +677,8 @@
}
field.Enum = enum
}
- if desc.Extendee() != nil {
- mname := desc.Extendee().FullName()
+ if desc.IsExtension() {
+ mname := desc.ContainingMessage().FullName()
message, ok := gen.messagesByName[mname]
if !ok {
return fmt.Errorf("field %v: no descriptor for type %v", desc.FullName(), mname)