reflect/protoreflect: add Descriptor specific methods
Added methods:
Enum.Descriptor
Message.Descriptor
EnumType.Descriptor
MessageType.Descriptor
ExtensionType.Descriptor
Message.New
All functionality is switched over to use those methods instead of
implicitly relying on the fact that {Enum,Message}Type implicitly
implement the associated descriptor interface.
This CL does not yet remove {Enum,Message}.Type or prevent
{Enum,Message,Extension}Type from implementating a descriptor.
That is a subsequent CL.
The Message.New method is also added to replace functionality
that will be lost when the Type methods are removed.
Change-Id: I7fefde1673bbd40bfdac489aca05cec9a6c98eb1
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/174918
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Herbie Ong <herbie@google.com>
diff --git a/encoding/jsonpb/encode.go b/encoding/jsonpb/encode.go
index 9375091..90767ce 100644
--- a/encoding/jsonpb/encode.go
+++ b/encoding/jsonpb/encode.go
@@ -71,7 +71,7 @@
func (o MarshalOptions) marshalMessage(m pref.Message) error {
var nerr errors.NonFatal
- if isCustomType(m.Type().FullName()) {
+ if isCustomType(m.Descriptor().FullName()) {
return o.marshalCustomType(m)
}
@@ -87,7 +87,7 @@
// marshalFields marshals the fields in the given protoreflect.Message.
func (o MarshalOptions) marshalFields(m pref.Message) error {
var nerr errors.NonFatal
- fieldDescs := m.Type().Fields()
+ fieldDescs := m.Descriptor().Fields()
knownFields := m.KnownFields()
// Marshal out known fields.
@@ -280,13 +280,13 @@
// Get a sorted list based on field key first.
entries := make([]xtEntry, 0, xtTypes.Len())
xtTypes.Range(func(xt pref.ExtensionType) bool {
- name := xt.FullName()
+ name := xt.Descriptor().FullName()
// If extended type is a MessageSet, set field name to be the message type name.
if isMessageSetExtension(xt) {
- name = xt.Message().FullName()
+ name = xt.Descriptor().Message().FullName()
}
- num := xt.Number()
+ num := xt.Descriptor().Number()
if knownFields.Has(num) {
// Use [name] format for JSON field name.
pval := knownFields.Get(num)
@@ -313,7 +313,7 @@
if err := o.encoder.WriteName("[" + entry.key + "]"); !nerr.Merge(err) {
return err
}
- if err := o.marshalValue(entry.value, entry.xtType); !nerr.Merge(err) {
+ if err := o.marshalValue(entry.value, entry.xtType.Descriptor()); !nerr.Merge(err) {
return err
}
}
@@ -322,16 +322,17 @@
// isMessageSetExtension reports whether extension extends a message set.
func isMessageSetExtension(xt pref.ExtensionType) bool {
- if xt.Name() != "message_set_extension" {
+ xd := xt.Descriptor()
+ if xd.Name() != "message_set_extension" {
return false
}
- md := xt.Message()
+ md := xd.Message()
if md == nil {
return false
}
- if xt.FullName().Parent() != md.FullName() {
+ if xd.FullName().Parent() != md.FullName() {
return false
}
- xmd, ok := xt.Extendee().(interface{ IsMessageSet() bool })
+ xmd, ok := xd.Extendee().(interface{ IsMessageSet() bool })
return ok && xmd.IsMessageSet()
}