diff --git a/cmd/protoc-gen-go/testdata/annotations/annotations.pb.go b/cmd/protoc-gen-go/testdata/annotations/annotations.pb.go
index 5913de9..b5bc327 100644
--- a/cmd/protoc-gen-go/testdata/annotations/annotations.pb.go
+++ b/cmd/protoc-gen-go/testdata/annotations/annotations.pb.go
@@ -25,7 +25,7 @@
 )
 
 func (e AnnotationsTestEnum) Type() protoreflect.EnumType {
-	return xxx_Annotations_protoFile_enumTypes[0]
+	return xxx_ProtoFile_annotations_annotations_enumTypes[0]
 }
 func (e AnnotationsTestEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -70,7 +70,7 @@
 }
 
 func (m *AnnotationsTestMessage) ProtoReflect() protoreflect.Message {
-	return xxx_Annotations_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_annotations_annotations_messageTypes[0].MessageOf(m)
 }
 func (m *AnnotationsTestMessage) Reset()         { *m = AnnotationsTestMessage{} }
 func (m *AnnotationsTestMessage) String() string { return proto.CompactTextString(m) }
@@ -141,30 +141,30 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Annotations_protoFile protoreflect.FileDescriptor
+var ProtoFile_annotations_annotations protoreflect.FileDescriptor
 
-var xxx_Annotations_protoFile_enumTypes [1]protoreflect.EnumType
-var xxx_Annotations_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_Annotations_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_annotations_annotations_enumTypes [1]protoreflect.EnumType
+var xxx_ProtoFile_annotations_annotations_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_annotations_annotations_goTypes = []interface{}{
 	(AnnotationsTestEnum)(0),       // 0: goproto.protoc.annotations.AnnotationsTestEnum
 	(*AnnotationsTestMessage)(nil), // 1: goproto.protoc.annotations.AnnotationsTestMessage
 }
-var xxx_Annotations_protoFile_depIdxs = []int32{}
+var xxx_ProtoFile_annotations_annotations_depIdxs = []int32{}
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	Annotations_protoFile = protoimpl.FileBuilder{
+	ProtoFile_annotations_annotations = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_21dfaf6fd39fa3b7,
-		GoTypes:            xxx_Annotations_protoFile_goTypes,
-		DependencyIndexes:  xxx_Annotations_protoFile_depIdxs,
-		EnumOutputTypes:    xxx_Annotations_protoFile_enumTypes[:],
+		GoTypes:            xxx_ProtoFile_annotations_annotations_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_annotations_annotations_depIdxs,
+		EnumOutputTypes:    xxx_ProtoFile_annotations_annotations_enumTypes[:],
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_Annotations_protoFile_goTypes[1:][:1]
+	messageGoTypes := xxx_ProtoFile_annotations_annotations_goTypes[1:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_Annotations_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_Annotations_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_annotations_annotations_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_annotations_annotations_messageTypes[i].PBType = mt
 	}
-	xxx_Annotations_protoFile_goTypes = nil
-	xxx_Annotations_protoFile_depIdxs = nil
+	xxx_ProtoFile_annotations_annotations_goTypes = nil
+	xxx_ProtoFile_annotations_annotations_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/comments/comments.pb.go b/cmd/protoc-gen-go/testdata/comments/comments.pb.go
index bef3982..115866d 100644
--- a/cmd/protoc-gen-go/testdata/comments/comments.pb.go
+++ b/cmd/protoc-gen-go/testdata/comments/comments.pb.go
@@ -36,7 +36,7 @@
 }
 
 func (m *Message1) ProtoReflect() protoreflect.Message {
-	return xxx_Comments_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_comments_comments_messageTypes[0].MessageOf(m)
 }
 func (m *Message1) Reset()         { *m = Message1{} }
 func (m *Message1) String() string { return proto.CompactTextString(m) }
@@ -109,7 +109,7 @@
 }
 
 func (m *Message2) ProtoReflect() protoreflect.Message {
-	return xxx_Comments_protoFile_messageTypes[1].MessageOf(m)
+	return xxx_ProtoFile_comments_comments_messageTypes[1].MessageOf(m)
 }
 func (m *Message2) Reset()         { *m = Message2{} }
 func (m *Message2) String() string { return proto.CompactTextString(m) }
@@ -144,7 +144,7 @@
 }
 
 func (m *Message1_Message1A) ProtoReflect() protoreflect.Message {
-	return xxx_Comments_protoFile_messageTypes[2].MessageOf(m)
+	return xxx_ProtoFile_comments_comments_messageTypes[2].MessageOf(m)
 }
 func (m *Message1_Message1A) Reset()         { *m = Message1_Message1A{} }
 func (m *Message1_Message1A) String() string { return proto.CompactTextString(m) }
@@ -179,7 +179,7 @@
 }
 
 func (m *Message1_Message1B) ProtoReflect() protoreflect.Message {
-	return xxx_Comments_protoFile_messageTypes[3].MessageOf(m)
+	return xxx_ProtoFile_comments_comments_messageTypes[3].MessageOf(m)
 }
 func (m *Message1_Message1B) Reset()         { *m = Message1_Message1B{} }
 func (m *Message1_Message1B) String() string { return proto.CompactTextString(m) }
@@ -214,7 +214,7 @@
 }
 
 func (m *Message2_Message2A) ProtoReflect() protoreflect.Message {
-	return xxx_Comments_protoFile_messageTypes[4].MessageOf(m)
+	return xxx_ProtoFile_comments_comments_messageTypes[4].MessageOf(m)
 }
 func (m *Message2_Message2A) Reset()         { *m = Message2_Message2A{} }
 func (m *Message2_Message2A) String() string { return proto.CompactTextString(m) }
@@ -249,7 +249,7 @@
 }
 
 func (m *Message2_Message2B) ProtoReflect() protoreflect.Message {
-	return xxx_Comments_protoFile_messageTypes[5].MessageOf(m)
+	return xxx_ProtoFile_comments_comments_messageTypes[5].MessageOf(m)
 }
 func (m *Message2_Message2B) Reset()         { *m = Message2_Message2B{} }
 func (m *Message2_Message2B) String() string { return proto.CompactTextString(m) }
@@ -317,10 +317,10 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Comments_protoFile protoreflect.FileDescriptor
+var ProtoFile_comments_comments protoreflect.FileDescriptor
 
-var xxx_Comments_protoFile_messageTypes [6]protoimpl.MessageType
-var xxx_Comments_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_comments_comments_messageTypes [6]protoimpl.MessageType
+var xxx_ProtoFile_comments_comments_goTypes = []interface{}{
 	(*Message1)(nil),           // 0: goproto.protoc.comments.Message1
 	(*Message2)(nil),           // 1: goproto.protoc.comments.Message2
 	(*Message1_Message1A)(nil), // 2: goproto.protoc.comments.Message1.Message1A
@@ -328,21 +328,21 @@
 	(*Message2_Message2A)(nil), // 4: goproto.protoc.comments.Message2.Message2A
 	(*Message2_Message2B)(nil), // 5: goproto.protoc.comments.Message2.Message2B
 }
-var xxx_Comments_protoFile_depIdxs = []int32{}
+var xxx_ProtoFile_comments_comments_depIdxs = []int32{}
 
 func init() {
 	var messageTypes [6]protoreflect.MessageType
-	Comments_protoFile = protoimpl.FileBuilder{
+	ProtoFile_comments_comments = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_885e8293f1fab554,
-		GoTypes:            xxx_Comments_protoFile_goTypes,
-		DependencyIndexes:  xxx_Comments_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_comments_comments_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_comments_comments_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_Comments_protoFile_goTypes[0:][:6]
+	messageGoTypes := xxx_ProtoFile_comments_comments_goTypes[0:][:6]
 	for i, mt := range messageTypes[:] {
-		xxx_Comments_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_Comments_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_comments_comments_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_comments_comments_messageTypes[i].PBType = mt
 	}
-	xxx_Comments_protoFile_goTypes = nil
-	xxx_Comments_protoFile_depIdxs = nil
+	xxx_ProtoFile_comments_comments_goTypes = nil
+	xxx_ProtoFile_comments_comments_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/comments/deprecated.pb.go b/cmd/protoc-gen-go/testdata/comments/deprecated.pb.go
index 34f46ba..1169c3c 100644
--- a/cmd/protoc-gen-go/testdata/comments/deprecated.pb.go
+++ b/cmd/protoc-gen-go/testdata/comments/deprecated.pb.go
@@ -24,7 +24,7 @@
 )
 
 func (e DeprecatedEnum) Type() protoreflect.EnumType {
-	return xxx_Deprecated_protoFile_enumTypes[0]
+	return xxx_ProtoFile_comments_deprecated_enumTypes[0]
 }
 func (e DeprecatedEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -55,7 +55,7 @@
 }
 
 func (m *DeprecatedMessage) ProtoReflect() protoreflect.Message {
-	return xxx_Deprecated_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_comments_deprecated_messageTypes[0].MessageOf(m)
 }
 func (m *DeprecatedMessage) Reset()         { *m = DeprecatedMessage{} }
 func (m *DeprecatedMessage) String() string { return proto.CompactTextString(m) }
@@ -126,30 +126,30 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Deprecated_protoFile protoreflect.FileDescriptor
+var ProtoFile_comments_deprecated protoreflect.FileDescriptor
 
-var xxx_Deprecated_protoFile_enumTypes [1]protoreflect.EnumType
-var xxx_Deprecated_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_Deprecated_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_comments_deprecated_enumTypes [1]protoreflect.EnumType
+var xxx_ProtoFile_comments_deprecated_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_comments_deprecated_goTypes = []interface{}{
 	(DeprecatedEnum)(0),       // 0: goproto.protoc.comments.DeprecatedEnum
 	(*DeprecatedMessage)(nil), // 1: goproto.protoc.comments.DeprecatedMessage
 }
-var xxx_Deprecated_protoFile_depIdxs = []int32{}
+var xxx_ProtoFile_comments_deprecated_depIdxs = []int32{}
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	Deprecated_protoFile = protoimpl.FileBuilder{
+	ProtoFile_comments_deprecated = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_0336e614ee2de5f7,
-		GoTypes:            xxx_Deprecated_protoFile_goTypes,
-		DependencyIndexes:  xxx_Deprecated_protoFile_depIdxs,
-		EnumOutputTypes:    xxx_Deprecated_protoFile_enumTypes[:],
+		GoTypes:            xxx_ProtoFile_comments_deprecated_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_comments_deprecated_depIdxs,
+		EnumOutputTypes:    xxx_ProtoFile_comments_deprecated_enumTypes[:],
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_Deprecated_protoFile_goTypes[1:][:1]
+	messageGoTypes := xxx_ProtoFile_comments_deprecated_goTypes[1:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_Deprecated_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_Deprecated_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_comments_deprecated_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_comments_deprecated_messageTypes[i].PBType = mt
 	}
-	xxx_Deprecated_protoFile_goTypes = nil
-	xxx_Deprecated_protoFile_depIdxs = nil
+	xxx_ProtoFile_comments_deprecated_goTypes = nil
+	xxx_ProtoFile_comments_deprecated_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/extensions/base/base.pb.go b/cmd/protoc-gen-go/testdata/extensions/base/base.pb.go
index e92bb48..f6f192a 100644
--- a/cmd/protoc-gen-go/testdata/extensions/base/base.pb.go
+++ b/cmd/protoc-gen-go/testdata/extensions/base/base.pb.go
@@ -27,7 +27,7 @@
 }
 
 func (m *BaseMessage) ProtoReflect() protoreflect.Message {
-	return xxx_Base_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_extensions_base_base_messageTypes[0].MessageOf(m)
 }
 func (m *BaseMessage) Reset()         { *m = BaseMessage{} }
 func (m *BaseMessage) String() string { return proto.CompactTextString(m) }
@@ -78,7 +78,7 @@
 }
 
 func (m *MessageSetWireFormatMessage) ProtoReflect() protoreflect.Message {
-	return xxx_Base_protoFile_messageTypes[1].MessageOf(m)
+	return xxx_ProtoFile_extensions_base_base_messageTypes[1].MessageOf(m)
 }
 func (m *MessageSetWireFormatMessage) Reset()         { *m = MessageSetWireFormatMessage{} }
 func (m *MessageSetWireFormatMessage) String() string { return proto.CompactTextString(m) }
@@ -148,28 +148,28 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Base_protoFile protoreflect.FileDescriptor
+var ProtoFile_extensions_base_base protoreflect.FileDescriptor
 
-var xxx_Base_protoFile_messageTypes [2]protoimpl.MessageType
-var xxx_Base_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_extensions_base_base_messageTypes [2]protoimpl.MessageType
+var xxx_ProtoFile_extensions_base_base_goTypes = []interface{}{
 	(*BaseMessage)(nil),                 // 0: goproto.protoc.extension.base.BaseMessage
 	(*MessageSetWireFormatMessage)(nil), // 1: goproto.protoc.extension.base.MessageSetWireFormatMessage
 }
-var xxx_Base_protoFile_depIdxs = []int32{}
+var xxx_ProtoFile_extensions_base_base_depIdxs = []int32{}
 
 func init() {
 	var messageTypes [2]protoreflect.MessageType
-	Base_protoFile = protoimpl.FileBuilder{
+	ProtoFile_extensions_base_base = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_aebb28f8d5a04466,
-		GoTypes:            xxx_Base_protoFile_goTypes,
-		DependencyIndexes:  xxx_Base_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_extensions_base_base_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_extensions_base_base_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_Base_protoFile_goTypes[0:][:2]
+	messageGoTypes := xxx_ProtoFile_extensions_base_base_goTypes[0:][:2]
 	for i, mt := range messageTypes[:] {
-		xxx_Base_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_Base_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_extensions_base_base_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_extensions_base_base_messageTypes[i].PBType = mt
 	}
-	xxx_Base_protoFile_goTypes = nil
-	xxx_Base_protoFile_depIdxs = nil
+	xxx_ProtoFile_extensions_base_base_goTypes = nil
+	xxx_ProtoFile_extensions_base_base_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go b/cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go
index 1c6f16b..64cc3d2 100644
--- a/cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go
+++ b/cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go
@@ -27,7 +27,7 @@
 )
 
 func (e Enum) Type() protoreflect.EnumType {
-	return xxx_Ext_protoFile_enumTypes[0]
+	return xxx_ProtoFile_extensions_ext_ext_enumTypes[0]
 }
 func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -72,7 +72,7 @@
 }
 
 func (m *Message) ProtoReflect() protoreflect.Message {
-	return xxx_Ext_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_extensions_ext_ext_messageTypes[0].MessageOf(m)
 }
 func (m *Message) Reset()         { *m = Message{} }
 func (m *Message) String() string { return proto.CompactTextString(m) }
@@ -114,7 +114,7 @@
 }
 
 func (m *ExtensionGroup) ProtoReflect() protoreflect.Message {
-	return xxx_Ext_protoFile_messageTypes[1].MessageOf(m)
+	return xxx_ProtoFile_extensions_ext_ext_messageTypes[1].MessageOf(m)
 }
 func (m *ExtensionGroup) Reset()         { *m = ExtensionGroup{} }
 func (m *ExtensionGroup) String() string { return proto.CompactTextString(m) }
@@ -156,7 +156,7 @@
 }
 
 func (m *ExtendingMessage) ProtoReflect() protoreflect.Message {
-	return xxx_Ext_protoFile_messageTypes[2].MessageOf(m)
+	return xxx_ProtoFile_extensions_ext_ext_messageTypes[2].MessageOf(m)
 }
 func (m *ExtendingMessage) Reset()         { *m = ExtendingMessage{} }
 func (m *ExtendingMessage) String() string { return proto.CompactTextString(m) }
@@ -191,7 +191,7 @@
 }
 
 func (m *RepeatedGroup) ProtoReflect() protoreflect.Message {
-	return xxx_Ext_protoFile_messageTypes[3].MessageOf(m)
+	return xxx_ProtoFile_extensions_ext_ext_messageTypes[3].MessageOf(m)
 }
 func (m *RepeatedGroup) Reset()         { *m = RepeatedGroup{} }
 func (m *RepeatedGroup) String() string { return proto.CompactTextString(m) }
@@ -234,7 +234,7 @@
 }
 
 func (m *Extendable) ProtoReflect() protoreflect.Message {
-	return xxx_Ext_protoFile_messageTypes[4].MessageOf(m)
+	return xxx_ProtoFile_extensions_ext_ext_messageTypes[4].MessageOf(m)
 }
 func (m *Extendable) Reset()         { *m = Extendable{} }
 func (m *Extendable) String() string { return proto.CompactTextString(m) }
@@ -277,7 +277,7 @@
 }
 
 func (m *MessageSetWireFormatExtension) ProtoReflect() protoreflect.Message {
-	return xxx_Ext_protoFile_messageTypes[5].MessageOf(m)
+	return xxx_ProtoFile_extensions_ext_ext_messageTypes[5].MessageOf(m)
 }
 func (m *MessageSetWireFormatExtension) Reset()         { *m = MessageSetWireFormatExtension{} }
 func (m *MessageSetWireFormatExtension) String() string { return proto.CompactTextString(m) }
@@ -311,7 +311,7 @@
 }
 
 func (m *Message_M) ProtoReflect() protoreflect.Message {
-	return xxx_Ext_protoFile_messageTypes[6].MessageOf(m)
+	return xxx_ProtoFile_extensions_ext_ext_messageTypes[6].MessageOf(m)
 }
 func (m *Message_M) Reset()         { *m = Message_M{} }
 func (m *Message_M) String() string { return proto.CompactTextString(m) }
