all: remove NewMessage methods

Superseded by New{Field,Element,Value}.

Change-Id: Iad09f3b0c6bac7b75cf28925eef2982d45267317
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/193598
Reviewed-by: Joe Tsai <joetsai@google.com>
diff --git a/internal/cmd/generate-types/impl.go b/internal/cmd/generate-types/impl.go
index cc05e0f..df19b19 100644
--- a/internal/cmd/generate-types/impl.go
+++ b/internal/cmd/generate-types/impl.go
@@ -707,9 +707,6 @@
 		return m.messageInfo().extensionMap(m.pointer()).Mutable(xt)
 	}
 }
-func (m *{{.}}) NewMessage(fd protoreflect.FieldDescriptor) protoreflect.Message {
-	return m.NewField(fd).Message()
-}
 func (m *{{.}}) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value {
 	m.messageInfo().init()
 	if fi, xt := m.messageInfo().checkField(fd); fi != nil {
diff --git a/internal/impl/convert_list.go b/internal/impl/convert_list.go
index cd632cd..222f1a4 100644
--- a/internal/impl/convert_list.go
+++ b/internal/impl/convert_list.go
@@ -122,9 +122,6 @@
 func (ls *listReflect) Truncate(i int) {
 	ls.v.Elem().Set(ls.v.Elem().Slice(0, i))
 }
-func (ls *listReflect) NewMessage() pref.Message {
-	return ls.NewElement().Message()
-}
 func (ls *listReflect) NewElement() pref.Value {
 	return ls.conv.New()
 }
diff --git a/internal/impl/convert_map.go b/internal/impl/convert_map.go
index 68fb506..47b5f22 100644
--- a/internal/impl/convert_map.go
+++ b/internal/impl/convert_map.go
@@ -99,9 +99,6 @@
 		}
 	}
 }
-func (ms *mapReflect) NewMessage() pref.Message {
-	return ms.NewValue().Message()
-}
 func (ms *mapReflect) NewValue() pref.Value {
 	return ms.valConv.New()
 }
diff --git a/internal/impl/message_reflect_gen.go b/internal/impl/message_reflect_gen.go
index 9968277..574fb4f 100644
--- a/internal/impl/message_reflect_gen.go
+++ b/internal/impl/message_reflect_gen.go
@@ -91,9 +91,6 @@
 		return m.messageInfo().extensionMap(m.pointer()).Mutable(xt)
 	}
 }
-func (m *messageState) NewMessage(fd protoreflect.FieldDescriptor) protoreflect.Message {
-	return m.NewField(fd).Message()
-}
 func (m *messageState) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value {
 	m.messageInfo().init()
 	if fi, xt := m.messageInfo().checkField(fd); fi != nil {
@@ -201,9 +198,6 @@
 		return m.messageInfo().extensionMap(m.pointer()).Mutable(xt)
 	}
 }
