internal/filedesc, internal/filetype: initial commit

The internal/fileinit package is split apart into two packages:
* internal/filedesc constructs descriptors from the raw proto.
It is very similar to the previous internal/fileinit package.
* internal/filetype wraps descriptors with Go type information

Overview:
* The internal/fileinit package will be deleted in a future CL.
It is kept around since the v1 repo currently depends on it.
* The internal/prototype package is deleted. All former usages of it
are now using internal/filedesc instead. Most significantly,
the reflect/protodesc package was almost entirely re-written.
* The internal/impl package drops support for messages that do not
have a Descriptor method (pre-2016). This removes a significant amount
of technical debt.
filedesc.Builder to parse raw descriptors.
* The internal/encoding/defval package now handles enum values by name.

Change-Id: I3957bcc8588a70470fd6c7de1122216b80615ab7
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/182360
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/internal/testprotos/conformance/conformance.pb.go b/internal/testprotos/conformance/conformance.pb.go
index b2e21e2..ccdb64c 100644
--- a/internal/testprotos/conformance/conformance.pb.go
+++ b/internal/testprotos/conformance/conformance.pb.go
@@ -5,7 +5,7 @@
 
 import (
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-	protoregistry "google.golang.org/protobuf/reflect/protoregistry"
+	prototype "google.golang.org/protobuf/reflect/prototype"
 	protoiface "google.golang.org/protobuf/runtime/protoiface"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
 	sync "sync"
@@ -57,7 +57,7 @@
 }
 
 func (WireFormat) Descriptor() protoreflect.EnumDescriptor {
-	return file_conformance_conformance_proto_enumTypes[0].Descriptor()
+	return file_conformance_conformance_proto_enumTypes[0].EnumDescriptor
 }
 
 func (x WireFormat) Number() protoreflect.EnumNumber {
@@ -119,7 +119,7 @@
 }
 
 func (TestCategory) Descriptor() protoreflect.EnumDescriptor {
-	return file_conformance_conformance_proto_enumTypes[1].Descriptor()
+	return file_conformance_conformance_proto_enumTypes[1].EnumDescriptor
 }
 
 func (x TestCategory) Number() protoreflect.EnumNumber {
@@ -661,7 +661,7 @@
 	return file_conformance_conformance_proto_rawDescData
 }
 
-var file_conformance_conformance_proto_enumTypes = make([]protoreflect.EnumType, 2)
+var file_conformance_conformance_proto_enumTypes = make([]prototype.Enum, 2)
 var file_conformance_conformance_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
 var file_conformance_conformance_proto_goTypes = []interface{}{
 	(WireFormat)(0),             // 0: conformance.WireFormat
@@ -675,6 +675,11 @@
 	0, // conformance.ConformanceRequest.requested_output_format:type_name -> conformance.WireFormat
 	1, // conformance.ConformanceRequest.test_category:type_name -> conformance.TestCategory
 	5, // conformance.ConformanceRequest.jspb_encoding_options:type_name -> conformance.JspbEncodingConfig
+	3, // starting offset of method output_type sub-list
+	3, // starting offset of method input_type sub-list
+	3, // starting offset of extension type_name sub-list
+	3, // starting offset of extension extendee sub-list
+	0, // starting offset of field type_name sub-list
 }
 
 func init() { file_conformance_conformance_proto_init() }
@@ -682,15 +687,20 @@
 	if File_conformance_conformance_proto != nil {
 		return
 	}
-	File_conformance_conformance_proto = protoimpl.FileBuilder{
-		RawDescriptor:      file_conformance_conformance_proto_rawDesc,
-		GoTypes:            file_conformance_conformance_proto_goTypes,
-		DependencyIndexes:  file_conformance_conformance_proto_depIdxs,
-		EnumOutputTypes:    file_conformance_conformance_proto_enumTypes,
-		MessageOutputTypes: file_conformance_conformance_proto_msgTypes,
-		FilesRegistry:      protoregistry.GlobalFiles,
-		TypesRegistry:      protoregistry.GlobalTypes,
-	}.Init()
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			RawDescriptor: file_conformance_conformance_proto_rawDesc,
+			NumEnums:      2,
+			NumMessages:   4,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_conformance_conformance_proto_goTypes,
+		DependencyIndexes: file_conformance_conformance_proto_depIdxs,
+		MessageInfos:      file_conformance_conformance_proto_msgTypes,
+	}.Build()
+	File_conformance_conformance_proto = out.File
+	file_conformance_conformance_proto_enumTypes = out.Enums
 	file_conformance_conformance_proto_rawDesc = nil
 	file_conformance_conformance_proto_goTypes = nil
 	file_conformance_conformance_proto_depIdxs = nil
diff --git a/internal/testprotos/conformance/test_messages_proto2.pb.go b/internal/testprotos/conformance/test_messages_proto2.pb.go
index 50f5d17..df72bef 100644
--- a/internal/testprotos/conformance/test_messages_proto2.pb.go
+++ b/internal/testprotos/conformance/test_messages_proto2.pb.go
@@ -5,7 +5,7 @@
 
 import (
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-	protoregistry "google.golang.org/protobuf/reflect/protoregistry"
+	prototype "google.golang.org/protobuf/reflect/prototype"
 	protoiface "google.golang.org/protobuf/runtime/protoiface"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
 	sync "sync"
@@ -51,7 +51,7 @@
 }
 
 func (ForeignEnumProto2) Descriptor() protoreflect.EnumDescriptor {
-	return file_google_protobuf_test_messages_proto2_proto_enumTypes[0].Descriptor()
+	return file_google_protobuf_test_messages_proto2_proto_enumTypes[0].EnumDescriptor
 }
 
 func (x ForeignEnumProto2) Number() protoreflect.EnumNumber {
@@ -109,7 +109,7 @@
 }
 
 func (TestAllTypesProto2_NestedEnum) Descriptor() protoreflect.EnumDescriptor {
-	return file_google_protobuf_test_messages_proto2_proto_enumTypes[1].Descriptor()
+	return file_google_protobuf_test_messages_proto2_proto_enumTypes[1].EnumDescriptor
 }
 
 func (x TestAllTypesProto2_NestedEnum) Number() protoreflect.EnumNumber {
@@ -1820,7 +1820,7 @@
 	return file_google_protobuf_test_messages_proto2_proto_rawDescData
 }
 
-var file_google_protobuf_test_messages_proto2_proto_enumTypes = make([]protoreflect.EnumType, 2)
+var file_google_protobuf_test_messages_proto2_proto_enumTypes = make([]prototype.Enum, 2)
 var file_google_protobuf_test_messages_proto2_proto_msgTypes = make([]protoimpl.MessageInfo, 26)
 var file_google_protobuf_test_messages_proto2_proto_goTypes = []interface{}{
 	(ForeignEnumProto2)(0),                   // 0: protobuf_test_messages.proto2.ForeignEnumProto2
@@ -1853,9 +1853,6 @@
 	(*TestAllTypesProto2_MessageSetCorrectExtension2)(nil), // 27: protobuf_test_messages.proto2.TestAllTypesProto2.MessageSetCorrectExtension2
 }
 var file_google_protobuf_test_messages_proto2_proto_depIdxs = []int32{
-	2,  // protobuf_test_messages.proto2.extension_int32:extendee -> protobuf_test_messages.proto2.TestAllTypesProto2
-	25, // protobuf_test_messages.proto2.TestAllTypesProto2.MessageSetCorrectExtension1.message_set_extension:extendee -> protobuf_test_messages.proto2.TestAllTypesProto2.MessageSetCorrect
-	25, // protobuf_test_messages.proto2.TestAllTypesProto2.MessageSetCorrectExtension2.message_set_extension:extendee -> protobuf_test_messages.proto2.TestAllTypesProto2.MessageSetCorrect
 	4,  // protobuf_test_messages.proto2.TestAllTypesProto2.optional_nested_message:type_name -> protobuf_test_messages.proto2.TestAllTypesProto2.NestedMessage
 	3,  // protobuf_test_messages.proto2.TestAllTypesProto2.optional_foreign_message:type_name -> protobuf_test_messages.proto2.ForeignMessageProto2
 	1,  // protobuf_test_messages.proto2.TestAllTypesProto2.optional_nested_enum:type_name -> protobuf_test_messages.proto2.TestAllTypesProto2.NestedEnum
@@ -1892,8 +1889,16 @@
 	3,  // protobuf_test_messages.proto2.TestAllTypesProto2.MapStringForeignMessageEntry.value:type_name -> protobuf_test_messages.proto2.ForeignMessageProto2
 	1,  // protobuf_test_messages.proto2.TestAllTypesProto2.MapStringNestedEnumEntry.value:type_name -> protobuf_test_messages.proto2.TestAllTypesProto2.NestedEnum
 	0,  // protobuf_test_messages.proto2.TestAllTypesProto2.MapStringForeignEnumEntry.value:type_name -> protobuf_test_messages.proto2.ForeignEnumProto2
+	2,  // protobuf_test_messages.proto2.extension_int32:extendee -> protobuf_test_messages.proto2.TestAllTypesProto2
+	25, // protobuf_test_messages.proto2.TestAllTypesProto2.MessageSetCorrectExtension1.message_set_extension:extendee -> protobuf_test_messages.proto2.TestAllTypesProto2.MessageSetCorrect
+	25, // protobuf_test_messages.proto2.TestAllTypesProto2.MessageSetCorrectExtension2.message_set_extension:extendee -> protobuf_test_messages.proto2.TestAllTypesProto2.MessageSetCorrect
 	26, // protobuf_test_messages.proto2.TestAllTypesProto2.MessageSetCorrectExtension1.message_set_extension:type_name -> protobuf_test_messages.proto2.TestAllTypesProto2.MessageSetCorrectExtension1
 	27, // protobuf_test_messages.proto2.TestAllTypesProto2.MessageSetCorrectExtension2.message_set_extension:type_name -> protobuf_test_messages.proto2.TestAllTypesProto2.MessageSetCorrectExtension2
+	41, // starting offset of method output_type sub-list
+	41, // starting offset of method input_type sub-list
+	39, // starting offset of extension type_name sub-list
+	36, // starting offset of extension extendee sub-list
+	0,  // starting offset of field type_name sub-list
 }
 
 func init() { file_google_protobuf_test_messages_proto2_proto_init() }
@@ -1901,18 +1906,21 @@
 	if File_google_protobuf_test_messages_proto2_proto != nil {
 		return
 	}
-	extensionTypes := make([]protoreflect.ExtensionType, 3)
-	File_google_protobuf_test_messages_proto2_proto = protoimpl.FileBuilder{
-		RawDescriptor:        file_google_protobuf_test_messages_proto2_proto_rawDesc,
-		GoTypes:              file_google_protobuf_test_messages_proto2_proto_goTypes,
-		DependencyIndexes:    file_google_protobuf_test_messages_proto2_proto_depIdxs,
-		LegacyExtensions:     file_google_protobuf_test_messages_proto2_proto_extDescs,
-		EnumOutputTypes:      file_google_protobuf_test_messages_proto2_proto_enumTypes,
-		MessageOutputTypes:   file_google_protobuf_test_messages_proto2_proto_msgTypes,
-		ExtensionOutputTypes: extensionTypes,
-		FilesRegistry:        protoregistry.GlobalFiles,
-		TypesRegistry:        protoregistry.GlobalTypes,
-	}.Init()
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			RawDescriptor: file_google_protobuf_test_messages_proto2_proto_rawDesc,
+			NumEnums:      2,
+			NumMessages:   26,
+			NumExtensions: 3,
+			NumServices:   0,
+		},
+		GoTypes:           file_google_protobuf_test_messages_proto2_proto_goTypes,
+		DependencyIndexes: file_google_protobuf_test_messages_proto2_proto_depIdxs,
+		MessageInfos:      file_google_protobuf_test_messages_proto2_proto_msgTypes,
+		LegacyExtensions:  file_google_protobuf_test_messages_proto2_proto_extDescs,
+	}.Build()
+	File_google_protobuf_test_messages_proto2_proto = out.File
+	file_google_protobuf_test_messages_proto2_proto_enumTypes = out.Enums
 	file_google_protobuf_test_messages_proto2_proto_rawDesc = nil
 	file_google_protobuf_test_messages_proto2_proto_goTypes = nil
 	file_google_protobuf_test_messages_proto2_proto_depIdxs = nil
diff --git a/internal/testprotos/conformance/test_messages_proto3.pb.go b/internal/testprotos/conformance/test_messages_proto3.pb.go
index 75ffa5b..97e5fef 100644
--- a/internal/testprotos/conformance/test_messages_proto3.pb.go
+++ b/internal/testprotos/conformance/test_messages_proto3.pb.go
@@ -5,7 +5,7 @@
 
 import (
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-	protoregistry "google.golang.org/protobuf/reflect/protoregistry"
+	prototype "google.golang.org/protobuf/reflect/prototype"
 	protoiface "google.golang.org/protobuf/runtime/protoiface"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
 	anypb "google.golang.org/protobuf/types/known/anypb"
@@ -57,7 +57,7 @@
 }
 
 func (ForeignEnum) Descriptor() protoreflect.EnumDescriptor {
-	return file_google_protobuf_test_messages_proto3_proto_enumTypes[0].Descriptor()
+	return file_google_protobuf_test_messages_proto3_proto_enumTypes[0].EnumDescriptor
 }
 
 func (x ForeignEnum) Number() protoreflect.EnumNumber {
@@ -105,7 +105,7 @@
 }
 
 func (TestAllTypesProto3_NestedEnum) Descriptor() protoreflect.EnumDescriptor {
-	return file_google_protobuf_test_messages_proto3_proto_enumTypes[1].Descriptor()
+	return file_google_protobuf_test_messages_proto3_proto_enumTypes[1].EnumDescriptor
 }
 
 func (x TestAllTypesProto3_NestedEnum) Number() protoreflect.EnumNumber {
@@ -159,7 +159,7 @@
 }
 
 func (TestAllTypesProto3_AliasedEnum) Descriptor() protoreflect.EnumDescriptor {
-	return file_google_protobuf_test_messages_proto3_proto_enumTypes[2].Descriptor()
+	return file_google_protobuf_test_messages_proto3_proto_enumTypes[2].EnumDescriptor
 }
 
 func (x TestAllTypesProto3_AliasedEnum) Number() protoreflect.EnumNumber {
@@ -2029,7 +2029,7 @@
 	return file_google_protobuf_test_messages_proto3_proto_rawDescData
 }
 
-var file_google_protobuf_test_messages_proto3_proto_enumTypes = make([]protoreflect.EnumType, 3)
+var file_google_protobuf_test_messages_proto3_proto_enumTypes = make([]prototype.Enum, 3)
 var file_google_protobuf_test_messages_proto3_proto_msgTypes = make([]protoimpl.MessageInfo, 22)
 var file_google_protobuf_test_messages_proto3_proto_goTypes = []interface{}{
 	(ForeignEnum)(0),                         // 0: protobuf_test_messages.proto3.ForeignEnum
@@ -2142,6 +2142,11 @@
 	4,  // protobuf_test_messages.proto3.TestAllTypesProto3.MapStringForeignMessageEntry.value:type_name -> protobuf_test_messages.proto3.ForeignMessage
 	1,  // protobuf_test_messages.proto3.TestAllTypesProto3.MapStringNestedEnumEntry.value:type_name -> protobuf_test_messages.proto3.TestAllTypesProto3.NestedEnum
 	0,  // protobuf_test_messages.proto3.TestAllTypesProto3.MapStringForeignEnumEntry.value:type_name -> protobuf_test_messages.proto3.ForeignEnum
+	67, // starting offset of method output_type sub-list
+	67, // starting offset of method input_type sub-list
+	67, // starting offset of extension type_name sub-list
+	67, // starting offset of extension extendee sub-list
+	0,  // starting offset of field type_name sub-list
 }
 
 func init() { file_google_protobuf_test_messages_proto3_proto_init() }
@@ -2149,15 +2154,20 @@
 	if File_google_protobuf_test_messages_proto3_proto != nil {
 		return
 	}
-	File_google_protobuf_test_messages_proto3_proto = protoimpl.FileBuilder{
-		RawDescriptor:      file_google_protobuf_test_messages_proto3_proto_rawDesc,
-		GoTypes:            file_google_protobuf_test_messages_proto3_proto_goTypes,
-		DependencyIndexes:  file_google_protobuf_test_messages_proto3_proto_depIdxs,
-		EnumOutputTypes:    file_google_protobuf_test_messages_proto3_proto_enumTypes,
-		MessageOutputTypes: file_google_protobuf_test_messages_proto3_proto_msgTypes,
-		FilesRegistry:      protoregistry.GlobalFiles,
-		TypesRegistry:      protoregistry.GlobalTypes,
-	}.Init()
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			RawDescriptor: file_google_protobuf_test_messages_proto3_proto_rawDesc,
+			NumEnums:      3,
+			NumMessages:   22,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_google_protobuf_test_messages_proto3_proto_goTypes,
+		DependencyIndexes: file_google_protobuf_test_messages_proto3_proto_depIdxs,
+		MessageInfos:      file_google_protobuf_test_messages_proto3_proto_msgTypes,
+	}.Build()
+	File_google_protobuf_test_messages_proto3_proto = out.File
+	file_google_protobuf_test_messages_proto3_proto_enumTypes = out.Enums
 	file_google_protobuf_test_messages_proto3_proto_rawDesc = nil
 	file_google_protobuf_test_messages_proto3_proto_goTypes = nil
 	file_google_protobuf_test_messages_proto3_proto_depIdxs = nil
diff --git a/internal/testprotos/irregular/test.pb.go b/internal/testprotos/irregular/test.pb.go
index fa6aafd..93092dc 100644
--- a/internal/testprotos/irregular/test.pb.go
+++ b/internal/testprotos/irregular/test.pb.go
@@ -5,7 +5,6 @@
 
 import (
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-	protoregistry "google.golang.org/protobuf/reflect/protoregistry"
 	protoiface "google.golang.org/protobuf/runtime/protoiface"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
 	sync "sync"
@@ -186,6 +185,11 @@
 	1, // goproto.proto.irregular.Message.map_message:type_name -> goproto.proto.irregular.Message.MapMessageEntry
 	2, // goproto.proto.irregular.Message.oneof_message:type_name -> goproto.proto.irregular.IrregularMessage
 	2, // goproto.proto.irregular.Message.MapMessageEntry.value:type_name -> goproto.proto.irregular.IrregularMessage
+	6, // starting offset of method output_type sub-list
+	6, // starting offset of method input_type sub-list
+	6, // starting offset of extension type_name sub-list
+	6, // starting offset of extension extendee sub-list
+	0, // starting offset of field type_name sub-list
 }
 
 func init() { file_irregular_test_proto_init() }
@@ -194,14 +198,19 @@
 		return
 	}
 	file_irregular_irregular_proto_init()
-	File_irregular_test_proto = protoimpl.FileBuilder{
-		RawDescriptor:      file_irregular_test_proto_rawDesc,
-		GoTypes:            file_irregular_test_proto_goTypes,
-		DependencyIndexes:  file_irregular_test_proto_depIdxs,
-		MessageOutputTypes: file_irregular_test_proto_msgTypes,
-		FilesRegistry:      protoregistry.GlobalFiles,
-		TypesRegistry:      protoregistry.GlobalTypes,
-	}.Init()
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			RawDescriptor: file_irregular_test_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   2,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_irregular_test_proto_goTypes,
+		DependencyIndexes: file_irregular_test_proto_depIdxs,
+		MessageInfos:      file_irregular_test_proto_msgTypes,
+	}.Build()
+	File_irregular_test_proto = out.File
 	file_irregular_test_proto_rawDesc = nil
 	file_irregular_test_proto_goTypes = nil
 	file_irregular_test_proto_depIdxs = nil
diff --git a/internal/testprotos/legacy/legacy.pb.go b/internal/testprotos/legacy/legacy.pb.go
index f867906..86793a1 100644
--- a/internal/testprotos/legacy/legacy.pb.go
+++ b/internal/testprotos/legacy/legacy.pb.go
@@ -17,7 +17,6 @@
 	proto3_v1_2 "google.golang.org/protobuf/internal/testprotos/legacy/proto3.v1.2.0-20180814-aa810b61"
 	proto3_v1_21 "google.golang.org/protobuf/internal/testprotos/legacy/proto3.v1.2.1-20181126-8d0c54c1"
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-	protoregistry "google.golang.org/protobuf/reflect/protoregistry"
 	protoiface "google.golang.org/protobuf/runtime/protoiface"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
 	sync "sync"
@@ -292,6 +291,11 @@
 	10, // google.golang.org.Legacy.f10:type_name -> google.golang.org.proto3_20180814.Message
 	11, // google.golang.org.Legacy.f11:type_name -> google.golang.org.proto2_20181126.Message
 	12, // google.golang.org.Legacy.f12:type_name -> google.golang.org.proto3_20181126.Message
+	12, // starting offset of method output_type sub-list
+	12, // starting offset of method input_type sub-list
+	12, // starting offset of extension type_name sub-list
+	12, // starting offset of extension extendee sub-list
+	0,  // starting offset of field type_name sub-list
 }
 
 func init() { file_legacy_legacy_proto_init() }
@@ -299,14 +303,19 @@
 	if File_legacy_legacy_proto != nil {
 		return
 	}
-	File_legacy_legacy_proto = protoimpl.FileBuilder{
-		RawDescriptor:      file_legacy_legacy_proto_rawDesc,
-		GoTypes:            file_legacy_legacy_proto_goTypes,
-		DependencyIndexes:  file_legacy_legacy_proto_depIdxs,
-		MessageOutputTypes: file_legacy_legacy_proto_msgTypes,
-		FilesRegistry:      protoregistry.GlobalFiles,
-		TypesRegistry:      protoregistry.GlobalTypes,
-	}.Init()
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			RawDescriptor: file_legacy_legacy_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   1,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_legacy_legacy_proto_goTypes,
+		DependencyIndexes: file_legacy_legacy_proto_depIdxs,
+		MessageInfos:      file_legacy_legacy_proto_msgTypes,
+	}.Build()
+	File_legacy_legacy_proto = out.File
 	file_legacy_legacy_proto_rawDesc = nil
 	file_legacy_legacy_proto_goTypes = nil
 	file_legacy_legacy_proto_depIdxs = nil
diff --git a/internal/testprotos/test/ext.pb.go b/internal/testprotos/test/ext.pb.go
index 58cb656..7a3363c 100644
--- a/internal/testprotos/test/ext.pb.go
+++ b/internal/testprotos/test/ext.pb.go
@@ -5,7 +5,6 @@
 
 import (
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-	protoregistry "google.golang.org/protobuf/reflect/protoregistry"
 	protoiface "google.golang.org/protobuf/runtime/protoiface"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
 	sync "sync"
@@ -67,6 +66,11 @@
 }
 var file_test_ext_proto_depIdxs = []int32{
 	0, // goproto.proto.test.foreign_int32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	1, // starting offset of method output_type sub-list
+	1, // starting offset of method input_type sub-list
+	1, // starting offset of extension type_name sub-list
+	0, // starting offset of extension extendee sub-list
+	0, // starting offset of field type_name sub-list
 }
 
 func init() { file_test_ext_proto_init() }
@@ -75,16 +79,19 @@
 		return
 	}
 	file_test_test_proto_init()