@@ -345,7 +345,7 @@
 }
 
 func (m *ExtendingMessage_ExtendingMessageSubmessage) ProtoReflect() protoreflect.Message {
-	return xxx_Ext_protoFile_messageTypes[7].MessageOf(m)
+	return xxx_ProtoFile_extensions_ext_ext_messageTypes[7].MessageOf(m)
 }
 func (m *ExtendingMessage_ExtendingMessageSubmessage) Reset() {
 	*m = ExtendingMessage_ExtendingMessageSubmessage{}
@@ -1156,11 +1156,11 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Ext_protoFile protoreflect.FileDescriptor
+var ProtoFile_extensions_ext_ext protoreflect.FileDescriptor
 
-var xxx_Ext_protoFile_enumTypes [1]protoreflect.EnumType
-var xxx_Ext_protoFile_messageTypes [8]protoimpl.MessageType
-var xxx_Ext_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_extensions_ext_ext_enumTypes [1]protoreflect.EnumType
+var xxx_ProtoFile_extensions_ext_ext_messageTypes [8]protoimpl.MessageType
+var xxx_ProtoFile_extensions_ext_ext_goTypes = []interface{}{
 	(Enum)(0),                             // 0: goproto.protoc.extension.ext.Enum
 	(*Message)(nil),                       // 1: goproto.protoc.extension.ext.Message
 	(*ExtensionGroup)(nil),                // 2: goproto.protoc.extension.ext.ExtensionGroup
@@ -1174,7 +1174,7 @@
 	(*base.MessageSetWireFormatMessage)(nil),            // 10: goproto.protoc.extension.base.MessageSetWireFormatMessage
 	(*extra.ExtraMessage)(nil),                          // 11: goproto.protoc.extension.extra.ExtraMessage
 }
-var xxx_Ext_protoFile_depIdxs = []int32{
+var xxx_ProtoFile_extensions_ext_ext_depIdxs = []int32{
 	9,  // goproto.protoc.extension.ext.extension_bool:extendee -> goproto.protoc.extension.base.BaseMessage
 	9,  // goproto.protoc.extension.ext.extension_enum:extendee -> goproto.protoc.extension.base.BaseMessage
 	9,  // goproto.protoc.extension.ext.extension_int32:extendee -> goproto.protoc.extension.base.BaseMessage
@@ -1236,18 +1236,18 @@
 func init() {
 	var messageTypes [8]protoreflect.MessageType
 	var extensionTypes [44]protoreflect.ExtensionType
-	Ext_protoFile = protoimpl.FileBuilder{
+	ProtoFile_extensions_ext_ext = protoimpl.FileBuilder{
 		RawDescriptor:        fileDescriptor_bf470ef4907b23cb,
-		GoTypes:              xxx_Ext_protoFile_goTypes,
-		DependencyIndexes:    xxx_Ext_protoFile_depIdxs,
-		EnumOutputTypes:      xxx_Ext_protoFile_enumTypes[:],
+		GoTypes:              xxx_ProtoFile_extensions_ext_ext_goTypes,
+		DependencyIndexes:    xxx_ProtoFile_extensions_ext_ext_depIdxs,
+		EnumOutputTypes:      xxx_ProtoFile_extensions_ext_ext_enumTypes[:],
 		MessageOutputTypes:   messageTypes[:],
 		ExtensionOutputTypes: extensionTypes[:],
 	}.Init()
-	messageGoTypes := xxx_Ext_protoFile_goTypes[1:][:8]
+	messageGoTypes := xxx_ProtoFile_extensions_ext_ext_goTypes[1:][:8]
 	for i, mt := range messageTypes[:] {
-		xxx_Ext_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_Ext_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_extensions_ext_ext_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_extensions_ext_ext_messageTypes[i].PBType = mt
 	}
 	E_ExtensionBool.Type = extensionTypes[0]
 	E_ExtensionEnum.Type = extensionTypes[1]
@@ -1293,6 +1293,6 @@
 	E_ExtendingMessage_ExtendingMessageString.Type = extensionTypes[41]
 	E_ExtendingMessage_ExtendingMessageSubmessage.Type = extensionTypes[42]
 	E_MessageSetWireFormatExtension_MessageSetExtension.Type = extensionTypes[43]
-	xxx_Ext_protoFile_goTypes = nil
-	xxx_Ext_protoFile_depIdxs = nil
+	xxx_ProtoFile_extensions_ext_ext_goTypes = nil
+	xxx_ProtoFile_extensions_ext_ext_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/extensions/extra/extra.pb.go b/cmd/protoc-gen-go/testdata/extensions/extra/extra.pb.go
index e9c918d..239dcfa 100644
--- a/cmd/protoc-gen-go/testdata/extensions/extra/extra.pb.go
+++ b/cmd/protoc-gen-go/testdata/extensions/extra/extra.pb.go
@@ -26,7 +26,7 @@
 }
 
 func (m *ExtraMessage) ProtoReflect() protoreflect.Message {
-	return xxx_Extra_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_extensions_extra_extra_messageTypes[0].MessageOf(m)
 }
 func (m *ExtraMessage) Reset()         { *m = ExtraMessage{} }
 func (m *ExtraMessage) String() string { return proto.CompactTextString(m) }
@@ -90,27 +90,27 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Extra_protoFile protoreflect.FileDescriptor
+var ProtoFile_extensions_extra_extra protoreflect.FileDescriptor
 
-var xxx_Extra_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_Extra_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_extensions_extra_extra_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_extensions_extra_extra_goTypes = []interface{}{
 	(*ExtraMessage)(nil), // 0: goproto.protoc.extension.extra.ExtraMessage
 }
-var xxx_Extra_protoFile_depIdxs = []int32{}
+var xxx_ProtoFile_extensions_extra_extra_depIdxs = []int32{}
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	Extra_protoFile = protoimpl.FileBuilder{
+	ProtoFile_extensions_extra_extra = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_496c2a5e9c1e8739,
-		GoTypes:            xxx_Extra_protoFile_goTypes,
-		DependencyIndexes:  xxx_Extra_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_extensions_extra_extra_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_extensions_extra_extra_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_Extra_protoFile_goTypes[0:][:1]
+	messageGoTypes := xxx_ProtoFile_extensions_extra_extra_goTypes[0:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_Extra_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_Extra_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_extensions_extra_extra_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_extensions_extra_extra_messageTypes[i].PBType = mt
 	}
-	xxx_Extra_protoFile_goTypes = nil
-	xxx_Extra_protoFile_depIdxs = nil
+	xxx_ProtoFile_extensions_extra_extra_goTypes = nil
+	xxx_ProtoFile_extensions_extra_extra_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/extensions/proto3/ext3.pb.go b/cmd/protoc-gen-go/testdata/extensions/proto3/ext3.pb.go
index ac1e41e..3af3513 100644
--- a/cmd/protoc-gen-go/testdata/extensions/proto3/ext3.pb.go
+++ b/cmd/protoc-gen-go/testdata/extensions/proto3/ext3.pb.go
@@ -26,7 +26,7 @@
 )
 
 func (e Enum) Type() protoreflect.EnumType {
-	return xxx_Ext3_protoFile_enumTypes[0]
+	return xxx_ProtoFile_extensions_proto3_ext3_enumTypes[0]
 }
 func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -55,7 +55,7 @@
 }
 
 func (m *Message) ProtoReflect() protoreflect.Message {
-	return xxx_Ext3_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_extensions_proto3_ext3_messageTypes[0].MessageOf(m)
 }
 func (m *Message) Reset()         { *m = Message{} }
 func (m *Message) String() string { return proto.CompactTextString(m) }
@@ -647,16 +647,16 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Ext3_protoFile protoreflect.FileDescriptor
+var ProtoFile_extensions_proto3_ext3 protoreflect.FileDescriptor
 
-var xxx_Ext3_protoFile_enumTypes [1]protoreflect.EnumType
-var xxx_Ext3_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_Ext3_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_extensions_proto3_ext3_enumTypes [1]protoreflect.EnumType
+var xxx_ProtoFile_extensions_proto3_ext3_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_extensions_proto3_ext3_goTypes = []interface{}{
 	(Enum)(0),                         // 0: goproto.protoc.extension.proto3.Enum
 	(*Message)(nil),                   // 1: goproto.protoc.extension.proto3.Message
 	(*descriptor.MessageOptions)(nil), // 2: google.protobuf.MessageOptions
 }
-var xxx_Ext3_protoFile_depIdxs = []int32{
+var xxx_ProtoFile_extensions_proto3_ext3_depIdxs = []int32{
 	2, // goproto.protoc.extension.proto3.extension_bool:extendee -> google.protobuf.MessageOptions
 	2, // goproto.protoc.extension.proto3.extension_enum:extendee -> google.protobuf.MessageOptions
 	2, // goproto.protoc.extension.proto3.extension_int32:extendee -> google.protobuf.MessageOptions
@@ -700,18 +700,18 @@
 func init() {
 	var messageTypes [1]protoreflect.MessageType
 	var extensionTypes [34]protoreflect.ExtensionType
-	Ext3_protoFile = protoimpl.FileBuilder{
+	ProtoFile_extensions_proto3_ext3 = protoimpl.FileBuilder{
 		RawDescriptor:        fileDescriptor_3db31bb248c8865e,
-		GoTypes:              xxx_Ext3_protoFile_goTypes,
-		DependencyIndexes:    xxx_Ext3_protoFile_depIdxs,
-		EnumOutputTypes:      xxx_Ext3_protoFile_enumTypes[:],
+		GoTypes:              xxx_ProtoFile_extensions_proto3_ext3_goTypes,
+		DependencyIndexes:    xxx_ProtoFile_extensions_proto3_ext3_depIdxs,
+		EnumOutputTypes:      xxx_ProtoFile_extensions_proto3_ext3_enumTypes[:],
 		MessageOutputTypes:   messageTypes[:],
 		ExtensionOutputTypes: extensionTypes[:],
 	}.Init()
-	messageGoTypes := xxx_Ext3_protoFile_goTypes[1:][:1]
+	messageGoTypes := xxx_ProtoFile_extensions_proto3_ext3_goTypes[1:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_Ext3_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_Ext3_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_extensions_proto3_ext3_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_extensions_proto3_ext3_messageTypes[i].PBType = mt
 	}
 	E_ExtensionBool.Type = extensionTypes[0]
 	E_ExtensionEnum.Type = extensionTypes[1]
@@ -747,6 +747,6 @@
 	E_RepeatedExtensionString.Type = extensionTypes[31]
 	E_RepeatedExtensionBytes.Type = extensionTypes[32]
 	E_RepeatedExtension_Message.Type = extensionTypes[33]
-	xxx_Ext3_protoFile_goTypes = nil
-	xxx_Ext3_protoFile_depIdxs = nil
+	xxx_ProtoFile_extensions_proto3_ext3_goTypes = nil
+	xxx_ProtoFile_extensions_proto3_ext3_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/fieldnames/fieldnames.pb.go b/cmd/protoc-gen-go/testdata/fieldnames/fieldnames.pb.go
index dcf389b..aef8ce0 100644
--- a/cmd/protoc-gen-go/testdata/fieldnames/fieldnames.pb.go
+++ b/cmd/protoc-gen-go/testdata/fieldnames/fieldnames.pb.go
@@ -64,7 +64,7 @@
 }
 
 func (m *Message) ProtoReflect() protoreflect.Message {
-	return xxx_Fieldnames_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_fieldnames_fieldnames_messageTypes[0].MessageOf(m)
 }
 func (m *Message) Reset()         { *m = Message{} }
 func (m *Message) String() string { return proto.CompactTextString(m) }
@@ -291,7 +291,7 @@
 }
 
 func (m *Message_OneofMessageConflict) ProtoReflect() protoreflect.Message {
-	return xxx_Fieldnames_protoFile_messageTypes[1].MessageOf(m)
+	return xxx_ProtoFile_fieldnames_fieldnames_messageTypes[1].MessageOf(m)
 }
 func (m *Message_OneofMessageConflict) Reset()         { *m = Message_OneofMessageConflict{} }
 func (m *Message_OneofMessageConflict) String() string { return proto.CompactTextString(m) }
@@ -390,28 +390,28 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Fieldnames_protoFile protoreflect.FileDescriptor
+var ProtoFile_fieldnames_fieldnames protoreflect.FileDescriptor
 
-var xxx_Fieldnames_protoFile_messageTypes [2]protoimpl.MessageType
-var xxx_Fieldnames_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_fieldnames_fieldnames_messageTypes [2]protoimpl.MessageType
+var xxx_ProtoFile_fieldnames_fieldnames_goTypes = []interface{}{
 	(*Message)(nil),                      // 0: goproto.protoc.fieldnames.Message
 	(*Message_OneofMessageConflict)(nil), // 1: goproto.protoc.fieldnames.Message.OneofMessageConflict
 }
-var xxx_Fieldnames_protoFile_depIdxs = []int32{}
+var xxx_ProtoFile_fieldnames_fieldnames_depIdxs = []int32{}
 
 func init() {
 	var messageTypes [2]protoreflect.MessageType
-	Fieldnames_protoFile = protoimpl.FileBuilder{
+	ProtoFile_fieldnames_fieldnames = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_6bbe3f70febb9403,
-		GoTypes:            xxx_Fieldnames_protoFile_goTypes,
-		DependencyIndexes:  xxx_Fieldnames_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_fieldnames_fieldnames_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_fieldnames_fieldnames_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_Fieldnames_protoFile_goTypes[0:][:2]
+	messageGoTypes := xxx_ProtoFile_fieldnames_fieldnames_goTypes[0:][:2]
 	for i, mt := range messageTypes[:] {
-		xxx_Fieldnames_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_Fieldnames_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_fieldnames_fieldnames_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_fieldnames_fieldnames_messageTypes[i].PBType = mt
 	}
-	xxx_Fieldnames_protoFile_goTypes = nil
-	xxx_Fieldnames_protoFile_depIdxs = nil
+	xxx_ProtoFile_fieldnames_fieldnames_goTypes = nil
+	xxx_ProtoFile_fieldnames_fieldnames_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/import_public/a.pb.go b/cmd/protoc-gen-go/testdata/import_public/a.pb.go
index e11aa6d..88c2a76 100644
--- a/cmd/protoc-gen-go/testdata/import_public/a.pb.go
+++ b/cmd/protoc-gen-go/testdata/import_public/a.pb.go
@@ -72,7 +72,7 @@
 }
 
 func (m *Public) ProtoReflect() protoreflect.Message {
-	return xxx_A_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_import_public_a_messageTypes[0].MessageOf(m)
 }
 func (m *Public) Reset()         { *m = Public{} }
 func (m *Public) String() string { return proto.CompactTextString(m) }
@@ -163,16 +163,16 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var A_protoFile protoreflect.FileDescriptor
+var ProtoFile_import_public_a protoreflect.FileDescriptor
 
-var xxx_A_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_A_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_import_public_a_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_import_public_a_goTypes = []interface{}{
 	(*Public)(nil), // 0: goproto.protoc.import_public.Public
 	(*sub.M)(nil),  // 1: goproto.protoc.import_public.sub.M
 	(sub.E)(0),     // 2: goproto.protoc.import_public.sub.E
 	(*Local)(nil),  // 3: goproto.protoc.import_public.Local
 }
-var xxx_A_protoFile_depIdxs = []int32{
+var xxx_ProtoFile_import_public_a_depIdxs = []int32{
 	1, // goproto.protoc.import_public.Public.m:type_name -> goproto.protoc.import_public.sub.M
 	2, // goproto.protoc.import_public.Public.e:type_name -> goproto.protoc.import_public.sub.E
 	3, // goproto.protoc.import_public.Public.local:type_name -> goproto.protoc.import_public.Local
@@ -180,17 +180,17 @@
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	A_protoFile = protoimpl.FileBuilder{
+	ProtoFile_import_public_a = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_73b7577c95fa6b70,
-		GoTypes:            xxx_A_protoFile_goTypes,
-		DependencyIndexes:  xxx_A_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_import_public_a_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_import_public_a_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_A_protoFile_goTypes[0:][:1]
+	messageGoTypes := xxx_ProtoFile_import_public_a_goTypes[0:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_A_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_A_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_import_public_a_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_import_public_a_messageTypes[i].PBType = mt
 	}
-	xxx_A_protoFile_goTypes = nil
-	xxx_A_protoFile_depIdxs = nil
+	xxx_ProtoFile_import_public_a_goTypes = nil
+	xxx_ProtoFile_import_public_a_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/import_public/b.pb.go b/cmd/protoc-gen-go/testdata/import_public/b.pb.go
index 293e7f3..ce1027a 100644
--- a/cmd/protoc-gen-go/testdata/import_public/b.pb.go
+++ b/cmd/protoc-gen-go/testdata/import_public/b.pb.go
@@ -28,7 +28,7 @@
 }
 
 func (m *Local) ProtoReflect() protoreflect.Message {
-	return xxx_B_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_import_public_b_messageTypes[0].MessageOf(m)
 }
 func (m *Local) Reset()         { *m = Local{} }
 func (m *Local) String() string { return proto.CompactTextString(m) }
@@ -105,32 +105,32 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var B_protoFile protoreflect.FileDescriptor
+var ProtoFile_import_public_b protoreflect.FileDescriptor
 
-var xxx_B_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_B_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_import_public_b_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_import_public_b_goTypes = []interface{}{
 	(*Local)(nil), // 0: goproto.protoc.import_public.Local
 	(*sub.M)(nil), // 1: goproto.protoc.import_public.sub.M
 	(sub.E)(0),    // 2: goproto.protoc.import_public.sub.E
 }
-var xxx_B_protoFile_depIdxs = []int32{
+var xxx_ProtoFile_import_public_b_depIdxs = []int32{
 	1, // goproto.protoc.import_public.Local.m:type_name -> goproto.protoc.import_public.sub.M
 	2, // goproto.protoc.import_public.Local.e:type_name -> goproto.protoc.import_public.sub.E
 }
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	B_protoFile = protoimpl.FileBuilder{
+	ProtoFile_import_public_b = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_84995586b3d09710,
-		GoTypes:            xxx_B_protoFile_goTypes,
-		DependencyIndexes:  xxx_B_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_import_public_b_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_import_public_b_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_B_protoFile_goTypes[0:][:1]
+	messageGoTypes := xxx_ProtoFile_import_public_b_goTypes[0:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_B_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_B_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_import_public_b_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_import_public_b_messageTypes[i].PBType = mt
 	}
-	xxx_B_protoFile_goTypes = nil
-	xxx_B_protoFile_depIdxs = nil
+	xxx_ProtoFile_import_public_b_goTypes = nil
+	xxx_ProtoFile_import_public_b_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go b/cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go
index 7720ca5..981bf90 100644
--- a/cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go
+++ b/cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go
@@ -31,7 +31,7 @@
 )
 
 func (e E) Type() protoreflect.EnumType {
-	return xxx_A_protoFile_enumTypes[0]
+	return xxx_ProtoFile_import_public_sub_a_enumTypes[0]
 }
 func (e E) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -75,7 +75,7 @@
 )
 
 func (e M_Subenum) Type() protoreflect.EnumType {
-	return xxx_A_protoFile_enumTypes[1]
+	return xxx_ProtoFile_import_public_sub_a_enumTypes[1]
 }
 func (e M_Subenum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -119,7 +119,7 @@
 )
 
 func (e M_Submessage_Submessage_Subenum) Type() protoreflect.EnumType {
-	return xxx_A_protoFile_enumTypes[2]
+	return xxx_ProtoFile_import_public_sub_a_enumTypes[2]
 }
 func (e M_Submessage_Submessage_Subenum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -173,7 +173,7 @@
 }
 
 func (m *M) ProtoReflect() protoreflect.Message {
-	return xxx_A_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_import_public_sub_a_messageTypes[0].MessageOf(m)
 }
 func (m *M) Reset()         { *m = M{} }
 func (m *M) String() string { return proto.CompactTextString(m) }
@@ -297,7 +297,7 @@
 }
 
 func (m *M_Submessage) ProtoReflect() protoreflect.Message {
-	return xxx_A_protoFile_messageTypes[1].MessageOf(m)
+	return xxx_ProtoFile_import_public_sub_a_messageTypes[1].MessageOf(m)
 }
 func (m *M_Submessage) Reset()         { *m = M_Submessage{} }
 func (m *M_Submessage) String() string { return proto.CompactTextString(m) }
@@ -448,11 +448,11 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var A_protoFile protoreflect.FileDescriptor
+var ProtoFile_import_public_sub_a protoreflect.FileDescriptor
 
-var xxx_A_protoFile_enumTypes [3]protoreflect.EnumType
-var xxx_A_protoFile_messageTypes [2]protoimpl.MessageType
-var xxx_A_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_import_public_sub_a_enumTypes [3]protoreflect.EnumType
+var xxx_ProtoFile_import_public_sub_a_messageTypes [2]protoimpl.MessageType
+var xxx_ProtoFile_import_public_sub_a_goTypes = []interface{}{
 	(E)(0),                               // 0: goproto.protoc.import_public.sub.E
 	(M_Subenum)(0),                       // 1: goproto.protoc.import_public.sub.M.Subenum
 	(M_Submessage_Submessage_Subenum)(0), // 2: goproto.protoc.import_public.sub.M.Submessage.Submessage_Subenum
@@ -460,7 +460,7 @@
 	(*M_Submessage)(nil),                 // 4: goproto.protoc.import_public.sub.M.Submessage
 	(*M2)(nil),                           // 5: goproto.protoc.import_public.sub.M2
 }
-var xxx_A_protoFile_depIdxs = []int32{
+var xxx_ProtoFile_import_public_sub_a_depIdxs = []int32{
 	3, // goproto.protoc.import_public.sub.extension_field:extendee -> goproto.protoc.import_public.sub.M
 	5, // goproto.protoc.import_public.sub.M.m2:type_name -> goproto.protoc.import_public.sub.M2
 }
@@ -468,20 +468,20 @@
 func init() {
 	var messageTypes [2]protoreflect.MessageType
 	var extensionTypes [1]protoreflect.ExtensionType
-	A_protoFile = protoimpl.FileBuilder{
+	ProtoFile_import_public_sub_a = protoimpl.FileBuilder{
 		RawDescriptor:        fileDescriptor_382f7805394b5c4e,
-		GoTypes:              xxx_A_protoFile_goTypes,
-		DependencyIndexes:    xxx_A_protoFile_depIdxs,
-		EnumOutputTypes:      xxx_A_protoFile_enumTypes[:],
+		GoTypes:              xxx_ProtoFile_import_public_sub_a_goTypes,
+		DependencyIndexes:    xxx_ProtoFile_import_public_sub_a_depIdxs,
+		EnumOutputTypes:      xxx_ProtoFile_import_public_sub_a_enumTypes[:],
 		MessageOutputTypes:   messageTypes[:],
 		ExtensionOutputTypes: extensionTypes[:],
 	}.Init()
-	messageGoTypes := xxx_A_protoFile_goTypes[3:][:2]
+	messageGoTypes := xxx_ProtoFile_import_public_sub_a_goTypes[3:][:2]
 	for i, mt := range messageTypes[:] {
-		xxx_A_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_A_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_import_public_sub_a_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_import_public_sub_a_messageTypes[i].PBType = mt
 	}
 	E_ExtensionField.Type = extensionTypes[0]
-	xxx_A_protoFile_goTypes = nil
-	xxx_A_protoFile_depIdxs = nil
+	xxx_ProtoFile_import_public_sub_a_goTypes = nil
+	xxx_ProtoFile_import_public_sub_a_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/import_public/sub/b.pb.go b/cmd/protoc-gen-go/testdata/import_public/sub/b.pb.go
index c6fb061..7a00609 100644
--- a/cmd/protoc-gen-go/testdata/import_public/sub/b.pb.go
+++ b/cmd/protoc-gen-go/testdata/import_public/sub/b.pb.go
@@ -25,7 +25,7 @@
 }
 
 func (m *M2) ProtoReflect() protoreflect.Message {
-	return xxx_B_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_import_public_sub_b_messageTypes[0].MessageOf(m)
 }
 func (m *M2) Reset()         { *m = M2{} }
 func (m *M2) String() string { return proto.CompactTextString(m) }
@@ -81,27 +81,27 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var B_protoFile protoreflect.FileDescriptor
+var ProtoFile_import_public_sub_b protoreflect.FileDescriptor
 
-var xxx_B_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_B_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_import_public_sub_b_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_import_public_sub_b_goTypes = []interface{}{
 	(*M2)(nil), // 0: goproto.protoc.import_public.sub.M2
 }
-var xxx_B_protoFile_depIdxs = []int32{}
+var xxx_ProtoFile_import_public_sub_b_depIdxs = []int32{}
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	B_protoFile = protoimpl.FileBuilder{
+	ProtoFile_import_public_sub_b = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_fc66afda3d7c2232,
-		GoTypes:            xxx_B_protoFile_goTypes,
-		DependencyIndexes:  xxx_B_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_import_public_sub_b_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_import_public_sub_b_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_B_protoFile_goTypes[0:][:1]
+	messageGoTypes := xxx_ProtoFile_import_public_sub_b_goTypes[0:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_B_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_B_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_import_public_sub_b_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_import_public_sub_b_messageTypes[i].PBType = mt
 	}
-	xxx_B_protoFile_goTypes = nil
-	xxx_B_protoFile_depIdxs = nil
+	xxx_ProtoFile_import_public_sub_b_goTypes = nil
+	xxx_ProtoFile_import_public_sub_b_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/import_public/sub2/a.pb.go b/cmd/protoc-gen-go/testdata/import_public/sub2/a.pb.go
index 8088da2..bd2e822 100644
--- a/cmd/protoc-gen-go/testdata/import_public/sub2/a.pb.go
+++ b/cmd/protoc-gen-go/testdata/import_public/sub2/a.pb.go
@@ -25,7 +25,7 @@
 }
 
 func (m *Sub2Message) ProtoReflect() protoreflect.Message {
-	return xxx_A_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_import_public_sub2_a_messageTypes[0].MessageOf(m)
 }
 func (m *Sub2Message) Reset()         { *m = Sub2Message{} }
 func (m *Sub2Message) String() string { return proto.CompactTextString(m) }
@@ -81,27 +81,27 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var A_protoFile protoreflect.FileDescriptor
+var ProtoFile_import_public_sub2_a protoreflect.FileDescriptor
 
-var xxx_A_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_A_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_import_public_sub2_a_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_import_public_sub2_a_goTypes = []interface{}{
 	(*Sub2Message)(nil), // 0: goproto.protoc.import_public.sub2.Sub2Message
 }
-var xxx_A_protoFile_depIdxs = []int32{}
+var xxx_ProtoFile_import_public_sub2_a_depIdxs = []int32{}
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	A_protoFile = protoimpl.FileBuilder{
+	ProtoFile_import_public_sub2_a = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_7ac53d99328778ac,
-		GoTypes:            xxx_A_protoFile_goTypes,
-		DependencyIndexes:  xxx_A_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_import_public_sub2_a_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_import_public_sub2_a_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_A_protoFile_goTypes[0:][:1]
+	messageGoTypes := xxx_ProtoFile_import_public_sub2_a_goTypes[0:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_A_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_A_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_import_public_sub2_a_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_import_public_sub2_a_messageTypes[i].PBType = mt
 	}
-	xxx_A_protoFile_goTypes = nil
-	xxx_A_protoFile_depIdxs = nil
+	xxx_ProtoFile_import_public_sub2_a_goTypes = nil
+	xxx_ProtoFile_import_public_sub2_a_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/imports/fmt/m.pb.go b/cmd/protoc-gen-go/testdata/imports/fmt/m.pb.go
index 03b77c9..62b60ae 100644
--- a/cmd/protoc-gen-go/testdata/imports/fmt/m.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/fmt/m.pb.go
@@ -25,7 +25,7 @@
 }
 
 func (m *M) ProtoReflect() protoreflect.Message {
-	return xxx_M_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_imports_fmt_m_messageTypes[0].MessageOf(m)
 }
 func (m *M) Reset()         { *m = M{} }
 func (m *M) String() string { return proto.CompactTextString(m) }
@@ -78,27 +78,27 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var M_protoFile protoreflect.FileDescriptor
+var ProtoFile_imports_fmt_m protoreflect.FileDescriptor
 
-var xxx_M_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_M_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_imports_fmt_m_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_imports_fmt_m_goTypes = []interface{}{
 	(*M)(nil), // 0: fmt.M
 }
-var xxx_M_protoFile_depIdxs = []int32{}
+var xxx_ProtoFile_imports_fmt_m_depIdxs = []int32{}
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	M_protoFile = protoimpl.FileBuilder{
+	ProtoFile_imports_fmt_m = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_72c126fcd452e392,
-		GoTypes:            xxx_M_protoFile_goTypes,
-		DependencyIndexes:  xxx_M_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_imports_fmt_m_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_imports_fmt_m_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_M_protoFile_goTypes[0:][:1]
+	messageGoTypes := xxx_ProtoFile_imports_fmt_m_goTypes[0:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_M_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_M_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_imports_fmt_m_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_imports_fmt_m_messageTypes[i].PBType = mt
 	}
-	xxx_M_protoFile_goTypes = nil
-	xxx_M_protoFile_depIdxs = nil
+	xxx_ProtoFile_imports_fmt_m_goTypes = nil
+	xxx_ProtoFile_imports_fmt_m_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go b/cmd/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go
index 04c8066..bdab9b3 100644
--- a/cmd/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go
@@ -25,7 +25,7 @@
 )
 
 func (e E1) Type() protoreflect.EnumType {
-	return xxx_M1_protoFile_enumTypes[0]
+	return xxx_ProtoFile_imports_test_a_1_m1_enumTypes[0]
 }
 func (e E1) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -54,7 +54,7 @@
 }
 
 func (m *M1) ProtoReflect() protoreflect.Message {
-	return xxx_M1_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_imports_test_a_1_m1_messageTypes[0].MessageOf(m)
 }
 func (m *M1) Reset()         { *m = M1{} }
 func (m *M1) String() string { return proto.CompactTextString(m) }
@@ -89,7 +89,7 @@
 }
 
 func (m *M1_1) ProtoReflect() protoreflect.Message {
-	return xxx_M1_protoFile_messageTypes[1].MessageOf(m)
+	return xxx_ProtoFile_imports_test_a_1_m1_messageTypes[1].MessageOf(m)
 }
 func (m *M1_1) Reset()         { *m = M1_1{} }
 func (m *M1_1) String() string { return proto.CompactTextString(m) }
@@ -155,33 +155,33 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var M1_protoFile protoreflect.FileDescriptor
+var ProtoFile_imports_test_a_1_m1 protoreflect.FileDescriptor
 
-var xxx_M1_protoFile_enumTypes [1]protoreflect.EnumType
-var xxx_M1_protoFile_messageTypes [2]protoimpl.MessageType
-var xxx_M1_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_imports_test_a_1_m1_enumTypes [1]protoreflect.EnumType
+var xxx_ProtoFile_imports_test_a_1_m1_messageTypes [2]protoimpl.MessageType
+var xxx_ProtoFile_imports_test_a_1_m1_goTypes = []interface{}{
 	(E1)(0),      // 0: test.a.E1
 	(*M1)(nil),   // 1: test.a.M1
 	(*M1_1)(nil), // 2: test.a.M1_1
 }
-var xxx_M1_protoFile_depIdxs = []int32{
+var xxx_ProtoFile_imports_test_a_1_m1_depIdxs = []int32{
 	1, // test.a.M1_1.m1:type_name -> test.a.M1
 }
 
 func init() {
 	var messageTypes [2]protoreflect.MessageType
-	M1_protoFile = protoimpl.FileBuilder{
+	ProtoFile_imports_test_a_1_m1 = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_c1091de3fa870a14,
-		GoTypes:            xxx_M1_protoFile_goTypes,
-		DependencyIndexes:  xxx_M1_protoFile_depIdxs,
-		EnumOutputTypes:    xxx_M1_protoFile_enumTypes[:],
+		GoTypes:            xxx_ProtoFile_imports_test_a_1_m1_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_imports_test_a_1_m1_depIdxs,
+		EnumOutputTypes:    xxx_ProtoFile_imports_test_a_1_m1_enumTypes[:],
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_M1_protoFile_goTypes[1:][:2]
+	messageGoTypes := xxx_ProtoFile_imports_test_a_1_m1_goTypes[1:][:2]
 	for i, mt := range messageTypes[:] {
-		xxx_M1_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_M1_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_imports_test_a_1_m1_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_imports_test_a_1_m1_messageTypes[i].PBType = mt
 	}
-	xxx_M1_protoFile_goTypes = nil
-	xxx_M1_protoFile_depIdxs = nil
+	xxx_ProtoFile_imports_test_a_1_m1_goTypes = nil
+	xxx_ProtoFile_imports_test_a_1_m1_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/imports/test_a_1/m2.pb.go b/cmd/protoc-gen-go/testdata/imports/test_a_1/m2.pb.go
index 7fc0217..e71523e 100644
--- a/cmd/protoc-gen-go/testdata/imports/test_a_1/m2.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/test_a_1/m2.pb.go
@@ -25,7 +25,7 @@
 }
 
 func (m *M2) ProtoReflect() protoreflect.Message {
-	return xxx_M2_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_imports_test_a_1_m2_messageTypes[0].MessageOf(m)
 }
 func (m *M2) Reset()         { *m = M2{} }
 func (m *M2) String() string { return proto.CompactTextString(m) }
@@ -79,27 +79,27 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var M2_protoFile protoreflect.FileDescriptor
+var ProtoFile_imports_test_a_1_m2 protoreflect.FileDescriptor
 
-var xxx_M2_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_M2_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_imports_test_a_1_m2_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_imports_test_a_1_m2_goTypes = []interface{}{
 	(*M2)(nil), // 0: test.a.M2
 }
-var xxx_M2_protoFile_depIdxs = []int32{}
+var xxx_ProtoFile_imports_test_a_1_m2_depIdxs = []int32{}
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	M2_protoFile = protoimpl.FileBuilder{
+	ProtoFile_imports_test_a_1_m2 = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_20cf27515c0d621c,
-		GoTypes:            xxx_M2_protoFile_goTypes,
-		DependencyIndexes:  xxx_M2_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_imports_test_a_1_m2_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_imports_test_a_1_m2_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_M2_protoFile_goTypes[0:][:1]
+	messageGoTypes := xxx_ProtoFile_imports_test_a_1_m2_goTypes[0:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_M2_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_M2_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_imports_test_a_1_m2_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_imports_test_a_1_m2_messageTypes[i].PBType = mt
 	}
-	xxx_M2_protoFile_goTypes = nil
-	xxx_M2_protoFile_depIdxs = nil
+	xxx_ProtoFile_imports_test_a_1_m2_goTypes = nil
+	xxx_ProtoFile_imports_test_a_1_m2_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/imports/test_a_2/m3.pb.go b/cmd/protoc-gen-go/testdata/imports/test_a_2/m3.pb.go
index e187776..7280b96 100644
--- a/cmd/protoc-gen-go/testdata/imports/test_a_2/m3.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/test_a_2/m3.pb.go
@@ -25,7 +25,7 @@
 }
 
 func (m *M3) ProtoReflect() protoreflect.Message {
-	return xxx_M3_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_imports_test_a_2_m3_messageTypes[0].MessageOf(m)
 }
 func (m *M3) Reset()         { *m = M3{} }
 func (m *M3) String() string { return proto.CompactTextString(m) }
@@ -79,27 +79,27 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var M3_protoFile protoreflect.FileDescriptor
+var ProtoFile_imports_test_a_2_m3 protoreflect.FileDescriptor
 
-var xxx_M3_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_M3_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_imports_test_a_2_m3_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_imports_test_a_2_m3_goTypes = []interface{}{
 	(*M3)(nil), // 0: test.a.M3
 }
-var xxx_M3_protoFile_depIdxs = []int32{}
+var xxx_ProtoFile_imports_test_a_2_m3_depIdxs = []int32{}
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	M3_protoFile = protoimpl.FileBuilder{
+	ProtoFile_imports_test_a_2_m3 = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_ff9d8f834875c9c5,
-		GoTypes:            xxx_M3_protoFile_goTypes,
-		DependencyIndexes:  xxx_M3_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_imports_test_a_2_m3_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_imports_test_a_2_m3_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_M3_protoFile_goTypes[0:][:1]
+	messageGoTypes := xxx_ProtoFile_imports_test_a_2_m3_goTypes[0:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_M3_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_M3_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_imports_test_a_2_m3_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_imports_test_a_2_m3_messageTypes[i].PBType = mt
 	}
-	xxx_M3_protoFile_goTypes = nil
-	xxx_M3_protoFile_depIdxs = nil
+	xxx_ProtoFile_imports_test_a_2_m3_goTypes = nil
+	xxx_ProtoFile_imports_test_a_2_m3_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/imports/test_a_2/m4.pb.go b/cmd/protoc-gen-go/testdata/imports/test_a_2/m4.pb.go
index 9c46cda..6c7a8c0 100644
--- a/cmd/protoc-gen-go/testdata/imports/test_a_2/m4.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/test_a_2/m4.pb.go
@@ -25,7 +25,7 @@
 }
 
 func (m *M4) ProtoReflect() protoreflect.Message {
-	return xxx_M4_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_imports_test_a_2_m4_messageTypes[0].MessageOf(m)
 }
 func (m *M4) Reset()         { *m = M4{} }
 func (m *M4) String() string { return proto.CompactTextString(m) }
@@ -79,27 +79,27 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var M4_protoFile protoreflect.FileDescriptor
+var ProtoFile_imports_test_a_2_m4 protoreflect.FileDescriptor
 
-var xxx_M4_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_M4_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_imports_test_a_2_m4_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_imports_test_a_2_m4_goTypes = []interface{}{
 	(*M4)(nil), // 0: test.a.M4
 }
-var xxx_M4_protoFile_depIdxs = []int32{}
+var xxx_ProtoFile_imports_test_a_2_m4_depIdxs = []int32{}
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	M4_protoFile = protoimpl.FileBuilder{
+	ProtoFile_imports_test_a_2_m4 = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_fdd24f82f6c5a786,
-		GoTypes:            xxx_M4_protoFile_goTypes,
-		DependencyIndexes:  xxx_M4_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_imports_test_a_2_m4_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_imports_test_a_2_m4_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_M4_protoFile_goTypes[0:][:1]
+	messageGoTypes := xxx_ProtoFile_imports_test_a_2_m4_goTypes[0:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_M4_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_M4_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_imports_test_a_2_m4_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_imports_test_a_2_m4_messageTypes[i].PBType = mt
 	}
-	xxx_M4_protoFile_goTypes = nil
-	xxx_M4_protoFile_depIdxs = nil
+	xxx_ProtoFile_imports_test_a_2_m4_goTypes = nil
+	xxx_ProtoFile_imports_test_a_2_m4_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/imports/test_b_1/m1.pb.go b/cmd/protoc-gen-go/testdata/imports/test_b_1/m1.pb.go
index d653a28..8237a77 100644
--- a/cmd/protoc-gen-go/testdata/imports/test_b_1/m1.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/test_b_1/m1.pb.go
@@ -25,7 +25,7 @@
 }
 
 func (m *M1) ProtoReflect() protoreflect.Message {
-	return xxx_M1_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_imports_test_b_1_m1_messageTypes[0].MessageOf(m)
 }
 func (m *M1) Reset()         { *m = M1{} }
 func (m *M1) String() string { return proto.CompactTextString(m) }
@@ -80,27 +80,27 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var M1_protoFile protoreflect.FileDescriptor
+var ProtoFile_imports_test_b_1_m1 protoreflect.FileDescriptor
 
-var xxx_M1_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_M1_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_imports_test_b_1_m1_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_imports_test_b_1_m1_goTypes = []interface{}{
 	(*M1)(nil), // 0: test.b.part1.M1
 }
-var xxx_M1_protoFile_depIdxs = []int32{}
+var xxx_ProtoFile_imports_test_b_1_m1_depIdxs = []int32{}
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	M1_protoFile = protoimpl.FileBuilder{
+	ProtoFile_imports_test_b_1_m1 = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_7f49573d035512a8,
-		GoTypes:            xxx_M1_protoFile_goTypes,
-		DependencyIndexes:  xxx_M1_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_imports_test_b_1_m1_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_imports_test_b_1_m1_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_M1_protoFile_goTypes[0:][:1]
+	messageGoTypes := xxx_ProtoFile_imports_test_b_1_m1_goTypes[0:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_M1_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_M1_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_imports_test_b_1_m1_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_imports_test_b_1_m1_messageTypes[i].PBType = mt
 	}
-	xxx_M1_protoFile_goTypes = nil
-	xxx_M1_protoFile_depIdxs = nil
+	xxx_ProtoFile_imports_test_b_1_m1_goTypes = nil
+	xxx_ProtoFile_imports_test_b_1_m1_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/imports/test_b_1/m2.pb.go b/cmd/protoc-gen-go/testdata/imports/test_b_1/m2.pb.go
index da97ed3..ddf57b1 100644
--- a/cmd/protoc-gen-go/testdata/imports/test_b_1/m2.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/test_b_1/m2.pb.go
@@ -25,7 +25,7 @@
 }
 
 func (m *M2) ProtoReflect() protoreflect.Message {
-	return xxx_M2_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_imports_test_b_1_m2_messageTypes[0].MessageOf(m)
 }
 func (m *M2) Reset()         { *m = M2{} }
 func (m *M2) String() string { return proto.CompactTextString(m) }
@@ -80,27 +80,27 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var M2_protoFile protoreflect.FileDescriptor
+var ProtoFile_imports_test_b_1_m2 protoreflect.FileDescriptor
 
-var xxx_M2_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_M2_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_imports_test_b_1_m2_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_imports_test_b_1_m2_goTypes = []interface{}{
 	(*M2)(nil), // 0: test.b.part2.M2
 }
-var xxx_M2_protoFile_depIdxs = []int32{}
+var xxx_ProtoFile_imports_test_b_1_m2_depIdxs = []int32{}
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	M2_protoFile = protoimpl.FileBuilder{
+	ProtoFile_imports_test_b_1_m2 = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_a1becddceeb586f2,
-		GoTypes:            xxx_M2_protoFile_goTypes,
-		DependencyIndexes:  xxx_M2_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_imports_test_b_1_m2_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_imports_test_b_1_m2_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_M2_protoFile_goTypes[0:][:1]
+	messageGoTypes := xxx_ProtoFile_imports_test_b_1_m2_goTypes[0:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_M2_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_M2_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_imports_test_b_1_m2_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_imports_test_b_1_m2_messageTypes[i].PBType = mt
 	}
-	xxx_M2_protoFile_goTypes = nil
-	xxx_M2_protoFile_depIdxs = nil
+	xxx_ProtoFile_imports_test_b_1_m2_goTypes = nil
+	xxx_ProtoFile_imports_test_b_1_m2_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/imports/test_import_a1m1.pb.go b/cmd/protoc-gen-go/testdata/imports/test_import_a1m1.pb.go
index a37af85..84ed62d 100644
--- a/cmd/protoc-gen-go/testdata/imports/test_import_a1m1.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/test_import_a1m1.pb.go
@@ -27,7 +27,7 @@
 }
 
 func (m *A1M1) ProtoReflect() protoreflect.Message {
-	return xxx_TestImportA1M1_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_imports_test_import_a1m1_messageTypes[0].MessageOf(m)
 }
 func (m *A1M1) Reset()         { *m = A1M1{} }
 func (m *A1M1) String() string { return proto.CompactTextString(m) }
@@ -91,30 +91,30 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var TestImportA1M1_protoFile protoreflect.FileDescriptor
+var ProtoFile_imports_test_import_a1m1 protoreflect.FileDescriptor
 
-var xxx_TestImportA1M1_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_TestImportA1M1_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_imports_test_import_a1m1_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_imports_test_import_a1m1_goTypes = []interface{}{
 	(*A1M1)(nil),        // 0: test.A1M1
 	(*test_a_1.M1)(nil), // 1: test.a.M1
 }
-var xxx_TestImportA1M1_protoFile_depIdxs = []int32{
+var xxx_ProtoFile_imports_test_import_a1m1_depIdxs = []int32{
 	1, // test.A1M1.f:type_name -> test.a.M1
 }
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	TestImportA1M1_protoFile = protoimpl.FileBuilder{
+	ProtoFile_imports_test_import_a1m1 = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_3b904a47327455f3,
-		GoTypes:            xxx_TestImportA1M1_protoFile_goTypes,
-		DependencyIndexes:  xxx_TestImportA1M1_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_imports_test_import_a1m1_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_imports_test_import_a1m1_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_TestImportA1M1_protoFile_goTypes[0:][:1]
+	messageGoTypes := xxx_ProtoFile_imports_test_import_a1m1_goTypes[0:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_TestImportA1M1_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_TestImportA1M1_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_imports_test_import_a1m1_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_imports_test_import_a1m1_messageTypes[i].PBType = mt
 	}
-	xxx_TestImportA1M1_protoFile_goTypes = nil
-	xxx_TestImportA1M1_protoFile_depIdxs = nil
+	xxx_ProtoFile_imports_test_import_a1m1_goTypes = nil
+	xxx_ProtoFile_imports_test_import_a1m1_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/imports/test_import_a1m2.pb.go b/cmd/protoc-gen-go/testdata/imports/test_import_a1m2.pb.go
index 58e5298..162ffe5 100644
--- a/cmd/protoc-gen-go/testdata/imports/test_import_a1m2.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/test_import_a1m2.pb.go
@@ -27,7 +27,7 @@
 }
 
 func (m *A1M2) ProtoReflect() protoreflect.Message {
-	return xxx_TestImportA1M2_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_imports_test_import_a1m2_messageTypes[0].MessageOf(m)
 }
 func (m *A1M2) Reset()         { *m = A1M2{} }
 func (m *A1M2) String() string { return proto.CompactTextString(m) }
@@ -91,30 +91,30 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var TestImportA1M2_protoFile protoreflect.FileDescriptor
+var ProtoFile_imports_test_import_a1m2 protoreflect.FileDescriptor
 
-var xxx_TestImportA1M2_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_TestImportA1M2_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_imports_test_import_a1m2_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_imports_test_import_a1m2_goTypes = []interface{}{
 	(*A1M2)(nil),        // 0: test.A1M2
 	(*test_a_1.M2)(nil), // 1: test.a.M2
 }
-var xxx_TestImportA1M2_protoFile_depIdxs = []int32{
+var xxx_ProtoFile_imports_test_import_a1m2_depIdxs = []int32{
 	1, // test.A1M2.f:type_name -> test.a.M2
 }
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	TestImportA1M2_protoFile = protoimpl.FileBuilder{
+	ProtoFile_imports_test_import_a1m2 = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_bdb27b114687957d,
-		GoTypes:            xxx_TestImportA1M2_protoFile_goTypes,
-		DependencyIndexes:  xxx_TestImportA1M2_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_imports_test_import_a1m2_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_imports_test_import_a1m2_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_TestImportA1M2_protoFile_goTypes[0:][:1]
+	messageGoTypes := xxx_ProtoFile_imports_test_import_a1m2_goTypes[0:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_TestImportA1M2_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_TestImportA1M2_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_imports_test_import_a1m2_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_imports_test_import_a1m2_messageTypes[i].PBType = mt
 	}
-	xxx_TestImportA1M2_protoFile_goTypes = nil
-	xxx_TestImportA1M2_protoFile_depIdxs = nil
+	xxx_ProtoFile_imports_test_import_a1m2_goTypes = nil
+	xxx_ProtoFile_imports_test_import_a1m2_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/imports/test_import_all.pb.go b/cmd/protoc-gen-go/testdata/imports/test_import_all.pb.go
index e094fac..2329baf 100644
--- a/cmd/protoc-gen-go/testdata/imports/test_import_all.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/test_import_all.pb.go
@@ -34,7 +34,7 @@
 }
 
 func (m *All) ProtoReflect() protoreflect.Message {
-	return xxx_TestImportAll_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_imports_test_import_all_messageTypes[0].MessageOf(m)
 }
 func (m *All) Reset()         { *m = All{} }
 func (m *All) String() string { return proto.CompactTextString(m) }
@@ -144,10 +144,10 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var TestImportAll_protoFile protoreflect.FileDescriptor
+var ProtoFile_imports_test_import_all protoreflect.FileDescriptor
 
-var xxx_TestImportAll_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_TestImportAll_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_imports_test_import_all_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_imports_test_import_all_goTypes = []interface{}{
 	(*All)(nil),         // 0: test.All
 	(*test_a_1.M1)(nil), // 1: test.a.M1
 	(*test_a_1.M2)(nil), // 2: test.a.M2
@@ -155,7 +155,7 @@
 	(*test_b_1.M2)(nil), // 4: test.b.part2.M2
 	(*fmt.M)(nil),       // 5: fmt.M
 }
-var xxx_TestImportAll_protoFile_depIdxs = []int32{
+var xxx_ProtoFile_imports_test_import_all_depIdxs = []int32{
 	1, // test.All.am1:type_name -> test.a.M1
 	2, // test.All.am2:type_name -> test.a.M2
 	3, // test.All.bm1:type_name -> test.b.part1.M1
@@ -165,17 +165,17 @@
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	TestImportAll_protoFile = protoimpl.FileBuilder{
+	ProtoFile_imports_test_import_all = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_324466f0afc16f77,
-		GoTypes:            xxx_TestImportAll_protoFile_goTypes,
-		DependencyIndexes:  xxx_TestImportAll_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_imports_test_import_all_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_imports_test_import_all_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_TestImportAll_protoFile_goTypes[0:][:1]
+	messageGoTypes := xxx_ProtoFile_imports_test_import_all_goTypes[0:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_TestImportAll_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_TestImportAll_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_imports_test_import_all_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_imports_test_import_all_messageTypes[i].PBType = mt
 	}
-	xxx_TestImportAll_protoFile_goTypes = nil
-	xxx_TestImportAll_protoFile_depIdxs = nil
+	xxx_ProtoFile_imports_test_import_all_goTypes = nil
+	xxx_ProtoFile_imports_test_import_all_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/issue780_oneof_conflict/test.pb.go b/cmd/protoc-gen-go/testdata/issue780_oneof_conflict/test.pb.go
index 0b187d4..3ece6d1 100644
--- a/cmd/protoc-gen-go/testdata/issue780_oneof_conflict/test.pb.go
+++ b/cmd/protoc-gen-go/testdata/issue780_oneof_conflict/test.pb.go
@@ -28,7 +28,7 @@
 }
 
 func (m *Foo) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_issue780_oneof_conflict_test_messageTypes[0].MessageOf(m)
 }
 func (m *Foo) Reset()         { *m = Foo{} }
 func (m *Foo) String() string { return proto.CompactTextString(m) }
@@ -111,27 +111,27 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Test_protoFile protoreflect.FileDescriptor
+var ProtoFile_issue780_oneof_conflict_test protoreflect.FileDescriptor
 
-var xxx_Test_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_Test_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_issue780_oneof_conflict_test_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_issue780_oneof_conflict_test_goTypes = []interface{}{
 	(*Foo)(nil), // 0: oneoftest.Foo
 }
-var xxx_Test_protoFile_depIdxs = []int32{}
+var xxx_ProtoFile_issue780_oneof_conflict_test_depIdxs = []int32{}
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	Test_protoFile = protoimpl.FileBuilder{
+	ProtoFile_issue780_oneof_conflict_test = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_48462cafc802a68e,
-		GoTypes:            xxx_Test_protoFile_goTypes,
-		DependencyIndexes:  xxx_Test_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_issue780_oneof_conflict_test_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_issue780_oneof_conflict_test_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_Test_protoFile_goTypes[0:][:1]
+	messageGoTypes := xxx_ProtoFile_issue780_oneof_conflict_test_goTypes[0:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_Test_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_Test_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_issue780_oneof_conflict_test_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_issue780_oneof_conflict_test_messageTypes[i].PBType = mt
 	}
-	xxx_Test_protoFile_goTypes = nil
-	xxx_Test_protoFile_depIdxs = nil
+	xxx_ProtoFile_issue780_oneof_conflict_test_goTypes = nil
+	xxx_ProtoFile_issue780_oneof_conflict_test_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go b/cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go
index a1f8252..6cfd525 100644
--- a/cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go
+++ b/cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go
@@ -25,7 +25,7 @@
 )
 
 func (e Enum) Type() protoreflect.EnumType {
-	return xxx_Nopackage_protoFile_enumTypes[0]
+	return xxx_ProtoFile_nopackage_nopackage_enumTypes[0]
 }
 func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -71,7 +71,7 @@
 }
 
 func (m *Message) ProtoReflect() protoreflect.Message {
-	return xxx_Nopackage_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_nopackage_nopackage_messageTypes[0].MessageOf(m)
 }
 func (m *Message) Reset()         { *m = Message{} }
 func (m *Message) String() string { return proto.CompactTextString(m) }
@@ -143,32 +143,32 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Nopackage_protoFile protoreflect.FileDescriptor
+var ProtoFile_nopackage_nopackage protoreflect.FileDescriptor
 
-var xxx_Nopackage_protoFile_enumTypes [1]protoreflect.EnumType
-var xxx_Nopackage_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_Nopackage_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_nopackage_nopackage_enumTypes [1]protoreflect.EnumType
+var xxx_ProtoFile_nopackage_nopackage_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_nopackage_nopackage_goTypes = []interface{}{
 	(Enum)(0),       // 0: Enum
 	(*Message)(nil), // 1: Message
 }
-var xxx_Nopackage_protoFile_depIdxs = []int32{
+var xxx_ProtoFile_nopackage_nopackage_depIdxs = []int32{
 	0, // Message.enum_field:type_name -> Enum
 }
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	Nopackage_protoFile = protoimpl.FileBuilder{
+	ProtoFile_nopackage_nopackage = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_f33a1d5d178c43c9,
-		GoTypes:            xxx_Nopackage_protoFile_goTypes,
-		DependencyIndexes:  xxx_Nopackage_protoFile_depIdxs,
-		EnumOutputTypes:    xxx_Nopackage_protoFile_enumTypes[:],
+		GoTypes:            xxx_ProtoFile_nopackage_nopackage_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_nopackage_nopackage_depIdxs,
+		EnumOutputTypes:    xxx_ProtoFile_nopackage_nopackage_enumTypes[:],
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_Nopackage_protoFile_goTypes[1:][:1]
+	messageGoTypes := xxx_ProtoFile_nopackage_nopackage_goTypes[1:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_Nopackage_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_Nopackage_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_nopackage_nopackage_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_nopackage_nopackage_messageTypes[i].PBType = mt
 	}
-	xxx_Nopackage_protoFile_goTypes = nil
-	xxx_Nopackage_protoFile_depIdxs = nil
+	xxx_ProtoFile_nopackage_nopackage_goTypes = nil
+	xxx_ProtoFile_nopackage_nopackage_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/proto2/enum.pb.go b/cmd/protoc-gen-go/testdata/proto2/enum.pb.go
index a18531b..02e8d3f 100644
--- a/cmd/protoc-gen-go/testdata/proto2/enum.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto2/enum.pb.go
@@ -29,7 +29,7 @@
 )
 
 func (e EnumType1) Type() protoreflect.EnumType {
-	return xxx_Enum_protoFile_enumTypes[0]
+	return xxx_ProtoFile_proto2_enum_enumTypes[0]
 }
 func (e EnumType1) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -76,7 +76,7 @@
 )
 
 func (e EnumType2) Type() protoreflect.EnumType {
-	return xxx_Enum_protoFile_enumTypes[1]
+	return xxx_ProtoFile_proto2_enum_enumTypes[1]
 }
 func (e EnumType2) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -124,7 +124,7 @@
 )
 
 func (e EnumContainerMessage1_NestedEnumType1A) Type() protoreflect.EnumType {
-	return xxx_Enum_protoFile_enumTypes[2]
+	return xxx_ProtoFile_proto2_enum_enumTypes[2]
 }
 func (e EnumContainerMessage1_NestedEnumType1A) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -168,7 +168,7 @@
 )
 
 func (e EnumContainerMessage1_NestedEnumType1B) Type() protoreflect.EnumType {
-	return xxx_Enum_protoFile_enumTypes[3]
+	return xxx_ProtoFile_proto2_enum_enumTypes[3]
 }
 func (e EnumContainerMessage1_NestedEnumType1B) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -214,7 +214,7 @@
 )
 
 func (e EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2A) Type() protoreflect.EnumType {
-	return xxx_Enum_protoFile_enumTypes[4]
+	return xxx_ProtoFile_proto2_enum_enumTypes[4]
 }
 func (e EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2A) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -258,7 +258,7 @@
 )
 
 func (e EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B) Type() protoreflect.EnumType {
-	return xxx_Enum_protoFile_enumTypes[5]
+	return xxx_ProtoFile_proto2_enum_enumTypes[5]
 }
 func (e EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -304,7 +304,7 @@
 }
 
 func (m *EnumContainerMessage1) ProtoReflect() protoreflect.Message {
-	return xxx_Enum_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_proto2_enum_messageTypes[0].MessageOf(m)
 }
 func (m *EnumContainerMessage1) Reset()         { *m = EnumContainerMessage1{} }
 func (m *EnumContainerMessage1) String() string { return proto.CompactTextString(m) }
@@ -355,7 +355,7 @@
 }
 
 func (m *EnumContainerMessage1_EnumContainerMessage2) ProtoReflect() protoreflect.Message {
-	return xxx_Enum_protoFile_messageTypes[1].MessageOf(m)
+	return xxx_ProtoFile_proto2_enum_messageTypes[1].MessageOf(m)
 }
 func (m *EnumContainerMessage1_EnumContainerMessage2) Reset() {
 	*m = EnumContainerMessage1_EnumContainerMessage2{}
@@ -451,11 +451,11 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Enum_protoFile protoreflect.FileDescriptor
+var ProtoFile_proto2_enum protoreflect.FileDescriptor
 
-var xxx_Enum_protoFile_enumTypes [6]protoreflect.EnumType
-var xxx_Enum_protoFile_messageTypes [2]protoimpl.MessageType
-var xxx_Enum_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_proto2_enum_enumTypes [6]protoreflect.EnumType
+var xxx_ProtoFile_proto2_enum_messageTypes [2]protoimpl.MessageType
+var xxx_ProtoFile_proto2_enum_goTypes = []interface{}{
 	(EnumType1)(0), // 0: goproto.protoc.proto2.EnumType1
 	(EnumType2)(0), // 1: goproto.protoc.proto2.EnumType2
 	(EnumContainerMessage1_NestedEnumType1A)(0),                       // 2: goproto.protoc.proto2.EnumContainerMessage1.NestedEnumType1A
@@ -465,25 +465,25 @@
 	(*EnumContainerMessage1)(nil),                                     // 6: goproto.protoc.proto2.EnumContainerMessage1
 	(*EnumContainerMessage1_EnumContainerMessage2)(nil),               // 7: goproto.protoc.proto2.EnumContainerMessage1.EnumContainerMessage2
 }
-var xxx_Enum_protoFile_depIdxs = []int32{
+var xxx_ProtoFile_proto2_enum_depIdxs = []int32{
 	1, // goproto.protoc.proto2.EnumContainerMessage1.default_duplicate1:type_name -> goproto.protoc.proto2.EnumType2
 	1, // goproto.protoc.proto2.EnumContainerMessage1.default_duplicate2:type_name -> goproto.protoc.proto2.EnumType2
 }
 
 func init() {
 	var messageTypes [2]protoreflect.MessageType
-	Enum_protoFile = protoimpl.FileBuilder{
+	ProtoFile_proto2_enum = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_de9f68860d540858,
-		GoTypes:            xxx_Enum_protoFile_goTypes,
-		DependencyIndexes:  xxx_Enum_protoFile_depIdxs,
-		EnumOutputTypes:    xxx_Enum_protoFile_enumTypes[:],
+		GoTypes:            xxx_ProtoFile_proto2_enum_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_proto2_enum_depIdxs,
+		EnumOutputTypes:    xxx_ProtoFile_proto2_enum_enumTypes[:],
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_Enum_protoFile_goTypes[6:][:2]
+	messageGoTypes := xxx_ProtoFile_proto2_enum_goTypes[6:][:2]
 	for i, mt := range messageTypes[:] {
-		xxx_Enum_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_Enum_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_proto2_enum_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_proto2_enum_messageTypes[i].PBType = mt
 	}
-	xxx_Enum_protoFile_goTypes = nil
-	xxx_Enum_protoFile_depIdxs = nil
+	xxx_ProtoFile_proto2_enum_goTypes = nil
+	xxx_ProtoFile_proto2_enum_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/proto2/fields.pb.go b/cmd/protoc-gen-go/testdata/proto2/fields.pb.go
index e3b6239..f381fc2 100644
--- a/cmd/protoc-gen-go/testdata/proto2/fields.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto2/fields.pb.go
@@ -27,7 +27,7 @@
 )
 
 func (e FieldTestMessage_Enum) Type() protoreflect.EnumType {
-	return xxx_Fields_protoFile_enumTypes[0]
+	return xxx_ProtoFile_proto2_fields_enumTypes[0]
 }
 func (e FieldTestMessage_Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -179,7 +179,7 @@
 }
 
 func (m *FieldTestMessage) ProtoReflect() protoreflect.Message {
-	return xxx_Fields_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_proto2_fields_messageTypes[0].MessageOf(m)
 }
 func (m *FieldTestMessage) Reset()         { *m = FieldTestMessage{} }
 func (m *FieldTestMessage) String() string { return proto.CompactTextString(m) }
@@ -1131,7 +1131,7 @@
 }
 
 func (m *FieldTestMessage_OptionalGroup) ProtoReflect() protoreflect.Message {
-	return xxx_Fields_protoFile_messageTypes[1].MessageOf(m)
+	return xxx_ProtoFile_proto2_fields_messageTypes[1].MessageOf(m)
 }
 func (m *FieldTestMessage_OptionalGroup) Reset()         { *m = FieldTestMessage_OptionalGroup{} }
 func (m *FieldTestMessage_OptionalGroup) String() string { return proto.CompactTextString(m) }
@@ -1173,7 +1173,7 @@
 }
 
 func (m *FieldTestMessage_RequiredGroup) ProtoReflect() protoreflect.Message {
-	return xxx_Fields_protoFile_messageTypes[2].MessageOf(m)
+	return xxx_ProtoFile_proto2_fields_messageTypes[2].MessageOf(m)
 }
 func (m *FieldTestMessage_RequiredGroup) Reset()         { *m = FieldTestMessage_RequiredGroup{} }
 func (m *FieldTestMessage_RequiredGroup) String() string { return proto.CompactTextString(m) }
@@ -1215,7 +1215,7 @@
 }
 
 func (m *FieldTestMessage_RepeatedGroup) ProtoReflect() protoreflect.Message {
-	return xxx_Fields_protoFile_messageTypes[3].MessageOf(m)
+	return xxx_ProtoFile_proto2_fields_messageTypes[3].MessageOf(m)
 }
 func (m *FieldTestMessage_RepeatedGroup) Reset()         { *m = FieldTestMessage_RepeatedGroup{} }
 func (m *FieldTestMessage_RepeatedGroup) String() string { return proto.CompactTextString(m) }
@@ -1257,7 +1257,7 @@
 }
 
 func (m *FieldTestMessage_OneofGroup) ProtoReflect() protoreflect.Message {
-	return xxx_Fields_protoFile_messageTypes[7].MessageOf(m)
+	return xxx_ProtoFile_proto2_fields_messageTypes[7].MessageOf(m)
 }
 func (m *FieldTestMessage_OneofGroup) Reset()         { *m = FieldTestMessage_OneofGroup{} }
 func (m *FieldTestMessage_OneofGroup) String() string { return proto.CompactTextString(m) }
@@ -1298,7 +1298,7 @@
 }
 
 func (m *FieldTestMessage_Message) ProtoReflect() protoreflect.Message {
-	return xxx_Fields_protoFile_messageTypes[8].MessageOf(m)
+	return xxx_ProtoFile_proto2_fields_messageTypes[8].MessageOf(m)
 }
 func (m *FieldTestMessage_Message) Reset()         { *m = FieldTestMessage_Message{} }
 func (m *FieldTestMessage_Message) String() string { return proto.CompactTextString(m) }
@@ -1723,11 +1723,11 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Fields_protoFile protoreflect.FileDescriptor
+var ProtoFile_proto2_fields protoreflect.FileDescriptor
 
-var xxx_Fields_protoFile_enumTypes [1]protoreflect.EnumType
-var xxx_Fields_protoFile_messageTypes [9]protoimpl.MessageType
-var xxx_Fields_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_proto2_fields_enumTypes [1]protoreflect.EnumType
+var xxx_ProtoFile_proto2_fields_messageTypes [9]protoimpl.MessageType
+var xxx_ProtoFile_proto2_fields_goTypes = []interface{}{
 	(FieldTestMessage_Enum)(0),             // 0: goproto.protoc.proto2.FieldTestMessage.Enum
 	(*FieldTestMessage)(nil),               // 1: goproto.protoc.proto2.FieldTestMessage
 	(*FieldTestMessage_OptionalGroup)(nil), // 2: goproto.protoc.proto2.FieldTestMessage.OptionalGroup
@@ -1739,7 +1739,7 @@
 	(*FieldTestMessage_OneofGroup)(nil),    // 8: goproto.protoc.proto2.FieldTestMessage.OneofGroup
 	(*FieldTestMessage_Message)(nil),       // 9: goproto.protoc.proto2.FieldTestMessage.Message
 }
-var xxx_Fields_protoFile_depIdxs = []int32{
+var xxx_ProtoFile_proto2_fields_depIdxs = []int32{
 	0, // goproto.protoc.proto2.FieldTestMessage.optional_enum:type_name -> goproto.protoc.proto2.FieldTestMessage.Enum
 	9, // goproto.protoc.proto2.FieldTestMessage.optional_Message:type_name -> goproto.protoc.proto2.FieldTestMessage.Message
 	2, // goproto.protoc.proto2.FieldTestMessage.optionalgroup:type_name -> goproto.protoc.proto2.FieldTestMessage.OptionalGroup
@@ -1762,18 +1762,18 @@
 
 func init() {
 	var messageTypes [9]protoreflect.MessageType
-	Fields_protoFile = protoimpl.FileBuilder{
+	ProtoFile_proto2_fields = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_fd8a9d72b841fd68,
-		GoTypes:            xxx_Fields_protoFile_goTypes,
-		DependencyIndexes:  xxx_Fields_protoFile_depIdxs,
-		EnumOutputTypes:    xxx_Fields_protoFile_enumTypes[:],
+		GoTypes:            xxx_ProtoFile_proto2_fields_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_proto2_fields_depIdxs,
+		EnumOutputTypes:    xxx_ProtoFile_proto2_fields_enumTypes[:],
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_Fields_protoFile_goTypes[1:][:9]
+	messageGoTypes := xxx_ProtoFile_proto2_fields_goTypes[1:][:9]
 	for i, mt := range messageTypes[:] {
-		xxx_Fields_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_Fields_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_proto2_fields_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_proto2_fields_messageTypes[i].PBType = mt
 	}
-	xxx_Fields_protoFile_goTypes = nil
-	xxx_Fields_protoFile_depIdxs = nil
+	xxx_ProtoFile_proto2_fields_goTypes = nil
+	xxx_ProtoFile_proto2_fields_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/proto2/nested_messages.pb.go b/cmd/protoc-gen-go/testdata/proto2/nested_messages.pb.go
index 815965e..5c531f6 100644
--- a/cmd/protoc-gen-go/testdata/proto2/nested_messages.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto2/nested_messages.pb.go
@@ -27,7 +27,7 @@
 }
 
 func (m *Layer1) ProtoReflect() protoreflect.Message {
-	return xxx_NestedMessages_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_proto2_nested_messages_messageTypes[0].MessageOf(m)
 }
 func (m *Layer1) Reset()         { *m = Layer1{} }
 func (m *Layer1) String() string { return proto.CompactTextString(m) }
@@ -76,7 +76,7 @@
 }
 
 func (m *Layer1_Layer2) ProtoReflect() protoreflect.Message {
-	return xxx_NestedMessages_protoFile_messageTypes[1].MessageOf(m)
+	return xxx_ProtoFile_proto2_nested_messages_messageTypes[1].MessageOf(m)
 }
 func (m *Layer1_Layer2) Reset()         { *m = Layer1_Layer2{} }
 func (m *Layer1_Layer2) String() string { return proto.CompactTextString(m) }
@@ -117,7 +117,7 @@
 }
 
 func (m *Layer1_Layer2_Layer3) ProtoReflect() protoreflect.Message {
-	return xxx_NestedMessages_protoFile_messageTypes[2].MessageOf(m)
+	return xxx_ProtoFile_proto2_nested_messages_messageTypes[2].MessageOf(m)
 }
 func (m *Layer1_Layer2_Layer3) Reset()         { *m = Layer1_Layer2_Layer3{} }
 func (m *Layer1_Layer2_Layer3) String() string { return proto.CompactTextString(m) }
@@ -186,15 +186,15 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var NestedMessages_protoFile protoreflect.FileDescriptor
+var ProtoFile_proto2_nested_messages protoreflect.FileDescriptor
 
-var xxx_NestedMessages_protoFile_messageTypes [3]protoimpl.MessageType
-var xxx_NestedMessages_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_proto2_nested_messages_messageTypes [3]protoimpl.MessageType
+var xxx_ProtoFile_proto2_nested_messages_goTypes = []interface{}{
 	(*Layer1)(nil),               // 0: goproto.protoc.proto2.Layer1
 	(*Layer1_Layer2)(nil),        // 1: goproto.protoc.proto2.Layer1.Layer2
 	(*Layer1_Layer2_Layer3)(nil), // 2: goproto.protoc.proto2.Layer1.Layer2.Layer3
 }
-var xxx_NestedMessages_protoFile_depIdxs = []int32{
+var xxx_ProtoFile_proto2_nested_messages_depIdxs = []int32{
 	1, // goproto.protoc.proto2.Layer1.l2:type_name -> goproto.protoc.proto2.Layer1.Layer2
 	2, // goproto.protoc.proto2.Layer1.l3:type_name -> goproto.protoc.proto2.Layer1.Layer2.Layer3
 	2, // goproto.protoc.proto2.Layer1.Layer2.l3:type_name -> goproto.protoc.proto2.Layer1.Layer2.Layer3
@@ -202,17 +202,17 @@
 
 func init() {
 	var messageTypes [3]protoreflect.MessageType
-	NestedMessages_protoFile = protoimpl.FileBuilder{
+	ProtoFile_proto2_nested_messages = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_7417ee157699d191,
-		GoTypes:            xxx_NestedMessages_protoFile_goTypes,
-		DependencyIndexes:  xxx_NestedMessages_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_proto2_nested_messages_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_proto2_nested_messages_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_NestedMessages_protoFile_goTypes[0:][:3]
+	messageGoTypes := xxx_ProtoFile_proto2_nested_messages_goTypes[0:][:3]
 	for i, mt := range messageTypes[:] {
-		xxx_NestedMessages_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_NestedMessages_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_proto2_nested_messages_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_proto2_nested_messages_messageTypes[i].PBType = mt
 	}
-	xxx_NestedMessages_protoFile_goTypes = nil
-	xxx_NestedMessages_protoFile_depIdxs = nil
+	xxx_ProtoFile_proto2_nested_messages_goTypes = nil
+	xxx_ProtoFile_proto2_nested_messages_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/proto2/proto2.pb.go b/cmd/protoc-gen-go/testdata/proto2/proto2.pb.go
index 1746040..5432599 100644
--- a/cmd/protoc-gen-go/testdata/proto2/proto2.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto2/proto2.pb.go
@@ -27,7 +27,7 @@
 }
 
 func (m *Message) ProtoReflect() protoreflect.Message {
-	return xxx_Proto2_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_proto2_proto2_messageTypes[0].MessageOf(m)
 }
 func (m *Message) Reset()         { *m = Message{} }
 func (m *Message) String() string { return proto.CompactTextString(m) }
@@ -99,29 +99,29 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Proto2_protoFile protoreflect.FileDescriptor
+var ProtoFile_proto2_proto2 protoreflect.FileDescriptor
 
-var xxx_Proto2_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_Proto2_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_proto2_proto2_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_proto2_proto2_goTypes = []interface{}{
 	(*Message)(nil), // 0: goproto.protoc.proto2.Message
 }
-var xxx_Proto2_protoFile_depIdxs = []int32{
+var xxx_ProtoFile_proto2_proto2_depIdxs = []int32{
 	0, // goproto.protoc.proto2.Message.m:type_name -> goproto.protoc.proto2.Message
 }
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	Proto2_protoFile = protoimpl.FileBuilder{
+	ProtoFile_proto2_proto2 = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_d756bbe8817c03c1,
-		GoTypes:            xxx_Proto2_protoFile_goTypes,
-		DependencyIndexes:  xxx_Proto2_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_proto2_proto2_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_proto2_proto2_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_Proto2_protoFile_goTypes[0:][:1]
+	messageGoTypes := xxx_ProtoFile_proto2_proto2_goTypes[0:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_Proto2_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_Proto2_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_proto2_proto2_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_proto2_proto2_messageTypes[i].PBType = mt
 	}
-	xxx_Proto2_protoFile_goTypes = nil
-	xxx_Proto2_protoFile_depIdxs = nil
+	xxx_ProtoFile_proto2_proto2_goTypes = nil
+	xxx_ProtoFile_proto2_proto2_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/proto3/enum.pb.go b/cmd/protoc-gen-go/testdata/proto3/enum.pb.go
index ce89e08..2e4d8b8 100644
--- a/cmd/protoc-gen-go/testdata/proto3/enum.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto3/enum.pb.go
@@ -26,7 +26,7 @@
 )
 
 func (e Enum) Type() protoreflect.EnumType {
-	return xxx_Enum_protoFile_enumTypes[0]
+	return xxx_ProtoFile_proto3_enum_enumTypes[0]
 }
 func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -81,21 +81,21 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Enum_protoFile protoreflect.FileDescriptor
+var ProtoFile_proto3_enum protoreflect.FileDescriptor
 
-var xxx_Enum_protoFile_enumTypes [1]protoreflect.EnumType
-var xxx_Enum_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_proto3_enum_enumTypes [1]protoreflect.EnumType
+var xxx_ProtoFile_proto3_enum_goTypes = []interface{}{
 	(Enum)(0), // 0: goproto.protoc.proto3.Enum
 }
-var xxx_Enum_protoFile_depIdxs = []int32{}
+var xxx_ProtoFile_proto3_enum_depIdxs = []int32{}
 
 func init() {
-	Enum_protoFile = protoimpl.FileBuilder{
+	ProtoFile_proto3_enum = protoimpl.FileBuilder{
 		RawDescriptor:     fileDescriptor_b4b9b1e8d161a9a6,
-		GoTypes:           xxx_Enum_protoFile_goTypes,
-		DependencyIndexes: xxx_Enum_protoFile_depIdxs,
-		EnumOutputTypes:   xxx_Enum_protoFile_enumTypes[:],
+		GoTypes:           xxx_ProtoFile_proto3_enum_goTypes,
+		DependencyIndexes: xxx_ProtoFile_proto3_enum_depIdxs,
+		EnumOutputTypes:   xxx_ProtoFile_proto3_enum_enumTypes[:],
 	}.Init()
-	xxx_Enum_protoFile_goTypes = nil
-	xxx_Enum_protoFile_depIdxs = nil
+	xxx_ProtoFile_proto3_enum_goTypes = nil
+	xxx_ProtoFile_proto3_enum_depIdxs = nil
 }
diff --git a/cmd/protoc-gen-go/testdata/proto3/fields.pb.go b/cmd/protoc-gen-go/testdata/proto3/fields.pb.go
index 8ad3d7c..a922f16 100644
--- a/cmd/protoc-gen-go/testdata/proto3/fields.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto3/fields.pb.go
@@ -25,7 +25,7 @@
 )
 
 func (e FieldTestMessage_Enum) Type() protoreflect.EnumType {
-	return xxx_Fields_protoFile_enumTypes[0]
+	return xxx_ProtoFile_proto3_fields_enumTypes[0]
 }
 func (e FieldTestMessage_Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -91,7 +91,7 @@
 }
 
 func (m *FieldTestMessage) ProtoReflect() protoreflect.Message {
-	return xxx_Fields_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_proto3_fields_messageTypes[0].MessageOf(m)
 }
 func (m *FieldTestMessage) Reset()         { *m = FieldTestMessage{} }
 func (m *FieldTestMessage) String() string { return proto.CompactTextString(m) }
@@ -384,7 +384,7 @@
 }
 
 func (m *FieldTestMessage_Message) ProtoReflect() protoreflect.Message {
-	return xxx_Fields_protoFile_messageTypes[4].MessageOf(m)
+	return xxx_ProtoFile_proto3_fields_messageTypes[4].MessageOf(m)
 }
 func (m *FieldTestMessage_Message) Reset()         { *m = FieldTestMessage_Message{} }
 func (m *FieldTestMessage_Message) String() string { return proto.CompactTextString(m) }
@@ -584,11 +584,11 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Fields_protoFile protoreflect.FileDescriptor
+var ProtoFile_proto3_fields protoreflect.FileDescriptor
 
-var xxx_Fields_protoFile_enumTypes [1]protoreflect.EnumType
-var xxx_Fields_protoFile_messageTypes [5]protoimpl.MessageType
-var xxx_Fields_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_proto3_fields_enumTypes [1]protoreflect.EnumType
+var xxx_ProtoFile_proto3_fields_messageTypes [5]protoimpl.MessageType
+var xxx_ProtoFile_proto3_fields_goTypes = []interface{}{
 	(FieldTestMessage_Enum)(0),       // 0: goproto.protoc.proto3.FieldTestMessage.Enum
 	(*FieldTestMessage)(nil),         // 1: goproto.protoc.proto3.FieldTestMessage
 	nil,                              // 2: goproto.protoc.proto3.FieldTestMessage.MapInt32Int64Entry
@@ -596,7 +596,7 @@
 	nil,                              // 4: goproto.protoc.proto3.FieldTestMessage.MapFixed64EnumEntry
 	(*FieldTestMessage_Message)(nil), // 5: goproto.protoc.proto3.FieldTestMessage.Message
 }
-var xxx_Fields_protoFile_depIdxs = []int32{
+var xxx_ProtoFile_proto3_fields_depIdxs = []int32{
 	0, // goproto.protoc.proto3.FieldTestMessage.optional_enum:type_name -> goproto.protoc.proto3.FieldTestMessage.Enum
 	5, // goproto.protoc.proto3.FieldTestMessage.optional_Message:type_name -> goproto.protoc.proto3.FieldTestMessage.Message
 	0, // goproto.protoc.proto3.FieldTestMessage.repeated_enum:type_name -> goproto.protoc.proto3.FieldTestMessage.Enum
@@ -610,18 +610,18 @@
 
 func init() {
 	var messageTypes [5]protoreflect.MessageType
-	Fields_protoFile = protoimpl.FileBuilder{
+	ProtoFile_proto3_fields = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_f1e3ea068187307c,
-		GoTypes:            xxx_Fields_protoFile_goTypes,
-		DependencyIndexes:  xxx_Fields_protoFile_depIdxs,
-		EnumOutputTypes:    xxx_Fields_protoFile_enumTypes[:],
+		GoTypes:            xxx_ProtoFile_proto3_fields_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_proto3_fields_depIdxs,
+		EnumOutputTypes:    xxx_ProtoFile_proto3_fields_enumTypes[:],
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_Fields_protoFile_goTypes[1:][:5]
+	messageGoTypes := xxx_ProtoFile_proto3_fields_goTypes[1:][:5]
 	for i, mt := range messageTypes[:] {
-		xxx_Fields_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_Fields_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_proto3_fields_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_proto3_fields_messageTypes[i].PBType = mt
 	}
-	xxx_Fields_protoFile_goTypes = nil
-	xxx_Fields_protoFile_depIdxs = nil
+	xxx_ProtoFile_proto3_fields_goTypes = nil
+	xxx_ProtoFile_proto3_fields_depIdxs = nil
 }
diff --git a/encoding/testprotos/pb2/test.pb.go b/encoding/testprotos/pb2/test.pb.go
index d0f7706..39e628a 100644
--- a/encoding/testprotos/pb2/test.pb.go
+++ b/encoding/testprotos/pb2/test.pb.go
@@ -33,7 +33,7 @@
 )
 
 func (e Enum) Type() protoreflect.EnumType {
-	return xxx_Test_protoFile_enumTypes[0]
+	return xxx_ProtoFile_encoding_testprotos_pb2_test_enumTypes[0]
 }
 func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -83,7 +83,7 @@
 )
 
 func (e Enums_NestedEnum) Type() protoreflect.EnumType {
-	return xxx_Test_protoFile_enumTypes[1]
+	return xxx_ProtoFile_encoding_testprotos_pb2_test_enumTypes[1]
 }
 func (e Enums_NestedEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -147,7 +147,7 @@
 }
 
 func (m *Scalars) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes[0].MessageOf(m)
 }
 func (m *Scalars) Reset()         { *m = Scalars{} }
 func (m *Scalars) String() string { return proto.CompactTextString(m) }
@@ -291,7 +291,7 @@
 }
 
 func (m *Enums) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[1].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes[1].MessageOf(m)
 }
 func (m *Enums) Reset()         { *m = Enums{} }
 func (m *Enums) String() string { return proto.CompactTextString(m) }
@@ -363,7 +363,7 @@
 }
 
 func (m *Repeats) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[2].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes[2].MessageOf(m)
 }
 func (m *Repeats) Reset()         { *m = Repeats{} }
 func (m *Repeats) String() string { return proto.CompactTextString(m) }
@@ -463,7 +463,7 @@
 }
 
 func (m *Nested) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[3].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes[3].MessageOf(m)
 }
 func (m *Nested) Reset()         { *m = Nested{} }
 func (m *Nested) String() string { return proto.CompactTextString(m) }
@@ -516,7 +516,7 @@
 }
 
 func (m *Nests) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[4].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes[4].MessageOf(m)
 }
 func (m *Nests) Reset()         { *m = Nests{} }
 func (m *Nests) String() string { return proto.CompactTextString(m) }
