reflect/prototype: initial commit
Add the prototype package which provides constructors for
protoreflect.{Enum,Message,Extension}Type.
Switch all usages of the internal/prototype equivalent to the new package.
Switch all custom implementions of {Enum,Message}Type to the new package.
Change-Id: Ia9dae6fed4f2b90e55c123627044a7faf098c4b1
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/178438
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/internal/legacy/message.go b/internal/legacy/message.go
index 9919cdb..b17d705 100644
--- a/internal/legacy/message.go
+++ b/internal/legacy/message.go
@@ -15,6 +15,7 @@
pimpl "google.golang.org/protobuf/internal/impl"
ptype "google.golang.org/protobuf/internal/prototype"
pref "google.golang.org/protobuf/reflect/protoreflect"
+ "google.golang.org/protobuf/reflect/prototype"
)
// wrapMessage wraps v as a protoreflect.ProtoMessage,
@@ -38,10 +39,12 @@
md := LoadMessageDesc(t)
mt := new(pimpl.MessageInfo)
mt.GoType = t
- mt.PBType = ptype.GoMessage(md, func(pref.MessageType) pref.Message {
- p := reflect.New(t.Elem()).Interface()
- return mt.MessageOf(p)
- })
+ mt.PBType = &prototype.Message{
+ MessageDescriptor: md,
+ NewMessage: func() pref.Message {
+ return mt.MessageOf(reflect.New(t.Elem()).Interface())
+ },
+ }
if mt, ok := messageTypeCache.LoadOrStore(t, mt); ok {
return mt.(*pimpl.MessageInfo)
}