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/proto/encode.go b/proto/encode.go
index 1b48b41..255d0a3 100644
--- a/proto/encode.go
+++ b/proto/encode.go
@@ -125,16 +125,16 @@
// defined order.
//
// When using deterministic serialization, we sort the known fields by field number.
- fields := m.Type().Fields()
+ fieldDescs := m.Descriptor().Fields()
knownFields := m.KnownFields()
var err error
var nerr errors.NonFatal
o.rangeKnown(knownFields, func(num protoreflect.FieldNumber, value protoreflect.Value) bool {
- field := fields.ByNumber(num)
+ field := fieldDescs.ByNumber(num)
if field == nil {
- field = knownFields.ExtensionTypes().ByNumber(num)
+ field = knownFields.ExtensionTypes().ByNumber(num).Descriptor()
if field == nil {
- panic(fmt.Errorf("no descriptor for field %d in %q", num, m.Type().FullName()))
+ panic(fmt.Errorf("no descriptor for field %d in %q", num, m.Descriptor().FullName()))
}
}
b, err = o.marshalField(b, field, value)