@@ -585,7 +585,7 @@
 }
 
 func (m *Requireds) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[5].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes[5].MessageOf(m)
 }
 func (m *Requireds) Reset()         { *m = Requireds{} }
 func (m *Requireds) String() string { return proto.CompactTextString(m) }
@@ -664,7 +664,7 @@
 }
 
 func (m *PartialRequired) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[6].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes[6].MessageOf(m)
 }
 func (m *PartialRequired) Reset()         { *m = PartialRequired{} }
 func (m *PartialRequired) String() string { return proto.CompactTextString(m) }
@@ -713,7 +713,7 @@
 }
 
 func (m *NestedWithRequired) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[7].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes[7].MessageOf(m)
 }
 func (m *NestedWithRequired) Reset()         { *m = NestedWithRequired{} }
 func (m *NestedWithRequired) String() string { return proto.CompactTextString(m) }
@@ -760,7 +760,7 @@
 }
 
 func (m *IndirectRequired) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[8].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes[8].MessageOf(m)
 }
 func (m *IndirectRequired) Reset()         { *m = IndirectRequired{} }
 func (m *IndirectRequired) String() string { return proto.CompactTextString(m) }
@@ -850,7 +850,7 @@
 }
 
 func (m *Extensions) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[9].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes[9].MessageOf(m)
 }
 func (m *Extensions) Reset()         { *m = Extensions{} }
 func (m *Extensions) String() string { return proto.CompactTextString(m) }
@@ -913,7 +913,7 @@
 }
 
 func (m *ExtensionsContainer) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[10].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes[10].MessageOf(m)
 }
 func (m *ExtensionsContainer) Reset()         { *m = ExtensionsContainer{} }
 func (m *ExtensionsContainer) String() string { return proto.CompactTextString(m) }
@@ -948,7 +948,7 @@
 }
 
 func (m *MessageSet) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[11].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes[11].MessageOf(m)
 }
 func (m *MessageSet) Reset()         { *m = MessageSet{} }
 func (m *MessageSet) String() string { return proto.CompactTextString(m) }
@@ -991,7 +991,7 @@
 }
 
 func (m *MessageSetExtension) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[12].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes[12].MessageOf(m)
 }
 func (m *MessageSetExtension) Reset()         { *m = MessageSetExtension{} }
 func (m *MessageSetExtension) String() string { return proto.CompactTextString(m) }
@@ -1033,7 +1033,7 @@
 }
 
 func (m *FakeMessageSet) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[13].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes[13].MessageOf(m)
 }
 func (m *FakeMessageSet) Reset()         { *m = FakeMessageSet{} }
 func (m *FakeMessageSet) String() string { return proto.CompactTextString(m) }
@@ -1076,7 +1076,7 @@
 }
 
 func (m *FakeMessageSetExtension) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[14].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes[14].MessageOf(m)
 }
 func (m *FakeMessageSetExtension) Reset()         { *m = FakeMessageSetExtension{} }
 func (m *FakeMessageSetExtension) String() string { return proto.CompactTextString(m) }
@@ -1134,7 +1134,7 @@
 }
 
 func (m *KnownTypes) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[15].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes[15].MessageOf(m)
 }
 func (m *KnownTypes) Reset()         { *m = KnownTypes{} }
 func (m *KnownTypes) String() string { return proto.CompactTextString(m) }
@@ -1283,7 +1283,7 @@
 }
 
 func (m *Nests_OptGroup) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[16].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes[16].MessageOf(m)
 }
 func (m *Nests_OptGroup) Reset()         { *m = Nests_OptGroup{} }
 func (m *Nests_OptGroup) String() string { return proto.CompactTextString(m) }
@@ -1339,7 +1339,7 @@
 }
 
 func (m *Nests_RptGroup) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[17].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes[17].MessageOf(m)
 }
 func (m *Nests_RptGroup) Reset()         { *m = Nests_RptGroup{} }
 func (m *Nests_RptGroup) String() string { return proto.CompactTextString(m) }
@@ -1381,7 +1381,7 @@
 }
 
 func (m *Nests_OptGroup_OptNestedGroup) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[18].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes[18].MessageOf(m)
 }
 func (m *Nests_OptGroup_OptNestedGroup) Reset()         { *m = Nests_OptGroup_OptNestedGroup{} }
 func (m *Nests_OptGroup_OptNestedGroup) String() string { return proto.CompactTextString(m) }