-func (m *messageReflectWrapper) NewMessage(fd protoreflect.FieldDescriptor) protoreflect.Message {
-	return m.NewField(fd).Message()
-}
 func (m *messageReflectWrapper) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value {
 	m.messageInfo().init()
 	if fi, xt := m.messageInfo().checkField(fd); fi != nil {
diff --git a/internal/testprotos/irregular/irregular.go b/internal/testprotos/irregular/irregular.go
index 8127f0b..be89d01 100644
--- a/internal/testprotos/irregular/irregular.go
+++ b/internal/testprotos/irregular/irregular.go
@@ -74,10 +74,6 @@
 	panic("invalid field descriptor")
 }
 
-func (m *message) NewMessage(pref.FieldDescriptor) pref.Message {
-	panic("invalid field descriptor")
-}
-
 func (m *message) NewField(pref.FieldDescriptor) pref.Value {
 	panic("invalid field descriptor")
 }
diff --git a/reflect/protoreflect/value.go b/reflect/protoreflect/value.go
index ec10099..1f100ac 100644
--- a/reflect/protoreflect/value.go
+++ b/reflect/protoreflect/value.go
@@ -116,13 +116,6 @@
 	// Mutable is a mutating operation and unsafe for concurrent use.
 	Mutable(FieldDescriptor) Value
 
-	// NewMessage returns a newly allocated empty message assignable to
-	// the field of the given descriptor.
-	// It panics if the field is not a singular message.
-	//
-	// Deprecated: Use NewField instead.
-	NewMessage(FieldDescriptor) Message
-
 	// NewField returns a new value for assignable to the field of a given descriptor.
 	// For scalars, this returns the default value.
 	// For lists, maps, and messages, this returns a new, empty, mutable value.
@@ -202,12 +195,6 @@
 	// Truncate is a mutating operation and unsafe for concurrent use.
 	Truncate(int)
 
-	// NewMessage returns a newly allocated empty message assignable as a list entry.
-	// It panics if the list entry type is not a message.
-	//
-	// Deprecated: Use NewElement instead.
-	NewMessage() Message
-
 	// NewElement returns a new value for a list element.
 	// For enums, this returns the first enum value.
 	// For other scalars, this returns the zero value.
@@ -253,12 +240,6 @@
 
 	// TODO: Should there be a Mutable method?
 
-	// NewMessage returns a newly allocated empty message assignable as a map value.
-	// It panics if the map value type is not a message.
-	//
-	// Deprecated: Use NewValue instead.
-	NewMessage() Message
-
 	// NewValue returns a new value assignable as a map value.
 	// For enums, this returns the first enum value.
 	// For other scalars, this returns the zero value.
diff --git a/testing/prototest/prototest.go b/testing/prototest/prototest.go
index 20d20c9..0aad3f0 100644
--- a/testing/prototest/prototest.go
+++ b/testing/prototest/prototest.go
@@ -273,7 +273,6 @@
 func (m testMap) Has(k pref.MapKey) bool          { return m.Get(k).IsValid() }
 func (m testMap) Clear(k pref.MapKey)             { delete(m, k.Interface()) }
 func (m testMap) Len() int                        { return len(m) }
-func (m testMap) NewMessage() pref.Message        { panic("unimplemented") }
 func (m testMap) NewValue() pref.Value            { panic("unimplemented") }
 func (m testMap) Range(f func(pref.MapKey, pref.Value) bool) {
 	for k, v := range m {
@@ -341,13 +340,12 @@
 	a []pref.Value
 }
 
-func (l *testList) Append(v pref.Value)      { l.a = append(l.a, v) }
-func (l *testList) Get(n int) pref.Value     { return l.a[n] }
-func (l *testList) Len() int                 { return len(l.a) }
-func (l *testList) Set(n int, v pref.Value)  { l.a[n] = v }
-func (l *testList) Truncate(n int)           { l.a = l.a[:n] }
-func (l *testList) NewMessage() pref.Message { panic("unimplemented") }
-func (l *testList) NewElement() pref.Value   { panic("unimplemented") }
+func (l *testList) Append(v pref.Value)     { l.a = append(l.a, v) }
+func (l *testList) Get(n int) pref.Value    { return l.a[n] }
+func (l *testList) Len() int                { return len(l.a) }
+func (l *testList) Set(n int, v pref.Value) { l.a[n] = v }
+func (l *testList) Truncate(n int)          { l.a = l.a[:n] }
+func (l *testList) NewElement() pref.Value  { panic("unimplemented") }
 
 // testFieldFloat exercises some interesting floating-point scalar field values.
 func testFieldFloat(t testing.TB, m pref.Message, fd pref.FieldDescriptor) {
diff --git a/types/dynamicpb/dynamic.go b/types/dynamicpb/dynamic.go
index bf609bf..4327879 100644
--- a/types/dynamicpb/dynamic.go
+++ b/types/dynamicpb/dynamic.go
@@ -206,17 +206,6 @@
 	}
 }
 
-// NewMessage returns a newly-allocated message assignable to a field.
-// See protoreflect.Message for details.
-func (m *Message) NewMessage(fd pref.FieldDescriptor) pref.Message {
-	m.checkField(fd)
-	md := fd.Message()
-	if fd.Cardinality() == pref.Repeated || md == nil {
-		panic(errors.New("%v: field is not of non-repeated message type", fd.FullName()))
-	}
-	return NewMessage(md).ProtoReflect()
-}
-
 // NewField returns a new value for assignable to the field of a given descriptor.
 // See protoreflect.Message for details.
 func (m *Message) NewField(fd pref.FieldDescriptor) pref.Value {
@@ -308,13 +297,6 @@
 func (x emptyList) Set(n int, v pref.Value) { panic(errors.New("modification of immutable list")) }
 func (x emptyList) Append(v pref.Value)     { panic(errors.New("modification of immutable list")) }
 func (x emptyList) Truncate(n int)          { panic(errors.New("modification of immutable list")) }
-func (x emptyList) NewMessage() pref.Message {
-	md := x.desc.Message()
-	if md == nil {
-		panic(errors.New("list is not of message type"))
-	}
-	return NewMessage(md).ProtoReflect()
-}
 func (x emptyList) NewElement() pref.Value {
 	return newListEntry(x.desc)
 }
@@ -350,14 +332,6 @@
 	x.list = x.list[:n]
 }
 
-func (x *dynamicList) NewMessage() pref.Message {
-	md := x.desc.Message()
-	if md == nil {
-		panic(errors.New("list is not of message type"))
-	}
-	return NewMessage(md).ProtoReflect()
-}
-
 func (x *dynamicList) NewElement() pref.Value {
 	return newListEntry(x.desc)
 }
@@ -376,13 +350,6 @@
 func (x *dynamicMap) Has(k pref.MapKey) bool { return x.Get(k).IsValid() }
 func (x *dynamicMap) Clear(k pref.MapKey)    { delete(x.mapv, k.Interface()) }
 func (x *dynamicMap) Len() int               { return len(x.mapv) }
-func (x *dynamicMap) NewMessage() pref.Message {
-	md := x.desc.MapValue().Message()
-	if md == nil {
-		panic(errors.New("map value is not of message type"))
-	}
-	return NewMessage(md).ProtoReflect()
-}
 func (x *dynamicMap) NewValue() pref.Value {
 	if md := x.desc.MapValue().Message(); md != nil {
 		return pref.ValueOf(NewMessage(md).ProtoReflect())