all: cleanup protoimpl calls
Use MessageV1, MessageV2, and MessageReflect directly.
Change-Id: Ifb44e2cc2dcb52a44894b52d2e932558e275aecd
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/219558
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/go.mod b/go.mod
index 3e995cf..55179c0 100644
--- a/go.mod
+++ b/go.mod
@@ -4,5 +4,5 @@
require (
github.com/google/go-cmp v0.4.0
- google.golang.org/protobuf v0.0.0-20200224223749-2dabbe471100
+ google.golang.org/protobuf v0.0.0-20200225203307-f6cf4925a90e
)
diff --git a/go.sum b/go.sum
index 4578aaf..243c022 100644
--- a/go.sum
+++ b/go.sum
@@ -8,5 +8,5 @@
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200224223749-2dabbe471100 h1:i1uRQ2Eod1FWX6jGO/l8K0oMIwtCWeEmeDtLy5YABYc=
-google.golang.org/protobuf v0.0.0-20200224223749-2dabbe471100/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v0.0.0-20200225203307-f6cf4925a90e h1:wrJFqPhiw6ByHbcNMcv/+6kk7HQLewtkSxANqkwtQ/0=
+google.golang.org/protobuf v0.0.0-20200225203307-f6cf4925a90e/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
diff --git a/jsonpb/decode.go b/jsonpb/decode.go
index 492b8c1..6faa5fe 100644
--- a/jsonpb/decode.go
+++ b/jsonpb/decode.go
@@ -20,7 +20,6 @@
protoV2 "google.golang.org/protobuf/proto"
"google.golang.org/protobuf/reflect/protoreflect"
"google.golang.org/protobuf/reflect/protoregistry"
- "google.golang.org/protobuf/runtime/protoimpl"
)
const wrapJSONUnmarshalV2 = false
@@ -87,7 +86,7 @@
return jsu.UnmarshalJSONPB(u, raw)
}
- mr := protoimpl.X.MessageOf(m)
+ mr := proto.MessageReflect(m)
// NOTE: For historical reasons, a top-level null is treated as a noop.
// This is incorrect, but kept for compatibility.
@@ -109,7 +108,7 @@
mr = mr.New()
// Use a defer to copy all unmarshaled fields into the original message.
- dst := protoimpl.X.MessageOf(m)
+ dst := proto.MessageReflect(m)
defer mr.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {
dst.Set(fd, v)
return true
@@ -140,7 +139,7 @@
return nil
}
- if jsu, ok := protoimpl.X.ProtoMessageV1Of(m.Interface()).(JSONPBUnmarshaler); ok {
+ if jsu, ok := proto.MessageV1(m.Interface()).(JSONPBUnmarshaler); ok {
return jsu.UnmarshalJSONPB(u, in)
}
@@ -167,7 +166,7 @@
if err != nil {
return err
}
- m2 = protoimpl.X.MessageOf(mi)
+ m2 = proto.MessageReflect(mi)
} else {
mt, err := protoregistry.GlobalTypes.FindMessageByURL(typeURL)
if err != nil {
diff --git a/jsonpb/encode.go b/jsonpb/encode.go
index 3cb4a68..c5b80bc 100644
--- a/jsonpb/encode.go
+++ b/jsonpb/encode.go
@@ -21,7 +21,6 @@
protoV2 "google.golang.org/protobuf/proto"
"google.golang.org/protobuf/reflect/protoreflect"
"google.golang.org/protobuf/reflect/protoregistry"
- "google.golang.org/protobuf/runtime/protoimpl"
)
const wrapJSONMarshalV2 = false
@@ -105,10 +104,10 @@
if jm.AnyResolver != nil {
opts.Resolver = anyResolver{jm.AnyResolver}
}
- return opts.Marshal(protoimpl.X.MessageOf(m).Interface())
+ return opts.Marshal(proto.MessageReflect(m).Interface())
} else {
// Check for unpopulated required fields first.
- m2 := protoimpl.X.MessageOf(m)
+ m2 := proto.MessageReflect(m)
if err := protoV2.CheckInitialized(m2.Interface()); err != nil {
return nil, err
}
@@ -129,7 +128,7 @@
}
func (w *jsonWriter) marshalMessage(m protoreflect.Message, indent, typeURL string) error {
- if jsm, ok := protoimpl.X.ProtoMessageV1Of(m.Interface()).(JSONPBMarshaler); ok {
+ if jsm, ok := proto.MessageV1(m.Interface()).(JSONPBMarshaler); ok {
b, err := jsm.MarshalJSONPB(w.Marshaler)
if err != nil {
return err
@@ -321,7 +320,7 @@
if err != nil {
return err
}
- m2 = protoimpl.X.MessageOf(mi)
+ m2 = proto.MessageReflect(mi)
} else {
mt, err := protoregistry.GlobalTypes.FindMessageByURL(typeURL)
if err != nil {
diff --git a/proto/buffer.go b/proto/buffer.go
index e61a675..9aae5bc 100644
--- a/proto/buffer.go
+++ b/proto/buffer.go
@@ -130,7 +130,7 @@
// DebugPrint dumps the encoded bytes of b with a header and footer including s
// to stdout. This is only intended for debugging.
func (*Buffer) DebugPrint(s string, b []byte) {
- m := protoimpl.X.MessageOf(new(unknownFields))
+ m := MessageReflect(new(unknownFields))
m.SetUnknown(b)
b, _ = prototext.MarshalOptions{AllowPartial: true, Indent: "\t"}.Marshal(m.Interface())
fmt.Printf("==== %s ====\n%s==== %s ====\n", s, b, s)
diff --git a/proto/defaults.go b/proto/defaults.go
index 1c3a27e..d399bf0 100644
--- a/proto/defaults.go
+++ b/proto/defaults.go
@@ -6,7 +6,6 @@
import (
"google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/runtime/protoimpl"
)
// SetDefaults sets unpopulated scalar fields to their default values.
@@ -14,7 +13,7 @@
// SetDefaults is recursively called upon any populated message fields.
func SetDefaults(m Message) {
if m != nil {
- setDefaults(protoimpl.X.MessageOf(m))
+ setDefaults(MessageReflect(m))
}
}
diff --git a/proto/discard.go b/proto/discard.go
index 7c82e02..2187e87 100644
--- a/proto/discard.go
+++ b/proto/discard.go
@@ -6,7 +6,6 @@
import (
"google.golang.org/protobuf/reflect/protoreflect"
- "google.golang.org/protobuf/runtime/protoimpl"
)
// DiscardUnknown recursively discards all unknown fields from this message
@@ -19,7 +18,7 @@
// explicitly clear the unknown fields after unmarshaling.
func DiscardUnknown(m Message) {
if m != nil {
- discardUnknown(protoimpl.X.MessageOf(m))
+ discardUnknown(MessageReflect(m))
}
}
diff --git a/proto/extensions.go b/proto/extensions.go
index 53abf45..d78d258 100644
--- a/proto/extensions.go
+++ b/proto/extensions.go
@@ -43,7 +43,7 @@
// HasExtension reports whether the extension field is present in m
// either as an explicitly populated field or as an unknown field.
func HasExtension(m Message, xt *ExtensionDesc) (has bool) {
- mr := protoimpl.X.MessageOf(m)
+ mr := MessageReflect(m)
if mr == nil || !mr.IsValid() {
return false
}
@@ -71,7 +71,7 @@
// ClearExtension removes the the exntesion field from m
// either as an explicitly populated field or as an unknown field.
func ClearExtension(m Message, xt *ExtensionDesc) {
- mr := protoimpl.X.MessageOf(m)
+ mr := MessageReflect(m)
if mr == nil || !mr.IsValid() {
return
}
@@ -94,7 +94,7 @@
// ClearAllExtensions clears all extensions from m.
// This includes populated fields and unknown fields in the extension range.
func ClearAllExtensions(m Message) {
- mr := protoimpl.X.MessageOf(m)
+ mr := MessageReflect(m)
if mr == nil || !mr.IsValid() {
return
}
@@ -118,7 +118,7 @@
// If the descriptor is type incomplete (i.e., ExtensionDesc.ExtensionType is nil),
// then GetExtension returns the raw encoded bytes for the extension field.
func GetExtension(m Message, xt *ExtensionDesc) (interface{}, error) {
- mr := protoimpl.X.MessageOf(m)
+ mr := MessageReflect(m)
if mr == nil || !mr.IsValid() || mr.Descriptor().ExtensionRanges().Len() == 0 {
return nil, errNotExtendable
}
@@ -200,7 +200,7 @@
// corresponding with the provided list of extension descriptors, xts.
// If an extension is missing in m, the corresponding value is nil.
func GetExtensions(m Message, xts []*ExtensionDesc) ([]interface{}, error) {
- mr := protoimpl.X.MessageOf(m)
+ mr := MessageReflect(m)
if mr == nil || !mr.IsValid() {
return nil, errNotExtendable
}
@@ -221,7 +221,7 @@
// SetExtension sets an extension field in m to the provided value.
func SetExtension(m Message, xt *ExtensionDesc, v interface{}) error {
- mr := protoimpl.X.MessageOf(m)
+ mr := MessageReflect(m)
if mr == nil || !mr.IsValid() || mr.Descriptor().ExtensionRanges().Len() == 0 {
return errNotExtendable
}
@@ -252,7 +252,7 @@
//
// Deprecated: Use Message.ProtoReflect.SetUnknown instead.
func SetRawExtension(m Message, fnum int32, b []byte) {
- mr := protoimpl.X.MessageOf(m)
+ mr := MessageReflect(m)
if mr == nil || !mr.IsValid() {
return
}
@@ -277,7 +277,7 @@
// the ExtensionDesc.Field field is populated.
// The order of the extension descriptors is undefined.
func ExtensionDescs(m Message) ([]*ExtensionDesc, error) {
- mr := protoimpl.X.MessageOf(m)
+ mr := MessageReflect(m)
if mr == nil || !mr.IsValid() || mr.Descriptor().ExtensionRanges().Len() == 0 {
return nil, errNotExtendable
}
diff --git a/proto/proto.go b/proto/proto.go
index 02c620e..5aee89c 100644
--- a/proto/proto.go
+++ b/proto/proto.go
@@ -127,14 +127,7 @@
// Clone returns a deep copy of src.
func Clone(src Message) Message {
- srcMsg := protoimpl.X.MessageOf(src)
- if srcMsg == nil || !srcMsg.IsValid() {
- return src
- }
-
- dst := protoimpl.X.ProtoMessageV1Of(srcMsg.New().Interface())
- Merge(dst, src)
- return dst
+ return MessageV1(protoV2.Clone(MessageV2(src)))
}
// Merge merges src into dst, which must be messages of the same type.
@@ -146,15 +139,7 @@
// the corresponding map field in dst, possibly replacing existing entries.
// The unknown fields of src are appended to the unknown fields of dst.
func Merge(dst, src Message) {
- // TODO: Drop this type assertion if the aberrant wrapper in v2 calls this.
- if m, ok := dst.(Merger); ok {
- m.Merge(src)
- return
- }
- protoV2.Merge(
- protoimpl.X.ProtoMessageV2Of(dst),
- protoimpl.X.ProtoMessageV2Of(src),
- )
+ protoV2.Merge(MessageV2(dst), MessageV2(src))
}
// Equal reports whether two messages are equal.
@@ -173,10 +158,7 @@
// Maps are equal if they have the same set of keys, where the pair of values
// for each key is also equal.
func Equal(x, y Message) bool {
- return protoV2.Equal(
- protoimpl.X.ProtoMessageV2Of(x),
- protoimpl.X.ProtoMessageV2Of(y),
- )
+ return protoV2.Equal(MessageV2(x), MessageV2(y))
}
func isMessageSet(md protoreflect.MessageDescriptor) bool {
diff --git a/proto/registry.go b/proto/registry.go
index 8c927ae..abab110 100644
--- a/proto/registry.go
+++ b/proto/registry.go
@@ -261,7 +261,7 @@
}
func messageGoType(mt protoreflect.MessageType) reflect.Type {
- return reflect.TypeOf(protoimpl.X.ProtoMessageV1Of(mt.New().Interface()))
+ return reflect.TypeOf(MessageV1(mt.Zero().Interface()))
}
// MessageName returns the full protobuf name for the given message type.
diff --git a/proto/text_decode.go b/proto/text_decode.go
index 6216513..4a59310 100644
--- a/proto/text_decode.go
+++ b/proto/text_decode.go
@@ -17,7 +17,6 @@
protoV2 "google.golang.org/protobuf/proto"
"google.golang.org/protobuf/reflect/protoreflect"
"google.golang.org/protobuf/reflect/protoregistry"
- "google.golang.org/protobuf/runtime/protoimpl"
)
const wrapTextUnmarshalV2 = false
@@ -47,7 +46,7 @@
}
m.Reset()
- mi := protoimpl.X.ProtoMessageV2Of(m)
+ mi := MessageV2(m)
if wrapTextUnmarshalV2 {
err := prototext.UnmarshalOptions{
diff --git a/proto/text_encode.go b/proto/text_encode.go
index 31f906d..e2a0ad3 100644
--- a/proto/text_encode.go
+++ b/proto/text_encode.go
@@ -18,7 +18,6 @@
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/reflect/protoreflect"
"google.golang.org/protobuf/reflect/protoregistry"
- "google.golang.org/protobuf/runtime/protoimpl"
)
const wrapTextMarshalV2 = false
@@ -47,7 +46,7 @@
}
func (tm *TextMarshaler) marshal(m Message) ([]byte, error) {
- mr := protoimpl.X.MessageOf(m)
+ mr := MessageReflect(m)
if mr == nil || !mr.IsValid() {
return []byte("<nil>"), nil
}
diff --git a/proto/wire.go b/proto/wire.go
index 5e8b7ac..57abb57 100644
--- a/proto/wire.go
+++ b/proto/wire.go
@@ -7,7 +7,6 @@
import (
protoV2 "google.golang.org/protobuf/proto"
"google.golang.org/protobuf/runtime/protoiface"
- "google.golang.org/protobuf/runtime/protoimpl"
)
// Size returns the size in bytes of the wire-format encoding of m.
@@ -15,7 +14,7 @@
if m == nil {
return 0
}
- mi := protoimpl.X.ProtoMessageV2Of(m)
+ mi := MessageV2(m)
return protoV2.Size(mi)
}
@@ -34,7 +33,7 @@
if m == nil {
return nil, ErrNil
}
- mi := protoimpl.X.ProtoMessageV2Of(m)
+ mi := MessageV2(m)
nbuf, err := protoV2.MarshalOptions{
Deterministic: deterministic,
AllowPartial: true,
@@ -61,7 +60,7 @@
// UnmarshalMerge parses a wire-format message in b and places the decoded results in m.
func UnmarshalMerge(b []byte, m Message) error {
- mi := protoimpl.X.ProtoMessageV2Of(m)
+ mi := MessageV2(m)
out, err := protoV2.UnmarshalOptions{
AllowPartial: true,
Merge: true,
diff --git a/ptypes/any.go b/ptypes/any.go
index 9e0f110..e729dcf 100644
--- a/ptypes/any.go
+++ b/ptypes/any.go
@@ -11,7 +11,6 @@
"github.com/golang/protobuf/proto"
"google.golang.org/protobuf/reflect/protoreflect"
"google.golang.org/protobuf/reflect/protoregistry"
- "google.golang.org/protobuf/runtime/protoimpl"
anypb "github.com/golang/protobuf/ptypes/any"
)
@@ -68,7 +67,7 @@
if err != nil {
return nil, err
}
- return protoimpl.X.ProtoMessageV1Of(mt.New().Interface()), nil
+ return proto.MessageV1(mt.New().Interface()), nil
}
// UnmarshalAny unmarshals the encoded value contained in the anypb.Any message
@@ -141,7 +140,7 @@
if m.Message == nil {
return nil
}
- return dynamicAny{protoimpl.X.MessageOf(m.Message)}
+ return dynamicAny{proto.MessageReflect(m.Message)}
}
type dynamicAny struct{ protoreflect.Message }
@@ -153,7 +152,7 @@
return dynamicAnyType{m.Message.Type()}.New()
}
func (m dynamicAny) Interface() protoreflect.ProtoMessage {
- return DynamicAny{protoimpl.X.ProtoMessageV1Of(m.Message.Interface())}
+ return DynamicAny{proto.MessageV1(m.Message.Interface())}
}
type dynamicAnyType struct{ protoreflect.MessageType }