-	extensionTypes := make([]protoreflect.ExtensionType, 1)
-	File_test_ext_proto = protoimpl.FileBuilder{
-		RawDescriptor:        file_test_ext_proto_rawDesc,
-		GoTypes:              file_test_ext_proto_goTypes,
-		DependencyIndexes:    file_test_ext_proto_depIdxs,
-		LegacyExtensions:     file_test_ext_proto_extDescs,
-		ExtensionOutputTypes: extensionTypes,
-		FilesRegistry:        protoregistry.GlobalFiles,
-		TypesRegistry:        protoregistry.GlobalTypes,
-	}.Init()
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			RawDescriptor: file_test_ext_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   0,
+			NumExtensions: 1,
+			NumServices:   0,
+		},
+		GoTypes:           file_test_ext_proto_goTypes,
+		DependencyIndexes: file_test_ext_proto_depIdxs,
+		LegacyExtensions:  file_test_ext_proto_extDescs,
+	}.Build()
+	File_test_ext_proto = out.File
 	file_test_ext_proto_rawDesc = nil
 	file_test_ext_proto_goTypes = nil
 	file_test_ext_proto_depIdxs = nil
diff --git a/internal/testprotos/test/test.pb.go b/internal/testprotos/test/test.pb.go
index 225870f..809a20c 100644
--- a/internal/testprotos/test/test.pb.go
+++ b/internal/testprotos/test/test.pb.go
@@ -6,7 +6,7 @@
 import (
 	weak "google.golang.org/protobuf/internal/testprotos/test/weak"
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-	protoregistry "google.golang.org/protobuf/reflect/protoregistry"
+	prototype "google.golang.org/protobuf/reflect/prototype"
 	protoiface "google.golang.org/protobuf/runtime/protoiface"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
 	sync "sync"
@@ -52,7 +52,7 @@
 }
 
 func (ForeignEnum) Descriptor() protoreflect.EnumDescriptor {
-	return file_test_test_proto_enumTypes[0].Descriptor()
+	return file_test_test_proto_enumTypes[0].EnumDescriptor
 }
 
 func (x ForeignEnum) Number() protoreflect.EnumNumber {
@@ -101,7 +101,7 @@
 }
 
 func (TestReservedEnumFields) Descriptor() protoreflect.EnumDescriptor {
-	return file_test_test_proto_enumTypes[1].Descriptor()
+	return file_test_test_proto_enumTypes[1].EnumDescriptor
 }
 
 func (x TestReservedEnumFields) Number() protoreflect.EnumNumber {
@@ -159,7 +159,7 @@
 }
 
 func (TestAllTypes_NestedEnum) Descriptor() protoreflect.EnumDescriptor {
-	return file_test_test_proto_enumTypes[2].Descriptor()
+	return file_test_test_proto_enumTypes[2].EnumDescriptor
 }
 
 func (x TestAllTypes_NestedEnum) Number() protoreflect.EnumNumber {
@@ -207,7 +207,7 @@
 }
 
 func (TestDeprecatedMessage_DeprecatedEnum) Descriptor() protoreflect.EnumDescriptor {
-	return file_test_test_proto_enumTypes[3].Descriptor()
+	return file_test_test_proto_enumTypes[3].EnumDescriptor
 }
 
 func (x TestDeprecatedMessage_DeprecatedEnum) Number() protoreflect.EnumNumber {
@@ -3298,7 +3298,7 @@
 	return file_test_test_proto_rawDescData
 }
 
-var file_test_test_proto_enumTypes = make([]protoreflect.EnumType, 4)
+var file_test_test_proto_enumTypes = make([]prototype.Enum, 4)
 var file_test_test_proto_msgTypes = make([]protoimpl.MessageInfo, 37)
 var file_test_test_proto_goTypes = []interface{}{
 	(ForeignEnum)(0),                          // 0: goproto.proto.test.ForeignEnum
@@ -3346,118 +3346,123 @@
 	(ImportEnum)(0),                               // 42: goproto.proto.test.ImportEnum
 }
 var file_test_test_proto_depIdxs = []int32{
-	8,  // goproto.proto.test.optional_int32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.optional_int64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.optional_uint32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.optional_uint64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.optional_sint32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.optional_sint64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.optional_fixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.optional_fixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.optional_sfixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.optional_sfixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.optional_float_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.optional_double_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.optional_bool_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.optional_string_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.optional_bytes_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.optionalgroup_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.optional_nested_message_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.optional_nested_enum_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.repeated_int32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.repeated_int64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.repeated_uint32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.repeated_uint64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.repeated_sint32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.repeated_sint64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.repeated_fixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.repeated_fixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.repeated_sfixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.repeated_sfixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.repeated_float_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.repeated_double_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.repeated_bool_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.repeated_string_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.repeated_bytes_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.repeatedgroup_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.repeated_nested_message_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.repeated_nested_enum_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.default_int32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.default_int64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.default_uint32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.default_uint64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.default_sint32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.default_sint64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.default_fixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.default_fixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.default_sfixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.default_sfixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.default_float_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.default_double_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.default_bool_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.default_string_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.default_bytes_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.TestNestedExtension.nested_string_extension:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.TestRequired.single:extendee -> goproto.proto.test.TestAllExtensions
-	8,  // goproto.proto.test.TestRequired.multi:extendee -> goproto.proto.test.TestAllExtensions
-	19, // goproto.proto.test.TestAllTypes.optionalgroup:type_name -> goproto.proto.test.TestAllTypes.OptionalGroup
-	18, // goproto.proto.test.TestAllTypes.optional_nested_message:type_name -> goproto.proto.test.TestAllTypes.NestedMessage
-	6,  // goproto.proto.test.TestAllTypes.optional_foreign_message:type_name -> goproto.proto.test.ForeignMessage
-	41, // goproto.proto.test.TestAllTypes.optional_import_message:type_name -> goproto.proto.test.ImportMessage
-	2,  // goproto.proto.test.TestAllTypes.optional_nested_enum:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
-	0,  // goproto.proto.test.TestAllTypes.optional_foreign_enum:type_name -> goproto.proto.test.ForeignEnum
-	42, // goproto.proto.test.TestAllTypes.optional_import_enum:type_name -> goproto.proto.test.ImportEnum
-	20, // goproto.proto.test.TestAllTypes.repeatedgroup:type_name -> goproto.proto.test.TestAllTypes.RepeatedGroup
-	18, // goproto.proto.test.TestAllTypes.repeated_nested_message:type_name -> goproto.proto.test.TestAllTypes.NestedMessage
-	6,  // goproto.proto.test.TestAllTypes.repeated_foreign_message:type_name -> goproto.proto.test.ForeignMessage
-	41, // goproto.proto.test.TestAllTypes.repeated_importmessage:type_name -> goproto.proto.test.ImportMessage
-	2,  // goproto.proto.test.TestAllTypes.repeated_nested_enum:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
-	0,  // goproto.proto.test.TestAllTypes.repeated_foreign_enum:type_name -> goproto.proto.test.ForeignEnum
-	42, // goproto.proto.test.TestAllTypes.repeated_importenum:type_name -> goproto.proto.test.ImportEnum
-	21, // goproto.proto.test.TestAllTypes.map_int32_int32:type_name -> goproto.proto.test.TestAllTypes.MapInt32Int32Entry
-	22, // goproto.proto.test.TestAllTypes.map_int64_int64:type_name -> goproto.proto.test.TestAllTypes.MapInt64Int64Entry
-	23, // goproto.proto.test.TestAllTypes.map_uint32_uint32:type_name -> goproto.proto.test.TestAllTypes.MapUint32Uint32Entry
-	24, // goproto.proto.test.TestAllTypes.map_uint64_uint64:type_name -> goproto.proto.test.TestAllTypes.MapUint64Uint64Entry
-	25, // goproto.proto.test.TestAllTypes.map_sint32_sint32:type_name -> goproto.proto.test.TestAllTypes.MapSint32Sint32Entry
-	26, // goproto.proto.test.TestAllTypes.map_sint64_sint64:type_name -> goproto.proto.test.TestAllTypes.MapSint64Sint64Entry
-	27, // goproto.proto.test.TestAllTypes.map_fixed32_fixed32:type_name -> goproto.proto.test.TestAllTypes.MapFixed32Fixed32Entry
-	28, // goproto.proto.test.TestAllTypes.map_fixed64_fixed64:type_name -> goproto.proto.test.TestAllTypes.MapFixed64Fixed64Entry
-	29, // goproto.proto.test.TestAllTypes.map_sfixed32_sfixed32:type_name -> goproto.proto.test.TestAllTypes.MapSfixed32Sfixed32Entry
-	30, // goproto.proto.test.TestAllTypes.map_sfixed64_sfixed64:type_name -> goproto.proto.test.TestAllTypes.MapSfixed64Sfixed64Entry
-	31, // goproto.proto.test.TestAllTypes.map_int32_float:type_name -> goproto.proto.test.TestAllTypes.MapInt32FloatEntry
-	32, // goproto.proto.test.TestAllTypes.map_int32_double:type_name -> goproto.proto.test.TestAllTypes.MapInt32DoubleEntry
-	33, // goproto.proto.test.TestAllTypes.map_bool_bool:type_name -> goproto.proto.test.TestAllTypes.MapBoolBoolEntry
-	34, // goproto.proto.test.TestAllTypes.map_string_string:type_name -> goproto.proto.test.TestAllTypes.MapStringStringEntry
-	35, // goproto.proto.test.TestAllTypes.map_string_bytes:type_name -> goproto.proto.test.TestAllTypes.MapStringBytesEntry
-	36, // goproto.proto.test.TestAllTypes.map_string_nested_message:type_name -> goproto.proto.test.TestAllTypes.MapStringNestedMessageEntry
-	37, // goproto.proto.test.TestAllTypes.map_string_nested_enum:type_name -> goproto.proto.test.TestAllTypes.MapStringNestedEnumEntry
-	2,  // goproto.proto.test.TestAllTypes.default_nested_enum:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
-	0,  // goproto.proto.test.TestAllTypes.default_foreign_enum:type_name -> goproto.proto.test.ForeignEnum
-	18, // goproto.proto.test.TestAllTypes.oneof_nested_message:type_name -> goproto.proto.test.TestAllTypes.NestedMessage
-	2,  // goproto.proto.test.TestAllTypes.oneof_enum:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
-	12, // goproto.proto.test.TestRequiredForeign.optional_message:type_name -> goproto.proto.test.TestRequired
-	12, // goproto.proto.test.TestRequiredForeign.repeated_message:type_name -> goproto.proto.test.TestRequired
-	38, // goproto.proto.test.TestRequiredForeign.map_message:type_name -> goproto.proto.test.TestRequiredForeign.MapMessageEntry
-	39, // goproto.proto.test.TestRequiredGroupFields.optionalgroup:type_name -> goproto.proto.test.TestRequiredGroupFields.OptionalGroup
-	40, // goproto.proto.test.TestRequiredGroupFields.repeatedgroup:type_name -> goproto.proto.test.TestRequiredGroupFields.RepeatedGroup
-	4,  // goproto.proto.test.TestAllTypes.NestedMessage.corecursive:type_name -> goproto.proto.test.TestAllTypes
-	18, // goproto.proto.test.TestAllTypes.MapStringNestedMessageEntry.value:type_name -> goproto.proto.test.TestAllTypes.NestedMessage
-	2,  // goproto.proto.test.TestAllTypes.MapStringNestedEnumEntry.value:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
-	12, // goproto.proto.test.TestRequiredForeign.MapMessageEntry.value:type_name -> goproto.proto.test.TestRequired
-	9,  // goproto.proto.test.optionalgroup_extension:type_name -> goproto.proto.test.OptionalGroup_extension
-	18, // goproto.proto.test.optional_nested_message_extension:type_name -> goproto.proto.test.TestAllTypes.NestedMessage
-	2,  // goproto.proto.test.optional_nested_enum_extension:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
-	10, // goproto.proto.test.repeatedgroup_extension:type_name -> goproto.proto.test.RepeatedGroup_extension
-	18, // goproto.proto.test.repeated_nested_message_extension:type_name -> goproto.proto.test.TestAllTypes.NestedMessage
-	2,  // goproto.proto.test.repeated_nested_enum_extension:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
-	12, // goproto.proto.test.TestRequired.single:type_name -> goproto.proto.test.TestRequired
-	12, // goproto.proto.test.TestRequired.multi:type_name -> goproto.proto.test.TestRequired
-	16, // goproto.proto.test.TestService.Foo:input_type -> goproto.proto.test.FooRequest
-	17, // goproto.proto.test.TestService.Foo:output_type -> goproto.proto.test.FooResponse
-	16, // goproto.proto.test.TestService.TestStream:input_type -> goproto.proto.test.FooRequest
-	17, // goproto.proto.test.TestService.TestStream:output_type -> goproto.proto.test.FooResponse
-	5,  // goproto.proto.test.TestDeprecatedService.Deprecated:input_type -> goproto.proto.test.TestDeprecatedMessage
-	5,  // goproto.proto.test.TestDeprecatedService.Deprecated:output_type -> goproto.proto.test.TestDeprecatedMessage
+	19,  // goproto.proto.test.TestAllTypes.optionalgroup:type_name -> goproto.proto.test.TestAllTypes.OptionalGroup
+	18,  // goproto.proto.test.TestAllTypes.optional_nested_message:type_name -> goproto.proto.test.TestAllTypes.NestedMessage
+	6,   // goproto.proto.test.TestAllTypes.optional_foreign_message:type_name -> goproto.proto.test.ForeignMessage
+	41,  // goproto.proto.test.TestAllTypes.optional_import_message:type_name -> goproto.proto.test.ImportMessage
+	2,   // goproto.proto.test.TestAllTypes.optional_nested_enum:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
+	0,   // goproto.proto.test.TestAllTypes.optional_foreign_enum:type_name -> goproto.proto.test.ForeignEnum
+	42,  // goproto.proto.test.TestAllTypes.optional_import_enum:type_name -> goproto.proto.test.ImportEnum
+	20,  // goproto.proto.test.TestAllTypes.repeatedgroup:type_name -> goproto.proto.test.TestAllTypes.RepeatedGroup
+	18,  // goproto.proto.test.TestAllTypes.repeated_nested_message:type_name -> goproto.proto.test.TestAllTypes.NestedMessage
+	6,   // goproto.proto.test.TestAllTypes.repeated_foreign_message:type_name -> goproto.proto.test.ForeignMessage
+	41,  // goproto.proto.test.TestAllTypes.repeated_importmessage:type_name -> goproto.proto.test.ImportMessage
+	2,   // goproto.proto.test.TestAllTypes.repeated_nested_enum:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
+	0,   // goproto.proto.test.TestAllTypes.repeated_foreign_enum:type_name -> goproto.proto.test.ForeignEnum
+	42,  // goproto.proto.test.TestAllTypes.repeated_importenum:type_name -> goproto.proto.test.ImportEnum
+	21,  // goproto.proto.test.TestAllTypes.map_int32_int32:type_name -> goproto.proto.test.TestAllTypes.MapInt32Int32Entry
+	22,  // goproto.proto.test.TestAllTypes.map_int64_int64:type_name -> goproto.proto.test.TestAllTypes.MapInt64Int64Entry
+	23,  // goproto.proto.test.TestAllTypes.map_uint32_uint32:type_name -> goproto.proto.test.TestAllTypes.MapUint32Uint32Entry
+	24,  // goproto.proto.test.TestAllTypes.map_uint64_uint64:type_name -> goproto.proto.test.TestAllTypes.MapUint64Uint64Entry
+	25,  // goproto.proto.test.TestAllTypes.map_sint32_sint32:type_name -> goproto.proto.test.TestAllTypes.MapSint32Sint32Entry
+	26,  // goproto.proto.test.TestAllTypes.map_sint64_sint64:type_name -> goproto.proto.test.TestAllTypes.MapSint64Sint64Entry
+	27,  // goproto.proto.test.TestAllTypes.map_fixed32_fixed32:type_name -> goproto.proto.test.TestAllTypes.MapFixed32Fixed32Entry
+	28,  // goproto.proto.test.TestAllTypes.map_fixed64_fixed64:type_name -> goproto.proto.test.TestAllTypes.MapFixed64Fixed64Entry
+	29,  // goproto.proto.test.TestAllTypes.map_sfixed32_sfixed32:type_name -> goproto.proto.test.TestAllTypes.MapSfixed32Sfixed32Entry
+	30,  // goproto.proto.test.TestAllTypes.map_sfixed64_sfixed64:type_name -> goproto.proto.test.TestAllTypes.MapSfixed64Sfixed64Entry
+	31,  // goproto.proto.test.TestAllTypes.map_int32_float:type_name -> goproto.proto.test.TestAllTypes.MapInt32FloatEntry
+	32,  // goproto.proto.test.TestAllTypes.map_int32_double:type_name -> goproto.proto.test.TestAllTypes.MapInt32DoubleEntry
+	33,  // goproto.proto.test.TestAllTypes.map_bool_bool:type_name -> goproto.proto.test.TestAllTypes.MapBoolBoolEntry
+	34,  // goproto.proto.test.TestAllTypes.map_string_string:type_name -> goproto.proto.test.TestAllTypes.MapStringStringEntry
+	35,  // goproto.proto.test.TestAllTypes.map_string_bytes:type_name -> goproto.proto.test.TestAllTypes.MapStringBytesEntry
+	36,  // goproto.proto.test.TestAllTypes.map_string_nested_message:type_name -> goproto.proto.test.TestAllTypes.MapStringNestedMessageEntry
+	37,  // goproto.proto.test.TestAllTypes.map_string_nested_enum:type_name -> goproto.proto.test.TestAllTypes.MapStringNestedEnumEntry
+	2,   // goproto.proto.test.TestAllTypes.default_nested_enum:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
+	0,   // goproto.proto.test.TestAllTypes.default_foreign_enum:type_name -> goproto.proto.test.ForeignEnum
+	18,  // goproto.proto.test.TestAllTypes.oneof_nested_message:type_name -> goproto.proto.test.TestAllTypes.NestedMessage
+	2,   // goproto.proto.test.TestAllTypes.oneof_enum:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
+	12,  // goproto.proto.test.TestRequiredForeign.optional_message:type_name -> goproto.proto.test.TestRequired
+	12,  // goproto.proto.test.TestRequiredForeign.repeated_message:type_name -> goproto.proto.test.TestRequired
+	38,  // goproto.proto.test.TestRequiredForeign.map_message:type_name -> goproto.proto.test.TestRequiredForeign.MapMessageEntry
+	39,  // goproto.proto.test.TestRequiredGroupFields.optionalgroup:type_name -> goproto.proto.test.TestRequiredGroupFields.OptionalGroup
+	40,  // goproto.proto.test.TestRequiredGroupFields.repeatedgroup:type_name -> goproto.proto.test.TestRequiredGroupFields.RepeatedGroup
+	4,   // goproto.proto.test.TestAllTypes.NestedMessage.corecursive:type_name -> goproto.proto.test.TestAllTypes
+	18,  // goproto.proto.test.TestAllTypes.MapStringNestedMessageEntry.value:type_name -> goproto.proto.test.TestAllTypes.NestedMessage
+	2,   // goproto.proto.test.TestAllTypes.MapStringNestedEnumEntry.value:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
+	12,  // goproto.proto.test.TestRequiredForeign.MapMessageEntry.value:type_name -> goproto.proto.test.TestRequired
+	8,   // goproto.proto.test.optional_int32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.optional_int64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.optional_uint32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.optional_uint64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.optional_sint32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.optional_sint64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.optional_fixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.optional_fixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.optional_sfixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.optional_sfixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.optional_float_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.optional_double_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.optional_bool_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.optional_string_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.optional_bytes_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.optionalgroup_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.optional_nested_message_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.optional_nested_enum_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.repeated_int32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.repeated_int64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.repeated_uint32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.repeated_uint64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.repeated_sint32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.repeated_sint64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.repeated_fixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.repeated_fixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.repeated_sfixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.repeated_sfixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.repeated_float_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.repeated_double_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.repeated_bool_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.repeated_string_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.repeated_bytes_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.repeatedgroup_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.repeated_nested_message_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.repeated_nested_enum_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.default_int32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.default_int64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.default_uint32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.default_uint64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.default_sint32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.default_sint64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.default_fixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.default_fixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.default_sfixed32_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.default_sfixed64_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.default_float_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.default_double_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.default_bool_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.default_string_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.default_bytes_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.TestNestedExtension.nested_string_extension:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.TestRequired.single:extendee -> goproto.proto.test.TestAllExtensions
+	8,   // goproto.proto.test.TestRequired.multi:extendee -> goproto.proto.test.TestAllExtensions
+	9,   // goproto.proto.test.optionalgroup_extension:type_name -> goproto.proto.test.OptionalGroup_extension
+	18,  // goproto.proto.test.optional_nested_message_extension:type_name -> goproto.proto.test.TestAllTypes.NestedMessage
+	2,   // goproto.proto.test.optional_nested_enum_extension:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
+	10,  // goproto.proto.test.repeatedgroup_extension:type_name -> goproto.proto.test.RepeatedGroup_extension
+	18,  // goproto.proto.test.repeated_nested_message_extension:type_name -> goproto.proto.test.TestAllTypes.NestedMessage
+	2,   // goproto.proto.test.repeated_nested_enum_extension:type_name -> goproto.proto.test.TestAllTypes.NestedEnum
+	12,  // goproto.proto.test.TestRequired.single:type_name -> goproto.proto.test.TestRequired
+	12,  // goproto.proto.test.TestRequired.multi:type_name -> goproto.proto.test.TestRequired
+	16,  // goproto.proto.test.TestService.Foo:input_type -> goproto.proto.test.FooRequest
+	16,  // goproto.proto.test.TestService.TestStream:input_type -> goproto.proto.test.FooRequest
+	5,   // goproto.proto.test.TestDeprecatedService.Deprecated:input_type -> goproto.proto.test.TestDeprecatedMessage
+	17,  // goproto.proto.test.TestService.Foo:output_type -> goproto.proto.test.FooResponse
+	17,  // goproto.proto.test.TestService.TestStream:output_type -> goproto.proto.test.FooResponse
+	5,   // goproto.proto.test.TestDeprecatedService.Deprecated:output_type -> goproto.proto.test.TestDeprecatedMessage
+	109, // starting offset of method output_type sub-list
+	106, // starting offset of method input_type sub-list
+	98,  // starting offset of extension type_name sub-list
+	44,  // starting offset of extension extendee sub-list
+	0,   // starting offset of field type_name sub-list
 }
 
 func init() { file_test_test_proto_init() }
@@ -3467,18 +3472,21 @@
 	}
 	file_test_test_import_proto_init()
 	file_test_test_public_proto_init()
-	extensionTypes := make([]protoreflect.ExtensionType, 54)
-	File_test_test_proto = protoimpl.FileBuilder{
-		RawDescriptor:        file_test_test_proto_rawDesc,
-		GoTypes:              file_test_test_proto_goTypes,
-		DependencyIndexes:    file_test_test_proto_depIdxs,
-		LegacyExtensions:     file_test_test_proto_extDescs,
-		EnumOutputTypes:      file_test_test_proto_enumTypes,
-		MessageOutputTypes:   file_test_test_proto_msgTypes,
-		ExtensionOutputTypes: extensionTypes,
-		FilesRegistry:        protoregistry.GlobalFiles,
-		TypesRegistry:        protoregistry.GlobalTypes,
-	}.Init()
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			RawDescriptor: file_test_test_proto_rawDesc,
+			NumEnums:      4,
+			NumMessages:   37,
+			NumExtensions: 54,
+			NumServices:   2,
+		},
+		GoTypes:           file_test_test_proto_goTypes,
+		DependencyIndexes: file_test_test_proto_depIdxs,
+		MessageInfos:      file_test_test_proto_msgTypes,
+		LegacyExtensions:  file_test_test_proto_extDescs,
+	}.Build()
+	File_test_test_proto = out.File
+	file_test_test_proto_enumTypes = out.Enums
 	file_test_test_proto_rawDesc = nil
 	file_test_test_proto_goTypes = nil
 	file_test_test_proto_depIdxs = nil
diff --git a/internal/testprotos/test/test_import.pb.go b/internal/testprotos/test/test_import.pb.go
index 6ec7c37..408b5a4 100644
--- a/internal/testprotos/test/test_import.pb.go
+++ b/internal/testprotos/test/test_import.pb.go
@@ -5,7 +5,7 @@
 
 import (
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-	protoregistry "google.golang.org/protobuf/reflect/protoregistry"
+	prototype "google.golang.org/protobuf/reflect/prototype"
 	protoiface "google.golang.org/protobuf/runtime/protoiface"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
 	sync "sync"
@@ -45,7 +45,7 @@
 }
 
 func (ImportEnum) Descriptor() protoreflect.EnumDescriptor {
-	return file_test_test_import_proto_enumTypes[0].Descriptor()
+	return file_test_test_import_proto_enumTypes[0].EnumDescriptor
 }
 
 func (x ImportEnum) Number() protoreflect.EnumNumber {
@@ -123,28 +123,39 @@
 	return file_test_test_import_proto_rawDescData
 }
 
-var file_test_test_import_proto_enumTypes = make([]protoreflect.EnumType, 1)
+var file_test_test_import_proto_enumTypes = make([]prototype.Enum, 1)
 var file_test_test_import_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
 var file_test_test_import_proto_goTypes = []interface{}{
 	(ImportEnum)(0),       // 0: goproto.proto.test.ImportEnum
 	(*ImportMessage)(nil), // 1: goproto.proto.test.ImportMessage
 }
-var file_test_test_import_proto_depIdxs = []int32{}
+var file_test_test_import_proto_depIdxs = []int32{
+	0, // starting offset of method output_type sub-list
+	0, // starting offset of method input_type sub-list
+	0, // starting offset of extension type_name sub-list
+	0, // starting offset of extension extendee sub-list
+	0, // starting offset of field type_name sub-list
+}
 
 func init() { file_test_test_import_proto_init() }
 func file_test_test_import_proto_init() {
 	if File_test_test_import_proto != nil {
 		return
 	}
-	File_test_test_import_proto = protoimpl.FileBuilder{
-		RawDescriptor:      file_test_test_import_proto_rawDesc,
-		GoTypes:            file_test_test_import_proto_goTypes,
-		DependencyIndexes:  file_test_test_import_proto_depIdxs,
-		EnumOutputTypes:    file_test_test_import_proto_enumTypes,
-		MessageOutputTypes: file_test_test_import_proto_msgTypes,
-		FilesRegistry:      protoregistry.GlobalFiles,
-		TypesRegistry:      protoregistry.GlobalTypes,
-	}.Init()
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			RawDescriptor: file_test_test_import_proto_rawDesc,
+			NumEnums:      1,
+			NumMessages:   1,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_test_test_import_proto_goTypes,
+		DependencyIndexes: file_test_test_import_proto_depIdxs,
+		MessageInfos:      file_test_test_import_proto_msgTypes,
+	}.Build()
+	File_test_test_import_proto = out.File
+	file_test_test_import_proto_enumTypes = out.Enums
 	file_test_test_import_proto_rawDesc = nil
 	file_test_test_import_proto_goTypes = nil
 	file_test_test_import_proto_depIdxs = nil