@@ -1967,11 +1967,11 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Test_protoFile protoreflect.FileDescriptor
+var ProtoFile_encoding_testprotos_pb2_test protoreflect.FileDescriptor
 
-var xxx_Test_protoFile_enumTypes [2]protoreflect.EnumType
-var xxx_Test_protoFile_messageTypes [20]protoimpl.MessageType
-var xxx_Test_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_encoding_testprotos_pb2_test_enumTypes [2]protoreflect.EnumType
+var xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes [20]protoimpl.MessageType
+var xxx_ProtoFile_encoding_testprotos_pb2_test_goTypes = []interface{}{
 	(Enum)(0),                             // 0: pb2.Enum
 	(Enums_NestedEnum)(0),                 // 1: pb2.Enums.NestedEnum
 	(*Scalars)(nil),                       // 2: pb2.Scalars
@@ -2011,7 +2011,7 @@
 	(*empty.Empty)(nil),                   // 36: google.protobuf.Empty
 	(*any.Any)(nil),                       // 37: google.protobuf.Any
 }
-var xxx_Test_protoFile_depIdxs = []int32{
+var xxx_ProtoFile_encoding_testprotos_pb2_test_depIdxs = []int32{
 	11, // pb2.opt_ext_bool:extendee -> pb2.Extensions
 	11, // pb2.opt_ext_string:extendee -> pb2.Extensions
 	11, // pb2.opt_ext_enum:extendee -> pb2.Extensions
@@ -2083,18 +2083,18 @@
 func init() {
 	var messageTypes [20]protoreflect.MessageType
 	var extensionTypes [19]protoreflect.ExtensionType
-	Test_protoFile = protoimpl.FileBuilder{
+	ProtoFile_encoding_testprotos_pb2_test = protoimpl.FileBuilder{
 		RawDescriptor:        fileDescriptor_72e37deb177b50f8,
-		GoTypes:              xxx_Test_protoFile_goTypes,
-		DependencyIndexes:    xxx_Test_protoFile_depIdxs,
-		EnumOutputTypes:      xxx_Test_protoFile_enumTypes[:],
+		GoTypes:              xxx_ProtoFile_encoding_testprotos_pb2_test_goTypes,
+		DependencyIndexes:    xxx_ProtoFile_encoding_testprotos_pb2_test_depIdxs,
+		EnumOutputTypes:      xxx_ProtoFile_encoding_testprotos_pb2_test_enumTypes[:],
 		MessageOutputTypes:   messageTypes[:],
 		ExtensionOutputTypes: extensionTypes[:],
 	}.Init()
-	messageGoTypes := xxx_Test_protoFile_goTypes[2:][:20]
+	messageGoTypes := xxx_ProtoFile_encoding_testprotos_pb2_test_goTypes[2:][:20]
 	for i, mt := range messageTypes[:] {
-		xxx_Test_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_Test_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_encoding_testprotos_pb2_test_messageTypes[i].PBType = mt
 	}
 	E_OptExtBool.Type = extensionTypes[0]
 	E_OptExtString.Type = extensionTypes[1]
@@ -2115,6 +2115,6 @@
 	E_MessageSetExtension_NotMessageSetExtension.Type = extensionTypes[16]
 	E_MessageSetExtension_ExtNested.Type = extensionTypes[17]
 	E_FakeMessageSetExtension_MessageSetExtension.Type = extensionTypes[18]
-	xxx_Test_protoFile_goTypes = nil
-	xxx_Test_protoFile_depIdxs = nil
+	xxx_ProtoFile_encoding_testprotos_pb2_test_goTypes = nil
+	xxx_ProtoFile_encoding_testprotos_pb2_test_depIdxs = nil
 }
diff --git a/encoding/testprotos/pb3/test.pb.go b/encoding/testprotos/pb3/test.pb.go
index 0aabdf1..d9bc436 100644
--- a/encoding/testprotos/pb3/test.pb.go
+++ b/encoding/testprotos/pb3/test.pb.go
@@ -28,7 +28,7 @@
 )
 
 func (e Enum) Type() protoreflect.EnumType {
-	return xxx_Test_protoFile_enumTypes[0]
+	return xxx_ProtoFile_encoding_testprotos_pb3_test_enumTypes[0]
 }
 func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -66,7 +66,7 @@
 )
 
 func (e Enums_NestedEnum) Type() protoreflect.EnumType {
-	return xxx_Test_protoFile_enumTypes[1]
+	return xxx_ProtoFile_encoding_testprotos_pb3_test_enumTypes[1]
 }
 func (e Enums_NestedEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -117,7 +117,7 @@
 }
 
 func (m *Scalars) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb3_test_messageTypes[0].MessageOf(m)
 }
 func (m *Scalars) Reset()         { *m = Scalars{} }
 func (m *Scalars) String() string { return proto.CompactTextString(m) }
@@ -259,7 +259,7 @@
 }
 
 func (m *Enums) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[1].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb3_test_messageTypes[1].MessageOf(m)
 }
 func (m *Enums) Reset()         { *m = Enums{} }
 func (m *Enums) String() string { return proto.CompactTextString(m) }
@@ -309,7 +309,7 @@
 }
 
 func (m *Nests) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[2].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb3_test_messageTypes[2].MessageOf(m)
 }
 func (m *Nests) Reset()         { *m = Nests{} }
 func (m *Nests) String() string { return proto.CompactTextString(m) }
@@ -353,7 +353,7 @@
 }
 
 func (m *Nested) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[3].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb3_test_messageTypes[3].MessageOf(m)
 }
 func (m *Nested) Reset()         { *m = Nested{} }
 func (m *Nested) String() string { return proto.CompactTextString(m) }
@@ -407,7 +407,7 @@
 }
 
 func (m *Oneofs) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[4].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb3_test_messageTypes[4].MessageOf(m)
 }
 func (m *Oneofs) Reset()         { *m = Oneofs{} }
 func (m *Oneofs) String() string { return proto.CompactTextString(m) }
@@ -506,7 +506,7 @@
 }
 
 func (m *Maps) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[5].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb3_test_messageTypes[5].MessageOf(m)
 }
 func (m *Maps) Reset()         { *m = Maps{} }
 func (m *Maps) String() string { return proto.CompactTextString(m) }
@@ -577,7 +577,7 @@
 }
 
 func (m *JSONNames) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[6].MessageOf(m)
+	return xxx_ProtoFile_encoding_testprotos_pb3_test_messageTypes[6].MessageOf(m)
 }
 func (m *JSONNames) Reset()         { *m = JSONNames{} }
 func (m *JSONNames) String() string { return proto.CompactTextString(m) }
@@ -752,11 +752,11 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Test_protoFile protoreflect.FileDescriptor
+var ProtoFile_encoding_testprotos_pb3_test protoreflect.FileDescriptor
 
-var xxx_Test_protoFile_enumTypes [2]protoreflect.EnumType
-var xxx_Test_protoFile_messageTypes [12]protoimpl.MessageType
-var xxx_Test_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_encoding_testprotos_pb3_test_enumTypes [2]protoreflect.EnumType
+var xxx_ProtoFile_encoding_testprotos_pb3_test_messageTypes [12]protoimpl.MessageType
+var xxx_ProtoFile_encoding_testprotos_pb3_test_goTypes = []interface{}{
 	(Enum)(0),             // 0: pb3.Enum
 	(Enums_NestedEnum)(0), // 1: pb3.Enums.NestedEnum
 	(*Scalars)(nil),       // 2: pb3.Scalars
@@ -772,7 +772,7 @@
 	nil,                   // 12: pb3.Maps.StrToNestedEntry
 	nil,                   // 13: pb3.Maps.StrToOneofsEntry
 }
-var xxx_Test_protoFile_depIdxs = []int32{
+var xxx_ProtoFile_encoding_testprotos_pb3_test_depIdxs = []int32{
 	0,  // pb3.Enums.s_enum:type_name -> pb3.Enum
 	1,  // pb3.Enums.s_nested_enum:type_name -> pb3.Enums.NestedEnum
 	5,  // pb3.Nests.s_nested:type_name -> pb3.Nested
@@ -791,18 +791,18 @@
 
 func init() {
 	var messageTypes [12]protoreflect.MessageType
-	Test_protoFile = protoimpl.FileBuilder{
+	ProtoFile_encoding_testprotos_pb3_test = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_33e0a17922cde063,
-		GoTypes:            xxx_Test_protoFile_goTypes,
-		DependencyIndexes:  xxx_Test_protoFile_depIdxs,
-		EnumOutputTypes:    xxx_Test_protoFile_enumTypes[:],
+		GoTypes:            xxx_ProtoFile_encoding_testprotos_pb3_test_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_encoding_testprotos_pb3_test_depIdxs,
+		EnumOutputTypes:    xxx_ProtoFile_encoding_testprotos_pb3_test_enumTypes[:],
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_Test_protoFile_goTypes[2:][:12]
+	messageGoTypes := xxx_ProtoFile_encoding_testprotos_pb3_test_goTypes[2:][:12]
 	for i, mt := range messageTypes[:] {
-		xxx_Test_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_Test_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_encoding_testprotos_pb3_test_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_encoding_testprotos_pb3_test_messageTypes[i].PBType = mt
 	}
-	xxx_Test_protoFile_goTypes = nil
-	xxx_Test_protoFile_depIdxs = nil
+	xxx_ProtoFile_encoding_testprotos_pb3_test_goTypes = nil
+	xxx_ProtoFile_encoding_testprotos_pb3_test_depIdxs = nil
 }
diff --git a/internal/fileinit/fileinit_test.go b/internal/fileinit/fileinit_test.go
index f2d0761..b6ba1e1 100644
--- a/internal/fileinit/fileinit_test.go
+++ b/internal/fileinit/fileinit_test.go
@@ -20,7 +20,7 @@
 	// 2. The protoc-generated wire-encoded message.
 	//
 	// This serves as a test of both fileinit and protodesc.
-	got := protodesc.ToFileDescriptorProto(testpb.Test_protoFile)
+	got := protodesc.ToFileDescriptorProto(testpb.ProtoFile_test)
 
 	want := &descriptorpb.FileDescriptorProto{}
 	zb, _ := (&testpb.TestAllTypes{}).Descriptor()
@@ -60,7 +60,7 @@
 		"ServiceDescriptorProto",
 		"MethodDescriptorProto",
 	} {
-		message := descriptorpb.Descriptor_protoFile.Messages().ByName(messageName)
+		message := descriptorpb.ProtoFile_google_protobuf_descriptor.Messages().ByName(messageName)
 		for i, fields := 0, message.Fields(); i < fields.Len(); i++ {
 			if name := fields.Get(i).FullName(); !seen[name] && !ignore[name] {
 				t.Errorf("No test for descriptor field: %v", name)
diff --git a/internal/testprotos/test/test.pb.go b/internal/testprotos/test/test.pb.go
index 7f5a58d..d039c07 100644
--- a/internal/testprotos/test/test.pb.go
+++ b/internal/testprotos/test/test.pb.go
@@ -27,7 +27,7 @@
 )
 
 func (e ForeignEnum) Type() protoreflect.EnumType {
-	return xxx_Test_protoFile_enumTypes[0]
+	return xxx_ProtoFile_test_enumTypes[0]
 }
 func (e ForeignEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -75,7 +75,7 @@
 )
 
 func (e TestReservedEnumFields) Type() protoreflect.EnumType {
-	return xxx_Test_protoFile_enumTypes[1]
+	return xxx_ProtoFile_test_enumTypes[1]
 }
 func (e TestReservedEnumFields) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -122,7 +122,7 @@
 )
 
 func (e TestAllTypes_NestedEnum) Type() protoreflect.EnumType {
-	return xxx_Test_protoFile_enumTypes[2]
+	return xxx_ProtoFile_test_enumTypes[2]
 }
 func (e TestAllTypes_NestedEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -171,7 +171,7 @@
 )
 
 func (e TestDeprecatedMessage_DeprecatedEnum) Type() protoreflect.EnumType {
-	return xxx_Test_protoFile_enumTypes[3]
+	return xxx_ProtoFile_test_enumTypes[3]
 }
 func (e TestDeprecatedMessage_DeprecatedEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -305,7 +305,7 @@
 }
 
 func (m *TestAllTypes) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_test_messageTypes[0].MessageOf(m)
 }
 func (m *TestAllTypes) Reset()         { *m = TestAllTypes{} }
 func (m *TestAllTypes) String() string { return proto.CompactTextString(m) }
@@ -1053,7 +1053,7 @@
 }
 
 func (m *TestDeprecatedMessage) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[1].MessageOf(m)
+	return xxx_ProtoFile_test_messageTypes[1].MessageOf(m)
 }
 func (m *TestDeprecatedMessage) Reset()         { *m = TestDeprecatedMessage{} }
 func (m *TestDeprecatedMessage) String() string { return proto.CompactTextString(m) }
@@ -1129,7 +1129,7 @@
 }
 
 func (m *ForeignMessage) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[2].MessageOf(m)
+	return xxx_ProtoFile_test_messageTypes[2].MessageOf(m)
 }
 func (m *ForeignMessage) Reset()         { *m = ForeignMessage{} }
 func (m *ForeignMessage) String() string { return proto.CompactTextString(m) }
@@ -1177,7 +1177,7 @@
 }
 
 func (m *TestReservedFields) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[3].MessageOf(m)
+	return xxx_ProtoFile_test_messageTypes[3].MessageOf(m)
 }
 func (m *TestReservedFields) Reset()         { *m = TestReservedFields{} }
 func (m *TestReservedFields) String() string { return proto.CompactTextString(m) }
@@ -1212,7 +1212,7 @@
 }
 
 func (m *TestAllExtensions) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[4].MessageOf(m)
+	return xxx_ProtoFile_test_messageTypes[4].MessageOf(m)
 }
 func (m *TestAllExtensions) Reset()         { *m = TestAllExtensions{} }
 func (m *TestAllExtensions) String() string { return proto.CompactTextString(m) }
@@ -1255,7 +1255,7 @@
 }
 
 func (m *OptionalGroupExtension) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[5].MessageOf(m)
+	return xxx_ProtoFile_test_messageTypes[5].MessageOf(m)
 }
 func (m *OptionalGroupExtension) Reset()         { *m = OptionalGroupExtension{} }
 func (m *OptionalGroupExtension) String() string { return proto.CompactTextString(m) }
@@ -1297,7 +1297,7 @@
 }
 
 func (m *RepeatedGroupExtension) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[6].MessageOf(m)
