reflect: switch MessageType.New to return Message
Most usages of New actually prefer to interact with the reflective view
rather than the native Go type. Thus, change New to return that instead.
This parallels reflect.New, which returns the reflective view
(i.e., reflect.Value) instead of native type (i.e., interface{}).
We make the equivalent change to KnownFields.NewMessage, List.NewMessage,
and Map.NewMessage for consistency.
Since this is a subtle change where the type system will not always
catch the changed type, this change was made by both changing the type
and renaming the function to NewXXX and manually looking at every usage
of the the function to ensure that the usage correctly operates
on either the native Go type or the reflective view of the type.
After the entire codebase was cleaned up, a rename was performed to convert
NewXXX back to New.
Change-Id: I153fef627b4bf0a427e4039ce0aaec52e20c7950
Reviewed-on: https://go-review.googlesource.com/c/157077
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/internal/impl/legacy_extension.go b/internal/impl/legacy_extension.go
index f2a5fbd..07fcf20 100644
--- a/internal/impl/legacy_extension.go
+++ b/internal/impl/legacy_extension.go
@@ -127,13 +127,13 @@
})
}
-func (p legacyExtensionFields) NewMessage(n pref.FieldNumber) pref.ProtoMessage {
+func (p legacyExtensionFields) NewMessage(n pref.FieldNumber) pref.Message {
x := p.x.Get(n)
if x.Desc == nil {
panic("no extension descriptor registered")
}
xt := legacyWrapper.ExtensionTypeFromDesc(x.Desc)
- return xt.ValueOf(xt.New()).Message().Interface()
+ return xt.ValueOf(xt.New()).Message()
}
func (p legacyExtensionFields) ExtensionTypes() pref.ExtensionFieldTypes {
diff --git a/internal/impl/message.go b/internal/impl/message.go
index 3d94a94..cf09dcf 100644
--- a/internal/impl/message.go
+++ b/internal/impl/message.go
@@ -275,9 +275,9 @@
}
fs.extensionFields().Range(f)
}
-func (fs *knownFields) NewMessage(n pref.FieldNumber) pref.ProtoMessage {
+func (fs *knownFields) NewMessage(n pref.FieldNumber) pref.Message {
if fi := fs.mi.fields[n]; fi != nil {
- return fi.newMessage().Interface()
+ return fi.newMessage()
}
if fs.mi.Type.ExtensionRanges().Has(n) {
return fs.extensionFields().NewMessage(n)
@@ -307,7 +307,7 @@
func (emptyExtensionFields) Set(pref.FieldNumber, pref.Value) { panic("extensions not supported") }
func (emptyExtensionFields) Clear(pref.FieldNumber) { return } // noop
func (emptyExtensionFields) Range(func(pref.FieldNumber, pref.Value) bool) { return }
-func (emptyExtensionFields) NewMessage(pref.FieldNumber) pref.ProtoMessage {
+func (emptyExtensionFields) NewMessage(pref.FieldNumber) pref.Message {
panic("extensions not supported")
}
func (emptyExtensionFields) ExtensionTypes() pref.ExtensionFieldTypes { return emptyExtensionTypes{} }
diff --git a/internal/impl/message_field.go b/internal/impl/message_field.go
index 06e571e..0ef8b12 100644
--- a/internal/impl/message_field.go
+++ b/internal/impl/message_field.go
@@ -88,7 +88,7 @@
},
newMessage: func() pref.Message {
// This is only valid for messages and panics for other kinds.
- return conv.MessageType.New().ProtoReflect()
+ return conv.MessageType.New()
},
}
}
@@ -274,7 +274,7 @@
rv.Set(reflect.Zero(rv.Type()))
},
newMessage: func() pref.Message {
- return conv.MessageType.New().ProtoReflect()
+ return conv.MessageType.New()
},
}
}
diff --git a/internal/impl/message_test.go b/internal/impl/message_test.go
index b98fe65..fc2ef8f 100644
--- a/internal/impl/message_test.go
+++ b/internal/impl/message_test.go
@@ -219,7 +219,7 @@
{Name: "f22", Number: 22, Cardinality: pref.Optional, Kind: pref.BytesKind, Default: V([]byte("22"))},
},
}),
- func(pref.MessageType) pref.ProtoMessage {
+ func(pref.MessageType) pref.Message {
return new(ScalarProto2)
},
)}
@@ -325,7 +325,7 @@
{Name: "f22", Number: 22, Cardinality: pref.Optional, Kind: pref.BytesKind},
},
}),
- func(pref.MessageType) pref.ProtoMessage {
+ func(pref.MessageType) pref.Message {
return new(ScalarProto3)
},
)}
@@ -442,7 +442,7 @@
{Name: "f19", Number: 19, Cardinality: pref.Repeated, Kind: pref.BytesKind},
},
}),
- func(pref.MessageType) pref.ProtoMessage {
+ func(pref.MessageType) pref.Message {
return new(ListScalars)
},
)}
@@ -633,7 +633,7 @@
mustMakeMapEntry(25, pref.StringKind, pref.BytesKind),
},
}),
- func(pref.MessageType) pref.ProtoMessage {
+ func(pref.MessageType) pref.Message {
return new(MapScalars)
},
)}
@@ -791,7 +791,7 @@
},
Oneofs: []ptype.Oneof{{Name: "union"}},
}),
- func(pref.MessageType) pref.ProtoMessage {
+ func(pref.MessageType) pref.Message {
return new(OneofScalars)
},
)}
@@ -994,7 +994,7 @@
},
Oneofs: []ptype.Oneof{{Name: "union"}},
}),
- func(pref.MessageType) pref.ProtoMessage {
+ func(pref.MessageType) pref.Message {
return new(EnumMessages)
},
)}
@@ -1283,7 +1283,7 @@
v.Append(e)
}
case appendMessageList:
- m := v.NewMessage().ProtoReflect()
+ m := v.NewMessage()
v.Append(V(m))
testMessage(t, p, m, messageOps(op))
case truncList: