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())