+	return xxx_ProtoFile_test_messageTypes[6].MessageOf(m)
 }
 func (m *RepeatedGroupExtension) Reset()         { *m = RepeatedGroupExtension{} }
 func (m *RepeatedGroupExtension) String() string { return proto.CompactTextString(m) }
@@ -1338,7 +1338,7 @@
 }
 
 func (m *TestNestedExtension) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[7].MessageOf(m)
+	return xxx_ProtoFile_test_messageTypes[7].MessageOf(m)
 }
 func (m *TestNestedExtension) Reset()         { *m = TestNestedExtension{} }
 func (m *TestNestedExtension) String() string { return proto.CompactTextString(m) }
@@ -1373,7 +1373,7 @@
 }
 
 func (m *FooRequest) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[8].MessageOf(m)
+	return xxx_ProtoFile_test_messageTypes[8].MessageOf(m)
 }
 func (m *FooRequest) Reset()         { *m = FooRequest{} }
 func (m *FooRequest) String() string { return proto.CompactTextString(m) }
@@ -1407,7 +1407,7 @@
 }
 
 func (m *FooResponse) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[9].MessageOf(m)
+	return xxx_ProtoFile_test_messageTypes[9].MessageOf(m)
 }
 func (m *FooResponse) Reset()         { *m = FooResponse{} }
 func (m *FooResponse) String() string { return proto.CompactTextString(m) }
@@ -1443,7 +1443,7 @@
 }
 
 func (m *TestAllTypes_NestedMessage) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[10].MessageOf(m)
+	return xxx_ProtoFile_test_messageTypes[10].MessageOf(m)
 }
 func (m *TestAllTypes_NestedMessage) Reset()         { *m = TestAllTypes_NestedMessage{} }
 func (m *TestAllTypes_NestedMessage) String() string { return proto.CompactTextString(m) }
@@ -1492,7 +1492,7 @@
 }
 
 func (m *TestAllTypes_OptionalGroup) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[11].MessageOf(m)
+	return xxx_ProtoFile_test_messageTypes[11].MessageOf(m)
 }
 func (m *TestAllTypes_OptionalGroup) Reset()         { *m = TestAllTypes_OptionalGroup{} }
 func (m *TestAllTypes_OptionalGroup) String() string { return proto.CompactTextString(m) }
@@ -1534,7 +1534,7 @@
 }
 
 func (m *TestAllTypes_RepeatedGroup) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[12].MessageOf(m)
+	return xxx_ProtoFile_test_messageTypes[12].MessageOf(m)
 }
 func (m *TestAllTypes_RepeatedGroup) Reset()         { *m = TestAllTypes_RepeatedGroup{} }
 func (m *TestAllTypes_RepeatedGroup) String() string { return proto.CompactTextString(m) }
@@ -2744,11 +2744,11 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Test_protoFile protoreflect.FileDescriptor
+var ProtoFile_test protoreflect.FileDescriptor
 
-var xxx_Test_protoFile_enumTypes [4]protoreflect.EnumType
-var xxx_Test_protoFile_messageTypes [30]protoimpl.MessageType
-var xxx_Test_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_test_enumTypes [4]protoreflect.EnumType
+var xxx_ProtoFile_test_messageTypes [30]protoimpl.MessageType
+var xxx_ProtoFile_test_goTypes = []interface{}{
 	(ForeignEnum)(0),                          // 0: goproto.proto.test.ForeignEnum
 	(TestReservedEnumFields)(0),               // 1: goproto.proto.test.TestReservedEnumFields
 	(TestAllTypes_NestedEnum)(0),              // 2: goproto.proto.test.TestAllTypes.NestedEnum
@@ -2786,7 +2786,7 @@
 	(*ImportMessage)(nil),                     // 34: goproto.proto.test.ImportMessage
 	(ImportEnum)(0),                           // 35: goproto.proto.test.ImportEnum
 }
-var xxx_Test_protoFile_depIdxs = []int32{
+var xxx_ProtoFile_test_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
@@ -2879,18 +2879,18 @@
 func init() {
 	var messageTypes [30]protoreflect.MessageType
 	var extensionTypes [37]protoreflect.ExtensionType
-	Test_protoFile = protoimpl.FileBuilder{
+	ProtoFile_test = protoimpl.FileBuilder{
 		RawDescriptor:        fileDescriptor_c161fcfdc0c3ff1e,
-		GoTypes:              xxx_Test_protoFile_goTypes,
-		DependencyIndexes:    xxx_Test_protoFile_depIdxs,
-		EnumOutputTypes:      xxx_Test_protoFile_enumTypes[:],
+		GoTypes:              xxx_ProtoFile_test_goTypes,
+		DependencyIndexes:    xxx_ProtoFile_test_depIdxs,
+		EnumOutputTypes:      xxx_ProtoFile_test_enumTypes[:],
 		MessageOutputTypes:   messageTypes[:],
 		ExtensionOutputTypes: extensionTypes[:],
 	}.Init()
-	messageGoTypes := xxx_Test_protoFile_goTypes[4:][:30]
+	messageGoTypes := xxx_ProtoFile_test_goTypes[4:][:30]
 	for i, mt := range messageTypes[:] {
-		xxx_Test_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_Test_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_test_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_test_messageTypes[i].PBType = mt
 	}
 	E_OptionalInt32Extension.Type = extensionTypes[0]
 	E_OptionalInt64Extension.Type = extensionTypes[1]
@@ -2929,6 +2929,6 @@
 	E_RepeatedNestedMessageExtension.Type = extensionTypes[34]
 	E_RepeatedNestedEnumExtension.Type = extensionTypes[35]
 	E_TestNestedExtension_NestedStringExtension.Type = extensionTypes[36]
-	xxx_Test_protoFile_goTypes = nil
-	xxx_Test_protoFile_depIdxs = nil
+	xxx_ProtoFile_test_goTypes = nil
+	xxx_ProtoFile_test_depIdxs = nil
 }
diff --git a/internal/testprotos/test/test_import.pb.go b/internal/testprotos/test/test_import.pb.go
index fc10e6d..c896f84 100644
--- a/internal/testprotos/test/test_import.pb.go
+++ b/internal/testprotos/test/test_import.pb.go
@@ -25,7 +25,7 @@
 )
 
 func (e ImportEnum) Type() protoreflect.EnumType {
-	return xxx_TestImport_protoFile_enumTypes[0]
+	return xxx_ProtoFile_test_import_enumTypes[0]
 }
 func (e ImportEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -69,7 +69,7 @@
 }
 
 func (m *ImportMessage) ProtoReflect() protoreflect.Message {
-	return xxx_TestImport_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_test_import_messageTypes[0].MessageOf(m)
 }
 func (m *ImportMessage) Reset()         { *m = ImportMessage{} }
 func (m *ImportMessage) String() string { return proto.CompactTextString(m) }
@@ -126,30 +126,30 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var TestImport_protoFile protoreflect.FileDescriptor
+var ProtoFile_test_import protoreflect.FileDescriptor
 
-var xxx_TestImport_protoFile_enumTypes [1]protoreflect.EnumType
-var xxx_TestImport_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_TestImport_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_test_import_enumTypes [1]protoreflect.EnumType
+var xxx_ProtoFile_test_import_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_test_import_goTypes = []interface{}{
 	(ImportEnum)(0),       // 0: goproto.proto.test.ImportEnum
 	(*ImportMessage)(nil), // 1: goproto.proto.test.ImportMessage
 }
-var xxx_TestImport_protoFile_depIdxs = []int32{}
+var xxx_ProtoFile_test_import_depIdxs = []int32{}
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	TestImport_protoFile = protoimpl.FileBuilder{
+	ProtoFile_test_import = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_89be98e26346f54e,
-		GoTypes:            xxx_TestImport_protoFile_goTypes,
-		DependencyIndexes:  xxx_TestImport_protoFile_depIdxs,
-		EnumOutputTypes:    xxx_TestImport_protoFile_enumTypes[:],
+		GoTypes:            xxx_ProtoFile_test_import_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_test_import_depIdxs,
+		EnumOutputTypes:    xxx_ProtoFile_test_import_enumTypes[:],
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_TestImport_protoFile_goTypes[1:][:1]
+	messageGoTypes := xxx_ProtoFile_test_import_goTypes[1:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_TestImport_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_TestImport_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_test_import_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_test_import_messageTypes[i].PBType = mt
 	}
-	xxx_TestImport_protoFile_goTypes = nil
-	xxx_TestImport_protoFile_depIdxs = nil
+	xxx_ProtoFile_test_import_goTypes = nil
+	xxx_ProtoFile_test_import_depIdxs = nil
 }
diff --git a/internal/testprotos/test/test_public.pb.go b/internal/testprotos/test/test_public.pb.go
index b316027..f4e78e0 100644
--- a/internal/testprotos/test/test_public.pb.go
+++ b/internal/testprotos/test/test_public.pb.go
@@ -25,7 +25,7 @@
 }
 
 func (m *PublicImportMessage) ProtoReflect() protoreflect.Message {
-	return xxx_TestPublic_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_test_public_messageTypes[0].MessageOf(m)
 }
 func (m *PublicImportMessage) Reset()         { *m = PublicImportMessage{} }
 func (m *PublicImportMessage) String() string { return proto.CompactTextString(m) }
@@ -79,27 +79,27 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var TestPublic_protoFile protoreflect.FileDescriptor
+var ProtoFile_test_public protoreflect.FileDescriptor
 
-var xxx_TestPublic_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_TestPublic_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_test_public_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_test_public_goTypes = []interface{}{
 	(*PublicImportMessage)(nil), // 0: goproto.proto.test.PublicImportMessage
 }
-var xxx_TestPublic_protoFile_depIdxs = []int32{}
+var xxx_ProtoFile_test_public_depIdxs = []int32{}
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	TestPublic_protoFile = protoimpl.FileBuilder{
+	ProtoFile_test_public = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_36dd44afd5b47374,
-		GoTypes:            xxx_TestPublic_protoFile_goTypes,
-		DependencyIndexes:  xxx_TestPublic_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_test_public_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_test_public_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_TestPublic_protoFile_goTypes[0:][:1]
+	messageGoTypes := xxx_ProtoFile_test_public_goTypes[0:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_TestPublic_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_TestPublic_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_test_public_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_test_public_messageTypes[i].PBType = mt
 	}
-	xxx_TestPublic_protoFile_goTypes = nil
-	xxx_TestPublic_protoFile_depIdxs = nil
+	xxx_ProtoFile_test_public_goTypes = nil
+	xxx_ProtoFile_test_public_depIdxs = nil
 }
diff --git a/internal/testprotos/test/test_weak.pb.go b/internal/testprotos/test/test_weak.pb.go
index 2d010a0..18149d6 100644
--- a/internal/testprotos/test/test_weak.pb.go
+++ b/internal/testprotos/test/test_weak.pb.go
@@ -25,7 +25,7 @@
 }
 
 func (m *WeakImportMessage) ProtoReflect() protoreflect.Message {
-	return xxx_TestWeak_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_test_weak_messageTypes[0].MessageOf(m)
 }
 func (m *WeakImportMessage) Reset()         { *m = WeakImportMessage{} }
 func (m *WeakImportMessage) String() string { return proto.CompactTextString(m) }
@@ -79,27 +79,27 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var TestWeak_protoFile protoreflect.FileDescriptor
+var ProtoFile_test_weak protoreflect.FileDescriptor
 
-var xxx_TestWeak_protoFile_messageTypes [1]protoimpl.MessageType
-var xxx_TestWeak_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_test_weak_messageTypes [1]protoimpl.MessageType
+var xxx_ProtoFile_test_weak_goTypes = []interface{}{
 	(*WeakImportMessage)(nil), // 0: goproto.proto.test.WeakImportMessage
 }
-var xxx_TestWeak_protoFile_depIdxs = []int32{}
+var xxx_ProtoFile_test_weak_depIdxs = []int32{}
 
 func init() {
 	var messageTypes [1]protoreflect.MessageType
-	TestWeak_protoFile = protoimpl.FileBuilder{
+	ProtoFile_test_weak = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_c2b8edfebc4f71b3,
-		GoTypes:            xxx_TestWeak_protoFile_goTypes,
-		DependencyIndexes:  xxx_TestWeak_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_test_weak_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_test_weak_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_TestWeak_protoFile_goTypes[0:][:1]
+	messageGoTypes := xxx_ProtoFile_test_weak_goTypes[0:][:1]
 	for i, mt := range messageTypes[:] {
-		xxx_TestWeak_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_TestWeak_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_test_weak_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_test_weak_messageTypes[i].PBType = mt
 	}
-	xxx_TestWeak_protoFile_goTypes = nil
-	xxx_TestWeak_protoFile_depIdxs = nil
+	xxx_ProtoFile_test_weak_goTypes = nil
+	xxx_ProtoFile_test_weak_depIdxs = nil
 }
diff --git a/protogen/protogen.go b/protogen/protogen.go
index 3f2a92e..758a20f 100644
--- a/protogen/protogen.go
+++ b/protogen/protogen.go
@@ -435,7 +435,7 @@
 		}
 	}
 	f.GoDescriptorIdent = GoIdent{
-		GoName:       camelCase(cleanGoName(path.Base(prefix), true)) + "_protoFile",
+		GoName:       "ProtoFile_" + cleanGoName(prefix, false),
 		GoImportPath: f.GoImportPath,
 	}
 	f.GeneratedFilenamePrefix = prefix
diff --git a/reflect/protoregistry/testprotos/test.pb.go b/reflect/protoregistry/testprotos/test.pb.go
index 83c70ff..2e8bbd3 100644
--- a/reflect/protoregistry/testprotos/test.pb.go
+++ b/reflect/protoregistry/testprotos/test.pb.go
@@ -25,7 +25,7 @@
 )
 
 func (e Enum1) Type() protoreflect.EnumType {
-	return xxx_Test_protoFile_enumTypes[0]
+	return xxx_ProtoFile_reflect_protoregistry_testprotos_test_enumTypes[0]
 }
 func (e Enum1) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -69,7 +69,7 @@
 )
 
 func (e Enum2) Type() protoreflect.EnumType {
-	return xxx_Test_protoFile_enumTypes[1]
+	return xxx_ProtoFile_reflect_protoregistry_testprotos_test_enumTypes[1]
 }
 func (e Enum2) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -113,7 +113,7 @@
 )
 
 func (e Enum3) Type() protoreflect.EnumType {
-	return xxx_Test_protoFile_enumTypes[2]
+	return xxx_ProtoFile_reflect_protoregistry_testprotos_test_enumTypes[2]
 }
 func (e Enum3) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -158,7 +158,7 @@
 }
 
 func (m *Message1) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_reflect_protoregistry_testprotos_test_messageTypes[0].MessageOf(m)
 }
 func (m *Message1) Reset()         { *m = Message1{} }
 func (m *Message1) String() string { return proto.CompactTextString(m) }
@@ -200,7 +200,7 @@
 }
 
 func (m *Message2) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[1].MessageOf(m)
+	return xxx_ProtoFile_reflect_protoregistry_testprotos_test_messageTypes[1].MessageOf(m)
 }
 func (m *Message2) Reset()         { *m = Message2{} }
 func (m *Message2) String() string { return proto.CompactTextString(m) }
@@ -234,7 +234,7 @@
 }
 
 func (m *Message3) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[2].MessageOf(m)
+	return xxx_ProtoFile_reflect_protoregistry_testprotos_test_messageTypes[2].MessageOf(m)
 }
 func (m *Message3) Reset()         { *m = Message3{} }
 func (m *Message3) String() string { return proto.CompactTextString(m) }
@@ -269,7 +269,7 @@
 }
 
 func (m *Message4) ProtoReflect() protoreflect.Message {
-	return xxx_Test_protoFile_messageTypes[3].MessageOf(m)
+	return xxx_ProtoFile_reflect_protoregistry_testprotos_test_messageTypes[3].MessageOf(m)
 }
 func (m *Message4) Reset()         { *m = Message4{} }
 func (m *Message4) String() string { return proto.CompactTextString(m) }
@@ -431,11 +431,11 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Test_protoFile protoreflect.FileDescriptor
+var ProtoFile_reflect_protoregistry_testprotos_test protoreflect.FileDescriptor
 
-var xxx_Test_protoFile_enumTypes [3]protoreflect.EnumType
-var xxx_Test_protoFile_messageTypes [4]protoimpl.MessageType
-var xxx_Test_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_reflect_protoregistry_testprotos_test_enumTypes [3]protoreflect.EnumType
+var xxx_ProtoFile_reflect_protoregistry_testprotos_test_messageTypes [4]protoimpl.MessageType
+var xxx_ProtoFile_reflect_protoregistry_testprotos_test_goTypes = []interface{}{
 	(Enum1)(0),       // 0: testprotos.Enum1
 	(Enum2)(0),       // 1: testprotos.Enum2
 	(Enum3)(0),       // 2: testprotos.Enum3
@@ -444,7 +444,7 @@
 	(*Message3)(nil), // 5: testprotos.Message3
 	(*Message4)(nil), // 6: testprotos.Message4
 }
-var xxx_Test_protoFile_depIdxs = []int32{
+var xxx_ProtoFile_reflect_protoregistry_testprotos_test_depIdxs = []int32{
 	3, // testprotos.string_field:extendee -> testprotos.Message1
 	3, // testprotos.enum_field:extendee -> testprotos.Message1
 	3, // testprotos.message_field:extendee -> testprotos.Message1
@@ -460,18 +460,18 @@
 func init() {
 	var messageTypes [4]protoreflect.MessageType
 	var extensionTypes [6]protoreflect.ExtensionType
-	Test_protoFile = protoimpl.FileBuilder{
+	ProtoFile_reflect_protoregistry_testprotos_test = protoimpl.FileBuilder{
 		RawDescriptor:        fileDescriptor_3628d63611f7063d,
-		GoTypes:              xxx_Test_protoFile_goTypes,
-		DependencyIndexes:    xxx_Test_protoFile_depIdxs,
-		EnumOutputTypes:      xxx_Test_protoFile_enumTypes[:],
+		GoTypes:              xxx_ProtoFile_reflect_protoregistry_testprotos_test_goTypes,
+		DependencyIndexes:    xxx_ProtoFile_reflect_protoregistry_testprotos_test_depIdxs,
+		EnumOutputTypes:      xxx_ProtoFile_reflect_protoregistry_testprotos_test_enumTypes[:],
 		MessageOutputTypes:   messageTypes[:],
 		ExtensionOutputTypes: extensionTypes[:],
 	}.Init()
-	messageGoTypes := xxx_Test_protoFile_goTypes[3:][:4]
+	messageGoTypes := xxx_ProtoFile_reflect_protoregistry_testprotos_test_goTypes[3:][:4]
 	for i, mt := range messageTypes[:] {
-		xxx_Test_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_Test_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_reflect_protoregistry_testprotos_test_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_reflect_protoregistry_testprotos_test_messageTypes[i].PBType = mt
 	}
 	E_StringField.Type = extensionTypes[0]
 	E_EnumField.Type = extensionTypes[1]
@@ -479,6 +479,6 @@
 	E_Message4_MessageField.Type = extensionTypes[3]
 	E_Message4_EnumField.Type = extensionTypes[4]
 	E_Message4_StringField.Type = extensionTypes[5]
-	xxx_Test_protoFile_goTypes = nil
-	xxx_Test_protoFile_depIdxs = nil
+	xxx_ProtoFile_reflect_protoregistry_testprotos_test_goTypes = nil
+	xxx_ProtoFile_reflect_protoregistry_testprotos_test_depIdxs = nil
 }
diff --git a/types/descriptor/descriptor.pb.go b/types/descriptor/descriptor.pb.go
index 499f960..299cd81 100644
--- a/types/descriptor/descriptor.pb.go
+++ b/types/descriptor/descriptor.pb.go
@@ -48,7 +48,7 @@
 )
 
 func (e FieldDescriptorProto_Type) Type() protoreflect.EnumType {
-	return xxx_Descriptor_protoFile_enumTypes[0]
+	return xxx_ProtoFile_google_protobuf_descriptor_enumTypes[0]
 }
 func (e FieldDescriptorProto_Type) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -129,7 +129,7 @@
 )
 
 func (e FieldDescriptorProto_Label) Type() protoreflect.EnumType {
-	return xxx_Descriptor_protoFile_enumTypes[1]
+	return xxx_ProtoFile_google_protobuf_descriptor_enumTypes[1]
 }
 func (e FieldDescriptorProto_Label) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -181,7 +181,7 @@
 )
 
 func (e FileOptions_OptimizeMode) Type() protoreflect.EnumType {
-	return xxx_Descriptor_protoFile_enumTypes[2]
+	return xxx_ProtoFile_google_protobuf_descriptor_enumTypes[2]
 }
 func (e FileOptions_OptimizeMode) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -232,7 +232,7 @@
 )
 
 func (e FieldOptions_CType) Type() protoreflect.EnumType {
-	return xxx_Descriptor_protoFile_enumTypes[3]
+	return xxx_ProtoFile_google_protobuf_descriptor_enumTypes[3]
 }
 func (e FieldOptions_CType) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -285,7 +285,7 @@
 )
 
 func (e FieldOptions_JSType) Type() protoreflect.EnumType {
-	return xxx_Descriptor_protoFile_enumTypes[4]
+	return xxx_ProtoFile_google_protobuf_descriptor_enumTypes[4]
 }
 func (e FieldOptions_JSType) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -338,7 +338,7 @@
 )
 
 func (e MethodOptions_IdempotencyLevel) Type() protoreflect.EnumType {
-	return xxx_Descriptor_protoFile_enumTypes[5]
+	return xxx_ProtoFile_google_protobuf_descriptor_enumTypes[5]
 }
 func (e MethodOptions_IdempotencyLevel) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -389,7 +389,7 @@
 }
 
 func (m *FileDescriptorSet) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[0].MessageOf(m)
 }
 func (m *FileDescriptorSet) Reset()         { *m = FileDescriptorSet{} }
 func (m *FileDescriptorSet) String() string { return protoapi.CompactTextString(m) }