diff --git a/internal/testprotos/test/test_public.pb.go b/internal/testprotos/test/test_public.pb.go
index 832e324..be20ac9 100644
--- a/internal/testprotos/test/test_public.pb.go
+++ b/internal/testprotos/test/test_public.pb.go
@@ -5,7 +5,6 @@
 
 import (
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-	protoregistry "google.golang.org/protobuf/reflect/protoregistry"
 	protoiface "google.golang.org/protobuf/runtime/protoiface"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
 	sync "sync"
@@ -76,21 +75,32 @@
 var file_test_test_public_proto_goTypes = []interface{}{
 	(*PublicImportMessage)(nil), // 0: goproto.proto.test.PublicImportMessage
 }
-var file_test_test_public_proto_depIdxs = []int32{}
+var file_test_test_public_proto_depIdxs = []int32{
+	0, // starting offset of method output_type sub-list
+	0, // starting offset of method input_type sub-list
+	0, // starting offset of extension type_name sub-list
+	0, // starting offset of extension extendee sub-list
+	0, // starting offset of field type_name sub-list
+}
 
 func init() { file_test_test_public_proto_init() }
 func file_test_test_public_proto_init() {
 	if File_test_test_public_proto != nil {
 		return
 	}
-	File_test_test_public_proto = protoimpl.FileBuilder{
-		RawDescriptor:      file_test_test_public_proto_rawDesc,
-		GoTypes:            file_test_test_public_proto_goTypes,
-		DependencyIndexes:  file_test_test_public_proto_depIdxs,
-		MessageOutputTypes: file_test_test_public_proto_msgTypes,
-		FilesRegistry:      protoregistry.GlobalFiles,
-		TypesRegistry:      protoregistry.GlobalTypes,
-	}.Init()
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			RawDescriptor: file_test_test_public_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   1,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_test_test_public_proto_goTypes,
+		DependencyIndexes: file_test_test_public_proto_depIdxs,
+		MessageInfos:      file_test_test_public_proto_msgTypes,
+	}.Build()
+	File_test_test_public_proto = out.File
 	file_test_test_public_proto_rawDesc = nil
 	file_test_test_public_proto_goTypes = nil
 	file_test_test_public_proto_depIdxs = nil
diff --git a/internal/testprotos/test/weak/test_weak.pb.go b/internal/testprotos/test/weak/test_weak.pb.go
index ba5b8df..f661776 100644
--- a/internal/testprotos/test/weak/test_weak.pb.go
+++ b/internal/testprotos/test/weak/test_weak.pb.go
@@ -5,7 +5,6 @@
 
 import (
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-	protoregistry "google.golang.org/protobuf/reflect/protoregistry"
 	protoiface "google.golang.org/protobuf/runtime/protoiface"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
 	sync "sync"
@@ -86,21 +85,32 @@
 var file_test_weak_test_weak_proto_goTypes = []interface{}{
 	(*WeakImportMessage)(nil), // 0: goproto.proto.test.weak.WeakImportMessage
 }
-var file_test_weak_test_weak_proto_depIdxs = []int32{}
+var file_test_weak_test_weak_proto_depIdxs = []int32{
+	0, // starting offset of method output_type sub-list
+	0, // starting offset of method input_type sub-list
+	0, // starting offset of extension type_name sub-list
+	0, // starting offset of extension extendee sub-list
+	0, // starting offset of field type_name sub-list
+}
 
 func init() { file_test_weak_test_weak_proto_init() }
 func file_test_weak_test_weak_proto_init() {
 	if File_test_weak_test_weak_proto != nil {
 		return
 	}
-	File_test_weak_test_weak_proto = protoimpl.FileBuilder{
-		RawDescriptor:      file_test_weak_test_weak_proto_rawDesc,
-		GoTypes:            file_test_weak_test_weak_proto_goTypes,
-		DependencyIndexes:  file_test_weak_test_weak_proto_depIdxs,
-		MessageOutputTypes: file_test_weak_test_weak_proto_msgTypes,
-		FilesRegistry:      protoregistry.GlobalFiles,
-		TypesRegistry:      protoregistry.GlobalTypes,
-	}.Init()
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			RawDescriptor: file_test_weak_test_weak_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   1,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_test_weak_test_weak_proto_goTypes,
+		DependencyIndexes: file_test_weak_test_weak_proto_depIdxs,
+		MessageInfos:      file_test_weak_test_weak_proto_msgTypes,
+	}.Build()
+	File_test_weak_test_weak_proto = out.File
 	file_test_weak_test_weak_proto_rawDesc = nil
 	file_test_weak_test_weak_proto_goTypes = nil
 	file_test_weak_test_weak_proto_depIdxs = nil
diff --git a/internal/testprotos/test3/test.pb.go b/internal/testprotos/test3/test.pb.go
index 129d836..471ca03 100644
--- a/internal/testprotos/test3/test.pb.go
+++ b/internal/testprotos/test3/test.pb.go
@@ -5,7 +5,7 @@
 
 import (
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-	protoregistry "google.golang.org/protobuf/reflect/protoregistry"
+	prototype "google.golang.org/protobuf/reflect/prototype"
 	protoiface "google.golang.org/protobuf/runtime/protoiface"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
 	sync "sync"
@@ -54,7 +54,7 @@
 }
 
 func (ForeignEnum) Descriptor() protoreflect.EnumDescriptor {
-	return file_test3_test_proto_enumTypes[0].Descriptor()
+	return file_test3_test_proto_enumTypes[0].EnumDescriptor
 }
 
 func (x ForeignEnum) Number() protoreflect.EnumNumber {
@@ -102,7 +102,7 @@
 }
 
 func (TestAllTypes_NestedEnum) Descriptor() protoreflect.EnumDescriptor {
-	return file_test3_test_proto_enumTypes[1].Descriptor()
+	return file_test3_test_proto_enumTypes[1].EnumDescriptor
 }
 
 func (x TestAllTypes_NestedEnum) Number() protoreflect.EnumNumber {
@@ -1265,7 +1265,7 @@
 	return file_test3_test_proto_rawDescData
 }
 
-var file_test3_test_proto_enumTypes = make([]protoreflect.EnumType, 2)
+var file_test3_test_proto_enumTypes = make([]prototype.Enum, 2)
 var file_test3_test_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
 var file_test3_test_proto_goTypes = []interface{}{
 	(ForeignEnum)(0),                   // 0: goproto.proto.test3.ForeignEnum
@@ -1328,6 +1328,11 @@
 	2,  // goproto.proto.test3.TestAllTypes.NestedMessage.corecursive:type_name -> goproto.proto.test3.TestAllTypes
 	4,  // goproto.proto.test3.TestAllTypes.MapStringNestedMessageEntry.value:type_name -> goproto.proto.test3.TestAllTypes.NestedMessage
 	1,  // goproto.proto.test3.TestAllTypes.MapStringNestedEnumEntry.value:type_name -> goproto.proto.test3.TestAllTypes.NestedEnum
+	34, // starting offset of method output_type sub-list
+	34, // starting offset of method input_type sub-list
+	34, // starting offset of extension type_name sub-list
+	34, // starting offset of extension extendee sub-list
+	0,  // starting offset of field type_name sub-list
 }
 
 func init() { file_test3_test_proto_init() }
@@ -1336,15 +1341,20 @@
 		return
 	}
 	file_test3_test_import_proto_init()
-	File_test3_test_proto = protoimpl.FileBuilder{
-		RawDescriptor:      file_test3_test_proto_rawDesc,
-		GoTypes:            file_test3_test_proto_goTypes,
-		DependencyIndexes:  file_test3_test_proto_depIdxs,
-		EnumOutputTypes:    file_test3_test_proto_enumTypes,
-		MessageOutputTypes: file_test3_test_proto_msgTypes,
-		FilesRegistry:      protoregistry.GlobalFiles,
-		TypesRegistry:      protoregistry.GlobalTypes,
-	}.Init()
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			RawDescriptor: file_test3_test_proto_rawDesc,
+			NumEnums:      2,
+			NumMessages:   20,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_test3_test_proto_goTypes,
+		DependencyIndexes: file_test3_test_proto_depIdxs,
+		MessageInfos:      file_test3_test_proto_msgTypes,
+	}.Build()
+	File_test3_test_proto = out.File
+	file_test3_test_proto_enumTypes = out.Enums
 	file_test3_test_proto_rawDesc = nil
 	file_test3_test_proto_goTypes = nil
 	file_test3_test_proto_depIdxs = nil
diff --git a/internal/testprotos/test3/test_import.pb.go b/internal/testprotos/test3/test_import.pb.go
index e5ad6b9..5b34c48 100644
--- a/internal/testprotos/test3/test_import.pb.go
+++ b/internal/testprotos/test3/test_import.pb.go
@@ -5,7 +5,7 @@
 
 import (
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-	protoregistry "google.golang.org/protobuf/reflect/protoregistry"
+	prototype "google.golang.org/protobuf/reflect/prototype"
 	protoiface "google.golang.org/protobuf/runtime/protoiface"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
 	sync "sync"
@@ -45,7 +45,7 @@
 }
 
 func (ImportEnum) Descriptor() protoreflect.EnumDescriptor {
-	return file_test3_test_import_proto_enumTypes[0].Descriptor()
+	return file_test3_test_import_proto_enumTypes[0].EnumDescriptor
 }
 
 func (x ImportEnum) Number() protoreflect.EnumNumber {
@@ -113,28 +113,39 @@
 	return file_test3_test_import_proto_rawDescData
 }
 
-var file_test3_test_import_proto_enumTypes = make([]protoreflect.EnumType, 1)
+var file_test3_test_import_proto_enumTypes = make([]prototype.Enum, 1)
 var file_test3_test_import_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
 var file_test3_test_import_proto_goTypes = []interface{}{
 	(ImportEnum)(0),       // 0: goproto.proto.test3.ImportEnum
 	(*ImportMessage)(nil), // 1: goproto.proto.test3.ImportMessage
 }
-var file_test3_test_import_proto_depIdxs = []int32{}
+var file_test3_test_import_proto_depIdxs = []int32{
+	0, // starting offset of method output_type sub-list
+	0, // starting offset of method input_type sub-list
+	0, // starting offset of extension type_name sub-list
+	0, // starting offset of extension extendee sub-list
+	0, // starting offset of field type_name sub-list
+}
 
 func init() { file_test3_test_import_proto_init() }
 func file_test3_test_import_proto_init() {
 	if File_test3_test_import_proto != nil {
 		return
 	}
-	File_test3_test_import_proto = protoimpl.FileBuilder{
-		RawDescriptor:      file_test3_test_import_proto_rawDesc,
-		GoTypes:            file_test3_test_import_proto_goTypes,
-		DependencyIndexes:  file_test3_test_import_proto_depIdxs,
-		EnumOutputTypes:    file_test3_test_import_proto_enumTypes,
-		MessageOutputTypes: file_test3_test_import_proto_msgTypes,
-		FilesRegistry:      protoregistry.GlobalFiles,
-		TypesRegistry:      protoregistry.GlobalTypes,
-	}.Init()
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			RawDescriptor: file_test3_test_import_proto_rawDesc,
+			NumEnums:      1,
+			NumMessages:   1,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_test3_test_import_proto_goTypes,
+		DependencyIndexes: file_test3_test_import_proto_depIdxs,
+		MessageInfos:      file_test3_test_import_proto_msgTypes,
+	}.Build()
+	File_test3_test_import_proto = out.File
+	file_test3_test_import_proto_enumTypes = out.Enums
 	file_test3_test_import_proto_rawDesc = nil
 	file_test3_test_import_proto_goTypes = nil
 	file_test3_test_import_proto_depIdxs = nil