@@ -436,7 +436,7 @@
 }
 
 func (m *FileDescriptorProto) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[1].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[1].MessageOf(m)
 }
 func (m *FileDescriptorProto) Reset()         { *m = FileDescriptorProto{} }
 func (m *FileDescriptorProto) String() string { return protoapi.CompactTextString(m) }
@@ -549,7 +549,7 @@
 }
 
 func (m *DescriptorProto) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[2].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[2].MessageOf(m)
 }
 func (m *DescriptorProto) Reset()         { *m = DescriptorProto{} }
 func (m *DescriptorProto) String() string { return protoapi.CompactTextString(m) }
@@ -638,7 +638,7 @@
 }
 
 func (m *ExtensionRangeOptions) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[3].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[3].MessageOf(m)
 }
 func (m *ExtensionRangeOptions) Reset()         { *m = ExtensionRangeOptions{} }
 func (m *ExtensionRangeOptions) String() string { return protoapi.CompactTextString(m) }
@@ -700,7 +700,7 @@
 }
 
 func (m *FieldDescriptorProto) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[4].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[4].MessageOf(m)
 }
 func (m *FieldDescriptorProto) Reset()         { *m = FieldDescriptorProto{} }
 func (m *FieldDescriptorProto) String() string { return protoapi.CompactTextString(m) }
@@ -789,7 +789,7 @@
 }
 
 func (m *OneofDescriptorProto) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[5].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[5].MessageOf(m)
 }
 func (m *OneofDescriptorProto) Reset()         { *m = OneofDescriptorProto{} }
 func (m *OneofDescriptorProto) String() string { return protoapi.CompactTextString(m) }
@@ -830,7 +830,7 @@
 }
 
 func (m *EnumDescriptorProto) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[6].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[6].MessageOf(m)
 }
 func (m *EnumDescriptorProto) Reset()         { *m = EnumDescriptorProto{} }
 func (m *EnumDescriptorProto) String() string { return protoapi.CompactTextString(m) }
@@ -885,7 +885,7 @@
 }
 
 func (m *EnumValueDescriptorProto) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[7].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[7].MessageOf(m)
 }
 func (m *EnumValueDescriptorProto) Reset()         { *m = EnumValueDescriptorProto{} }
 func (m *EnumValueDescriptorProto) String() string { return protoapi.CompactTextString(m) }
@@ -926,7 +926,7 @@
 }
 
 func (m *ServiceDescriptorProto) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[8].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[8].MessageOf(m)
 }
 func (m *ServiceDescriptorProto) Reset()         { *m = ServiceDescriptorProto{} }
 func (m *ServiceDescriptorProto) String() string { return protoapi.CompactTextString(m) }
@@ -974,7 +974,7 @@
 }
 
 func (m *MethodDescriptorProto) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[9].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[9].MessageOf(m)
 }
 func (m *MethodDescriptorProto) Reset()         { *m = MethodDescriptorProto{} }
 func (m *MethodDescriptorProto) String() string { return protoapi.CompactTextString(m) }
@@ -1120,7 +1120,7 @@
 }
 
 func (m *FileOptions) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[10].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[10].MessageOf(m)
 }
 func (m *FileOptions) Reset()         { *m = FileOptions{} }
 func (m *FileOptions) String() string { return protoapi.CompactTextString(m) }
@@ -1355,7 +1355,7 @@
 }
 
 func (m *MessageOptions) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[11].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[11].MessageOf(m)
 }
 func (m *MessageOptions) Reset()         { *m = MessageOptions{} }
 func (m *MessageOptions) String() string { return protoapi.CompactTextString(m) }
@@ -1480,7 +1480,7 @@
 }
 
 func (m *FieldOptions) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[12].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[12].MessageOf(m)
 }
 func (m *FieldOptions) Reset()         { *m = FieldOptions{} }
 func (m *FieldOptions) String() string { return protoapi.CompactTextString(m) }
@@ -1562,7 +1562,7 @@
 }
 
 func (m *OneofOptions) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[13].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[13].MessageOf(m)
 }
 func (m *OneofOptions) Reset()         { *m = OneofOptions{} }
 func (m *OneofOptions) String() string { return protoapi.CompactTextString(m) }
@@ -1604,7 +1604,7 @@
 }
 
 func (m *EnumOptions) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[14].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[14].MessageOf(m)
 }
 func (m *EnumOptions) Reset()         { *m = EnumOptions{} }
 func (m *EnumOptions) String() string { return protoapi.CompactTextString(m) }
@@ -1659,7 +1659,7 @@
 }
 
 func (m *EnumValueOptions) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[15].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[15].MessageOf(m)
 }
 func (m *EnumValueOptions) Reset()         { *m = EnumValueOptions{} }
 func (m *EnumValueOptions) String() string { return protoapi.CompactTextString(m) }
@@ -1707,7 +1707,7 @@
 }
 
 func (m *ServiceOptions) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[16].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[16].MessageOf(m)
 }
 func (m *ServiceOptions) Reset()         { *m = ServiceOptions{} }
 func (m *ServiceOptions) String() string { return protoapi.CompactTextString(m) }
@@ -1756,7 +1756,7 @@
 }
 
 func (m *MethodOptions) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[17].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[17].MessageOf(m)
 }
 func (m *MethodOptions) Reset()         { *m = MethodOptions{} }
 func (m *MethodOptions) String() string { return protoapi.CompactTextString(m) }
@@ -1819,7 +1819,7 @@
 }
 
 func (m *UninterpretedOption) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[18].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[18].MessageOf(m)
 }
 func (m *UninterpretedOption) Reset()         { *m = UninterpretedOption{} }
 func (m *UninterpretedOption) String() string { return protoapi.CompactTextString(m) }
@@ -1930,7 +1930,7 @@
 }
 
 func (m *SourceCodeInfo) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[19].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[19].MessageOf(m)
 }
 func (m *SourceCodeInfo) Reset()         { *m = SourceCodeInfo{} }
 func (m *SourceCodeInfo) String() string { return protoapi.CompactTextString(m) }
@@ -1959,7 +1959,7 @@
 }
 
 func (m *GeneratedCodeInfo) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[20].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[20].MessageOf(m)
 }
 func (m *GeneratedCodeInfo) Reset()         { *m = GeneratedCodeInfo{} }
 func (m *GeneratedCodeInfo) String() string { return protoapi.CompactTextString(m) }
@@ -1985,7 +1985,7 @@
 }
 
 func (m *DescriptorProto_ExtensionRange) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[21].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[21].MessageOf(m)
 }
 func (m *DescriptorProto_ExtensionRange) Reset()         { *m = DescriptorProto_ExtensionRange{} }
 func (m *DescriptorProto_ExtensionRange) String() string { return protoapi.CompactTextString(m) }
@@ -2027,7 +2027,7 @@
 }
 
 func (m *DescriptorProto_ReservedRange) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[22].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[22].MessageOf(m)
 }
 func (m *DescriptorProto_ReservedRange) Reset()         { *m = DescriptorProto_ReservedRange{} }
 func (m *DescriptorProto_ReservedRange) String() string { return protoapi.CompactTextString(m) }
@@ -2065,7 +2065,7 @@
 }
 
 func (m *EnumDescriptorProto_EnumReservedRange) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[23].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[23].MessageOf(m)
 }
 func (m *EnumDescriptorProto_EnumReservedRange) Reset()         { *m = EnumDescriptorProto_EnumReservedRange{} }
 func (m *EnumDescriptorProto_EnumReservedRange) String() string { return protoapi.CompactTextString(m) }
@@ -2102,7 +2102,7 @@
 }
 
 func (m *UninterpretedOption_NamePart) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[24].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[24].MessageOf(m)
 }
 func (m *UninterpretedOption_NamePart) Reset()         { *m = UninterpretedOption_NamePart{} }
 func (m *UninterpretedOption_NamePart) String() string { return protoapi.CompactTextString(m) }
@@ -2212,7 +2212,7 @@
 }
 
 func (m *SourceCodeInfo_Location) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[25].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[25].MessageOf(m)
 }
 func (m *SourceCodeInfo_Location) Reset()         { *m = SourceCodeInfo_Location{} }
 func (m *SourceCodeInfo_Location) String() string { return protoapi.CompactTextString(m) }
@@ -2275,7 +2275,7 @@
 }
 
 func (m *GeneratedCodeInfo_Annotation) ProtoReflect() protoreflect.Message {
-	return xxx_Descriptor_protoFile_messageTypes[26].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_descriptor_messageTypes[26].MessageOf(m)
 }
 func (m *GeneratedCodeInfo_Annotation) Reset()         { *m = GeneratedCodeInfo_Annotation{} }
 func (m *GeneratedCodeInfo_Annotation) String() string { return protoapi.CompactTextString(m) }
@@ -2837,11 +2837,11 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Descriptor_protoFile protoreflect.FileDescriptor
+var ProtoFile_google_protobuf_descriptor protoreflect.FileDescriptor
 
-var xxx_Descriptor_protoFile_enumTypes [6]protoreflect.EnumType
-var xxx_Descriptor_protoFile_messageTypes [27]protoimpl.MessageType
-var xxx_Descriptor_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_google_protobuf_descriptor_enumTypes [6]protoreflect.EnumType
+var xxx_ProtoFile_google_protobuf_descriptor_messageTypes [27]protoimpl.MessageType
+var xxx_ProtoFile_google_protobuf_descriptor_goTypes = []interface{}{
 	(FieldDescriptorProto_Type)(0),                // 0: google.protobuf.FieldDescriptorProto.Type
 	(FieldDescriptorProto_Label)(0),               // 1: google.protobuf.FieldDescriptorProto.Label
 	(FileOptions_OptimizeMode)(0),                 // 2: google.protobuf.FileOptions.OptimizeMode
@@ -2876,7 +2876,7 @@
 	(*SourceCodeInfo_Location)(nil),               // 31: google.protobuf.SourceCodeInfo.Location
 	(*GeneratedCodeInfo_Annotation)(nil),          // 32: google.protobuf.GeneratedCodeInfo.Annotation
 }
-var xxx_Descriptor_protoFile_depIdxs = []int32{
+var xxx_ProtoFile_google_protobuf_descriptor_depIdxs = []int32{
 	7,  // google.protobuf.FileDescriptorSet.file:type_name -> google.protobuf.FileDescriptorProto
 	8,  // google.protobuf.FileDescriptorProto.message_type:type_name -> google.protobuf.DescriptorProto
 	12, // google.protobuf.FileDescriptorProto.enum_type:type_name -> google.protobuf.EnumDescriptorProto
@@ -2924,17 +2924,17 @@
 
 func init() {
 	var messageTypes [27]protoreflect.MessageType
-	Descriptor_protoFile = protoimpl.FileBuilder{
+	ProtoFile_google_protobuf_descriptor = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_e5baabe45344a177,
-		GoTypes:            xxx_Descriptor_protoFile_goTypes,
-		DependencyIndexes:  xxx_Descriptor_protoFile_depIdxs,
-		EnumOutputTypes:    xxx_Descriptor_protoFile_enumTypes[:],
+		GoTypes:            xxx_ProtoFile_google_protobuf_descriptor_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_google_protobuf_descriptor_depIdxs,
+		EnumOutputTypes:    xxx_ProtoFile_google_protobuf_descriptor_enumTypes[:],
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_Descriptor_protoFile_goTypes[6:][:27]
+	messageGoTypes := xxx_ProtoFile_google_protobuf_descriptor_goTypes[6:][:27]
 	for i, mt := range messageTypes[:] {
-		xxx_Descriptor_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_Descriptor_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_google_protobuf_descriptor_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_google_protobuf_descriptor_messageTypes[i].PBType = mt
 	}
 	prototype.X.RegisterExtensionRangeOptions((*ExtensionRangeOptions)(nil))
 	prototype.X.RegisterFileOptions((*FileOptions)(nil))
@@ -2945,6 +2945,6 @@
 	prototype.X.RegisterEnumValueOptions((*EnumValueOptions)(nil))
 	prototype.X.RegisterServiceOptions((*ServiceOptions)(nil))
 	prototype.X.RegisterMethodOptions((*MethodOptions)(nil))
-	xxx_Descriptor_protoFile_goTypes = nil
-	xxx_Descriptor_protoFile_depIdxs = nil
+	xxx_ProtoFile_google_protobuf_descriptor_goTypes = nil
+	xxx_ProtoFile_google_protobuf_descriptor_depIdxs = nil
 }
diff --git a/types/plugin/plugin.pb.go b/types/plugin/plugin.pb.go
index 747f3ff..9db5c1d 100644
--- a/types/plugin/plugin.pb.go
+++ b/types/plugin/plugin.pb.go
@@ -33,7 +33,7 @@
 }
 
 func (m *Version) ProtoReflect() protoreflect.Message {
-	return xxx_Plugin_protoFile_messageTypes[0].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_compiler_plugin_messageTypes[0].MessageOf(m)
 }
 func (m *Version) Reset()         { *m = Version{} }
 func (m *Version) String() string { return proto.CompactTextString(m) }
@@ -119,7 +119,7 @@
 }
 
 func (m *CodeGeneratorRequest) ProtoReflect() protoreflect.Message {
-	return xxx_Plugin_protoFile_messageTypes[1].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_compiler_plugin_messageTypes[1].MessageOf(m)
 }
 func (m *CodeGeneratorRequest) Reset()         { *m = CodeGeneratorRequest{} }
 func (m *CodeGeneratorRequest) String() string { return proto.CompactTextString(m) }
@@ -192,7 +192,7 @@
 }
 
 func (m *CodeGeneratorResponse) ProtoReflect() protoreflect.Message {
-	return xxx_Plugin_protoFile_messageTypes[2].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_compiler_plugin_messageTypes[2].MessageOf(m)
 }
 func (m *CodeGeneratorResponse) Reset()         { *m = CodeGeneratorResponse{} }
 func (m *CodeGeneratorResponse) String() string { return proto.CompactTextString(m) }
@@ -293,7 +293,7 @@
 }
 
 func (m *CodeGeneratorResponse_File) ProtoReflect() protoreflect.Message {
-	return xxx_Plugin_protoFile_messageTypes[3].MessageOf(m)
+	return xxx_ProtoFile_google_protobuf_compiler_plugin_messageTypes[3].MessageOf(m)
 }
 func (m *CodeGeneratorResponse_File) Reset()         { *m = CodeGeneratorResponse_File{} }
 func (m *CodeGeneratorResponse_File) String() string { return proto.CompactTextString(m) }
@@ -411,17 +411,17 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Plugin_protoFile protoreflect.FileDescriptor
+var ProtoFile_google_protobuf_compiler_plugin protoreflect.FileDescriptor
 
-var xxx_Plugin_protoFile_messageTypes [4]protoimpl.MessageType
-var xxx_Plugin_protoFile_goTypes = []interface{}{
+var xxx_ProtoFile_google_protobuf_compiler_plugin_messageTypes [4]protoimpl.MessageType
+var xxx_ProtoFile_google_protobuf_compiler_plugin_goTypes = []interface{}{
 	(*Version)(nil),                        // 0: google.protobuf.compiler.Version
 	(*CodeGeneratorRequest)(nil),           // 1: google.protobuf.compiler.CodeGeneratorRequest
 	(*CodeGeneratorResponse)(nil),          // 2: google.protobuf.compiler.CodeGeneratorResponse
 	(*CodeGeneratorResponse_File)(nil),     // 3: google.protobuf.compiler.CodeGeneratorResponse.File
 	(*descriptor.FileDescriptorProto)(nil), // 4: google.protobuf.FileDescriptorProto
 }
-var xxx_Plugin_protoFile_depIdxs = []int32{
+var xxx_ProtoFile_google_protobuf_compiler_plugin_depIdxs = []int32{
 	4, // google.protobuf.compiler.CodeGeneratorRequest.proto_file:type_name -> google.protobuf.FileDescriptorProto
 	0, // google.protobuf.compiler.CodeGeneratorRequest.compiler_version:type_name -> google.protobuf.compiler.Version
 	3, // google.protobuf.compiler.CodeGeneratorResponse.file:type_name -> google.protobuf.compiler.CodeGeneratorResponse.File
@@ -429,17 +429,17 @@
 
 func init() {
 	var messageTypes [4]protoreflect.MessageType
-	Plugin_protoFile = protoimpl.FileBuilder{
+	ProtoFile_google_protobuf_compiler_plugin = protoimpl.FileBuilder{
 		RawDescriptor:      fileDescriptor_3562add825dafed5,
-		GoTypes:            xxx_Plugin_protoFile_goTypes,
-		DependencyIndexes:  xxx_Plugin_protoFile_depIdxs,
+		GoTypes:            xxx_ProtoFile_google_protobuf_compiler_plugin_goTypes,
+		DependencyIndexes:  xxx_ProtoFile_google_protobuf_compiler_plugin_depIdxs,
 		MessageOutputTypes: messageTypes[:],
 	}.Init()
-	messageGoTypes := xxx_Plugin_protoFile_goTypes[0:][:4]
+	messageGoTypes := xxx_ProtoFile_google_protobuf_compiler_plugin_goTypes[0:][:4]
 	for i, mt := range messageTypes[:] {
-		xxx_Plugin_protoFile_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
-		xxx_Plugin_protoFile_messageTypes[i].PBType = mt
+		xxx_ProtoFile_google_protobuf_compiler_plugin_messageTypes[i].GoType = reflect.TypeOf(messageGoTypes[i])
+		xxx_ProtoFile_google_protobuf_compiler_plugin_messageTypes[i].PBType = mt
 	}
-	xxx_Plugin_protoFile_goTypes = nil
-	xxx_Plugin_protoFile_depIdxs = nil
+	xxx_ProtoFile_google_protobuf_compiler_plugin_goTypes = nil
+	xxx_ProtoFile_google_protobuf_compiler_plugin_depIdxs = nil
 }
