diff --git a/cmd/protoc-gen-go-grpc/testdata/grpc/deprecation.pb.go b/cmd/protoc-gen-go-grpc/testdata/grpc/deprecation.pb.go
index 6898632..1da5d9c 100644
--- a/cmd/protoc-gen-go-grpc/testdata/grpc/deprecation.pb.go
+++ b/cmd/protoc-gen-go-grpc/testdata/grpc/deprecation.pb.go
@@ -38,7 +38,7 @@
 
 func init() {
 	var err error
-	Deprecation_ProtoFile, err = prototype.NewFile(&xxx_Deprecation_ProtoFile_FileDesc)
+	Deprecation_protoFile, err = prototype.NewFile(&xxx_Deprecation_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -46,9 +46,9 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Deprecation_ProtoFile protoreflect.FileDescriptor
+var Deprecation_protoFile protoreflect.FileDescriptor
 
-var xxx_Deprecation_ProtoFile_FileDesc = prototype.File{
+var xxx_Deprecation_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto3,
 	Path:    "grpc/deprecation.proto",
 	Package: "goproto.protoc.grpc",
diff --git a/cmd/protoc-gen-go-grpc/testdata/grpc/grpc.pb.go b/cmd/protoc-gen-go-grpc/testdata/grpc/grpc.pb.go
index 37fc44b..123db24 100644
--- a/cmd/protoc-gen-go-grpc/testdata/grpc/grpc.pb.go
+++ b/cmd/protoc-gen-go-grpc/testdata/grpc/grpc.pb.go
@@ -28,13 +28,13 @@
 	return xxx_Request{m}
 }
 func (m xxx_Request) Type() protoreflect.MessageType {
-	return xxx_Grpc_ProtoFile_MessageTypes[0].Type
+	return xxx_Grpc_protoFile_MessageTypes[0].Type
 }
 func (m xxx_Request) KnownFields() protoreflect.KnownFields {
-	return xxx_Grpc_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Grpc_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_Request) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Grpc_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Grpc_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_Request) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -77,13 +77,13 @@
 	return xxx_Response{m}
 }
 func (m xxx_Response) Type() protoreflect.MessageType {
-	return xxx_Grpc_ProtoFile_MessageTypes[1].Type
+	return xxx_Grpc_protoFile_MessageTypes[1].Type
 }
 func (m xxx_Response) KnownFields() protoreflect.KnownFields {
-	return xxx_Grpc_ProtoFile_MessageTypes[1].KnownFieldsOf(m.m)
+	return xxx_Grpc_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
 }
 func (m xxx_Response) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Grpc_ProtoFile_MessageTypes[1].UnknownFieldsOf(m.m)
+	return xxx_Grpc_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
 }
 func (m xxx_Response) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -139,9 +139,9 @@
 }
 
 func init() {
-	xxx_Grpc_ProtoFile_FileDesc.Messages = xxx_Grpc_ProtoFile_MessageDescs[0:2]
+	xxx_Grpc_protoFile_FileDesc.Messages = xxx_Grpc_protoFile_MessageDescs[0:2]
 	var err error
-	Grpc_ProtoFile, err = prototype.NewFile(&xxx_Grpc_ProtoFile_FileDesc)
+	Grpc_protoFile, err = prototype.NewFile(&xxx_Grpc_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -149,28 +149,28 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Grpc_ProtoFile protoreflect.FileDescriptor
+var Grpc_protoFile protoreflect.FileDescriptor
 
-var xxx_Grpc_ProtoFile_FileDesc = prototype.File{
+var xxx_Grpc_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto3,
 	Path:    "grpc/grpc.proto",
 	Package: "goproto.protoc.grpc",
 }
-var xxx_Grpc_ProtoFile_MessageTypes = [2]protoimpl.MessageType{
+var xxx_Grpc_protoFile_MessageTypes = [2]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_Grpc_ProtoFile_MessageDescs[0].Reference(),
+		xxx_Grpc_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Request{new(Request)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Grpc_ProtoFile_MessageDescs[1].Reference(),
+		xxx_Grpc_protoFile_MessageDescs[1].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Response{new(Response)}
 		},
 	)},
 }
-var xxx_Grpc_ProtoFile_MessageDescs = [2]prototype.Message{
+var xxx_Grpc_protoFile_MessageDescs = [2]prototype.Message{
 	{
 		Name: "Request",
 	},
diff --git a/cmd/protoc-gen-go/testdata/annotations/annotations.pb.go b/cmd/protoc-gen-go/testdata/annotations/annotations.pb.go
index e64eacf..92ca949 100644
--- a/cmd/protoc-gen-go/testdata/annotations/annotations.pb.go
+++ b/cmd/protoc-gen-go/testdata/annotations/annotations.pb.go
@@ -23,7 +23,7 @@
 )
 
 func (e AnnotationsTestEnum) Type() protoreflect.EnumType {
-	return xxx_Annotations_ProtoFile_EnumTypes[0]
+	return xxx_Annotations_protoFile_EnumTypes[0]
 }
 func (e AnnotationsTestEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -73,13 +73,13 @@
 	return xxx_AnnotationsTestMessage{m}
 }
 func (m xxx_AnnotationsTestMessage) Type() protoreflect.MessageType {
-	return xxx_Annotations_ProtoFile_MessageTypes[0].Type
+	return xxx_Annotations_protoFile_MessageTypes[0].Type
 }
 func (m xxx_AnnotationsTestMessage) KnownFields() protoreflect.KnownFields {
-	return xxx_Annotations_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Annotations_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_AnnotationsTestMessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Annotations_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Annotations_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_AnnotationsTestMessage) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -141,10 +141,10 @@
 }
 
 func init() {
-	xxx_Annotations_ProtoFile_FileDesc.Enums = xxx_Annotations_ProtoFile_EnumDescs[0:1]
-	xxx_Annotations_ProtoFile_FileDesc.Messages = xxx_Annotations_ProtoFile_MessageDescs[0:1]
+	xxx_Annotations_protoFile_FileDesc.Enums = xxx_Annotations_protoFile_EnumDescs[0:1]
+	xxx_Annotations_protoFile_FileDesc.Messages = xxx_Annotations_protoFile_MessageDescs[0:1]
 	var err error
-	Annotations_ProtoFile, err = prototype.NewFile(&xxx_Annotations_ProtoFile_FileDesc)
+	Annotations_protoFile, err = prototype.NewFile(&xxx_Annotations_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -152,22 +152,22 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Annotations_ProtoFile protoreflect.FileDescriptor
+var Annotations_protoFile protoreflect.FileDescriptor
 
-var xxx_Annotations_ProtoFile_FileDesc = prototype.File{
+var xxx_Annotations_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "annotations/annotations.proto",
 	Package: "goproto.protoc.annotations",
 }
-var xxx_Annotations_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
+var xxx_Annotations_protoFile_EnumTypes = [1]protoreflect.EnumType{
 	prototype.GoEnum(
-		xxx_Annotations_ProtoFile_EnumDescs[0].Reference(),
+		xxx_Annotations_protoFile_EnumDescs[0].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return AnnotationsTestEnum(n)
 		},
 	),
 }
-var xxx_Annotations_ProtoFile_EnumDescs = [1]prototype.Enum{
+var xxx_Annotations_protoFile_EnumDescs = [1]prototype.Enum{
 	{
 		Name: "AnnotationsTestEnum",
 		Values: []prototype.EnumValue{
@@ -175,15 +175,15 @@
 		},
 	},
 }
-var xxx_Annotations_ProtoFile_MessageTypes = [1]protoimpl.MessageType{
+var xxx_Annotations_protoFile_MessageTypes = [1]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_Annotations_ProtoFile_MessageDescs[0].Reference(),
+		xxx_Annotations_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_AnnotationsTestMessage{new(AnnotationsTestMessage)}
 		},
 	)},
 }
-var xxx_Annotations_ProtoFile_MessageDescs = [1]prototype.Message{
+var xxx_Annotations_protoFile_MessageDescs = [1]prototype.Message{
 	{
 		Name: "AnnotationsTestMessage",
 		Fields: []prototype.Field{
diff --git a/cmd/protoc-gen-go/testdata/comments/comments.pb.go b/cmd/protoc-gen-go/testdata/comments/comments.pb.go
index e8e7e30..7ba417a 100644
--- a/cmd/protoc-gen-go/testdata/comments/comments.pb.go
+++ b/cmd/protoc-gen-go/testdata/comments/comments.pb.go
@@ -39,13 +39,13 @@
 	return xxx_Message1{m}
 }
 func (m xxx_Message1) Type() protoreflect.MessageType {
-	return xxx_Comments_ProtoFile_MessageTypes[0].Type
+	return xxx_Comments_protoFile_MessageTypes[0].Type
 }
 func (m xxx_Message1) KnownFields() protoreflect.KnownFields {
-	return xxx_Comments_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Comments_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_Message1) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Comments_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Comments_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_Message1) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -127,13 +127,13 @@
 	return xxx_Message2{m}
 }
 func (m xxx_Message2) Type() protoreflect.MessageType {
-	return xxx_Comments_ProtoFile_MessageTypes[1].Type
+	return xxx_Comments_protoFile_MessageTypes[1].Type
 }
 func (m xxx_Message2) KnownFields() protoreflect.KnownFields {
-	return xxx_Comments_ProtoFile_MessageTypes[1].KnownFieldsOf(m.m)
+	return xxx_Comments_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
 }
 func (m xxx_Message2) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Comments_ProtoFile_MessageTypes[1].UnknownFieldsOf(m.m)
+	return xxx_Comments_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
 }
 func (m xxx_Message2) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -177,13 +177,13 @@
 	return xxx_Message1_Message1A{m}
 }
 func (m xxx_Message1_Message1A) Type() protoreflect.MessageType {
-	return xxx_Comments_ProtoFile_MessageTypes[2].Type
+	return xxx_Comments_protoFile_MessageTypes[2].Type
 }
 func (m xxx_Message1_Message1A) KnownFields() protoreflect.KnownFields {
-	return xxx_Comments_ProtoFile_MessageTypes[2].KnownFieldsOf(m.m)
+	return xxx_Comments_protoFile_MessageTypes[2].KnownFieldsOf(m.m)
 }
 func (m xxx_Message1_Message1A) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Comments_ProtoFile_MessageTypes[2].UnknownFieldsOf(m.m)
+	return xxx_Comments_protoFile_MessageTypes[2].UnknownFieldsOf(m.m)
 }
 func (m xxx_Message1_Message1A) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -227,13 +227,13 @@
 	return xxx_Message1_Message1B{m}
 }
 func (m xxx_Message1_Message1B) Type() protoreflect.MessageType {
-	return xxx_Comments_ProtoFile_MessageTypes[3].Type
+	return xxx_Comments_protoFile_MessageTypes[3].Type
 }
 func (m xxx_Message1_Message1B) KnownFields() protoreflect.KnownFields {
-	return xxx_Comments_ProtoFile_MessageTypes[3].KnownFieldsOf(m.m)
+	return xxx_Comments_protoFile_MessageTypes[3].KnownFieldsOf(m.m)
 }
 func (m xxx_Message1_Message1B) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Comments_ProtoFile_MessageTypes[3].UnknownFieldsOf(m.m)
+	return xxx_Comments_protoFile_MessageTypes[3].UnknownFieldsOf(m.m)
 }
 func (m xxx_Message1_Message1B) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -277,13 +277,13 @@
 	return xxx_Message2_Message2A{m}
 }
 func (m xxx_Message2_Message2A) Type() protoreflect.MessageType {
-	return xxx_Comments_ProtoFile_MessageTypes[4].Type
+	return xxx_Comments_protoFile_MessageTypes[4].Type
 }
 func (m xxx_Message2_Message2A) KnownFields() protoreflect.KnownFields {
-	return xxx_Comments_ProtoFile_MessageTypes[4].KnownFieldsOf(m.m)
+	return xxx_Comments_protoFile_MessageTypes[4].KnownFieldsOf(m.m)
 }
 func (m xxx_Message2_Message2A) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Comments_ProtoFile_MessageTypes[4].UnknownFieldsOf(m.m)
+	return xxx_Comments_protoFile_MessageTypes[4].UnknownFieldsOf(m.m)
 }
 func (m xxx_Message2_Message2A) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -327,13 +327,13 @@
 	return xxx_Message2_Message2B{m}
 }
 func (m xxx_Message2_Message2B) Type() protoreflect.MessageType {
-	return xxx_Comments_ProtoFile_MessageTypes[5].Type
+	return xxx_Comments_protoFile_MessageTypes[5].Type
 }
 func (m xxx_Message2_Message2B) KnownFields() protoreflect.KnownFields {
-	return xxx_Comments_ProtoFile_MessageTypes[5].KnownFieldsOf(m.m)
+	return xxx_Comments_protoFile_MessageTypes[5].KnownFieldsOf(m.m)
 }
 func (m xxx_Message2_Message2B) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Comments_ProtoFile_MessageTypes[5].UnknownFieldsOf(m.m)
+	return xxx_Comments_protoFile_MessageTypes[5].UnknownFieldsOf(m.m)
 }
 func (m xxx_Message2_Message2B) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -391,11 +391,11 @@
 }
 
 func init() {
-	xxx_Comments_ProtoFile_FileDesc.Messages = xxx_Comments_ProtoFile_MessageDescs[0:2]
-	xxx_Comments_ProtoFile_MessageDescs[0].Messages = xxx_Comments_ProtoFile_MessageDescs[2:4]
-	xxx_Comments_ProtoFile_MessageDescs[1].Messages = xxx_Comments_ProtoFile_MessageDescs[4:6]
+	xxx_Comments_protoFile_FileDesc.Messages = xxx_Comments_protoFile_MessageDescs[0:2]
+	xxx_Comments_protoFile_MessageDescs[0].Messages = xxx_Comments_protoFile_MessageDescs[2:4]
+	xxx_Comments_protoFile_MessageDescs[1].Messages = xxx_Comments_protoFile_MessageDescs[4:6]
 	var err error
-	Comments_ProtoFile, err = prototype.NewFile(&xxx_Comments_ProtoFile_FileDesc)
+	Comments_protoFile, err = prototype.NewFile(&xxx_Comments_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -403,52 +403,52 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Comments_ProtoFile protoreflect.FileDescriptor
+var Comments_protoFile protoreflect.FileDescriptor
 
-var xxx_Comments_ProtoFile_FileDesc = prototype.File{
+var xxx_Comments_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "comments/comments.proto",
 	Package: "goproto.protoc.comments",
 }
-var xxx_Comments_ProtoFile_MessageTypes = [6]protoimpl.MessageType{
+var xxx_Comments_protoFile_MessageTypes = [6]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_Comments_ProtoFile_MessageDescs[0].Reference(),
+		xxx_Comments_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Message1{new(Message1)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Comments_ProtoFile_MessageDescs[1].Reference(),
+		xxx_Comments_protoFile_MessageDescs[1].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Message2{new(Message2)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Comments_ProtoFile_MessageDescs[2].Reference(),
+		xxx_Comments_protoFile_MessageDescs[2].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Message1_Message1A{new(Message1_Message1A)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Comments_ProtoFile_MessageDescs[3].Reference(),
+		xxx_Comments_protoFile_MessageDescs[3].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Message1_Message1B{new(Message1_Message1B)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Comments_ProtoFile_MessageDescs[4].Reference(),
+		xxx_Comments_protoFile_MessageDescs[4].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Message2_Message2A{new(Message2_Message2A)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Comments_ProtoFile_MessageDescs[5].Reference(),
+		xxx_Comments_protoFile_MessageDescs[5].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Message2_Message2B{new(Message2_Message2B)}
 		},
 	)},
 }
-var xxx_Comments_ProtoFile_MessageDescs = [6]prototype.Message{
+var xxx_Comments_protoFile_MessageDescs = [6]prototype.Message{
 	{
 		Name: "Message1",
 		Fields: []prototype.Field{
diff --git a/cmd/protoc-gen-go/testdata/comments/deprecated.pb.go b/cmd/protoc-gen-go/testdata/comments/deprecated.pb.go
index 131aa38..cc40df1 100644
--- a/cmd/protoc-gen-go/testdata/comments/deprecated.pb.go
+++ b/cmd/protoc-gen-go/testdata/comments/deprecated.pb.go
@@ -22,7 +22,7 @@
 )
 
 func (e DeprecatedEnum) Type() protoreflect.EnumType {
-	return xxx_Deprecated_ProtoFile_EnumTypes[0]
+	return xxx_Deprecated_protoFile_EnumTypes[0]
 }
 func (e DeprecatedEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -58,13 +58,13 @@
 	return xxx_DeprecatedMessage{m}
 }
 func (m xxx_DeprecatedMessage) Type() protoreflect.MessageType {
-	return xxx_Deprecated_ProtoFile_MessageTypes[0].Type
+	return xxx_Deprecated_protoFile_MessageTypes[0].Type
 }
 func (m xxx_DeprecatedMessage) KnownFields() protoreflect.KnownFields {
-	return xxx_Deprecated_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Deprecated_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_DeprecatedMessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Deprecated_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Deprecated_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_DeprecatedMessage) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -127,10 +127,10 @@
 }
 
 func init() {
-	xxx_Deprecated_ProtoFile_FileDesc.Enums = xxx_Deprecated_ProtoFile_EnumDescs[0:1]
-	xxx_Deprecated_ProtoFile_FileDesc.Messages = xxx_Deprecated_ProtoFile_MessageDescs[0:1]
+	xxx_Deprecated_protoFile_FileDesc.Enums = xxx_Deprecated_protoFile_EnumDescs[0:1]
+	xxx_Deprecated_protoFile_FileDesc.Messages = xxx_Deprecated_protoFile_MessageDescs[0:1]
 	var err error
-	Deprecated_ProtoFile, err = prototype.NewFile(&xxx_Deprecated_ProtoFile_FileDesc)
+	Deprecated_protoFile, err = prototype.NewFile(&xxx_Deprecated_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -138,22 +138,22 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Deprecated_ProtoFile protoreflect.FileDescriptor
+var Deprecated_protoFile protoreflect.FileDescriptor
 
-var xxx_Deprecated_ProtoFile_FileDesc = prototype.File{
+var xxx_Deprecated_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto3,
 	Path:    "comments/deprecated.proto",
 	Package: "goproto.protoc.comments",
 }
-var xxx_Deprecated_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
+var xxx_Deprecated_protoFile_EnumTypes = [1]protoreflect.EnumType{
 	prototype.GoEnum(
-		xxx_Deprecated_ProtoFile_EnumDescs[0].Reference(),
+		xxx_Deprecated_protoFile_EnumDescs[0].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return DeprecatedEnum(n)
 		},
 	),
 }
-var xxx_Deprecated_ProtoFile_EnumDescs = [1]prototype.Enum{
+var xxx_Deprecated_protoFile_EnumDescs = [1]prototype.Enum{
 	{
 		Name: "DeprecatedEnum",
 		Values: []prototype.EnumValue{
@@ -161,15 +161,15 @@
 		},
 	},
 }
-var xxx_Deprecated_ProtoFile_MessageTypes = [1]protoimpl.MessageType{
+var xxx_Deprecated_protoFile_MessageTypes = [1]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_Deprecated_ProtoFile_MessageDescs[0].Reference(),
+		xxx_Deprecated_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_DeprecatedMessage{new(DeprecatedMessage)}
 		},
 	)},
 }
-var xxx_Deprecated_ProtoFile_MessageDescs = [1]prototype.Message{
+var xxx_Deprecated_protoFile_MessageDescs = [1]prototype.Message{
 	{
 		Name: "DeprecatedMessage",
 		Fields: []prototype.Field{
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 9f1a399..c7753ce 100644
--- a/cmd/protoc-gen-go/testdata/extensions/base/base.pb.go
+++ b/cmd/protoc-gen-go/testdata/extensions/base/base.pb.go
@@ -30,13 +30,13 @@
 	return xxx_BaseMessage{m}
 }
 func (m xxx_BaseMessage) Type() protoreflect.MessageType {
-	return xxx_Base_ProtoFile_MessageTypes[0].Type
+	return xxx_Base_protoFile_MessageTypes[0].Type
 }
 func (m xxx_BaseMessage) KnownFields() protoreflect.KnownFields {
-	return xxx_Base_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Base_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_BaseMessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Base_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Base_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_BaseMessage) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -96,13 +96,13 @@
 	return xxx_MessageSetWireFormatMessage{m}
 }
 func (m xxx_MessageSetWireFormatMessage) Type() protoreflect.MessageType {
-	return xxx_Base_ProtoFile_MessageTypes[1].Type
+	return xxx_Base_protoFile_MessageTypes[1].Type
 }
 func (m xxx_MessageSetWireFormatMessage) KnownFields() protoreflect.KnownFields {
-	return xxx_Base_ProtoFile_MessageTypes[1].KnownFieldsOf(m.m)
+	return xxx_Base_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
 }
 func (m xxx_MessageSetWireFormatMessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Base_ProtoFile_MessageTypes[1].UnknownFieldsOf(m.m)
+	return xxx_Base_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
 }
 func (m xxx_MessageSetWireFormatMessage) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -165,9 +165,9 @@
 }
 
 func init() {
-	xxx_Base_ProtoFile_FileDesc.Messages = xxx_Base_ProtoFile_MessageDescs[0:2]
+	xxx_Base_protoFile_FileDesc.Messages = xxx_Base_protoFile_MessageDescs[0:2]
 	var err error
-	Base_ProtoFile, err = prototype.NewFile(&xxx_Base_ProtoFile_FileDesc)
+	Base_protoFile, err = prototype.NewFile(&xxx_Base_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -175,28 +175,28 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Base_ProtoFile protoreflect.FileDescriptor
+var Base_protoFile protoreflect.FileDescriptor
 
-var xxx_Base_ProtoFile_FileDesc = prototype.File{
+var xxx_Base_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "extensions/base/base.proto",
 	Package: "goproto.protoc.extension.base",
 }
-var xxx_Base_ProtoFile_MessageTypes = [2]protoimpl.MessageType{
+var xxx_Base_protoFile_MessageTypes = [2]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_Base_ProtoFile_MessageDescs[0].Reference(),
+		xxx_Base_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_BaseMessage{new(BaseMessage)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Base_ProtoFile_MessageDescs[1].Reference(),
+		xxx_Base_protoFile_MessageDescs[1].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_MessageSetWireFormatMessage{new(MessageSetWireFormatMessage)}
 		},
 	)},
 }
-var xxx_Base_ProtoFile_MessageDescs = [2]prototype.Message{
+var xxx_Base_protoFile_MessageDescs = [2]prototype.Message{
 	{
 		Name: "BaseMessage",
 		Fields: []prototype.Field{
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 5eb5590..54a1e32 100644
--- a/cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go
+++ b/cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go
@@ -25,7 +25,7 @@
 )
 
 func (e Enum) Type() protoreflect.EnumType {
-	return xxx_Ext_ProtoFile_EnumTypes[0]
+	return xxx_Ext_protoFile_EnumTypes[0]
 }
 func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -75,13 +75,13 @@
 	return xxx_Message{m}
 }
 func (m xxx_Message) Type() protoreflect.MessageType {
-	return xxx_Ext_ProtoFile_MessageTypes[0].Type
+	return xxx_Ext_protoFile_MessageTypes[0].Type
 }
 func (m xxx_Message) KnownFields() protoreflect.KnownFields {
-	return xxx_Ext_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Ext_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_Message) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Ext_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Ext_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_Message) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -132,13 +132,13 @@
 	return xxx_ExtensionGroup{m}
 }
 func (m xxx_ExtensionGroup) Type() protoreflect.MessageType {
-	return xxx_Ext_ProtoFile_MessageTypes[1].Type
+	return xxx_Ext_protoFile_MessageTypes[1].Type
 }
 func (m xxx_ExtensionGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Ext_ProtoFile_MessageTypes[1].KnownFieldsOf(m.m)
+	return xxx_Ext_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
 }
 func (m xxx_ExtensionGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Ext_ProtoFile_MessageTypes[1].UnknownFieldsOf(m.m)
+	return xxx_Ext_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
 }
 func (m xxx_ExtensionGroup) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -189,13 +189,13 @@
 	return xxx_ExtendingMessage{m}
 }
 func (m xxx_ExtendingMessage) Type() protoreflect.MessageType {
-	return xxx_Ext_ProtoFile_MessageTypes[2].Type
+	return xxx_Ext_protoFile_MessageTypes[2].Type
 }
 func (m xxx_ExtendingMessage) KnownFields() protoreflect.KnownFields {
-	return xxx_Ext_ProtoFile_MessageTypes[2].KnownFieldsOf(m.m)
+	return xxx_Ext_protoFile_MessageTypes[2].KnownFieldsOf(m.m)
 }
 func (m xxx_ExtendingMessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Ext_ProtoFile_MessageTypes[2].UnknownFieldsOf(m.m)
+	return xxx_Ext_protoFile_MessageTypes[2].UnknownFieldsOf(m.m)
 }
 func (m xxx_ExtendingMessage) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -239,13 +239,13 @@
 	return xxx_RepeatedGroup{m}
 }
 func (m xxx_RepeatedGroup) Type() protoreflect.MessageType {
-	return xxx_Ext_ProtoFile_MessageTypes[3].Type
+	return xxx_Ext_protoFile_MessageTypes[3].Type
 }
 func (m xxx_RepeatedGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Ext_ProtoFile_MessageTypes[3].KnownFieldsOf(m.m)
+	return xxx_Ext_protoFile_MessageTypes[3].KnownFieldsOf(m.m)
 }
 func (m xxx_RepeatedGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Ext_ProtoFile_MessageTypes[3].UnknownFieldsOf(m.m)
+	return xxx_Ext_protoFile_MessageTypes[3].UnknownFieldsOf(m.m)
 }
 func (m xxx_RepeatedGroup) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -297,13 +297,13 @@
 	return xxx_Extendable{m}
 }
 func (m xxx_Extendable) Type() protoreflect.MessageType {
-	return xxx_Ext_ProtoFile_MessageTypes[4].Type
+	return xxx_Ext_protoFile_MessageTypes[4].Type
 }
 func (m xxx_Extendable) KnownFields() protoreflect.KnownFields {
-	return xxx_Ext_ProtoFile_MessageTypes[4].KnownFieldsOf(m.m)
+	return xxx_Ext_protoFile_MessageTypes[4].KnownFieldsOf(m.m)
 }
 func (m xxx_Extendable) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Ext_ProtoFile_MessageTypes[4].UnknownFieldsOf(m.m)
+	return xxx_Ext_protoFile_MessageTypes[4].UnknownFieldsOf(m.m)
 }
 func (m xxx_Extendable) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -357,13 +357,13 @@
 	return xxx_MessageSetWireFormatExtension{m}
 }
 func (m xxx_MessageSetWireFormatExtension) Type() protoreflect.MessageType {
-	return xxx_Ext_ProtoFile_MessageTypes[5].Type
+	return xxx_Ext_protoFile_MessageTypes[5].Type
 }
 func (m xxx_MessageSetWireFormatExtension) KnownFields() protoreflect.KnownFields {
-	return xxx_Ext_ProtoFile_MessageTypes[5].KnownFieldsOf(m.m)
+	return xxx_Ext_protoFile_MessageTypes[5].KnownFieldsOf(m.m)
 }
 func (m xxx_MessageSetWireFormatExtension) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Ext_ProtoFile_MessageTypes[5].UnknownFieldsOf(m.m)
+	return xxx_Ext_protoFile_MessageTypes[5].UnknownFieldsOf(m.m)
 }
 func (m xxx_MessageSetWireFormatExtension) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -406,13 +406,13 @@
 	return xxx_Message_M{m}
 }
 func (m xxx_Message_M) Type() protoreflect.MessageType {
-	return xxx_Ext_ProtoFile_MessageTypes[6].Type
+	return xxx_Ext_protoFile_MessageTypes[6].Type
 }
 func (m xxx_Message_M) KnownFields() protoreflect.KnownFields {
-	return xxx_Ext_ProtoFile_MessageTypes[6].KnownFieldsOf(m.m)
+	return xxx_Ext_protoFile_MessageTypes[6].KnownFieldsOf(m.m)
 }
 func (m xxx_Message_M) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Ext_ProtoFile_MessageTypes[6].UnknownFieldsOf(m.m)
+	return xxx_Ext_protoFile_MessageTypes[6].UnknownFieldsOf(m.m)
 }
 func (m xxx_Message_M) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -457,13 +457,13 @@
 	return xxx_ExtendingMessage_ExtendingMessageSubmessage{m}
 }
 func (m xxx_ExtendingMessage_ExtendingMessageSubmessage) Type() protoreflect.MessageType {
-	return xxx_Ext_ProtoFile_MessageTypes[7].Type
+	return xxx_Ext_protoFile_MessageTypes[7].Type
 }
 func (m xxx_ExtendingMessage_ExtendingMessageSubmessage) KnownFields() protoreflect.KnownFields {
-	return xxx_Ext_ProtoFile_MessageTypes[7].KnownFieldsOf(m.m)
+	return xxx_Ext_protoFile_MessageTypes[7].KnownFieldsOf(m.m)
 }
 func (m xxx_ExtendingMessage_ExtendingMessageSubmessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Ext_ProtoFile_MessageTypes[7].UnknownFieldsOf(m.m)
+	return xxx_Ext_protoFile_MessageTypes[7].UnknownFieldsOf(m.m)
 }
 func (m xxx_ExtendingMessage_ExtendingMessageSubmessage) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1026,12 +1026,12 @@
 }
 
 func init() {
-	xxx_Ext_ProtoFile_FileDesc.Enums = xxx_Ext_ProtoFile_EnumDescs[0:1]
-	xxx_Ext_ProtoFile_FileDesc.Messages = xxx_Ext_ProtoFile_MessageDescs[0:6]
-	xxx_Ext_ProtoFile_MessageDescs[0].Messages = xxx_Ext_ProtoFile_MessageDescs[6:7]
-	xxx_Ext_ProtoFile_MessageDescs[2].Messages = xxx_Ext_ProtoFile_MessageDescs[7:8]
+	xxx_Ext_protoFile_FileDesc.Enums = xxx_Ext_protoFile_EnumDescs[0:1]
+	xxx_Ext_protoFile_FileDesc.Messages = xxx_Ext_protoFile_MessageDescs[0:6]
+	xxx_Ext_protoFile_MessageDescs[0].Messages = xxx_Ext_protoFile_MessageDescs[6:7]
+	xxx_Ext_protoFile_MessageDescs[2].Messages = xxx_Ext_protoFile_MessageDescs[7:8]
 	var err error
-	Ext_ProtoFile, err = prototype.NewFile(&xxx_Ext_ProtoFile_FileDesc)
+	Ext_protoFile, err = prototype.NewFile(&xxx_Ext_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -1039,9 +1039,9 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Ext_ProtoFile protoreflect.FileDescriptor
+var Ext_protoFile protoreflect.FileDescriptor
 
-var xxx_Ext_ProtoFile_FileDesc = prototype.File{
+var xxx_Ext_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "extensions/ext/ext.proto",
 	Package: "goproto.protoc.extension.ext",
@@ -1050,15 +1050,15 @@
 		{FileDescriptor: prototype.PlaceholderFile("extensions/extra/extra.proto", "goproto.protoc.extension.extra")},
 	},
 }
-var xxx_Ext_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
+var xxx_Ext_protoFile_EnumTypes = [1]protoreflect.EnumType{
 	prototype.GoEnum(
-		xxx_Ext_ProtoFile_EnumDescs[0].Reference(),
+		xxx_Ext_protoFile_EnumDescs[0].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enum(n)
 		},
 	),
 }
-var xxx_Ext_ProtoFile_EnumDescs = [1]prototype.Enum{
+var xxx_Ext_protoFile_EnumDescs = [1]prototype.Enum{
 	{
 		Name: "Enum",
 		Values: []prototype.EnumValue{
@@ -1066,57 +1066,57 @@
 		},
 	},
 }
-var xxx_Ext_ProtoFile_MessageTypes = [8]protoimpl.MessageType{
+var xxx_Ext_protoFile_MessageTypes = [8]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_Ext_ProtoFile_MessageDescs[0].Reference(),
+		xxx_Ext_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Message{new(Message)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Ext_ProtoFile_MessageDescs[1].Reference(),
+		xxx_Ext_protoFile_MessageDescs[1].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_ExtensionGroup{new(ExtensionGroup)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Ext_ProtoFile_MessageDescs[2].Reference(),
+		xxx_Ext_protoFile_MessageDescs[2].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_ExtendingMessage{new(ExtendingMessage)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Ext_ProtoFile_MessageDescs[3].Reference(),
+		xxx_Ext_protoFile_MessageDescs[3].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_RepeatedGroup{new(RepeatedGroup)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Ext_ProtoFile_MessageDescs[4].Reference(),
+		xxx_Ext_protoFile_MessageDescs[4].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Extendable{new(Extendable)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Ext_ProtoFile_MessageDescs[5].Reference(),
+		xxx_Ext_protoFile_MessageDescs[5].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_MessageSetWireFormatExtension{new(MessageSetWireFormatExtension)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Ext_ProtoFile_MessageDescs[6].Reference(),
+		xxx_Ext_protoFile_MessageDescs[6].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Message_M{new(Message_M)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Ext_ProtoFile_MessageDescs[7].Reference(),
+		xxx_Ext_protoFile_MessageDescs[7].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_ExtendingMessage_ExtendingMessageSubmessage{new(ExtendingMessage_ExtendingMessageSubmessage)}
 		},
 	)},
 }
-var xxx_Ext_ProtoFile_MessageDescs = [8]prototype.Message{
+var xxx_Ext_protoFile_MessageDescs = [8]prototype.Message{
 	{
 		Name: "Message",
 		Fields: []prototype.Field{
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 2bb25fb..e7be185 100644
--- a/cmd/protoc-gen-go/testdata/extensions/extra/extra.pb.go
+++ b/cmd/protoc-gen-go/testdata/extensions/extra/extra.pb.go
@@ -29,13 +29,13 @@
 	return xxx_ExtraMessage{m}
 }
 func (m xxx_ExtraMessage) Type() protoreflect.MessageType {
-	return xxx_Extra_ProtoFile_MessageTypes[0].Type
+	return xxx_Extra_protoFile_MessageTypes[0].Type
 }
 func (m xxx_ExtraMessage) KnownFields() protoreflect.KnownFields {
-	return xxx_Extra_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Extra_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_ExtraMessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Extra_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Extra_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_ExtraMessage) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -93,9 +93,9 @@
 }
 
 func init() {
-	xxx_Extra_ProtoFile_FileDesc.Messages = xxx_Extra_ProtoFile_MessageDescs[0:1]
+	xxx_Extra_protoFile_FileDesc.Messages = xxx_Extra_protoFile_MessageDescs[0:1]
 	var err error
-	Extra_ProtoFile, err = prototype.NewFile(&xxx_Extra_ProtoFile_FileDesc)
+	Extra_protoFile, err = prototype.NewFile(&xxx_Extra_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -103,22 +103,22 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Extra_ProtoFile protoreflect.FileDescriptor
+var Extra_protoFile protoreflect.FileDescriptor
 
-var xxx_Extra_ProtoFile_FileDesc = prototype.File{
+var xxx_Extra_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "extensions/extra/extra.proto",
 	Package: "goproto.protoc.extension.extra",
 }
-var xxx_Extra_ProtoFile_MessageTypes = [1]protoimpl.MessageType{
+var xxx_Extra_protoFile_MessageTypes = [1]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_Extra_ProtoFile_MessageDescs[0].Reference(),
+		xxx_Extra_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_ExtraMessage{new(ExtraMessage)}
 		},
 	)},
 }
-var xxx_Extra_ProtoFile_MessageDescs = [1]prototype.Message{
+var xxx_Extra_protoFile_MessageDescs = [1]prototype.Message{
 	{
 		Name: "ExtraMessage",
 		Fields: []prototype.Field{
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 e2558bb..ea90963 100644
--- a/cmd/protoc-gen-go/testdata/extensions/proto3/ext3.pb.go
+++ b/cmd/protoc-gen-go/testdata/extensions/proto3/ext3.pb.go
@@ -24,7 +24,7 @@
 )
 
 func (e Enum) Type() protoreflect.EnumType {
-	return xxx_Ext3_ProtoFile_EnumTypes[0]
+	return xxx_Ext3_protoFile_EnumTypes[0]
 }
 func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -58,13 +58,13 @@
 	return xxx_Message{m}
 }
 func (m xxx_Message) Type() protoreflect.MessageType {
-	return xxx_Ext3_ProtoFile_MessageTypes[0].Type
+	return xxx_Ext3_protoFile_MessageTypes[0].Type
 }
 func (m xxx_Message) KnownFields() protoreflect.KnownFields {
-	return xxx_Ext3_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Ext3_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_Message) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Ext3_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Ext3_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_Message) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -494,10 +494,10 @@
 }
 
 func init() {
-	xxx_Ext3_ProtoFile_FileDesc.Enums = xxx_Ext3_ProtoFile_EnumDescs[0:1]
-	xxx_Ext3_ProtoFile_FileDesc.Messages = xxx_Ext3_ProtoFile_MessageDescs[0:1]
+	xxx_Ext3_protoFile_FileDesc.Enums = xxx_Ext3_protoFile_EnumDescs[0:1]
+	xxx_Ext3_protoFile_FileDesc.Messages = xxx_Ext3_protoFile_MessageDescs[0:1]
 	var err error
-	Ext3_ProtoFile, err = prototype.NewFile(&xxx_Ext3_ProtoFile_FileDesc)
+	Ext3_protoFile, err = prototype.NewFile(&xxx_Ext3_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -505,9 +505,9 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Ext3_ProtoFile protoreflect.FileDescriptor
+var Ext3_protoFile protoreflect.FileDescriptor
 
-var xxx_Ext3_ProtoFile_FileDesc = prototype.File{
+var xxx_Ext3_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto3,
 	Path:    "extensions/proto3/ext3.proto",
 	Package: "goproto.protoc.extension.proto3",
@@ -515,15 +515,15 @@
 		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/descriptor.proto", "google.protobuf")},
 	},
 }
-var xxx_Ext3_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
+var xxx_Ext3_protoFile_EnumTypes = [1]protoreflect.EnumType{
 	prototype.GoEnum(
-		xxx_Ext3_ProtoFile_EnumDescs[0].Reference(),
+		xxx_Ext3_protoFile_EnumDescs[0].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enum(n)
 		},
 	),
 }
-var xxx_Ext3_ProtoFile_EnumDescs = [1]prototype.Enum{
+var xxx_Ext3_protoFile_EnumDescs = [1]prototype.Enum{
 	{
 		Name: "Enum",
 		Values: []prototype.EnumValue{
@@ -531,15 +531,15 @@
 		},
 	},
 }
-var xxx_Ext3_ProtoFile_MessageTypes = [1]protoimpl.MessageType{
+var xxx_Ext3_protoFile_MessageTypes = [1]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_Ext3_ProtoFile_MessageDescs[0].Reference(),
+		xxx_Ext3_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Message{new(Message)}
 		},
 	)},
 }
-var xxx_Ext3_ProtoFile_MessageDescs = [1]prototype.Message{
+var xxx_Ext3_protoFile_MessageDescs = [1]prototype.Message{
 	{
 		Name: "Message",
 	},
diff --git a/cmd/protoc-gen-go/testdata/fieldnames/fieldnames.pb.go b/cmd/protoc-gen-go/testdata/fieldnames/fieldnames.pb.go
index 9ce3c30..c310743 100644
--- a/cmd/protoc-gen-go/testdata/fieldnames/fieldnames.pb.go
+++ b/cmd/protoc-gen-go/testdata/fieldnames/fieldnames.pb.go
@@ -67,13 +67,13 @@
 	return xxx_Message{m}
 }
 func (m xxx_Message) Type() protoreflect.MessageType {
-	return xxx_Fieldnames_ProtoFile_MessageTypes[0].Type
+	return xxx_Fieldnames_protoFile_MessageTypes[0].Type
 }
 func (m xxx_Message) KnownFields() protoreflect.KnownFields {
-	return xxx_Fieldnames_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Fieldnames_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_Message) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Fieldnames_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Fieldnames_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_Message) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -309,13 +309,13 @@
 	return xxx_Message_OneofMessageConflict{m}
 }
 func (m xxx_Message_OneofMessageConflict) Type() protoreflect.MessageType {
-	return xxx_Fieldnames_ProtoFile_MessageTypes[1].Type
+	return xxx_Fieldnames_protoFile_MessageTypes[1].Type
 }
 func (m xxx_Message_OneofMessageConflict) KnownFields() protoreflect.KnownFields {
-	return xxx_Fieldnames_ProtoFile_MessageTypes[1].KnownFieldsOf(m.m)
+	return xxx_Fieldnames_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
 }
 func (m xxx_Message_OneofMessageConflict) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Fieldnames_ProtoFile_MessageTypes[1].UnknownFieldsOf(m.m)
+	return xxx_Fieldnames_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
 }
 func (m xxx_Message_OneofMessageConflict) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -384,10 +384,10 @@
 }
 
 func init() {
-	xxx_Fieldnames_ProtoFile_FileDesc.Messages = xxx_Fieldnames_ProtoFile_MessageDescs[0:1]
-	xxx_Fieldnames_ProtoFile_MessageDescs[0].Messages = xxx_Fieldnames_ProtoFile_MessageDescs[1:2]
+	xxx_Fieldnames_protoFile_FileDesc.Messages = xxx_Fieldnames_protoFile_MessageDescs[0:1]
+	xxx_Fieldnames_protoFile_MessageDescs[0].Messages = xxx_Fieldnames_protoFile_MessageDescs[1:2]
 	var err error
-	Fieldnames_ProtoFile, err = prototype.NewFile(&xxx_Fieldnames_ProtoFile_FileDesc)
+	Fieldnames_protoFile, err = prototype.NewFile(&xxx_Fieldnames_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -395,28 +395,28 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Fieldnames_ProtoFile protoreflect.FileDescriptor
+var Fieldnames_protoFile protoreflect.FileDescriptor
 
-var xxx_Fieldnames_ProtoFile_FileDesc = prototype.File{
+var xxx_Fieldnames_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "fieldnames/fieldnames.proto",
 	Package: "goproto.protoc.fieldnames",
 }
-var xxx_Fieldnames_ProtoFile_MessageTypes = [2]protoimpl.MessageType{
+var xxx_Fieldnames_protoFile_MessageTypes = [2]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_Fieldnames_ProtoFile_MessageDescs[0].Reference(),
+		xxx_Fieldnames_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Message{new(Message)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Fieldnames_ProtoFile_MessageDescs[1].Reference(),
+		xxx_Fieldnames_protoFile_MessageDescs[1].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Message_OneofMessageConflict{new(Message_OneofMessageConflict)}
 		},
 	)},
 }
-var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
+var xxx_Fieldnames_protoFile_MessageDescs = [2]prototype.Message{
 	{
 		Name: "Message",
 		Fields: []prototype.Field{
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 b558919..fa9edb4 100644
--- a/cmd/protoc-gen-go/testdata/import_public/a.pb.go
+++ b/cmd/protoc-gen-go/testdata/import_public/a.pb.go
@@ -75,13 +75,13 @@
 	return xxx_Public{m}
 }
 func (m xxx_Public) Type() protoreflect.MessageType {
-	return xxx_A_ProtoFile_MessageTypes[0].Type
+	return xxx_A_protoFile_MessageTypes[0].Type
 }
 func (m xxx_Public) KnownFields() protoreflect.KnownFields {
-	return xxx_A_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_A_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_Public) UnknownFields() protoreflect.UnknownFields {
-	return xxx_A_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_A_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_Public) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -157,12 +157,12 @@
 }
 
 func init() {
-	xxx_A_ProtoFile_FileDesc.Messages = xxx_A_ProtoFile_MessageDescs[0:1]
-	xxx_A_ProtoFile_MessageDescs[0].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*sub.M)(nil))
-	xxx_A_ProtoFile_MessageDescs[0].Fields[1].EnumType = protoimpl.X.EnumTypeOf(sub.E(0))
-	xxx_A_ProtoFile_MessageDescs[0].Fields[2].MessageType = protoimpl.X.MessageTypeOf((*Local)(nil))
+	xxx_A_protoFile_FileDesc.Messages = xxx_A_protoFile_MessageDescs[0:1]
+	xxx_A_protoFile_MessageDescs[0].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*sub.M)(nil))
+	xxx_A_protoFile_MessageDescs[0].Fields[1].EnumType = protoimpl.X.EnumTypeOf(sub.E(0))
+	xxx_A_protoFile_MessageDescs[0].Fields[2].MessageType = protoimpl.X.MessageTypeOf((*Local)(nil))
 	var err error
-	A_ProtoFile, err = prototype.NewFile(&xxx_A_ProtoFile_FileDesc)
+	A_protoFile, err = prototype.NewFile(&xxx_A_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -170,9 +170,9 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var A_ProtoFile protoreflect.FileDescriptor
+var A_protoFile protoreflect.FileDescriptor
 
-var xxx_A_ProtoFile_FileDesc = prototype.File{
+var xxx_A_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "import_public/a.proto",
 	Package: "goproto.protoc.import_public",
@@ -182,15 +182,15 @@
 		{FileDescriptor: prototype.PlaceholderFile("import_public/b.proto", "goproto.protoc.import_public"), IsPublic: true},
 	},
 }
-var xxx_A_ProtoFile_MessageTypes = [1]protoimpl.MessageType{
+var xxx_A_protoFile_MessageTypes = [1]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_A_ProtoFile_MessageDescs[0].Reference(),
+		xxx_A_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Public{new(Public)}
 		},
 	)},
 }
-var xxx_A_ProtoFile_MessageDescs = [1]prototype.Message{
+var xxx_A_protoFile_MessageDescs = [1]prototype.Message{
 	{
 		Name: "Public",
 		Fields: []prototype.Field{
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 feeb293..d5b72d0 100644
--- a/cmd/protoc-gen-go/testdata/import_public/b.pb.go
+++ b/cmd/protoc-gen-go/testdata/import_public/b.pb.go
@@ -31,13 +31,13 @@
 	return xxx_Local{m}
 }
 func (m xxx_Local) Type() protoreflect.MessageType {
-	return xxx_B_ProtoFile_MessageTypes[0].Type
+	return xxx_B_protoFile_MessageTypes[0].Type
 }
 func (m xxx_Local) KnownFields() protoreflect.KnownFields {
-	return xxx_B_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_B_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_Local) UnknownFields() protoreflect.UnknownFields {
-	return xxx_B_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_B_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_Local) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -103,11 +103,11 @@
 }
 
 func init() {
-	xxx_B_ProtoFile_FileDesc.Messages = xxx_B_ProtoFile_MessageDescs[0:1]
-	xxx_B_ProtoFile_MessageDescs[0].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*sub.M)(nil))
-	xxx_B_ProtoFile_MessageDescs[0].Fields[1].EnumType = protoimpl.X.EnumTypeOf(sub.E(0))
+	xxx_B_protoFile_FileDesc.Messages = xxx_B_protoFile_MessageDescs[0:1]
+	xxx_B_protoFile_MessageDescs[0].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*sub.M)(nil))
+	xxx_B_protoFile_MessageDescs[0].Fields[1].EnumType = protoimpl.X.EnumTypeOf(sub.E(0))
 	var err error
-	B_ProtoFile, err = prototype.NewFile(&xxx_B_ProtoFile_FileDesc)
+	B_protoFile, err = prototype.NewFile(&xxx_B_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -115,9 +115,9 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var B_ProtoFile protoreflect.FileDescriptor
+var B_protoFile protoreflect.FileDescriptor
 
-var xxx_B_ProtoFile_FileDesc = prototype.File{
+var xxx_B_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "import_public/b.proto",
 	Package: "goproto.protoc.import_public",
@@ -125,15 +125,15 @@
 		{FileDescriptor: prototype.PlaceholderFile("import_public/sub/a.proto", "goproto.protoc.import_public.sub")},
 	},
 }
-var xxx_B_ProtoFile_MessageTypes = [1]protoimpl.MessageType{
+var xxx_B_protoFile_MessageTypes = [1]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_B_ProtoFile_MessageDescs[0].Reference(),
+		xxx_B_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Local{new(Local)}
 		},
 	)},
 }
-var xxx_B_ProtoFile_MessageDescs = [1]prototype.Message{
+var xxx_B_protoFile_MessageDescs = [1]prototype.Message{
 	{
 		Name: "Local",
 		Fields: []prototype.Field{
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 4710f83..852bc16 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
@@ -29,7 +29,7 @@
 )
 
 func (e E) Type() protoreflect.EnumType {
-	return xxx_A_ProtoFile_EnumTypes[0]
+	return xxx_A_protoFile_EnumTypes[0]
 }
 func (e E) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -73,7 +73,7 @@
 )
 
 func (e M_Subenum) Type() protoreflect.EnumType {
-	return xxx_A_ProtoFile_EnumTypes[1]
+	return xxx_A_protoFile_EnumTypes[1]
 }
 func (e M_Subenum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -117,7 +117,7 @@
 )
 
 func (e M_Submessage_Submessage_Subenum) Type() protoreflect.EnumType {
-	return xxx_A_ProtoFile_EnumTypes[2]
+	return xxx_A_protoFile_EnumTypes[2]
 }
 func (e M_Submessage_Submessage_Subenum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -176,13 +176,13 @@
 	return xxx_M{m}
 }
 func (m xxx_M) Type() protoreflect.MessageType {
-	return xxx_A_ProtoFile_MessageTypes[0].Type
+	return xxx_A_protoFile_MessageTypes[0].Type
 }
 func (m xxx_M) KnownFields() protoreflect.KnownFields {
-	return xxx_A_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_A_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_M) UnknownFields() protoreflect.UnknownFields {
-	return xxx_A_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_A_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_M) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -315,13 +315,13 @@
 	return xxx_M_Submessage{m}
 }
 func (m xxx_M_Submessage) Type() protoreflect.MessageType {
-	return xxx_A_ProtoFile_MessageTypes[1].Type
+	return xxx_A_protoFile_MessageTypes[1].Type
 }
 func (m xxx_M_Submessage) KnownFields() protoreflect.KnownFields {
-	return xxx_A_ProtoFile_MessageTypes[1].KnownFieldsOf(m.m)
+	return xxx_A_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
 }
 func (m xxx_M_Submessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_A_ProtoFile_MessageTypes[1].UnknownFieldsOf(m.m)
+	return xxx_A_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
 }
 func (m xxx_M_Submessage) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -447,14 +447,14 @@
 }
 
 func init() {
-	xxx_A_ProtoFile_FileDesc.Enums = xxx_A_ProtoFile_EnumDescs[0:1]
-	xxx_A_ProtoFile_FileDesc.Messages = xxx_A_ProtoFile_MessageDescs[0:1]
-	xxx_A_ProtoFile_MessageDescs[0].Enums = xxx_A_ProtoFile_EnumDescs[1:2]
-	xxx_A_ProtoFile_MessageDescs[0].Messages = xxx_A_ProtoFile_MessageDescs[1:2]
-	xxx_A_ProtoFile_MessageDescs[1].Enums = xxx_A_ProtoFile_EnumDescs[2:3]
-	xxx_A_ProtoFile_MessageDescs[0].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*M2)(nil))
+	xxx_A_protoFile_FileDesc.Enums = xxx_A_protoFile_EnumDescs[0:1]
+	xxx_A_protoFile_FileDesc.Messages = xxx_A_protoFile_MessageDescs[0:1]
+	xxx_A_protoFile_MessageDescs[0].Enums = xxx_A_protoFile_EnumDescs[1:2]
+	xxx_A_protoFile_MessageDescs[0].Messages = xxx_A_protoFile_MessageDescs[1:2]
+	xxx_A_protoFile_MessageDescs[1].Enums = xxx_A_protoFile_EnumDescs[2:3]
+	xxx_A_protoFile_MessageDescs[0].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*M2)(nil))
 	var err error
-	A_ProtoFile, err = prototype.NewFile(&xxx_A_ProtoFile_FileDesc)
+	A_protoFile, err = prototype.NewFile(&xxx_A_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -462,9 +462,9 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var A_ProtoFile protoreflect.FileDescriptor
+var A_protoFile protoreflect.FileDescriptor
 
-var xxx_A_ProtoFile_FileDesc = prototype.File{
+var xxx_A_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "import_public/sub/a.proto",
 	Package: "goproto.protoc.import_public.sub",
@@ -473,27 +473,27 @@
 		{FileDescriptor: prototype.PlaceholderFile("import_public/sub2/a.proto", "goproto.protoc.import_public.sub2"), IsPublic: true},
 	},
 }
-var xxx_A_ProtoFile_EnumTypes = [3]protoreflect.EnumType{
+var xxx_A_protoFile_EnumTypes = [3]protoreflect.EnumType{
 	prototype.GoEnum(
-		xxx_A_ProtoFile_EnumDescs[0].Reference(),
+		xxx_A_protoFile_EnumDescs[0].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return E(n)
 		},
 	),
 	prototype.GoEnum(
-		xxx_A_ProtoFile_EnumDescs[1].Reference(),
+		xxx_A_protoFile_EnumDescs[1].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return M_Subenum(n)
 		},
 	),
 	prototype.GoEnum(
-		xxx_A_ProtoFile_EnumDescs[2].Reference(),
+		xxx_A_protoFile_EnumDescs[2].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return M_Submessage_Submessage_Subenum(n)
 		},
 	),
 }
-var xxx_A_ProtoFile_EnumDescs = [3]prototype.Enum{
+var xxx_A_protoFile_EnumDescs = [3]prototype.Enum{
 	{
 		Name: "E",
 		Values: []prototype.EnumValue{
@@ -513,21 +513,21 @@
 		},
 	},
 }
-var xxx_A_ProtoFile_MessageTypes = [2]protoimpl.MessageType{
+var xxx_A_protoFile_MessageTypes = [2]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_A_ProtoFile_MessageDescs[0].Reference(),
+		xxx_A_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_M{new(M)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_A_ProtoFile_MessageDescs[1].Reference(),
+		xxx_A_protoFile_MessageDescs[1].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_M_Submessage{new(M_Submessage)}
 		},
 	)},
 }
-var xxx_A_ProtoFile_MessageDescs = [2]prototype.Message{
+var xxx_A_protoFile_MessageDescs = [2]prototype.Message{
 	{
 		Name: "M",
 		Fields: []prototype.Field{
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 5b58aaa..947f80e 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
@@ -28,13 +28,13 @@
 	return xxx_M2{m}
 }
 func (m xxx_M2) Type() protoreflect.MessageType {
-	return xxx_B_ProtoFile_MessageTypes[0].Type
+	return xxx_B_protoFile_MessageTypes[0].Type
 }
 func (m xxx_M2) KnownFields() protoreflect.KnownFields {
-	return xxx_B_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_B_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_M2) UnknownFields() protoreflect.UnknownFields {
-	return xxx_B_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_B_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_M2) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -84,9 +84,9 @@
 }
 
 func init() {
-	xxx_B_ProtoFile_FileDesc.Messages = xxx_B_ProtoFile_MessageDescs[0:1]
+	xxx_B_protoFile_FileDesc.Messages = xxx_B_protoFile_MessageDescs[0:1]
 	var err error
-	B_ProtoFile, err = prototype.NewFile(&xxx_B_ProtoFile_FileDesc)
+	B_protoFile, err = prototype.NewFile(&xxx_B_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -94,22 +94,22 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var B_ProtoFile protoreflect.FileDescriptor
+var B_protoFile protoreflect.FileDescriptor
 
-var xxx_B_ProtoFile_FileDesc = prototype.File{
+var xxx_B_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "import_public/sub/b.proto",
 	Package: "goproto.protoc.import_public.sub",
 }
-var xxx_B_ProtoFile_MessageTypes = [1]protoimpl.MessageType{
+var xxx_B_protoFile_MessageTypes = [1]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_B_ProtoFile_MessageDescs[0].Reference(),
+		xxx_B_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_M2{new(M2)}
 		},
 	)},
 }
-var xxx_B_ProtoFile_MessageDescs = [1]prototype.Message{
+var xxx_B_protoFile_MessageDescs = [1]prototype.Message{
 	{
 		Name: "M2",
 	},
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 4e0513f..08212e5 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
@@ -28,13 +28,13 @@
 	return xxx_Sub2Message{m}
 }
 func (m xxx_Sub2Message) Type() protoreflect.MessageType {
-	return xxx_A_ProtoFile_MessageTypes[0].Type
+	return xxx_A_protoFile_MessageTypes[0].Type
 }
 func (m xxx_Sub2Message) KnownFields() protoreflect.KnownFields {
-	return xxx_A_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_A_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_Sub2Message) UnknownFields() protoreflect.UnknownFields {
-	return xxx_A_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_A_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_Sub2Message) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -84,9 +84,9 @@
 }
 
 func init() {
-	xxx_A_ProtoFile_FileDesc.Messages = xxx_A_ProtoFile_MessageDescs[0:1]
+	xxx_A_protoFile_FileDesc.Messages = xxx_A_protoFile_MessageDescs[0:1]
 	var err error
-	A_ProtoFile, err = prototype.NewFile(&xxx_A_ProtoFile_FileDesc)
+	A_protoFile, err = prototype.NewFile(&xxx_A_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -94,22 +94,22 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var A_ProtoFile protoreflect.FileDescriptor
+var A_protoFile protoreflect.FileDescriptor
 
-var xxx_A_ProtoFile_FileDesc = prototype.File{
+var xxx_A_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "import_public/sub2/a.proto",
 	Package: "goproto.protoc.import_public.sub2",
 }
-var xxx_A_ProtoFile_MessageTypes = [1]protoimpl.MessageType{
+var xxx_A_protoFile_MessageTypes = [1]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_A_ProtoFile_MessageDescs[0].Reference(),
+		xxx_A_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Sub2Message{new(Sub2Message)}
 		},
 	)},
 }
-var xxx_A_ProtoFile_MessageDescs = [1]prototype.Message{
+var xxx_A_protoFile_MessageDescs = [1]prototype.Message{
 	{
 		Name: "Sub2Message",
 	},
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 5c39fa9..a8e7d5f 100644
--- a/cmd/protoc-gen-go/testdata/imports/fmt/m.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/fmt/m.pb.go
@@ -28,13 +28,13 @@
 	return xxx_M{m}
 }
 func (m xxx_M) Type() protoreflect.MessageType {
-	return xxx_M_ProtoFile_MessageTypes[0].Type
+	return xxx_M_protoFile_MessageTypes[0].Type
 }
 func (m xxx_M) KnownFields() protoreflect.KnownFields {
-	return xxx_M_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_M_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_M) UnknownFields() protoreflect.UnknownFields {
-	return xxx_M_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_M_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_M) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -82,9 +82,9 @@
 }
 
 func init() {
-	xxx_M_ProtoFile_FileDesc.Messages = xxx_M_ProtoFile_MessageDescs[0:1]
+	xxx_M_protoFile_FileDesc.Messages = xxx_M_protoFile_MessageDescs[0:1]
 	var err error
-	M_ProtoFile, err = prototype.NewFile(&xxx_M_ProtoFile_FileDesc)
+	M_protoFile, err = prototype.NewFile(&xxx_M_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -92,22 +92,22 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var M_ProtoFile protoreflect.FileDescriptor
+var M_protoFile protoreflect.FileDescriptor
 
-var xxx_M_ProtoFile_FileDesc = prototype.File{
+var xxx_M_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto3,
 	Path:    "imports/fmt/m.proto",
 	Package: "fmt",
 }
-var xxx_M_ProtoFile_MessageTypes = [1]protoimpl.MessageType{
+var xxx_M_protoFile_MessageTypes = [1]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_M_ProtoFile_MessageDescs[0].Reference(),
+		xxx_M_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_M{new(M)}
 		},
 	)},
 }
-var xxx_M_ProtoFile_MessageDescs = [1]prototype.Message{
+var xxx_M_protoFile_MessageDescs = [1]prototype.Message{
 	{
 		Name: "M",
 	},
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 f4a09b2..f911fd2 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
@@ -23,7 +23,7 @@
 )
 
 func (e E1) Type() protoreflect.EnumType {
-	return xxx_M1_ProtoFile_EnumTypes[0]
+	return xxx_M1_protoFile_EnumTypes[0]
 }
 func (e E1) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -57,13 +57,13 @@
 	return xxx_M1{m}
 }
 func (m xxx_M1) Type() protoreflect.MessageType {
-	return xxx_M1_ProtoFile_MessageTypes[0].Type
+	return xxx_M1_protoFile_MessageTypes[0].Type
 }
 func (m xxx_M1) KnownFields() protoreflect.KnownFields {
-	return xxx_M1_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_M1_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_M1) UnknownFields() protoreflect.UnknownFields {
-	return xxx_M1_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_M1_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_M1) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -107,13 +107,13 @@
 	return xxx_M1_1{m}
 }
 func (m xxx_M1_1) Type() protoreflect.MessageType {
-	return xxx_M1_ProtoFile_MessageTypes[1].Type
+	return xxx_M1_protoFile_MessageTypes[1].Type
 }
 func (m xxx_M1_1) KnownFields() protoreflect.KnownFields {
-	return xxx_M1_ProtoFile_MessageTypes[1].KnownFieldsOf(m.m)
+	return xxx_M1_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
 }
 func (m xxx_M1_1) UnknownFields() protoreflect.UnknownFields {
-	return xxx_M1_ProtoFile_MessageTypes[1].UnknownFieldsOf(m.m)
+	return xxx_M1_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
 }
 func (m xxx_M1_1) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -174,11 +174,11 @@
 }
 
 func init() {
-	xxx_M1_ProtoFile_FileDesc.Enums = xxx_M1_ProtoFile_EnumDescs[0:1]
-	xxx_M1_ProtoFile_FileDesc.Messages = xxx_M1_ProtoFile_MessageDescs[0:2]
-	xxx_M1_ProtoFile_MessageDescs[1].Fields[0].MessageType = xxx_M1_ProtoFile_MessageTypes[0].Type
+	xxx_M1_protoFile_FileDesc.Enums = xxx_M1_protoFile_EnumDescs[0:1]
+	xxx_M1_protoFile_FileDesc.Messages = xxx_M1_protoFile_MessageDescs[0:2]
+	xxx_M1_protoFile_MessageDescs[1].Fields[0].MessageType = xxx_M1_protoFile_MessageTypes[0].Type
 	var err error
-	M1_ProtoFile, err = prototype.NewFile(&xxx_M1_ProtoFile_FileDesc)
+	M1_protoFile, err = prototype.NewFile(&xxx_M1_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -186,22 +186,22 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var M1_ProtoFile protoreflect.FileDescriptor
+var M1_protoFile protoreflect.FileDescriptor
 
-var xxx_M1_ProtoFile_FileDesc = prototype.File{
+var xxx_M1_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto3,
 	Path:    "imports/test_a_1/m1.proto",
 	Package: "test.a",
 }
-var xxx_M1_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
+var xxx_M1_protoFile_EnumTypes = [1]protoreflect.EnumType{
 	prototype.GoEnum(
-		xxx_M1_ProtoFile_EnumDescs[0].Reference(),
+		xxx_M1_protoFile_EnumDescs[0].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return E1(n)
 		},
 	),
 }
-var xxx_M1_ProtoFile_EnumDescs = [1]prototype.Enum{
+var xxx_M1_protoFile_EnumDescs = [1]prototype.Enum{
 	{
 		Name: "E1",
 		Values: []prototype.EnumValue{
@@ -209,21 +209,21 @@
 		},
 	},
 }
-var xxx_M1_ProtoFile_MessageTypes = [2]protoimpl.MessageType{
+var xxx_M1_protoFile_MessageTypes = [2]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_M1_ProtoFile_MessageDescs[0].Reference(),
+		xxx_M1_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_M1{new(M1)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_M1_ProtoFile_MessageDescs[1].Reference(),
+		xxx_M1_protoFile_MessageDescs[1].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_M1_1{new(M1_1)}
 		},
 	)},
 }
-var xxx_M1_ProtoFile_MessageDescs = [2]prototype.Message{
+var xxx_M1_protoFile_MessageDescs = [2]prototype.Message{
 	{
 		Name: "M1",
 	},
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 2ce6ee0..4b19d73 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
@@ -28,13 +28,13 @@
 	return xxx_M2{m}
 }
 func (m xxx_M2) Type() protoreflect.MessageType {
-	return xxx_M2_ProtoFile_MessageTypes[0].Type
+	return xxx_M2_protoFile_MessageTypes[0].Type
 }
 func (m xxx_M2) KnownFields() protoreflect.KnownFields {
-	return xxx_M2_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_M2_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_M2) UnknownFields() protoreflect.UnknownFields {
-	return xxx_M2_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_M2_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_M2) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -83,9 +83,9 @@
 }
 
 func init() {
-	xxx_M2_ProtoFile_FileDesc.Messages = xxx_M2_ProtoFile_MessageDescs[0:1]
+	xxx_M2_protoFile_FileDesc.Messages = xxx_M2_protoFile_MessageDescs[0:1]
 	var err error
-	M2_ProtoFile, err = prototype.NewFile(&xxx_M2_ProtoFile_FileDesc)
+	M2_protoFile, err = prototype.NewFile(&xxx_M2_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -93,22 +93,22 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var M2_ProtoFile protoreflect.FileDescriptor
+var M2_protoFile protoreflect.FileDescriptor
 
-var xxx_M2_ProtoFile_FileDesc = prototype.File{
+var xxx_M2_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto3,
 	Path:    "imports/test_a_1/m2.proto",
 	Package: "test.a",
 }
-var xxx_M2_ProtoFile_MessageTypes = [1]protoimpl.MessageType{
+var xxx_M2_protoFile_MessageTypes = [1]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_M2_ProtoFile_MessageDescs[0].Reference(),
+		xxx_M2_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_M2{new(M2)}
 		},
 	)},
 }
-var xxx_M2_ProtoFile_MessageDescs = [1]prototype.Message{
+var xxx_M2_protoFile_MessageDescs = [1]prototype.Message{
 	{
 		Name: "M2",
 	},
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 8dbaf9b..321244f 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
@@ -28,13 +28,13 @@
 	return xxx_M3{m}
 }
 func (m xxx_M3) Type() protoreflect.MessageType {
-	return xxx_M3_ProtoFile_MessageTypes[0].Type
+	return xxx_M3_protoFile_MessageTypes[0].Type
 }
 func (m xxx_M3) KnownFields() protoreflect.KnownFields {
-	return xxx_M3_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_M3_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_M3) UnknownFields() protoreflect.UnknownFields {
-	return xxx_M3_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_M3_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_M3) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -83,9 +83,9 @@
 }
 
 func init() {
-	xxx_M3_ProtoFile_FileDesc.Messages = xxx_M3_ProtoFile_MessageDescs[0:1]
+	xxx_M3_protoFile_FileDesc.Messages = xxx_M3_protoFile_MessageDescs[0:1]
 	var err error
-	M3_ProtoFile, err = prototype.NewFile(&xxx_M3_ProtoFile_FileDesc)
+	M3_protoFile, err = prototype.NewFile(&xxx_M3_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -93,22 +93,22 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var M3_ProtoFile protoreflect.FileDescriptor
+var M3_protoFile protoreflect.FileDescriptor
 
-var xxx_M3_ProtoFile_FileDesc = prototype.File{
+var xxx_M3_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto3,
 	Path:    "imports/test_a_2/m3.proto",
 	Package: "test.a",
 }
-var xxx_M3_ProtoFile_MessageTypes = [1]protoimpl.MessageType{
+var xxx_M3_protoFile_MessageTypes = [1]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_M3_ProtoFile_MessageDescs[0].Reference(),
+		xxx_M3_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_M3{new(M3)}
 		},
 	)},
 }
-var xxx_M3_ProtoFile_MessageDescs = [1]prototype.Message{
+var xxx_M3_protoFile_MessageDescs = [1]prototype.Message{
 	{
 		Name: "M3",
 	},
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 1891dbf..700b149 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
@@ -28,13 +28,13 @@
 	return xxx_M4{m}
 }
 func (m xxx_M4) Type() protoreflect.MessageType {
-	return xxx_M4_ProtoFile_MessageTypes[0].Type
+	return xxx_M4_protoFile_MessageTypes[0].Type
 }
 func (m xxx_M4) KnownFields() protoreflect.KnownFields {
-	return xxx_M4_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_M4_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_M4) UnknownFields() protoreflect.UnknownFields {
-	return xxx_M4_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_M4_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_M4) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -83,9 +83,9 @@
 }
 
 func init() {
-	xxx_M4_ProtoFile_FileDesc.Messages = xxx_M4_ProtoFile_MessageDescs[0:1]
+	xxx_M4_protoFile_FileDesc.Messages = xxx_M4_protoFile_MessageDescs[0:1]
 	var err error
-	M4_ProtoFile, err = prototype.NewFile(&xxx_M4_ProtoFile_FileDesc)
+	M4_protoFile, err = prototype.NewFile(&xxx_M4_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -93,22 +93,22 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var M4_ProtoFile protoreflect.FileDescriptor
+var M4_protoFile protoreflect.FileDescriptor
 
-var xxx_M4_ProtoFile_FileDesc = prototype.File{
+var xxx_M4_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto3,
 	Path:    "imports/test_a_2/m4.proto",
 	Package: "test.a",
 }
-var xxx_M4_ProtoFile_MessageTypes = [1]protoimpl.MessageType{
+var xxx_M4_protoFile_MessageTypes = [1]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_M4_ProtoFile_MessageDescs[0].Reference(),
+		xxx_M4_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_M4{new(M4)}
 		},
 	)},
 }
-var xxx_M4_ProtoFile_MessageDescs = [1]prototype.Message{
+var xxx_M4_protoFile_MessageDescs = [1]prototype.Message{
 	{
 		Name: "M4",
 	},
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 0fa459a..9afdc8d 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
@@ -28,13 +28,13 @@
 	return xxx_M1{m}
 }
 func (m xxx_M1) Type() protoreflect.MessageType {
-	return xxx_M1_ProtoFile_MessageTypes[0].Type
+	return xxx_M1_protoFile_MessageTypes[0].Type
 }
 func (m xxx_M1) KnownFields() protoreflect.KnownFields {
-	return xxx_M1_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_M1_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_M1) UnknownFields() protoreflect.UnknownFields {
-	return xxx_M1_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_M1_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_M1) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -83,9 +83,9 @@
 }
 
 func init() {
-	xxx_M1_ProtoFile_FileDesc.Messages = xxx_M1_ProtoFile_MessageDescs[0:1]
+	xxx_M1_protoFile_FileDesc.Messages = xxx_M1_protoFile_MessageDescs[0:1]
 	var err error
-	M1_ProtoFile, err = prototype.NewFile(&xxx_M1_ProtoFile_FileDesc)
+	M1_protoFile, err = prototype.NewFile(&xxx_M1_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -93,22 +93,22 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var M1_ProtoFile protoreflect.FileDescriptor
+var M1_protoFile protoreflect.FileDescriptor
 
-var xxx_M1_ProtoFile_FileDesc = prototype.File{
+var xxx_M1_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto3,
 	Path:    "imports/test_b_1/m1.proto",
 	Package: "test.b.part1",
 }
-var xxx_M1_ProtoFile_MessageTypes = [1]protoimpl.MessageType{
+var xxx_M1_protoFile_MessageTypes = [1]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_M1_ProtoFile_MessageDescs[0].Reference(),
+		xxx_M1_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_M1{new(M1)}
 		},
 	)},
 }
-var xxx_M1_ProtoFile_MessageDescs = [1]prototype.Message{
+var xxx_M1_protoFile_MessageDescs = [1]prototype.Message{
 	{
 		Name: "M1",
 	},
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 d137bf2..8b22a44 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
@@ -28,13 +28,13 @@
 	return xxx_M2{m}
 }
 func (m xxx_M2) Type() protoreflect.MessageType {
-	return xxx_M2_ProtoFile_MessageTypes[0].Type
+	return xxx_M2_protoFile_MessageTypes[0].Type
 }
 func (m xxx_M2) KnownFields() protoreflect.KnownFields {
-	return xxx_M2_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_M2_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_M2) UnknownFields() protoreflect.UnknownFields {
-	return xxx_M2_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_M2_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_M2) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -83,9 +83,9 @@
 }
 
 func init() {
-	xxx_M2_ProtoFile_FileDesc.Messages = xxx_M2_ProtoFile_MessageDescs[0:1]
+	xxx_M2_protoFile_FileDesc.Messages = xxx_M2_protoFile_MessageDescs[0:1]
 	var err error
-	M2_ProtoFile, err = prototype.NewFile(&xxx_M2_ProtoFile_FileDesc)
+	M2_protoFile, err = prototype.NewFile(&xxx_M2_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -93,22 +93,22 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var M2_ProtoFile protoreflect.FileDescriptor
+var M2_protoFile protoreflect.FileDescriptor
 
-var xxx_M2_ProtoFile_FileDesc = prototype.File{
+var xxx_M2_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto3,
 	Path:    "imports/test_b_1/m2.proto",
 	Package: "test.b.part2",
 }
-var xxx_M2_ProtoFile_MessageTypes = [1]protoimpl.MessageType{
+var xxx_M2_protoFile_MessageTypes = [1]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_M2_ProtoFile_MessageDescs[0].Reference(),
+		xxx_M2_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_M2{new(M2)}
 		},
 	)},
 }
-var xxx_M2_ProtoFile_MessageDescs = [1]prototype.Message{
+var xxx_M2_protoFile_MessageDescs = [1]prototype.Message{
 	{
 		Name: "M2",
 	},
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 edd5d87..ac9ee20 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
@@ -30,13 +30,13 @@
 	return xxx_A1M1{m}
 }
 func (m xxx_A1M1) Type() protoreflect.MessageType {
-	return xxx_TestImportA1M1_ProtoFile_MessageTypes[0].Type
+	return xxx_TestImportA1M1_protoFile_MessageTypes[0].Type
 }
 func (m xxx_A1M1) KnownFields() protoreflect.KnownFields {
-	return xxx_TestImportA1M1_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_TestImportA1M1_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_A1M1) UnknownFields() protoreflect.UnknownFields {
-	return xxx_TestImportA1M1_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_TestImportA1M1_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_A1M1) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -94,10 +94,10 @@
 }
 
 func init() {
-	xxx_TestImportA1M1_ProtoFile_FileDesc.Messages = xxx_TestImportA1M1_ProtoFile_MessageDescs[0:1]
-	xxx_TestImportA1M1_ProtoFile_MessageDescs[0].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*test_a_1.M1)(nil))
+	xxx_TestImportA1M1_protoFile_FileDesc.Messages = xxx_TestImportA1M1_protoFile_MessageDescs[0:1]
+	xxx_TestImportA1M1_protoFile_MessageDescs[0].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*test_a_1.M1)(nil))
 	var err error
-	TestImportA1M1_ProtoFile, err = prototype.NewFile(&xxx_TestImportA1M1_ProtoFile_FileDesc)
+	TestImportA1M1_protoFile, err = prototype.NewFile(&xxx_TestImportA1M1_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -105,9 +105,9 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var TestImportA1M1_ProtoFile protoreflect.FileDescriptor
+var TestImportA1M1_protoFile protoreflect.FileDescriptor
 
-var xxx_TestImportA1M1_ProtoFile_FileDesc = prototype.File{
+var xxx_TestImportA1M1_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto3,
 	Path:    "imports/test_import_a1m1.proto",
 	Package: "test",
@@ -115,15 +115,15 @@
 		{FileDescriptor: prototype.PlaceholderFile("imports/test_a_1/m1.proto", "test.a")},
 	},
 }
-var xxx_TestImportA1M1_ProtoFile_MessageTypes = [1]protoimpl.MessageType{
+var xxx_TestImportA1M1_protoFile_MessageTypes = [1]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_TestImportA1M1_ProtoFile_MessageDescs[0].Reference(),
+		xxx_TestImportA1M1_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_A1M1{new(A1M1)}
 		},
 	)},
 }
-var xxx_TestImportA1M1_ProtoFile_MessageDescs = [1]prototype.Message{
+var xxx_TestImportA1M1_protoFile_MessageDescs = [1]prototype.Message{
 	{
 		Name: "A1M1",
 		Fields: []prototype.Field{
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 95033cf..d40a92e 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
@@ -30,13 +30,13 @@
 	return xxx_A1M2{m}
 }
 func (m xxx_A1M2) Type() protoreflect.MessageType {
-	return xxx_TestImportA1M2_ProtoFile_MessageTypes[0].Type
+	return xxx_TestImportA1M2_protoFile_MessageTypes[0].Type
 }
 func (m xxx_A1M2) KnownFields() protoreflect.KnownFields {
-	return xxx_TestImportA1M2_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_TestImportA1M2_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_A1M2) UnknownFields() protoreflect.UnknownFields {
-	return xxx_TestImportA1M2_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_TestImportA1M2_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_A1M2) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -94,10 +94,10 @@
 }
 
 func init() {
-	xxx_TestImportA1M2_ProtoFile_FileDesc.Messages = xxx_TestImportA1M2_ProtoFile_MessageDescs[0:1]
-	xxx_TestImportA1M2_ProtoFile_MessageDescs[0].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*test_a_1.M2)(nil))
+	xxx_TestImportA1M2_protoFile_FileDesc.Messages = xxx_TestImportA1M2_protoFile_MessageDescs[0:1]
+	xxx_TestImportA1M2_protoFile_MessageDescs[0].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*test_a_1.M2)(nil))
 	var err error
-	TestImportA1M2_ProtoFile, err = prototype.NewFile(&xxx_TestImportA1M2_ProtoFile_FileDesc)
+	TestImportA1M2_protoFile, err = prototype.NewFile(&xxx_TestImportA1M2_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -105,9 +105,9 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var TestImportA1M2_ProtoFile protoreflect.FileDescriptor
+var TestImportA1M2_protoFile protoreflect.FileDescriptor
 
-var xxx_TestImportA1M2_ProtoFile_FileDesc = prototype.File{
+var xxx_TestImportA1M2_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto3,
 	Path:    "imports/test_import_a1m2.proto",
 	Package: "test",
@@ -115,15 +115,15 @@
 		{FileDescriptor: prototype.PlaceholderFile("imports/test_a_1/m2.proto", "test.a")},
 	},
 }
-var xxx_TestImportA1M2_ProtoFile_MessageTypes = [1]protoimpl.MessageType{
+var xxx_TestImportA1M2_protoFile_MessageTypes = [1]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_TestImportA1M2_ProtoFile_MessageDescs[0].Reference(),
+		xxx_TestImportA1M2_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_A1M2{new(A1M2)}
 		},
 	)},
 }
-var xxx_TestImportA1M2_ProtoFile_MessageDescs = [1]prototype.Message{
+var xxx_TestImportA1M2_protoFile_MessageDescs = [1]prototype.Message{
 	{
 		Name: "A1M2",
 		Fields: []prototype.Field{
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 eef1e2b..9d714e3 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
@@ -37,13 +37,13 @@
 	return xxx_All{m}
 }
 func (m xxx_All) Type() protoreflect.MessageType {
-	return xxx_TestImportAll_ProtoFile_MessageTypes[0].Type
+	return xxx_TestImportAll_protoFile_MessageTypes[0].Type
 }
 func (m xxx_All) KnownFields() protoreflect.KnownFields {
-	return xxx_TestImportAll_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_TestImportAll_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_All) UnknownFields() protoreflect.UnknownFields {
-	return xxx_TestImportAll_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_TestImportAll_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_All) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -135,14 +135,14 @@
 }
 
 func init() {
-	xxx_TestImportAll_ProtoFile_FileDesc.Messages = xxx_TestImportAll_ProtoFile_MessageDescs[0:1]
-	xxx_TestImportAll_ProtoFile_MessageDescs[0].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*test_a_1.M1)(nil))
-	xxx_TestImportAll_ProtoFile_MessageDescs[0].Fields[1].MessageType = protoimpl.X.MessageTypeOf((*test_a_1.M2)(nil))
-	xxx_TestImportAll_ProtoFile_MessageDescs[0].Fields[2].MessageType = protoimpl.X.MessageTypeOf((*test_b_1.M1)(nil))
-	xxx_TestImportAll_ProtoFile_MessageDescs[0].Fields[3].MessageType = protoimpl.X.MessageTypeOf((*test_b_1.M2)(nil))
-	xxx_TestImportAll_ProtoFile_MessageDescs[0].Fields[4].MessageType = protoimpl.X.MessageTypeOf((*fmt.M)(nil))
+	xxx_TestImportAll_protoFile_FileDesc.Messages = xxx_TestImportAll_protoFile_MessageDescs[0:1]
+	xxx_TestImportAll_protoFile_MessageDescs[0].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*test_a_1.M1)(nil))
+	xxx_TestImportAll_protoFile_MessageDescs[0].Fields[1].MessageType = protoimpl.X.MessageTypeOf((*test_a_1.M2)(nil))
+	xxx_TestImportAll_protoFile_MessageDescs[0].Fields[2].MessageType = protoimpl.X.MessageTypeOf((*test_b_1.M1)(nil))
+	xxx_TestImportAll_protoFile_MessageDescs[0].Fields[3].MessageType = protoimpl.X.MessageTypeOf((*test_b_1.M2)(nil))
+	xxx_TestImportAll_protoFile_MessageDescs[0].Fields[4].MessageType = protoimpl.X.MessageTypeOf((*fmt.M)(nil))
 	var err error
-	TestImportAll_ProtoFile, err = prototype.NewFile(&xxx_TestImportAll_ProtoFile_FileDesc)
+	TestImportAll_protoFile, err = prototype.NewFile(&xxx_TestImportAll_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -150,9 +150,9 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var TestImportAll_ProtoFile protoreflect.FileDescriptor
+var TestImportAll_protoFile protoreflect.FileDescriptor
 
-var xxx_TestImportAll_ProtoFile_FileDesc = prototype.File{
+var xxx_TestImportAll_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto3,
 	Path:    "imports/test_import_all.proto",
 	Package: "test",
@@ -166,15 +166,15 @@
 		{FileDescriptor: prototype.PlaceholderFile("imports/fmt/m.proto", "fmt")},
 	},
 }
-var xxx_TestImportAll_ProtoFile_MessageTypes = [1]protoimpl.MessageType{
+var xxx_TestImportAll_protoFile_MessageTypes = [1]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_TestImportAll_ProtoFile_MessageDescs[0].Reference(),
+		xxx_TestImportAll_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_All{new(All)}
 		},
 	)},
 }
-var xxx_TestImportAll_ProtoFile_MessageDescs = [1]prototype.Message{
+var xxx_TestImportAll_protoFile_MessageDescs = [1]prototype.Message{
 	{
 		Name: "All",
 		Fields: []prototype.Field{
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 1aea3db..fdc88c5 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
@@ -31,13 +31,13 @@
 	return xxx_Foo{m}
 }
 func (m xxx_Foo) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[0].Type
+	return xxx_Test_protoFile_MessageTypes[0].Type
 }
 func (m xxx_Foo) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_Foo) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_Foo) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -116,9 +116,9 @@
 }
 
 func init() {
-	xxx_Test_ProtoFile_FileDesc.Messages = xxx_Test_ProtoFile_MessageDescs[0:1]
+	xxx_Test_protoFile_FileDesc.Messages = xxx_Test_protoFile_MessageDescs[0:1]
 	var err error
-	Test_ProtoFile, err = prototype.NewFile(&xxx_Test_ProtoFile_FileDesc)
+	Test_protoFile, err = prototype.NewFile(&xxx_Test_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -126,22 +126,22 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Test_ProtoFile protoreflect.FileDescriptor
+var Test_protoFile protoreflect.FileDescriptor
 
-var xxx_Test_ProtoFile_FileDesc = prototype.File{
+var xxx_Test_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "issue780_oneof_conflict/test.proto",
 	Package: "oneoftest",
 }
-var xxx_Test_ProtoFile_MessageTypes = [1]protoimpl.MessageType{
+var xxx_Test_protoFile_MessageTypes = [1]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[0].Reference(),
+		xxx_Test_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Foo{new(Foo)}
 		},
 	)},
 }
-var xxx_Test_ProtoFile_MessageDescs = [1]prototype.Message{
+var xxx_Test_protoFile_MessageDescs = [1]prototype.Message{
 	{
 		Name: "Foo",
 		Fields: []prototype.Field{
diff --git a/cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go b/cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go
index 12dddcc..c0b1520 100644
--- a/cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go
+++ b/cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go
@@ -23,7 +23,7 @@
 )
 
 func (e Enum) Type() protoreflect.EnumType {
-	return xxx_Nopackage_ProtoFile_EnumTypes[0]
+	return xxx_Nopackage_protoFile_EnumTypes[0]
 }
 func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -74,13 +74,13 @@
 	return xxx_Message{m}
 }
 func (m xxx_Message) Type() protoreflect.MessageType {
-	return xxx_Nopackage_ProtoFile_MessageTypes[0].Type
+	return xxx_Nopackage_protoFile_MessageTypes[0].Type
 }
 func (m xxx_Message) KnownFields() protoreflect.KnownFields {
-	return xxx_Nopackage_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Nopackage_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_Message) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Nopackage_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Nopackage_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_Message) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -147,11 +147,11 @@
 }
 
 func init() {
-	xxx_Nopackage_ProtoFile_FileDesc.Enums = xxx_Nopackage_ProtoFile_EnumDescs[0:1]
-	xxx_Nopackage_ProtoFile_FileDesc.Messages = xxx_Nopackage_ProtoFile_MessageDescs[0:1]
-	xxx_Nopackage_ProtoFile_MessageDescs[0].Fields[1].EnumType = xxx_Nopackage_ProtoFile_EnumTypes[0]
+	xxx_Nopackage_protoFile_FileDesc.Enums = xxx_Nopackage_protoFile_EnumDescs[0:1]
+	xxx_Nopackage_protoFile_FileDesc.Messages = xxx_Nopackage_protoFile_MessageDescs[0:1]
+	xxx_Nopackage_protoFile_MessageDescs[0].Fields[1].EnumType = xxx_Nopackage_protoFile_EnumTypes[0]
 	var err error
-	Nopackage_ProtoFile, err = prototype.NewFile(&xxx_Nopackage_ProtoFile_FileDesc)
+	Nopackage_protoFile, err = prototype.NewFile(&xxx_Nopackage_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -159,22 +159,22 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Nopackage_ProtoFile protoreflect.FileDescriptor
+var Nopackage_protoFile protoreflect.FileDescriptor
 
-var xxx_Nopackage_ProtoFile_FileDesc = prototype.File{
+var xxx_Nopackage_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "nopackage/nopackage.proto",
 	Package: "",
 }
-var xxx_Nopackage_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
+var xxx_Nopackage_protoFile_EnumTypes = [1]protoreflect.EnumType{
 	prototype.GoEnum(
-		xxx_Nopackage_ProtoFile_EnumDescs[0].Reference(),
+		xxx_Nopackage_protoFile_EnumDescs[0].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enum(n)
 		},
 	),
 }
-var xxx_Nopackage_ProtoFile_EnumDescs = [1]prototype.Enum{
+var xxx_Nopackage_protoFile_EnumDescs = [1]prototype.Enum{
 	{
 		Name: "Enum",
 		Values: []prototype.EnumValue{
@@ -182,15 +182,15 @@
 		},
 	},
 }
-var xxx_Nopackage_ProtoFile_MessageTypes = [1]protoimpl.MessageType{
+var xxx_Nopackage_protoFile_MessageTypes = [1]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_Nopackage_ProtoFile_MessageDescs[0].Reference(),
+		xxx_Nopackage_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Message{new(Message)}
 		},
 	)},
 }
-var xxx_Nopackage_ProtoFile_MessageDescs = [1]prototype.Message{
+var xxx_Nopackage_protoFile_MessageDescs = [1]prototype.Message{
 	{
 		Name: "Message",
 		Fields: []prototype.Field{
diff --git a/cmd/protoc-gen-go/testdata/proto2/enum.pb.go b/cmd/protoc-gen-go/testdata/proto2/enum.pb.go
index 4777f0f..c0a6614 100644
--- a/cmd/protoc-gen-go/testdata/proto2/enum.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto2/enum.pb.go
@@ -27,7 +27,7 @@
 )
 
 func (e EnumType1) Type() protoreflect.EnumType {
-	return xxx_Enum_ProtoFile_EnumTypes[0]
+	return xxx_Enum_protoFile_EnumTypes[0]
 }
 func (e EnumType1) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -74,7 +74,7 @@
 )
 
 func (e EnumType2) Type() protoreflect.EnumType {
-	return xxx_Enum_ProtoFile_EnumTypes[1]
+	return xxx_Enum_protoFile_EnumTypes[1]
 }
 func (e EnumType2) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -122,7 +122,7 @@
 )
 
 func (e EnumContainerMessage1_NestedEnumType1A) Type() protoreflect.EnumType {
-	return xxx_Enum_ProtoFile_EnumTypes[2]
+	return xxx_Enum_protoFile_EnumTypes[2]
 }
 func (e EnumContainerMessage1_NestedEnumType1A) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -166,7 +166,7 @@
 )
 
 func (e EnumContainerMessage1_NestedEnumType1B) Type() protoreflect.EnumType {
-	return xxx_Enum_ProtoFile_EnumTypes[3]
+	return xxx_Enum_protoFile_EnumTypes[3]
 }
 func (e EnumContainerMessage1_NestedEnumType1B) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -212,7 +212,7 @@
 )
 
 func (e EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2A) Type() protoreflect.EnumType {
-	return xxx_Enum_ProtoFile_EnumTypes[4]
+	return xxx_Enum_protoFile_EnumTypes[4]
 }
 func (e EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2A) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -256,7 +256,7 @@
 )
 
 func (e EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B) Type() protoreflect.EnumType {
-	return xxx_Enum_ProtoFile_EnumTypes[5]
+	return xxx_Enum_protoFile_EnumTypes[5]
 }
 func (e EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -307,13 +307,13 @@
 	return xxx_EnumContainerMessage1{m}
 }
 func (m xxx_EnumContainerMessage1) Type() protoreflect.MessageType {
-	return xxx_Enum_ProtoFile_MessageTypes[0].Type
+	return xxx_Enum_protoFile_MessageTypes[0].Type
 }
 func (m xxx_EnumContainerMessage1) KnownFields() protoreflect.KnownFields {
-	return xxx_Enum_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Enum_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_EnumContainerMessage1) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Enum_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Enum_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_EnumContainerMessage1) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -375,13 +375,13 @@
 	return xxx_EnumContainerMessage1_EnumContainerMessage2{m}
 }
 func (m xxx_EnumContainerMessage1_EnumContainerMessage2) Type() protoreflect.MessageType {
-	return xxx_Enum_ProtoFile_MessageTypes[1].Type
+	return xxx_Enum_protoFile_MessageTypes[1].Type
 }
 func (m xxx_EnumContainerMessage1_EnumContainerMessage2) KnownFields() protoreflect.KnownFields {
-	return xxx_Enum_ProtoFile_MessageTypes[1].KnownFieldsOf(m.m)
+	return xxx_Enum_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
 }
 func (m xxx_EnumContainerMessage1_EnumContainerMessage2) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Enum_ProtoFile_MessageTypes[1].UnknownFieldsOf(m.m)
+	return xxx_Enum_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
 }
 func (m xxx_EnumContainerMessage1_EnumContainerMessage2) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -453,15 +453,15 @@
 }
 
 func init() {
-	xxx_Enum_ProtoFile_FileDesc.Enums = xxx_Enum_ProtoFile_EnumDescs[0:2]
-	xxx_Enum_ProtoFile_FileDesc.Messages = xxx_Enum_ProtoFile_MessageDescs[0:1]
-	xxx_Enum_ProtoFile_MessageDescs[0].Enums = xxx_Enum_ProtoFile_EnumDescs[2:4]
-	xxx_Enum_ProtoFile_MessageDescs[0].Messages = xxx_Enum_ProtoFile_MessageDescs[1:2]
-	xxx_Enum_ProtoFile_MessageDescs[1].Enums = xxx_Enum_ProtoFile_EnumDescs[4:6]
-	xxx_Enum_ProtoFile_MessageDescs[0].Fields[0].EnumType = xxx_Enum_ProtoFile_EnumTypes[1]
-	xxx_Enum_ProtoFile_MessageDescs[0].Fields[1].EnumType = xxx_Enum_ProtoFile_EnumTypes[1]
+	xxx_Enum_protoFile_FileDesc.Enums = xxx_Enum_protoFile_EnumDescs[0:2]
+	xxx_Enum_protoFile_FileDesc.Messages = xxx_Enum_protoFile_MessageDescs[0:1]
+	xxx_Enum_protoFile_MessageDescs[0].Enums = xxx_Enum_protoFile_EnumDescs[2:4]
+	xxx_Enum_protoFile_MessageDescs[0].Messages = xxx_Enum_protoFile_MessageDescs[1:2]
+	xxx_Enum_protoFile_MessageDescs[1].Enums = xxx_Enum_protoFile_EnumDescs[4:6]
+	xxx_Enum_protoFile_MessageDescs[0].Fields[0].EnumType = xxx_Enum_protoFile_EnumTypes[1]
+	xxx_Enum_protoFile_MessageDescs[0].Fields[1].EnumType = xxx_Enum_protoFile_EnumTypes[1]
 	var err error
-	Enum_ProtoFile, err = prototype.NewFile(&xxx_Enum_ProtoFile_FileDesc)
+	Enum_protoFile, err = prototype.NewFile(&xxx_Enum_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -469,52 +469,52 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Enum_ProtoFile protoreflect.FileDescriptor
+var Enum_protoFile protoreflect.FileDescriptor
 
-var xxx_Enum_ProtoFile_FileDesc = prototype.File{
+var xxx_Enum_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "proto2/enum.proto",
 	Package: "goproto.protoc.proto2",
 }
-var xxx_Enum_ProtoFile_EnumTypes = [6]protoreflect.EnumType{
+var xxx_Enum_protoFile_EnumTypes = [6]protoreflect.EnumType{
 	prototype.GoEnum(
-		xxx_Enum_ProtoFile_EnumDescs[0].Reference(),
+		xxx_Enum_protoFile_EnumDescs[0].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return EnumType1(n)
 		},
 	),
 	prototype.GoEnum(
-		xxx_Enum_ProtoFile_EnumDescs[1].Reference(),
+		xxx_Enum_protoFile_EnumDescs[1].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return EnumType2(n)
 		},
 	),
 	prototype.GoEnum(
-		xxx_Enum_ProtoFile_EnumDescs[2].Reference(),
+		xxx_Enum_protoFile_EnumDescs[2].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return EnumContainerMessage1_NestedEnumType1A(n)
 		},
 	),
 	prototype.GoEnum(
-		xxx_Enum_ProtoFile_EnumDescs[3].Reference(),
+		xxx_Enum_protoFile_EnumDescs[3].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return EnumContainerMessage1_NestedEnumType1B(n)
 		},
 	),
 	prototype.GoEnum(
-		xxx_Enum_ProtoFile_EnumDescs[4].Reference(),
+		xxx_Enum_protoFile_EnumDescs[4].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2A(n)
 		},
 	),
 	prototype.GoEnum(
-		xxx_Enum_ProtoFile_EnumDescs[5].Reference(),
+		xxx_Enum_protoFile_EnumDescs[5].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B(n)
 		},
 	),
 }
-var xxx_Enum_ProtoFile_EnumDescs = [6]prototype.Enum{
+var xxx_Enum_protoFile_EnumDescs = [6]prototype.Enum{
 	{
 		Name: "EnumType1",
 		Values: []prototype.EnumValue{
@@ -556,21 +556,21 @@
 		},
 	},
 }
-var xxx_Enum_ProtoFile_MessageTypes = [2]protoimpl.MessageType{
+var xxx_Enum_protoFile_MessageTypes = [2]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_Enum_ProtoFile_MessageDescs[0].Reference(),
+		xxx_Enum_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_EnumContainerMessage1{new(EnumContainerMessage1)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Enum_ProtoFile_MessageDescs[1].Reference(),
+		xxx_Enum_protoFile_MessageDescs[1].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_EnumContainerMessage1_EnumContainerMessage2{new(EnumContainerMessage1_EnumContainerMessage2)}
 		},
 	)},
 }
-var xxx_Enum_ProtoFile_MessageDescs = [2]prototype.Message{
+var xxx_Enum_protoFile_MessageDescs = [2]prototype.Message{
 	{
 		Name: "EnumContainerMessage1",
 		Fields: []prototype.Field{
diff --git a/cmd/protoc-gen-go/testdata/proto2/fields.pb.go b/cmd/protoc-gen-go/testdata/proto2/fields.pb.go
index 73f1c71..c81af99 100644
--- a/cmd/protoc-gen-go/testdata/proto2/fields.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto2/fields.pb.go
@@ -25,7 +25,7 @@
 )
 
 func (e FieldTestMessage_Enum) Type() protoreflect.EnumType {
-	return xxx_Fields_ProtoFile_EnumTypes[0]
+	return xxx_Fields_protoFile_EnumTypes[0]
 }
 func (e FieldTestMessage_Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -182,13 +182,13 @@
 	return xxx_FieldTestMessage{m}
 }
 func (m xxx_FieldTestMessage) Type() protoreflect.MessageType {
-	return xxx_Fields_ProtoFile_MessageTypes[0].Type
+	return xxx_Fields_protoFile_MessageTypes[0].Type
 }
 func (m xxx_FieldTestMessage) KnownFields() protoreflect.KnownFields {
-	return xxx_Fields_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Fields_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_FieldTestMessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Fields_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Fields_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_FieldTestMessage) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1151,13 +1151,13 @@
 	return xxx_FieldTestMessage_OptionalGroup{m}
 }
 func (m xxx_FieldTestMessage_OptionalGroup) Type() protoreflect.MessageType {
-	return xxx_Fields_ProtoFile_MessageTypes[1].Type
+	return xxx_Fields_protoFile_MessageTypes[1].Type
 }
 func (m xxx_FieldTestMessage_OptionalGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Fields_ProtoFile_MessageTypes[1].KnownFieldsOf(m.m)
+	return xxx_Fields_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
 }
 func (m xxx_FieldTestMessage_OptionalGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Fields_ProtoFile_MessageTypes[1].UnknownFieldsOf(m.m)
+	return xxx_Fields_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
 }
 func (m xxx_FieldTestMessage_OptionalGroup) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1210,13 +1210,13 @@
 	return xxx_FieldTestMessage_RequiredGroup{m}
 }
 func (m xxx_FieldTestMessage_RequiredGroup) Type() protoreflect.MessageType {
-	return xxx_Fields_ProtoFile_MessageTypes[2].Type
+	return xxx_Fields_protoFile_MessageTypes[2].Type
 }
 func (m xxx_FieldTestMessage_RequiredGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Fields_ProtoFile_MessageTypes[2].KnownFieldsOf(m.m)
+	return xxx_Fields_protoFile_MessageTypes[2].KnownFieldsOf(m.m)
 }
 func (m xxx_FieldTestMessage_RequiredGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Fields_ProtoFile_MessageTypes[2].UnknownFieldsOf(m.m)
+	return xxx_Fields_protoFile_MessageTypes[2].UnknownFieldsOf(m.m)
 }
 func (m xxx_FieldTestMessage_RequiredGroup) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1269,13 +1269,13 @@
 	return xxx_FieldTestMessage_RepeatedGroup{m}
 }
 func (m xxx_FieldTestMessage_RepeatedGroup) Type() protoreflect.MessageType {
-	return xxx_Fields_ProtoFile_MessageTypes[3].Type
+	return xxx_Fields_protoFile_MessageTypes[3].Type
 }
 func (m xxx_FieldTestMessage_RepeatedGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Fields_ProtoFile_MessageTypes[3].KnownFieldsOf(m.m)
+	return xxx_Fields_protoFile_MessageTypes[3].KnownFieldsOf(m.m)
 }
 func (m xxx_FieldTestMessage_RepeatedGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Fields_ProtoFile_MessageTypes[3].UnknownFieldsOf(m.m)
+	return xxx_Fields_protoFile_MessageTypes[3].UnknownFieldsOf(m.m)
 }
 func (m xxx_FieldTestMessage_RepeatedGroup) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1326,13 +1326,13 @@
 	return xxx_FieldTestMessage_OneofGroup{m}
 }
 func (m xxx_FieldTestMessage_OneofGroup) Type() protoreflect.MessageType {
-	return xxx_Fields_ProtoFile_MessageTypes[7].Type
+	return xxx_Fields_protoFile_MessageTypes[7].Type
 }
 func (m xxx_FieldTestMessage_OneofGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Fields_ProtoFile_MessageTypes[7].KnownFieldsOf(m.m)
+	return xxx_Fields_protoFile_MessageTypes[7].KnownFieldsOf(m.m)
 }
 func (m xxx_FieldTestMessage_OneofGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Fields_ProtoFile_MessageTypes[7].UnknownFieldsOf(m.m)
+	return xxx_Fields_protoFile_MessageTypes[7].UnknownFieldsOf(m.m)
 }
 func (m xxx_FieldTestMessage_OneofGroup) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1382,13 +1382,13 @@
 	return xxx_FieldTestMessage_Message{m}
 }
 func (m xxx_FieldTestMessage_Message) Type() protoreflect.MessageType {
-	return xxx_Fields_ProtoFile_MessageTypes[8].Type
+	return xxx_Fields_protoFile_MessageTypes[8].Type
 }
 func (m xxx_FieldTestMessage_Message) KnownFields() protoreflect.KnownFields {
-	return xxx_Fields_ProtoFile_MessageTypes[8].KnownFieldsOf(m.m)
+	return xxx_Fields_protoFile_MessageTypes[8].KnownFieldsOf(m.m)
 }
 func (m xxx_FieldTestMessage_Message) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Fields_ProtoFile_MessageTypes[8].UnknownFieldsOf(m.m)
+	return xxx_Fields_protoFile_MessageTypes[8].UnknownFieldsOf(m.m)
 }
 func (m xxx_FieldTestMessage_Message) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1563,29 +1563,29 @@
 }
 
 func init() {
-	xxx_Fields_ProtoFile_FileDesc.Messages = xxx_Fields_ProtoFile_MessageDescs[0:1]
-	xxx_Fields_ProtoFile_MessageDescs[0].Enums = xxx_Fields_ProtoFile_EnumDescs[0:1]
-	xxx_Fields_ProtoFile_MessageDescs[0].Messages = xxx_Fields_ProtoFile_MessageDescs[1:9]
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[1].EnumType = xxx_Fields_ProtoFile_EnumTypes[0]
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[16].MessageType = xxx_Fields_ProtoFile_MessageTypes[8].Type
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[17].MessageType = xxx_Fields_ProtoFile_MessageTypes[1].Type
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[19].EnumType = xxx_Fields_ProtoFile_EnumTypes[0]
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[34].MessageType = xxx_Fields_ProtoFile_MessageTypes[8].Type
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[35].MessageType = xxx_Fields_ProtoFile_MessageTypes[2].Type
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[37].EnumType = xxx_Fields_ProtoFile_EnumTypes[0]
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[52].MessageType = xxx_Fields_ProtoFile_MessageTypes[8].Type
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[53].MessageType = xxx_Fields_ProtoFile_MessageTypes[3].Type
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[55].EnumType = xxx_Fields_ProtoFile_EnumTypes[0]
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[78].MessageType = xxx_Fields_ProtoFile_MessageDescs[4].Reference()
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[79].MessageType = xxx_Fields_ProtoFile_MessageDescs[5].Reference()
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[80].MessageType = xxx_Fields_ProtoFile_MessageDescs[6].Reference()
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[82].EnumType = xxx_Fields_ProtoFile_EnumTypes[0]
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[97].MessageType = xxx_Fields_ProtoFile_MessageTypes[8].Type
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[98].MessageType = xxx_Fields_ProtoFile_MessageTypes[7].Type
-	xxx_Fields_ProtoFile_MessageDescs[5].Fields[1].MessageType = xxx_Fields_ProtoFile_MessageTypes[8].Type
-	xxx_Fields_ProtoFile_MessageDescs[6].Fields[1].EnumType = xxx_Fields_ProtoFile_EnumTypes[0]
+	xxx_Fields_protoFile_FileDesc.Messages = xxx_Fields_protoFile_MessageDescs[0:1]
+	xxx_Fields_protoFile_MessageDescs[0].Enums = xxx_Fields_protoFile_EnumDescs[0:1]
+	xxx_Fields_protoFile_MessageDescs[0].Messages = xxx_Fields_protoFile_MessageDescs[1:9]
+	xxx_Fields_protoFile_MessageDescs[0].Fields[1].EnumType = xxx_Fields_protoFile_EnumTypes[0]
+	xxx_Fields_protoFile_MessageDescs[0].Fields[16].MessageType = xxx_Fields_protoFile_MessageTypes[8].Type
+	xxx_Fields_protoFile_MessageDescs[0].Fields[17].MessageType = xxx_Fields_protoFile_MessageTypes[1].Type
+	xxx_Fields_protoFile_MessageDescs[0].Fields[19].EnumType = xxx_Fields_protoFile_EnumTypes[0]
+	xxx_Fields_protoFile_MessageDescs[0].Fields[34].MessageType = xxx_Fields_protoFile_MessageTypes[8].Type
+	xxx_Fields_protoFile_MessageDescs[0].Fields[35].MessageType = xxx_Fields_protoFile_MessageTypes[2].Type
+	xxx_Fields_protoFile_MessageDescs[0].Fields[37].EnumType = xxx_Fields_protoFile_EnumTypes[0]
+	xxx_Fields_protoFile_MessageDescs[0].Fields[52].MessageType = xxx_Fields_protoFile_MessageTypes[8].Type
+	xxx_Fields_protoFile_MessageDescs[0].Fields[53].MessageType = xxx_Fields_protoFile_MessageTypes[3].Type
+	xxx_Fields_protoFile_MessageDescs[0].Fields[55].EnumType = xxx_Fields_protoFile_EnumTypes[0]
+	xxx_Fields_protoFile_MessageDescs[0].Fields[78].MessageType = xxx_Fields_protoFile_MessageDescs[4].Reference()
+	xxx_Fields_protoFile_MessageDescs[0].Fields[79].MessageType = xxx_Fields_protoFile_MessageDescs[5].Reference()
+	xxx_Fields_protoFile_MessageDescs[0].Fields[80].MessageType = xxx_Fields_protoFile_MessageDescs[6].Reference()
+	xxx_Fields_protoFile_MessageDescs[0].Fields[82].EnumType = xxx_Fields_protoFile_EnumTypes[0]
+	xxx_Fields_protoFile_MessageDescs[0].Fields[97].MessageType = xxx_Fields_protoFile_MessageTypes[8].Type
+	xxx_Fields_protoFile_MessageDescs[0].Fields[98].MessageType = xxx_Fields_protoFile_MessageTypes[7].Type
+	xxx_Fields_protoFile_MessageDescs[5].Fields[1].MessageType = xxx_Fields_protoFile_MessageTypes[8].Type
+	xxx_Fields_protoFile_MessageDescs[6].Fields[1].EnumType = xxx_Fields_protoFile_EnumTypes[0]
 	var err error
-	Fields_ProtoFile, err = prototype.NewFile(&xxx_Fields_ProtoFile_FileDesc)
+	Fields_protoFile, err = prototype.NewFile(&xxx_Fields_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -1593,22 +1593,22 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Fields_ProtoFile protoreflect.FileDescriptor
+var Fields_protoFile protoreflect.FileDescriptor
 
-var xxx_Fields_ProtoFile_FileDesc = prototype.File{
+var xxx_Fields_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "proto2/fields.proto",
 	Package: "goproto.protoc.proto2",
 }
-var xxx_Fields_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
+var xxx_Fields_protoFile_EnumTypes = [1]protoreflect.EnumType{
 	prototype.GoEnum(
-		xxx_Fields_ProtoFile_EnumDescs[0].Reference(),
+		xxx_Fields_protoFile_EnumDescs[0].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return FieldTestMessage_Enum(n)
 		},
 	),
 }
-var xxx_Fields_ProtoFile_EnumDescs = [1]prototype.Enum{
+var xxx_Fields_protoFile_EnumDescs = [1]prototype.Enum{
 	{
 		Name: "Enum",
 		Values: []prototype.EnumValue{
@@ -1617,27 +1617,27 @@
 		},
 	},
 }
-var xxx_Fields_ProtoFile_MessageTypes = [9]protoimpl.MessageType{
+var xxx_Fields_protoFile_MessageTypes = [9]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_Fields_ProtoFile_MessageDescs[0].Reference(),
+		xxx_Fields_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_FieldTestMessage{new(FieldTestMessage)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Fields_ProtoFile_MessageDescs[1].Reference(),
+		xxx_Fields_protoFile_MessageDescs[1].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_FieldTestMessage_OptionalGroup{new(FieldTestMessage_OptionalGroup)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Fields_ProtoFile_MessageDescs[2].Reference(),
+		xxx_Fields_protoFile_MessageDescs[2].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_FieldTestMessage_RequiredGroup{new(FieldTestMessage_RequiredGroup)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Fields_ProtoFile_MessageDescs[3].Reference(),
+		xxx_Fields_protoFile_MessageDescs[3].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_FieldTestMessage_RepeatedGroup{new(FieldTestMessage_RepeatedGroup)}
 		},
@@ -1646,19 +1646,19 @@
 	{ /* no message type for FieldTestMessage_MapStringMessageEntry */ },
 	{ /* no message type for FieldTestMessage_MapFixed64EnumEntry */ },
 	{Type: prototype.GoMessage(
-		xxx_Fields_ProtoFile_MessageDescs[7].Reference(),
+		xxx_Fields_protoFile_MessageDescs[7].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_FieldTestMessage_OneofGroup{new(FieldTestMessage_OneofGroup)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Fields_ProtoFile_MessageDescs[8].Reference(),
+		xxx_Fields_protoFile_MessageDescs[8].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_FieldTestMessage_Message{new(FieldTestMessage_Message)}
 		},
 	)},
 }
-var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
+var xxx_Fields_protoFile_MessageDescs = [9]prototype.Message{
 	{
 		Name: "FieldTestMessage",
 		Fields: []prototype.Field{
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 b6afd77..1864b4e 100644
--- a/cmd/protoc-gen-go/testdata/proto2/nested_messages.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto2/nested_messages.pb.go
@@ -30,13 +30,13 @@
 	return xxx_Layer1{m}
 }
 func (m xxx_Layer1) Type() protoreflect.MessageType {
-	return xxx_NestedMessages_ProtoFile_MessageTypes[0].Type
+	return xxx_NestedMessages_protoFile_MessageTypes[0].Type
 }
 func (m xxx_Layer1) KnownFields() protoreflect.KnownFields {
-	return xxx_NestedMessages_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_NestedMessages_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_Layer1) UnknownFields() protoreflect.UnknownFields {
-	return xxx_NestedMessages_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_NestedMessages_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_Layer1) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -94,13 +94,13 @@
 	return xxx_Layer1_Layer2{m}
 }
 func (m xxx_Layer1_Layer2) Type() protoreflect.MessageType {
-	return xxx_NestedMessages_ProtoFile_MessageTypes[1].Type
+	return xxx_NestedMessages_protoFile_MessageTypes[1].Type
 }
 func (m xxx_Layer1_Layer2) KnownFields() protoreflect.KnownFields {
-	return xxx_NestedMessages_ProtoFile_MessageTypes[1].KnownFieldsOf(m.m)
+	return xxx_NestedMessages_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
 }
 func (m xxx_Layer1_Layer2) UnknownFields() protoreflect.UnknownFields {
-	return xxx_NestedMessages_ProtoFile_MessageTypes[1].UnknownFieldsOf(m.m)
+	return xxx_NestedMessages_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
 }
 func (m xxx_Layer1_Layer2) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -150,13 +150,13 @@
 	return xxx_Layer1_Layer2_Layer3{m}
 }
 func (m xxx_Layer1_Layer2_Layer3) Type() protoreflect.MessageType {
-	return xxx_NestedMessages_ProtoFile_MessageTypes[2].Type
+	return xxx_NestedMessages_protoFile_MessageTypes[2].Type
 }
 func (m xxx_Layer1_Layer2_Layer3) KnownFields() protoreflect.KnownFields {
-	return xxx_NestedMessages_ProtoFile_MessageTypes[2].KnownFieldsOf(m.m)
+	return xxx_NestedMessages_protoFile_MessageTypes[2].KnownFieldsOf(m.m)
 }
 func (m xxx_Layer1_Layer2_Layer3) UnknownFields() protoreflect.UnknownFields {
-	return xxx_NestedMessages_ProtoFile_MessageTypes[2].UnknownFieldsOf(m.m)
+	return xxx_NestedMessages_protoFile_MessageTypes[2].UnknownFieldsOf(m.m)
 }
 func (m xxx_Layer1_Layer2_Layer3) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -211,14 +211,14 @@
 }
 
 func init() {
-	xxx_NestedMessages_ProtoFile_FileDesc.Messages = xxx_NestedMessages_ProtoFile_MessageDescs[0:1]
-	xxx_NestedMessages_ProtoFile_MessageDescs[0].Messages = xxx_NestedMessages_ProtoFile_MessageDescs[1:2]
-	xxx_NestedMessages_ProtoFile_MessageDescs[1].Messages = xxx_NestedMessages_ProtoFile_MessageDescs[2:3]
-	xxx_NestedMessages_ProtoFile_MessageDescs[0].Fields[0].MessageType = xxx_NestedMessages_ProtoFile_MessageTypes[1].Type
-	xxx_NestedMessages_ProtoFile_MessageDescs[0].Fields[1].MessageType = xxx_NestedMessages_ProtoFile_MessageTypes[2].Type
-	xxx_NestedMessages_ProtoFile_MessageDescs[1].Fields[0].MessageType = xxx_NestedMessages_ProtoFile_MessageTypes[2].Type
+	xxx_NestedMessages_protoFile_FileDesc.Messages = xxx_NestedMessages_protoFile_MessageDescs[0:1]
+	xxx_NestedMessages_protoFile_MessageDescs[0].Messages = xxx_NestedMessages_protoFile_MessageDescs[1:2]
+	xxx_NestedMessages_protoFile_MessageDescs[1].Messages = xxx_NestedMessages_protoFile_MessageDescs[2:3]
+	xxx_NestedMessages_protoFile_MessageDescs[0].Fields[0].MessageType = xxx_NestedMessages_protoFile_MessageTypes[1].Type
+	xxx_NestedMessages_protoFile_MessageDescs[0].Fields[1].MessageType = xxx_NestedMessages_protoFile_MessageTypes[2].Type
+	xxx_NestedMessages_protoFile_MessageDescs[1].Fields[0].MessageType = xxx_NestedMessages_protoFile_MessageTypes[2].Type
 	var err error
-	NestedMessages_ProtoFile, err = prototype.NewFile(&xxx_NestedMessages_ProtoFile_FileDesc)
+	NestedMessages_protoFile, err = prototype.NewFile(&xxx_NestedMessages_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -226,34 +226,34 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var NestedMessages_ProtoFile protoreflect.FileDescriptor
+var NestedMessages_protoFile protoreflect.FileDescriptor
 
-var xxx_NestedMessages_ProtoFile_FileDesc = prototype.File{
+var xxx_NestedMessages_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "proto2/nested_messages.proto",
 	Package: "goproto.protoc.proto2",
 }
-var xxx_NestedMessages_ProtoFile_MessageTypes = [3]protoimpl.MessageType{
+var xxx_NestedMessages_protoFile_MessageTypes = [3]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_NestedMessages_ProtoFile_MessageDescs[0].Reference(),
+		xxx_NestedMessages_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Layer1{new(Layer1)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_NestedMessages_ProtoFile_MessageDescs[1].Reference(),
+		xxx_NestedMessages_protoFile_MessageDescs[1].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Layer1_Layer2{new(Layer1_Layer2)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_NestedMessages_ProtoFile_MessageDescs[2].Reference(),
+		xxx_NestedMessages_protoFile_MessageDescs[2].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Layer1_Layer2_Layer3{new(Layer1_Layer2_Layer3)}
 		},
 	)},
 }
-var xxx_NestedMessages_ProtoFile_MessageDescs = [3]prototype.Message{
+var xxx_NestedMessages_protoFile_MessageDescs = [3]prototype.Message{
 	{
 		Name: "Layer1",
 		Fields: []prototype.Field{
diff --git a/cmd/protoc-gen-go/testdata/proto2/proto2.pb.go b/cmd/protoc-gen-go/testdata/proto2/proto2.pb.go
index a0ad5a2..f98c619 100644
--- a/cmd/protoc-gen-go/testdata/proto2/proto2.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto2/proto2.pb.go
@@ -30,13 +30,13 @@
 	return xxx_Message{m}
 }
 func (m xxx_Message) Type() protoreflect.MessageType {
-	return xxx_Proto2_ProtoFile_MessageTypes[0].Type
+	return xxx_Proto2_protoFile_MessageTypes[0].Type
 }
 func (m xxx_Message) KnownFields() protoreflect.KnownFields {
-	return xxx_Proto2_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Proto2_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_Message) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Proto2_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Proto2_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_Message) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -101,10 +101,10 @@
 }
 
 func init() {
-	xxx_Proto2_ProtoFile_FileDesc.Messages = xxx_Proto2_ProtoFile_MessageDescs[0:1]
-	xxx_Proto2_ProtoFile_MessageDescs[0].Fields[1].MessageType = xxx_Proto2_ProtoFile_MessageTypes[0].Type
+	xxx_Proto2_protoFile_FileDesc.Messages = xxx_Proto2_protoFile_MessageDescs[0:1]
+	xxx_Proto2_protoFile_MessageDescs[0].Fields[1].MessageType = xxx_Proto2_protoFile_MessageTypes[0].Type
 	var err error
-	Proto2_ProtoFile, err = prototype.NewFile(&xxx_Proto2_ProtoFile_FileDesc)
+	Proto2_protoFile, err = prototype.NewFile(&xxx_Proto2_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -112,22 +112,22 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Proto2_ProtoFile protoreflect.FileDescriptor
+var Proto2_protoFile protoreflect.FileDescriptor
 
-var xxx_Proto2_ProtoFile_FileDesc = prototype.File{
+var xxx_Proto2_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "proto2/proto2.proto",
 	Package: "goproto.protoc.proto2",
 }
-var xxx_Proto2_ProtoFile_MessageTypes = [1]protoimpl.MessageType{
+var xxx_Proto2_protoFile_MessageTypes = [1]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_Proto2_ProtoFile_MessageDescs[0].Reference(),
+		xxx_Proto2_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Message{new(Message)}
 		},
 	)},
 }
-var xxx_Proto2_ProtoFile_MessageDescs = [1]prototype.Message{
+var xxx_Proto2_protoFile_MessageDescs = [1]prototype.Message{
 	{
 		Name: "Message",
 		Fields: []prototype.Field{
diff --git a/cmd/protoc-gen-go/testdata/proto3/enum.pb.go b/cmd/protoc-gen-go/testdata/proto3/enum.pb.go
index dcb4a9e..c23b399 100644
--- a/cmd/protoc-gen-go/testdata/proto3/enum.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto3/enum.pb.go
@@ -25,7 +25,7 @@
 )
 
 func (e Enum) Type() protoreflect.EnumType {
-	return xxx_Enum_ProtoFile_EnumTypes[0]
+	return xxx_Enum_protoFile_EnumTypes[0]
 }
 func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -70,9 +70,9 @@
 }
 
 func init() {
-	xxx_Enum_ProtoFile_FileDesc.Enums = xxx_Enum_ProtoFile_EnumDescs[0:1]
+	xxx_Enum_protoFile_FileDesc.Enums = xxx_Enum_protoFile_EnumDescs[0:1]
 	var err error
-	Enum_ProtoFile, err = prototype.NewFile(&xxx_Enum_ProtoFile_FileDesc)
+	Enum_protoFile, err = prototype.NewFile(&xxx_Enum_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -80,22 +80,22 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Enum_ProtoFile protoreflect.FileDescriptor
+var Enum_protoFile protoreflect.FileDescriptor
 
-var xxx_Enum_ProtoFile_FileDesc = prototype.File{
+var xxx_Enum_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto3,
 	Path:    "proto3/enum.proto",
 	Package: "goproto.protoc.proto3",
 }
-var xxx_Enum_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
+var xxx_Enum_protoFile_EnumTypes = [1]protoreflect.EnumType{
 	prototype.GoEnum(
-		xxx_Enum_ProtoFile_EnumDescs[0].Reference(),
+		xxx_Enum_protoFile_EnumDescs[0].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enum(n)
 		},
 	),
 }
-var xxx_Enum_ProtoFile_EnumDescs = [1]prototype.Enum{
+var xxx_Enum_protoFile_EnumDescs = [1]prototype.Enum{
 	{
 		Name: "Enum",
 		Values: []prototype.EnumValue{
diff --git a/cmd/protoc-gen-go/testdata/proto3/fields.pb.go b/cmd/protoc-gen-go/testdata/proto3/fields.pb.go
index d534da2..11ecd1e 100644
--- a/cmd/protoc-gen-go/testdata/proto3/fields.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto3/fields.pb.go
@@ -23,7 +23,7 @@
 )
 
 func (e FieldTestMessage_Enum) Type() protoreflect.EnumType {
-	return xxx_Fields_ProtoFile_EnumTypes[0]
+	return xxx_Fields_protoFile_EnumTypes[0]
 }
 func (e FieldTestMessage_Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -94,13 +94,13 @@
 	return xxx_FieldTestMessage{m}
 }
 func (m xxx_FieldTestMessage) Type() protoreflect.MessageType {
-	return xxx_Fields_ProtoFile_MessageTypes[0].Type
+	return xxx_Fields_protoFile_MessageTypes[0].Type
 }
 func (m xxx_FieldTestMessage) KnownFields() protoreflect.KnownFields {
-	return xxx_Fields_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Fields_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_FieldTestMessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Fields_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Fields_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_FieldTestMessage) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -402,13 +402,13 @@
 	return xxx_FieldTestMessage_Message{m}
 }
 func (m xxx_FieldTestMessage_Message) Type() protoreflect.MessageType {
-	return xxx_Fields_ProtoFile_MessageTypes[4].Type
+	return xxx_Fields_protoFile_MessageTypes[4].Type
 }
 func (m xxx_FieldTestMessage_Message) KnownFields() protoreflect.KnownFields {
-	return xxx_Fields_ProtoFile_MessageTypes[4].KnownFieldsOf(m.m)
+	return xxx_Fields_protoFile_MessageTypes[4].KnownFieldsOf(m.m)
 }
 func (m xxx_FieldTestMessage_Message) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Fields_ProtoFile_MessageTypes[4].UnknownFieldsOf(m.m)
+	return xxx_Fields_protoFile_MessageTypes[4].UnknownFieldsOf(m.m)
 }
 func (m xxx_FieldTestMessage_Message) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -506,20 +506,20 @@
 }
 
 func init() {
-	xxx_Fields_ProtoFile_FileDesc.Messages = xxx_Fields_ProtoFile_MessageDescs[0:1]
-	xxx_Fields_ProtoFile_MessageDescs[0].Enums = xxx_Fields_ProtoFile_EnumDescs[0:1]
-	xxx_Fields_ProtoFile_MessageDescs[0].Messages = xxx_Fields_ProtoFile_MessageDescs[1:5]
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[1].EnumType = xxx_Fields_ProtoFile_EnumTypes[0]
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[16].MessageType = xxx_Fields_ProtoFile_MessageTypes[4].Type
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[18].EnumType = xxx_Fields_ProtoFile_EnumTypes[0]
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[33].MessageType = xxx_Fields_ProtoFile_MessageTypes[4].Type
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[34].MessageType = xxx_Fields_ProtoFile_MessageDescs[1].Reference()
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[35].MessageType = xxx_Fields_ProtoFile_MessageDescs[2].Reference()
-	xxx_Fields_ProtoFile_MessageDescs[0].Fields[36].MessageType = xxx_Fields_ProtoFile_MessageDescs[3].Reference()
-	xxx_Fields_ProtoFile_MessageDescs[2].Fields[1].MessageType = xxx_Fields_ProtoFile_MessageTypes[4].Type
-	xxx_Fields_ProtoFile_MessageDescs[3].Fields[1].EnumType = xxx_Fields_ProtoFile_EnumTypes[0]
+	xxx_Fields_protoFile_FileDesc.Messages = xxx_Fields_protoFile_MessageDescs[0:1]
+	xxx_Fields_protoFile_MessageDescs[0].Enums = xxx_Fields_protoFile_EnumDescs[0:1]
+	xxx_Fields_protoFile_MessageDescs[0].Messages = xxx_Fields_protoFile_MessageDescs[1:5]
+	xxx_Fields_protoFile_MessageDescs[0].Fields[1].EnumType = xxx_Fields_protoFile_EnumTypes[0]
+	xxx_Fields_protoFile_MessageDescs[0].Fields[16].MessageType = xxx_Fields_protoFile_MessageTypes[4].Type
+	xxx_Fields_protoFile_MessageDescs[0].Fields[18].EnumType = xxx_Fields_protoFile_EnumTypes[0]
+	xxx_Fields_protoFile_MessageDescs[0].Fields[33].MessageType = xxx_Fields_protoFile_MessageTypes[4].Type
+	xxx_Fields_protoFile_MessageDescs[0].Fields[34].MessageType = xxx_Fields_protoFile_MessageDescs[1].Reference()
+	xxx_Fields_protoFile_MessageDescs[0].Fields[35].MessageType = xxx_Fields_protoFile_MessageDescs[2].Reference()
+	xxx_Fields_protoFile_MessageDescs[0].Fields[36].MessageType = xxx_Fields_protoFile_MessageDescs[3].Reference()
+	xxx_Fields_protoFile_MessageDescs[2].Fields[1].MessageType = xxx_Fields_protoFile_MessageTypes[4].Type
+	xxx_Fields_protoFile_MessageDescs[3].Fields[1].EnumType = xxx_Fields_protoFile_EnumTypes[0]
 	var err error
-	Fields_ProtoFile, err = prototype.NewFile(&xxx_Fields_ProtoFile_FileDesc)
+	Fields_protoFile, err = prototype.NewFile(&xxx_Fields_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -527,22 +527,22 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Fields_ProtoFile protoreflect.FileDescriptor
+var Fields_protoFile protoreflect.FileDescriptor
 
-var xxx_Fields_ProtoFile_FileDesc = prototype.File{
+var xxx_Fields_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto3,
 	Path:    "proto3/fields.proto",
 	Package: "goproto.protoc.proto3",
 }
-var xxx_Fields_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
+var xxx_Fields_protoFile_EnumTypes = [1]protoreflect.EnumType{
 	prototype.GoEnum(
-		xxx_Fields_ProtoFile_EnumDescs[0].Reference(),
+		xxx_Fields_protoFile_EnumDescs[0].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return FieldTestMessage_Enum(n)
 		},
 	),
 }
-var xxx_Fields_ProtoFile_EnumDescs = [1]prototype.Enum{
+var xxx_Fields_protoFile_EnumDescs = [1]prototype.Enum{
 	{
 		Name: "Enum",
 		Values: []prototype.EnumValue{
@@ -550,9 +550,9 @@
 		},
 	},
 }
-var xxx_Fields_ProtoFile_MessageTypes = [5]protoimpl.MessageType{
+var xxx_Fields_protoFile_MessageTypes = [5]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_Fields_ProtoFile_MessageDescs[0].Reference(),
+		xxx_Fields_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_FieldTestMessage{new(FieldTestMessage)}
 		},
@@ -561,13 +561,13 @@
 	{ /* no message type for FieldTestMessage_MapStringMessageEntry */ },
 	{ /* no message type for FieldTestMessage_MapFixed64EnumEntry */ },
 	{Type: prototype.GoMessage(
-		xxx_Fields_ProtoFile_MessageDescs[4].Reference(),
+		xxx_Fields_protoFile_MessageDescs[4].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_FieldTestMessage_Message{new(FieldTestMessage_Message)}
 		},
 	)},
 }
-var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
+var xxx_Fields_protoFile_MessageDescs = [5]prototype.Message{
 	{
 		Name: "FieldTestMessage",
 		Fields: []prototype.Field{
diff --git a/encoding/textpb/testprotos/pb2/test.pb.go b/encoding/textpb/testprotos/pb2/test.pb.go
index 3654e8e..3810398 100644
--- a/encoding/textpb/testprotos/pb2/test.pb.go
+++ b/encoding/textpb/testprotos/pb2/test.pb.go
@@ -32,7 +32,7 @@
 )
 
 func (e Enum) Type() protoreflect.EnumType {
-	return xxx_Test_ProtoFile_EnumTypes[0]
+	return xxx_Test_protoFile_EnumTypes[0]
 }
 func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -84,7 +84,7 @@
 )
 
 func (e Enums_NestedEnum) Type() protoreflect.EnumType {
-	return xxx_Test_ProtoFile_EnumTypes[1]
+	return xxx_Test_protoFile_EnumTypes[1]
 }
 func (e Enums_NestedEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -153,13 +153,13 @@
 	return xxx_Scalars{m}
 }
 func (m xxx_Scalars) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[0].Type
+	return xxx_Test_protoFile_MessageTypes[0].Type
 }
 func (m xxx_Scalars) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_Scalars) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_Scalars) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -317,13 +317,13 @@
 	return xxx_Repeats{m}
 }
 func (m xxx_Repeats) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[1].Type
+	return xxx_Test_protoFile_MessageTypes[1].Type
 }
 func (m xxx_Repeats) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[1].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
 }
 func (m xxx_Repeats) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[1].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
 }
 func (m xxx_Repeats) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -434,13 +434,13 @@
 	return xxx_Enums{m}
 }
 func (m xxx_Enums) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[2].Type
+	return xxx_Test_protoFile_MessageTypes[2].Type
 }
 func (m xxx_Enums) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[2].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[2].KnownFieldsOf(m.m)
 }
 func (m xxx_Enums) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[2].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[2].UnknownFieldsOf(m.m)
 }
 func (m xxx_Enums) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -516,13 +516,13 @@
 	return xxx_Nests{m}
 }
 func (m xxx_Nests) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[3].Type
+	return xxx_Test_protoFile_MessageTypes[3].Type
 }
 func (m xxx_Nests) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[3].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[3].KnownFieldsOf(m.m)
 }
 func (m xxx_Nests) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[3].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[3].UnknownFieldsOf(m.m)
 }
 func (m xxx_Nests) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -596,13 +596,13 @@
 	return xxx_Nested{m}
 }
 func (m xxx_Nested) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[4].Type
+	return xxx_Test_protoFile_MessageTypes[4].Type
 }
 func (m xxx_Nested) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[4].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[4].KnownFieldsOf(m.m)
 }
 func (m xxx_Nested) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[4].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[4].UnknownFieldsOf(m.m)
 }
 func (m xxx_Nested) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -671,13 +671,13 @@
 	return xxx_Requireds{m}
 }
 func (m xxx_Requireds) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[5].Type
+	return xxx_Test_protoFile_MessageTypes[5].Type
 }
 func (m xxx_Requireds) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[5].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[5].KnownFieldsOf(m.m)
 }
 func (m xxx_Requireds) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[5].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[5].UnknownFieldsOf(m.m)
 }
 func (m xxx_Requireds) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -800,13 +800,13 @@
 	return xxx_PartialRequired{m}
 }
 func (m xxx_PartialRequired) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[6].Type
+	return xxx_Test_protoFile_MessageTypes[6].Type
 }
 func (m xxx_PartialRequired) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[6].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[6].KnownFieldsOf(m.m)
 }
 func (m xxx_PartialRequired) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[6].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[6].UnknownFieldsOf(m.m)
 }
 func (m xxx_PartialRequired) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -868,13 +868,13 @@
 	return xxx_Oneofs{m}
 }
 func (m xxx_Oneofs) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[7].Type
+	return xxx_Test_protoFile_MessageTypes[7].Type
 }
 func (m xxx_Oneofs) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[7].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[7].KnownFieldsOf(m.m)
 }
 func (m xxx_Oneofs) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[7].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[7].UnknownFieldsOf(m.m)
 }
 func (m xxx_Oneofs) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -969,13 +969,13 @@
 	return xxx_Maps{m}
 }
 func (m xxx_Maps) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[8].Type
+	return xxx_Test_protoFile_MessageTypes[8].Type
 }
 func (m xxx_Maps) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[8].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[8].KnownFieldsOf(m.m)
 }
 func (m xxx_Maps) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[8].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[8].UnknownFieldsOf(m.m)
 }
 func (m xxx_Maps) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1061,13 +1061,13 @@
 	return xxx_NestedWithRequired{m}
 }
 func (m xxx_NestedWithRequired) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[9].Type
+	return xxx_Test_protoFile_MessageTypes[9].Type
 }
 func (m xxx_NestedWithRequired) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[9].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[9].KnownFieldsOf(m.m)
 }
 func (m xxx_NestedWithRequired) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[9].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[9].UnknownFieldsOf(m.m)
 }
 func (m xxx_NestedWithRequired) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1120,13 +1120,13 @@
 	return xxx_IndirectRequired{m}
 }
 func (m xxx_IndirectRequired) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[10].Type
+	return xxx_Test_protoFile_MessageTypes[10].Type
 }
 func (m xxx_IndirectRequired) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[10].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[10].KnownFieldsOf(m.m)
 }
 func (m xxx_IndirectRequired) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[10].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[10].UnknownFieldsOf(m.m)
 }
 func (m xxx_IndirectRequired) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1194,13 +1194,13 @@
 	return xxx_Extensions{m}
 }
 func (m xxx_Extensions) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[11].Type
+	return xxx_Test_protoFile_MessageTypes[11].Type
 }
 func (m xxx_Extensions) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[11].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[11].KnownFieldsOf(m.m)
 }
 func (m xxx_Extensions) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[11].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[11].UnknownFieldsOf(m.m)
 }
 func (m xxx_Extensions) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1272,13 +1272,13 @@
 	return xxx_ExtensionsContainer{m}
 }
 func (m xxx_ExtensionsContainer) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[12].Type
+	return xxx_Test_protoFile_MessageTypes[12].Type
 }
 func (m xxx_ExtensionsContainer) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[12].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[12].KnownFieldsOf(m.m)
 }
 func (m xxx_ExtensionsContainer) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[12].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[12].UnknownFieldsOf(m.m)
 }
 func (m xxx_ExtensionsContainer) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1322,13 +1322,13 @@
 	return xxx_MessageSet{m}
 }
 func (m xxx_MessageSet) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[13].Type
+	return xxx_Test_protoFile_MessageTypes[13].Type
 }
 func (m xxx_MessageSet) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[13].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[13].KnownFieldsOf(m.m)
 }
 func (m xxx_MessageSet) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[13].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[13].UnknownFieldsOf(m.m)
 }
 func (m xxx_MessageSet) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1380,13 +1380,13 @@
 	return xxx_MessageSetExtension{m}
 }
 func (m xxx_MessageSetExtension) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[14].Type
+	return xxx_Test_protoFile_MessageTypes[14].Type
 }
 func (m xxx_MessageSetExtension) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[14].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[14].KnownFieldsOf(m.m)
 }
 func (m xxx_MessageSetExtension) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[14].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[14].UnknownFieldsOf(m.m)
 }
 func (m xxx_MessageSetExtension) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1453,13 +1453,13 @@
 	return xxx_KnownTypes{m}
 }
 func (m xxx_KnownTypes) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[15].Type
+	return xxx_Test_protoFile_MessageTypes[15].Type
 }
 func (m xxx_KnownTypes) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[15].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[15].KnownFieldsOf(m.m)
 }
 func (m xxx_KnownTypes) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[15].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[15].UnknownFieldsOf(m.m)
 }
 func (m xxx_KnownTypes) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1618,13 +1618,13 @@
 	return xxx_Nests_OptGroup{m}
 }
 func (m xxx_Nests_OptGroup) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[16].Type
+	return xxx_Test_protoFile_MessageTypes[16].Type
 }
 func (m xxx_Nests_OptGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[16].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[16].KnownFieldsOf(m.m)
 }
 func (m xxx_Nests_OptGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[16].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[16].UnknownFieldsOf(m.m)
 }
 func (m xxx_Nests_OptGroup) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1696,13 +1696,13 @@
 	return xxx_Nests_RptGroup{m}
 }
 func (m xxx_Nests_RptGroup) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[17].Type
+	return xxx_Test_protoFile_MessageTypes[17].Type
 }
 func (m xxx_Nests_RptGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[17].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[17].KnownFieldsOf(m.m)
 }
 func (m xxx_Nests_RptGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[17].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[17].UnknownFieldsOf(m.m)
 }
 func (m xxx_Nests_RptGroup) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1755,13 +1755,13 @@
 	return xxx_Nests_OptGroup_OptNestedGroup{m}
 }
 func (m xxx_Nests_OptGroup_OptNestedGroup) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[18].Type
+	return xxx_Test_protoFile_MessageTypes[18].Type
 }
 func (m xxx_Nests_OptGroup_OptNestedGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[18].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[18].KnownFieldsOf(m.m)
 }
 func (m xxx_Nests_OptGroup_OptNestedGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[18].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[18].UnknownFieldsOf(m.m)
 }
 func (m xxx_Nests_OptGroup_OptNestedGroup) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -2128,59 +2128,59 @@
 }
 
 func init() {
-	xxx_Test_ProtoFile_FileDesc.Enums = xxx_Test_ProtoFile_EnumDescs[0:1]
-	xxx_Test_ProtoFile_FileDesc.Messages = xxx_Test_ProtoFile_MessageDescs[0:16]
-	xxx_Test_ProtoFile_MessageDescs[2].Enums = xxx_Test_ProtoFile_EnumDescs[1:2]
-	xxx_Test_ProtoFile_MessageDescs[3].Messages = xxx_Test_ProtoFile_MessageDescs[16:18]
-	xxx_Test_ProtoFile_MessageDescs[8].Messages = xxx_Test_ProtoFile_MessageDescs[19:25]
-	xxx_Test_ProtoFile_MessageDescs[10].Messages = xxx_Test_ProtoFile_MessageDescs[25:26]
-	xxx_Test_ProtoFile_MessageDescs[16].Messages = xxx_Test_ProtoFile_MessageDescs[18:19]
-	xxx_Test_ProtoFile_MessageDescs[2].Fields[0].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
-	xxx_Test_ProtoFile_MessageDescs[2].Fields[1].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
-	xxx_Test_ProtoFile_MessageDescs[2].Fields[2].EnumType = xxx_Test_ProtoFile_EnumTypes[1]
-	xxx_Test_ProtoFile_MessageDescs[2].Fields[3].EnumType = xxx_Test_ProtoFile_EnumTypes[1]
-	xxx_Test_ProtoFile_MessageDescs[3].Fields[0].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
-	xxx_Test_ProtoFile_MessageDescs[3].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[16].Type
-	xxx_Test_ProtoFile_MessageDescs[3].Fields[2].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
-	xxx_Test_ProtoFile_MessageDescs[3].Fields[3].MessageType = xxx_Test_ProtoFile_MessageTypes[17].Type
-	xxx_Test_ProtoFile_MessageDescs[4].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
-	xxx_Test_ProtoFile_MessageDescs[5].Fields[9].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
-	xxx_Test_ProtoFile_MessageDescs[5].Fields[10].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
-	xxx_Test_ProtoFile_MessageDescs[7].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
-	xxx_Test_ProtoFile_MessageDescs[8].Fields[0].MessageType = xxx_Test_ProtoFile_MessageDescs[19].Reference()
-	xxx_Test_ProtoFile_MessageDescs[8].Fields[1].MessageType = xxx_Test_ProtoFile_MessageDescs[20].Reference()
-	xxx_Test_ProtoFile_MessageDescs[8].Fields[2].MessageType = xxx_Test_ProtoFile_MessageDescs[21].Reference()
-	xxx_Test_ProtoFile_MessageDescs[8].Fields[3].MessageType = xxx_Test_ProtoFile_MessageDescs[22].Reference()
-	xxx_Test_ProtoFile_MessageDescs[8].Fields[4].MessageType = xxx_Test_ProtoFile_MessageDescs[23].Reference()
-	xxx_Test_ProtoFile_MessageDescs[8].Fields[5].MessageType = xxx_Test_ProtoFile_MessageDescs[24].Reference()
-	xxx_Test_ProtoFile_MessageDescs[10].Fields[0].MessageType = xxx_Test_ProtoFile_MessageTypes[9].Type
-	xxx_Test_ProtoFile_MessageDescs[10].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[9].Type
-	xxx_Test_ProtoFile_MessageDescs[10].Fields[2].MessageType = xxx_Test_ProtoFile_MessageDescs[25].Reference()
-	xxx_Test_ProtoFile_MessageDescs[15].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*wrappers.BoolValue)(nil))
-	xxx_Test_ProtoFile_MessageDescs[15].Fields[1].MessageType = protoimpl.X.MessageTypeOf((*wrappers.Int32Value)(nil))
-	xxx_Test_ProtoFile_MessageDescs[15].Fields[2].MessageType = protoimpl.X.MessageTypeOf((*wrappers.Int64Value)(nil))
-	xxx_Test_ProtoFile_MessageDescs[15].Fields[3].MessageType = protoimpl.X.MessageTypeOf((*wrappers.UInt32Value)(nil))
-	xxx_Test_ProtoFile_MessageDescs[15].Fields[4].MessageType = protoimpl.X.MessageTypeOf((*wrappers.UInt64Value)(nil))
-	xxx_Test_ProtoFile_MessageDescs[15].Fields[5].MessageType = protoimpl.X.MessageTypeOf((*wrappers.FloatValue)(nil))
-	xxx_Test_ProtoFile_MessageDescs[15].Fields[6].MessageType = protoimpl.X.MessageTypeOf((*wrappers.DoubleValue)(nil))
-	xxx_Test_ProtoFile_MessageDescs[15].Fields[7].MessageType = protoimpl.X.MessageTypeOf((*wrappers.StringValue)(nil))
-	xxx_Test_ProtoFile_MessageDescs[15].Fields[8].MessageType = protoimpl.X.MessageTypeOf((*wrappers.BytesValue)(nil))
-	xxx_Test_ProtoFile_MessageDescs[15].Fields[9].MessageType = protoimpl.X.MessageTypeOf((*duration.Duration)(nil))
-	xxx_Test_ProtoFile_MessageDescs[15].Fields[10].MessageType = protoimpl.X.MessageTypeOf((*timestamp.Timestamp)(nil))
-	xxx_Test_ProtoFile_MessageDescs[15].Fields[11].MessageType = protoimpl.X.MessageTypeOf((*_struct.Struct)(nil))
-	xxx_Test_ProtoFile_MessageDescs[15].Fields[12].MessageType = protoimpl.X.MessageTypeOf((*_struct.ListValue)(nil))
-	xxx_Test_ProtoFile_MessageDescs[15].Fields[13].MessageType = protoimpl.X.MessageTypeOf((*_struct.Value)(nil))
-	xxx_Test_ProtoFile_MessageDescs[15].Fields[14].MessageType = protoimpl.X.MessageTypeOf((*empty.Empty)(nil))
-	xxx_Test_ProtoFile_MessageDescs[15].Fields[15].MessageType = protoimpl.X.MessageTypeOf((*any.Any)(nil))
-	xxx_Test_ProtoFile_MessageDescs[16].Fields[2].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
-	xxx_Test_ProtoFile_MessageDescs[16].Fields[3].MessageType = xxx_Test_ProtoFile_MessageTypes[18].Type
-	xxx_Test_ProtoFile_MessageDescs[18].Fields[0].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
-	xxx_Test_ProtoFile_MessageDescs[22].Fields[1].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
-	xxx_Test_ProtoFile_MessageDescs[23].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
-	xxx_Test_ProtoFile_MessageDescs[24].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[7].Type
-	xxx_Test_ProtoFile_MessageDescs[25].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[9].Type
+	xxx_Test_protoFile_FileDesc.Enums = xxx_Test_protoFile_EnumDescs[0:1]
+	xxx_Test_protoFile_FileDesc.Messages = xxx_Test_protoFile_MessageDescs[0:16]
+	xxx_Test_protoFile_MessageDescs[2].Enums = xxx_Test_protoFile_EnumDescs[1:2]
+	xxx_Test_protoFile_MessageDescs[3].Messages = xxx_Test_protoFile_MessageDescs[16:18]
+	xxx_Test_protoFile_MessageDescs[8].Messages = xxx_Test_protoFile_MessageDescs[19:25]
+	xxx_Test_protoFile_MessageDescs[10].Messages = xxx_Test_protoFile_MessageDescs[25:26]
+	xxx_Test_protoFile_MessageDescs[16].Messages = xxx_Test_protoFile_MessageDescs[18:19]
+	xxx_Test_protoFile_MessageDescs[2].Fields[0].EnumType = xxx_Test_protoFile_EnumTypes[0]
+	xxx_Test_protoFile_MessageDescs[2].Fields[1].EnumType = xxx_Test_protoFile_EnumTypes[0]
+	xxx_Test_protoFile_MessageDescs[2].Fields[2].EnumType = xxx_Test_protoFile_EnumTypes[1]
+	xxx_Test_protoFile_MessageDescs[2].Fields[3].EnumType = xxx_Test_protoFile_EnumTypes[1]
+	xxx_Test_protoFile_MessageDescs[3].Fields[0].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
+	xxx_Test_protoFile_MessageDescs[3].Fields[1].MessageType = xxx_Test_protoFile_MessageTypes[16].Type
+	xxx_Test_protoFile_MessageDescs[3].Fields[2].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
+	xxx_Test_protoFile_MessageDescs[3].Fields[3].MessageType = xxx_Test_protoFile_MessageTypes[17].Type
+	xxx_Test_protoFile_MessageDescs[4].Fields[1].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
+	xxx_Test_protoFile_MessageDescs[5].Fields[9].EnumType = xxx_Test_protoFile_EnumTypes[0]
+	xxx_Test_protoFile_MessageDescs[5].Fields[10].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
+	xxx_Test_protoFile_MessageDescs[7].Fields[1].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
+	xxx_Test_protoFile_MessageDescs[8].Fields[0].MessageType = xxx_Test_protoFile_MessageDescs[19].Reference()
+	xxx_Test_protoFile_MessageDescs[8].Fields[1].MessageType = xxx_Test_protoFile_MessageDescs[20].Reference()
+	xxx_Test_protoFile_MessageDescs[8].Fields[2].MessageType = xxx_Test_protoFile_MessageDescs[21].Reference()
+	xxx_Test_protoFile_MessageDescs[8].Fields[3].MessageType = xxx_Test_protoFile_MessageDescs[22].Reference()
+	xxx_Test_protoFile_MessageDescs[8].Fields[4].MessageType = xxx_Test_protoFile_MessageDescs[23].Reference()
+	xxx_Test_protoFile_MessageDescs[8].Fields[5].MessageType = xxx_Test_protoFile_MessageDescs[24].Reference()
+	xxx_Test_protoFile_MessageDescs[10].Fields[0].MessageType = xxx_Test_protoFile_MessageTypes[9].Type
+	xxx_Test_protoFile_MessageDescs[10].Fields[1].MessageType = xxx_Test_protoFile_MessageTypes[9].Type
+	xxx_Test_protoFile_MessageDescs[10].Fields[2].MessageType = xxx_Test_protoFile_MessageDescs[25].Reference()
+	xxx_Test_protoFile_MessageDescs[15].Fields[0].MessageType = protoimpl.X.MessageTypeOf((*wrappers.BoolValue)(nil))
+	xxx_Test_protoFile_MessageDescs[15].Fields[1].MessageType = protoimpl.X.MessageTypeOf((*wrappers.Int32Value)(nil))
+	xxx_Test_protoFile_MessageDescs[15].Fields[2].MessageType = protoimpl.X.MessageTypeOf((*wrappers.Int64Value)(nil))
+	xxx_Test_protoFile_MessageDescs[15].Fields[3].MessageType = protoimpl.X.MessageTypeOf((*wrappers.UInt32Value)(nil))
+	xxx_Test_protoFile_MessageDescs[15].Fields[4].MessageType = protoimpl.X.MessageTypeOf((*wrappers.UInt64Value)(nil))
+	xxx_Test_protoFile_MessageDescs[15].Fields[5].MessageType = protoimpl.X.MessageTypeOf((*wrappers.FloatValue)(nil))
+	xxx_Test_protoFile_MessageDescs[15].Fields[6].MessageType = protoimpl.X.MessageTypeOf((*wrappers.DoubleValue)(nil))
+	xxx_Test_protoFile_MessageDescs[15].Fields[7].MessageType = protoimpl.X.MessageTypeOf((*wrappers.StringValue)(nil))
+	xxx_Test_protoFile_MessageDescs[15].Fields[8].MessageType = protoimpl.X.MessageTypeOf((*wrappers.BytesValue)(nil))
+	xxx_Test_protoFile_MessageDescs[15].Fields[9].MessageType = protoimpl.X.MessageTypeOf((*duration.Duration)(nil))
+	xxx_Test_protoFile_MessageDescs[15].Fields[10].MessageType = protoimpl.X.MessageTypeOf((*timestamp.Timestamp)(nil))
+	xxx_Test_protoFile_MessageDescs[15].Fields[11].MessageType = protoimpl.X.MessageTypeOf((*_struct.Struct)(nil))
+	xxx_Test_protoFile_MessageDescs[15].Fields[12].MessageType = protoimpl.X.MessageTypeOf((*_struct.ListValue)(nil))
+	xxx_Test_protoFile_MessageDescs[15].Fields[13].MessageType = protoimpl.X.MessageTypeOf((*_struct.Value)(nil))
+	xxx_Test_protoFile_MessageDescs[15].Fields[14].MessageType = protoimpl.X.MessageTypeOf((*empty.Empty)(nil))
+	xxx_Test_protoFile_MessageDescs[15].Fields[15].MessageType = protoimpl.X.MessageTypeOf((*any.Any)(nil))
+	xxx_Test_protoFile_MessageDescs[16].Fields[2].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
+	xxx_Test_protoFile_MessageDescs[16].Fields[3].MessageType = xxx_Test_protoFile_MessageTypes[18].Type
+	xxx_Test_protoFile_MessageDescs[18].Fields[0].EnumType = xxx_Test_protoFile_EnumTypes[0]
+	xxx_Test_protoFile_MessageDescs[22].Fields[1].EnumType = xxx_Test_protoFile_EnumTypes[0]
+	xxx_Test_protoFile_MessageDescs[23].Fields[1].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
+	xxx_Test_protoFile_MessageDescs[24].Fields[1].MessageType = xxx_Test_protoFile_MessageTypes[7].Type
+	xxx_Test_protoFile_MessageDescs[25].Fields[1].MessageType = xxx_Test_protoFile_MessageTypes[9].Type
 	var err error
-	Test_ProtoFile, err = prototype.NewFile(&xxx_Test_ProtoFile_FileDesc)
+	Test_protoFile, err = prototype.NewFile(&xxx_Test_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -2188,9 +2188,9 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Test_ProtoFile protoreflect.FileDescriptor
+var Test_protoFile protoreflect.FileDescriptor
 
-var xxx_Test_ProtoFile_FileDesc = prototype.File{
+var xxx_Test_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "encoding/textpb/testprotos/pb2/test.proto",
 	Package: "pb2",
@@ -2203,21 +2203,21 @@
 		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/wrappers.proto", "google.protobuf")},
 	},
 }
-var xxx_Test_ProtoFile_EnumTypes = [2]protoreflect.EnumType{
+var xxx_Test_protoFile_EnumTypes = [2]protoreflect.EnumType{
 	prototype.GoEnum(
-		xxx_Test_ProtoFile_EnumDescs[0].Reference(),
+		xxx_Test_protoFile_EnumDescs[0].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enum(n)
 		},
 	),
 	prototype.GoEnum(
-		xxx_Test_ProtoFile_EnumDescs[1].Reference(),
+		xxx_Test_protoFile_EnumDescs[1].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enums_NestedEnum(n)
 		},
 	),
 }
-var xxx_Test_ProtoFile_EnumDescs = [2]prototype.Enum{
+var xxx_Test_protoFile_EnumDescs = [2]prototype.Enum{
 	{
 		Name: "Enum",
 		Values: []prototype.EnumValue{
@@ -2236,117 +2236,117 @@
 		},
 	},
 }
-var xxx_Test_ProtoFile_MessageTypes = [26]protoimpl.MessageType{
+var xxx_Test_protoFile_MessageTypes = [26]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[0].Reference(),
+		xxx_Test_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Scalars{new(Scalars)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[1].Reference(),
+		xxx_Test_protoFile_MessageDescs[1].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Repeats{new(Repeats)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[2].Reference(),
+		xxx_Test_protoFile_MessageDescs[2].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Enums{new(Enums)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[3].Reference(),
+		xxx_Test_protoFile_MessageDescs[3].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Nests{new(Nests)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[4].Reference(),
+		xxx_Test_protoFile_MessageDescs[4].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Nested{new(Nested)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[5].Reference(),
+		xxx_Test_protoFile_MessageDescs[5].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Requireds{new(Requireds)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[6].Reference(),
+		xxx_Test_protoFile_MessageDescs[6].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_PartialRequired{new(PartialRequired)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[7].Reference(),
+		xxx_Test_protoFile_MessageDescs[7].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Oneofs{new(Oneofs)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[8].Reference(),
+		xxx_Test_protoFile_MessageDescs[8].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Maps{new(Maps)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[9].Reference(),
+		xxx_Test_protoFile_MessageDescs[9].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_NestedWithRequired{new(NestedWithRequired)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[10].Reference(),
+		xxx_Test_protoFile_MessageDescs[10].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_IndirectRequired{new(IndirectRequired)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[11].Reference(),
+		xxx_Test_protoFile_MessageDescs[11].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Extensions{new(Extensions)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[12].Reference(),
+		xxx_Test_protoFile_MessageDescs[12].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_ExtensionsContainer{new(ExtensionsContainer)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[13].Reference(),
+		xxx_Test_protoFile_MessageDescs[13].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_MessageSet{new(MessageSet)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[14].Reference(),
+		xxx_Test_protoFile_MessageDescs[14].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_MessageSetExtension{new(MessageSetExtension)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[15].Reference(),
+		xxx_Test_protoFile_MessageDescs[15].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_KnownTypes{new(KnownTypes)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[16].Reference(),
+		xxx_Test_protoFile_MessageDescs[16].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Nests_OptGroup{new(Nests_OptGroup)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[17].Reference(),
+		xxx_Test_protoFile_MessageDescs[17].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Nests_RptGroup{new(Nests_RptGroup)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[18].Reference(),
+		xxx_Test_protoFile_MessageDescs[18].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Nests_OptGroup_OptNestedGroup{new(Nests_OptGroup_OptNestedGroup)}
 		},
@@ -2359,7 +2359,7 @@
 	{ /* no message type for Maps_StrToOneofsEntry */ },
 	{ /* no message type for IndirectRequired_StrToNestedEntry */ },
 }
-var xxx_Test_ProtoFile_MessageDescs = [26]prototype.Message{
+var xxx_Test_protoFile_MessageDescs = [26]prototype.Message{
 	{
 		Name: "Scalars",
 		Fields: []prototype.Field{
diff --git a/encoding/textpb/testprotos/pb3/test.pb.go b/encoding/textpb/testprotos/pb3/test.pb.go
index 50a7695..414b9b1 100644
--- a/encoding/textpb/testprotos/pb3/test.pb.go
+++ b/encoding/textpb/testprotos/pb3/test.pb.go
@@ -26,7 +26,7 @@
 )
 
 func (e Enum) Type() protoreflect.EnumType {
-	return xxx_Test_ProtoFile_EnumTypes[0]
+	return xxx_Test_protoFile_EnumTypes[0]
 }
 func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -64,7 +64,7 @@
 )
 
 func (e Enums_NestedEnum) Type() protoreflect.EnumType {
-	return xxx_Test_ProtoFile_EnumTypes[1]
+	return xxx_Test_protoFile_EnumTypes[1]
 }
 func (e Enums_NestedEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -120,13 +120,13 @@
 	return xxx_Scalars{m}
 }
 func (m xxx_Scalars) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[0].Type
+	return xxx_Test_protoFile_MessageTypes[0].Type
 }
 func (m xxx_Scalars) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_Scalars) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_Scalars) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -277,13 +277,13 @@
 	return xxx_Enums{m}
 }
 func (m xxx_Enums) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[1].Type
+	return xxx_Test_protoFile_MessageTypes[1].Type
 }
 func (m xxx_Enums) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[1].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
 }
 func (m xxx_Enums) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[1].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
 }
 func (m xxx_Enums) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -342,13 +342,13 @@
 	return xxx_Nests{m}
 }
 func (m xxx_Nests) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[2].Type
+	return xxx_Test_protoFile_MessageTypes[2].Type
 }
 func (m xxx_Nests) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[2].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[2].KnownFieldsOf(m.m)
 }
 func (m xxx_Nests) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[2].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[2].UnknownFieldsOf(m.m)
 }
 func (m xxx_Nests) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -401,13 +401,13 @@
 	return xxx_Nested{m}
 }
 func (m xxx_Nested) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[3].Type
+	return xxx_Test_protoFile_MessageTypes[3].Type
 }
 func (m xxx_Nested) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[3].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[3].KnownFieldsOf(m.m)
 }
 func (m xxx_Nested) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[3].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[3].UnknownFieldsOf(m.m)
 }
 func (m xxx_Nested) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -499,15 +499,15 @@
 }
 
 func init() {
-	xxx_Test_ProtoFile_FileDesc.Enums = xxx_Test_ProtoFile_EnumDescs[0:1]
-	xxx_Test_ProtoFile_FileDesc.Messages = xxx_Test_ProtoFile_MessageDescs[0:4]
-	xxx_Test_ProtoFile_MessageDescs[1].Enums = xxx_Test_ProtoFile_EnumDescs[1:2]
-	xxx_Test_ProtoFile_MessageDescs[1].Fields[0].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
-	xxx_Test_ProtoFile_MessageDescs[1].Fields[1].EnumType = xxx_Test_ProtoFile_EnumTypes[1]
-	xxx_Test_ProtoFile_MessageDescs[2].Fields[0].MessageType = xxx_Test_ProtoFile_MessageTypes[3].Type
-	xxx_Test_ProtoFile_MessageDescs[3].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[3].Type
+	xxx_Test_protoFile_FileDesc.Enums = xxx_Test_protoFile_EnumDescs[0:1]
+	xxx_Test_protoFile_FileDesc.Messages = xxx_Test_protoFile_MessageDescs[0:4]
+	xxx_Test_protoFile_MessageDescs[1].Enums = xxx_Test_protoFile_EnumDescs[1:2]
+	xxx_Test_protoFile_MessageDescs[1].Fields[0].EnumType = xxx_Test_protoFile_EnumTypes[0]
+	xxx_Test_protoFile_MessageDescs[1].Fields[1].EnumType = xxx_Test_protoFile_EnumTypes[1]
+	xxx_Test_protoFile_MessageDescs[2].Fields[0].MessageType = xxx_Test_protoFile_MessageTypes[3].Type
+	xxx_Test_protoFile_MessageDescs[3].Fields[1].MessageType = xxx_Test_protoFile_MessageTypes[3].Type
 	var err error
-	Test_ProtoFile, err = prototype.NewFile(&xxx_Test_ProtoFile_FileDesc)
+	Test_protoFile, err = prototype.NewFile(&xxx_Test_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -515,28 +515,28 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Test_ProtoFile protoreflect.FileDescriptor
+var Test_protoFile protoreflect.FileDescriptor
 
-var xxx_Test_ProtoFile_FileDesc = prototype.File{
+var xxx_Test_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto3,
 	Path:    "encoding/textpb/testprotos/pb3/test.proto",
 	Package: "pb3",
 }
-var xxx_Test_ProtoFile_EnumTypes = [2]protoreflect.EnumType{
+var xxx_Test_protoFile_EnumTypes = [2]protoreflect.EnumType{
 	prototype.GoEnum(
-		xxx_Test_ProtoFile_EnumDescs[0].Reference(),
+		xxx_Test_protoFile_EnumDescs[0].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enum(n)
 		},
 	),
 	prototype.GoEnum(
-		xxx_Test_ProtoFile_EnumDescs[1].Reference(),
+		xxx_Test_protoFile_EnumDescs[1].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enums_NestedEnum(n)
 		},
 	),
 }
-var xxx_Test_ProtoFile_EnumDescs = [2]prototype.Enum{
+var xxx_Test_protoFile_EnumDescs = [2]prototype.Enum{
 	{
 		Name: "Enum",
 		Values: []prototype.EnumValue{
@@ -556,33 +556,33 @@
 		},
 	},
 }
-var xxx_Test_ProtoFile_MessageTypes = [4]protoimpl.MessageType{
+var xxx_Test_protoFile_MessageTypes = [4]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[0].Reference(),
+		xxx_Test_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Scalars{new(Scalars)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[1].Reference(),
+		xxx_Test_protoFile_MessageDescs[1].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Enums{new(Enums)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[2].Reference(),
+		xxx_Test_protoFile_MessageDescs[2].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Nests{new(Nests)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[3].Reference(),
+		xxx_Test_protoFile_MessageDescs[3].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Nested{new(Nested)}
 		},
 	)},
 }
-var xxx_Test_ProtoFile_MessageDescs = [4]prototype.Message{
+var xxx_Test_protoFile_MessageDescs = [4]prototype.Message{
 	{
 		Name: "Scalars",
 		Fields: []prototype.Field{
diff --git a/internal/testprotos/test/test.pb.go b/internal/testprotos/test/test.pb.go
index 9fb1322..63dab78 100644
--- a/internal/testprotos/test/test.pb.go
+++ b/internal/testprotos/test/test.pb.go
@@ -26,7 +26,7 @@
 )
 
 func (e TestAllTypes_NestedEnum) Type() protoreflect.EnumType {
-	return xxx_Test_ProtoFile_EnumTypes[0]
+	return xxx_Test_protoFile_EnumTypes[0]
 }
 func (e TestAllTypes_NestedEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -145,13 +145,13 @@
 	return xxx_TestAllTypes{m}
 }
 func (m xxx_TestAllTypes) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[0].Type
+	return xxx_Test_protoFile_MessageTypes[0].Type
 }
 func (m xxx_TestAllTypes) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_TestAllTypes) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_TestAllTypes) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -709,13 +709,13 @@
 	return xxx_TestAllExtensions{m}
 }
 func (m xxx_TestAllExtensions) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[1].Type
+	return xxx_Test_protoFile_MessageTypes[1].Type
 }
 func (m xxx_TestAllExtensions) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[1].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
 }
 func (m xxx_TestAllExtensions) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[1].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
 }
 func (m xxx_TestAllExtensions) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -767,13 +767,13 @@
 	return xxx_OptionalGroupExtension{m}
 }
 func (m xxx_OptionalGroupExtension) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[2].Type
+	return xxx_Test_protoFile_MessageTypes[2].Type
 }
 func (m xxx_OptionalGroupExtension) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[2].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[2].KnownFieldsOf(m.m)
 }
 func (m xxx_OptionalGroupExtension) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[2].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[2].UnknownFieldsOf(m.m)
 }
 func (m xxx_OptionalGroupExtension) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -824,13 +824,13 @@
 	return xxx_RepeatedGroupExtension{m}
 }
 func (m xxx_RepeatedGroupExtension) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[3].Type
+	return xxx_Test_protoFile_MessageTypes[3].Type
 }
 func (m xxx_RepeatedGroupExtension) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[3].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[3].KnownFieldsOf(m.m)
 }
 func (m xxx_RepeatedGroupExtension) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[3].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[3].UnknownFieldsOf(m.m)
 }
 func (m xxx_RepeatedGroupExtension) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -882,13 +882,13 @@
 	return xxx_TestAllTypes_NestedMessage{m}
 }
 func (m xxx_TestAllTypes_NestedMessage) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[4].Type
+	return xxx_Test_protoFile_MessageTypes[4].Type
 }
 func (m xxx_TestAllTypes_NestedMessage) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[4].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[4].KnownFieldsOf(m.m)
 }
 func (m xxx_TestAllTypes_NestedMessage) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[4].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[4].UnknownFieldsOf(m.m)
 }
 func (m xxx_TestAllTypes_NestedMessage) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -946,13 +946,13 @@
 	return xxx_TestAllTypes_OptionalGroup{m}
 }
 func (m xxx_TestAllTypes_OptionalGroup) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[5].Type
+	return xxx_Test_protoFile_MessageTypes[5].Type
 }
 func (m xxx_TestAllTypes_OptionalGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[5].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[5].KnownFieldsOf(m.m)
 }
 func (m xxx_TestAllTypes_OptionalGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[5].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[5].UnknownFieldsOf(m.m)
 }
 func (m xxx_TestAllTypes_OptionalGroup) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1003,13 +1003,13 @@
 	return xxx_TestAllTypes_RepeatedGroup{m}
 }
 func (m xxx_TestAllTypes_RepeatedGroup) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[6].Type
+	return xxx_Test_protoFile_MessageTypes[6].Type
 }
 func (m xxx_TestAllTypes_RepeatedGroup) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[6].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[6].KnownFieldsOf(m.m)
 }
 func (m xxx_TestAllTypes_RepeatedGroup) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[6].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[6].UnknownFieldsOf(m.m)
 }
 func (m xxx_TestAllTypes_RepeatedGroup) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1567,39 +1567,39 @@
 }
 
 func init() {
-	xxx_Test_ProtoFile_FileDesc.Messages = xxx_Test_ProtoFile_MessageDescs[0:4]
-	xxx_Test_ProtoFile_MessageDescs[0].Enums = xxx_Test_ProtoFile_EnumDescs[0:1]
-	xxx_Test_ProtoFile_MessageDescs[0].Messages = xxx_Test_ProtoFile_MessageDescs[4:24]
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[15].MessageType = xxx_Test_ProtoFile_MessageTypes[5].Type
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[16].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[17].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[33].MessageType = xxx_Test_ProtoFile_MessageTypes[6].Type
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[34].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[35].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[36].MessageType = xxx_Test_ProtoFile_MessageDescs[7].Reference()
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[37].MessageType = xxx_Test_ProtoFile_MessageDescs[8].Reference()
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[38].MessageType = xxx_Test_ProtoFile_MessageDescs[9].Reference()
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[39].MessageType = xxx_Test_ProtoFile_MessageDescs[10].Reference()
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[40].MessageType = xxx_Test_ProtoFile_MessageDescs[11].Reference()
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[41].MessageType = xxx_Test_ProtoFile_MessageDescs[12].Reference()
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[42].MessageType = xxx_Test_ProtoFile_MessageDescs[13].Reference()
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[43].MessageType = xxx_Test_ProtoFile_MessageDescs[14].Reference()
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[44].MessageType = xxx_Test_ProtoFile_MessageDescs[15].Reference()
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[45].MessageType = xxx_Test_ProtoFile_MessageDescs[16].Reference()
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[46].MessageType = xxx_Test_ProtoFile_MessageDescs[17].Reference()
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[47].MessageType = xxx_Test_ProtoFile_MessageDescs[18].Reference()
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[48].MessageType = xxx_Test_ProtoFile_MessageDescs[19].Reference()
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[49].MessageType = xxx_Test_ProtoFile_MessageDescs[20].Reference()
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[50].MessageType = xxx_Test_ProtoFile_MessageDescs[21].Reference()
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[51].MessageType = xxx_Test_ProtoFile_MessageDescs[22].Reference()
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[52].MessageType = xxx_Test_ProtoFile_MessageDescs[23].Reference()
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[54].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
-	xxx_Test_ProtoFile_MessageDescs[0].Fields[61].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
-	xxx_Test_ProtoFile_MessageDescs[4].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[0].Type
-	xxx_Test_ProtoFile_MessageDescs[22].Fields[1].MessageType = xxx_Test_ProtoFile_MessageTypes[4].Type
-	xxx_Test_ProtoFile_MessageDescs[23].Fields[1].EnumType = xxx_Test_ProtoFile_EnumTypes[0]
+	xxx_Test_protoFile_FileDesc.Messages = xxx_Test_protoFile_MessageDescs[0:4]
+	xxx_Test_protoFile_MessageDescs[0].Enums = xxx_Test_protoFile_EnumDescs[0:1]
+	xxx_Test_protoFile_MessageDescs[0].Messages = xxx_Test_protoFile_MessageDescs[4:24]
+	xxx_Test_protoFile_MessageDescs[0].Fields[15].MessageType = xxx_Test_protoFile_MessageTypes[5].Type
+	xxx_Test_protoFile_MessageDescs[0].Fields[16].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
+	xxx_Test_protoFile_MessageDescs[0].Fields[17].EnumType = xxx_Test_protoFile_EnumTypes[0]
+	xxx_Test_protoFile_MessageDescs[0].Fields[33].MessageType = xxx_Test_protoFile_MessageTypes[6].Type
+	xxx_Test_protoFile_MessageDescs[0].Fields[34].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
+	xxx_Test_protoFile_MessageDescs[0].Fields[35].EnumType = xxx_Test_protoFile_EnumTypes[0]
+	xxx_Test_protoFile_MessageDescs[0].Fields[36].MessageType = xxx_Test_protoFile_MessageDescs[7].Reference()
+	xxx_Test_protoFile_MessageDescs[0].Fields[37].MessageType = xxx_Test_protoFile_MessageDescs[8].Reference()
+	xxx_Test_protoFile_MessageDescs[0].Fields[38].MessageType = xxx_Test_protoFile_MessageDescs[9].Reference()
+	xxx_Test_protoFile_MessageDescs[0].Fields[39].MessageType = xxx_Test_protoFile_MessageDescs[10].Reference()
+	xxx_Test_protoFile_MessageDescs[0].Fields[40].MessageType = xxx_Test_protoFile_MessageDescs[11].Reference()
+	xxx_Test_protoFile_MessageDescs[0].Fields[41].MessageType = xxx_Test_protoFile_MessageDescs[12].Reference()
+	xxx_Test_protoFile_MessageDescs[0].Fields[42].MessageType = xxx_Test_protoFile_MessageDescs[13].Reference()
+	xxx_Test_protoFile_MessageDescs[0].Fields[43].MessageType = xxx_Test_protoFile_MessageDescs[14].Reference()
+	xxx_Test_protoFile_MessageDescs[0].Fields[44].MessageType = xxx_Test_protoFile_MessageDescs[15].Reference()
+	xxx_Test_protoFile_MessageDescs[0].Fields[45].MessageType = xxx_Test_protoFile_MessageDescs[16].Reference()
+	xxx_Test_protoFile_MessageDescs[0].Fields[46].MessageType = xxx_Test_protoFile_MessageDescs[17].Reference()
+	xxx_Test_protoFile_MessageDescs[0].Fields[47].MessageType = xxx_Test_protoFile_MessageDescs[18].Reference()
+	xxx_Test_protoFile_MessageDescs[0].Fields[48].MessageType = xxx_Test_protoFile_MessageDescs[19].Reference()
+	xxx_Test_protoFile_MessageDescs[0].Fields[49].MessageType = xxx_Test_protoFile_MessageDescs[20].Reference()
+	xxx_Test_protoFile_MessageDescs[0].Fields[50].MessageType = xxx_Test_protoFile_MessageDescs[21].Reference()
+	xxx_Test_protoFile_MessageDescs[0].Fields[51].MessageType = xxx_Test_protoFile_MessageDescs[22].Reference()
+	xxx_Test_protoFile_MessageDescs[0].Fields[52].MessageType = xxx_Test_protoFile_MessageDescs[23].Reference()
+	xxx_Test_protoFile_MessageDescs[0].Fields[54].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
+	xxx_Test_protoFile_MessageDescs[0].Fields[61].EnumType = xxx_Test_protoFile_EnumTypes[0]
+	xxx_Test_protoFile_MessageDescs[4].Fields[1].MessageType = xxx_Test_protoFile_MessageTypes[0].Type
+	xxx_Test_protoFile_MessageDescs[22].Fields[1].MessageType = xxx_Test_protoFile_MessageTypes[4].Type
+	xxx_Test_protoFile_MessageDescs[23].Fields[1].EnumType = xxx_Test_protoFile_EnumTypes[0]
 	var err error
-	Test_ProtoFile, err = prototype.NewFile(&xxx_Test_ProtoFile_FileDesc)
+	Test_protoFile, err = prototype.NewFile(&xxx_Test_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -1607,22 +1607,22 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Test_ProtoFile protoreflect.FileDescriptor
+var Test_protoFile protoreflect.FileDescriptor
 
-var xxx_Test_ProtoFile_FileDesc = prototype.File{
+var xxx_Test_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "test.proto",
 	Package: "goproto.proto.test",
 }
-var xxx_Test_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
+var xxx_Test_protoFile_EnumTypes = [1]protoreflect.EnumType{
 	prototype.GoEnum(
-		xxx_Test_ProtoFile_EnumDescs[0].Reference(),
+		xxx_Test_protoFile_EnumDescs[0].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return TestAllTypes_NestedEnum(n)
 		},
 	),
 }
-var xxx_Test_ProtoFile_EnumDescs = [1]prototype.Enum{
+var xxx_Test_protoFile_EnumDescs = [1]prototype.Enum{
 	{
 		Name: "NestedEnum",
 		Values: []prototype.EnumValue{
@@ -1633,45 +1633,45 @@
 		},
 	},
 }
-var xxx_Test_ProtoFile_MessageTypes = [24]protoimpl.MessageType{
+var xxx_Test_protoFile_MessageTypes = [24]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[0].Reference(),
+		xxx_Test_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_TestAllTypes{new(TestAllTypes)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[1].Reference(),
+		xxx_Test_protoFile_MessageDescs[1].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_TestAllExtensions{new(TestAllExtensions)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[2].Reference(),
+		xxx_Test_protoFile_MessageDescs[2].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_OptionalGroupExtension{new(OptionalGroupExtension)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[3].Reference(),
+		xxx_Test_protoFile_MessageDescs[3].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_RepeatedGroupExtension{new(RepeatedGroupExtension)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[4].Reference(),
+		xxx_Test_protoFile_MessageDescs[4].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_TestAllTypes_NestedMessage{new(TestAllTypes_NestedMessage)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[5].Reference(),
+		xxx_Test_protoFile_MessageDescs[5].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_TestAllTypes_OptionalGroup{new(TestAllTypes_OptionalGroup)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[6].Reference(),
+		xxx_Test_protoFile_MessageDescs[6].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_TestAllTypes_RepeatedGroup{new(TestAllTypes_RepeatedGroup)}
 		},
@@ -1694,7 +1694,7 @@
 	{ /* no message type for TestAllTypes_MapStringNestedMessageEntry */ },
 	{ /* no message type for TestAllTypes_MapStringNestedEnumEntry */ },
 }
-var xxx_Test_ProtoFile_MessageDescs = [24]prototype.Message{
+var xxx_Test_protoFile_MessageDescs = [24]prototype.Message{
 	{
 		Name: "TestAllTypes",
 		Fields: []prototype.Field{
diff --git a/protogen/protogen.go b/protogen/protogen.go
index eb89cfa..3f2a92e 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:       camelCase(cleanGoName(path.Base(prefix), true)) + "_protoFile",
 		GoImportPath: f.GoImportPath,
 	}
 	f.GeneratedFilenamePrefix = prefix
diff --git a/reflect/protoregistry/testprotos/test.pb.go b/reflect/protoregistry/testprotos/test.pb.go
index cd8d832..15ef3ce 100644
--- a/reflect/protoregistry/testprotos/test.pb.go
+++ b/reflect/protoregistry/testprotos/test.pb.go
@@ -23,7 +23,7 @@
 )
 
 func (e Enum1) Type() protoreflect.EnumType {
-	return xxx_Test_ProtoFile_EnumTypes[0]
+	return xxx_Test_protoFile_EnumTypes[0]
 }
 func (e Enum1) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -67,7 +67,7 @@
 )
 
 func (e Enum2) Type() protoreflect.EnumType {
-	return xxx_Test_ProtoFile_EnumTypes[1]
+	return xxx_Test_protoFile_EnumTypes[1]
 }
 func (e Enum2) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -111,7 +111,7 @@
 )
 
 func (e Enum3) Type() protoreflect.EnumType {
-	return xxx_Test_ProtoFile_EnumTypes[2]
+	return xxx_Test_protoFile_EnumTypes[2]
 }
 func (e Enum3) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -161,13 +161,13 @@
 	return xxx_Message1{m}
 }
 func (m xxx_Message1) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[0].Type
+	return xxx_Test_protoFile_MessageTypes[0].Type
 }
 func (m xxx_Message1) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_Message1) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_Message1) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -218,13 +218,13 @@
 	return xxx_Message2{m}
 }
 func (m xxx_Message2) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[1].Type
+	return xxx_Test_protoFile_MessageTypes[1].Type
 }
 func (m xxx_Message2) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[1].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
 }
 func (m xxx_Message2) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[1].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
 }
 func (m xxx_Message2) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -267,13 +267,13 @@
 	return xxx_Message3{m}
 }
 func (m xxx_Message3) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[2].Type
+	return xxx_Test_protoFile_MessageTypes[2].Type
 }
 func (m xxx_Message3) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[2].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[2].KnownFieldsOf(m.m)
 }
 func (m xxx_Message3) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[2].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[2].UnknownFieldsOf(m.m)
 }
 func (m xxx_Message3) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -317,13 +317,13 @@
 	return xxx_Message4{m}
 }
 func (m xxx_Message4) Type() protoreflect.MessageType {
-	return xxx_Test_ProtoFile_MessageTypes[3].Type
+	return xxx_Test_protoFile_MessageTypes[3].Type
 }
 func (m xxx_Message4) KnownFields() protoreflect.KnownFields {
-	return xxx_Test_ProtoFile_MessageTypes[3].KnownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[3].KnownFieldsOf(m.m)
 }
 func (m xxx_Message4) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Test_ProtoFile_MessageTypes[3].UnknownFieldsOf(m.m)
+	return xxx_Test_protoFile_MessageTypes[3].UnknownFieldsOf(m.m)
 }
 func (m xxx_Message4) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -456,10 +456,10 @@
 }
 
 func init() {
-	xxx_Test_ProtoFile_FileDesc.Enums = xxx_Test_ProtoFile_EnumDescs[0:3]
-	xxx_Test_ProtoFile_FileDesc.Messages = xxx_Test_ProtoFile_MessageDescs[0:4]
+	xxx_Test_protoFile_FileDesc.Enums = xxx_Test_protoFile_EnumDescs[0:3]
+	xxx_Test_protoFile_FileDesc.Messages = xxx_Test_protoFile_MessageDescs[0:4]
 	var err error
-	Test_ProtoFile, err = prototype.NewFile(&xxx_Test_ProtoFile_FileDesc)
+	Test_protoFile, err = prototype.NewFile(&xxx_Test_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -467,34 +467,34 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Test_ProtoFile protoreflect.FileDescriptor
+var Test_protoFile protoreflect.FileDescriptor
 
-var xxx_Test_ProtoFile_FileDesc = prototype.File{
+var xxx_Test_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "reflect/protoregistry/testprotos/test.proto",
 	Package: "testprotos",
 }
-var xxx_Test_ProtoFile_EnumTypes = [3]protoreflect.EnumType{
+var xxx_Test_protoFile_EnumTypes = [3]protoreflect.EnumType{
 	prototype.GoEnum(
-		xxx_Test_ProtoFile_EnumDescs[0].Reference(),
+		xxx_Test_protoFile_EnumDescs[0].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enum1(n)
 		},
 	),
 	prototype.GoEnum(
-		xxx_Test_ProtoFile_EnumDescs[1].Reference(),
+		xxx_Test_protoFile_EnumDescs[1].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enum2(n)
 		},
 	),
 	prototype.GoEnum(
-		xxx_Test_ProtoFile_EnumDescs[2].Reference(),
+		xxx_Test_protoFile_EnumDescs[2].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enum3(n)
 		},
 	),
 }
-var xxx_Test_ProtoFile_EnumDescs = [3]prototype.Enum{
+var xxx_Test_protoFile_EnumDescs = [3]prototype.Enum{
 	{
 		Name: "Enum1",
 		Values: []prototype.EnumValue{
@@ -514,33 +514,33 @@
 		},
 	},
 }
-var xxx_Test_ProtoFile_MessageTypes = [4]protoimpl.MessageType{
+var xxx_Test_protoFile_MessageTypes = [4]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[0].Reference(),
+		xxx_Test_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Message1{new(Message1)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[1].Reference(),
+		xxx_Test_protoFile_MessageDescs[1].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Message2{new(Message2)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[2].Reference(),
+		xxx_Test_protoFile_MessageDescs[2].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Message3{new(Message3)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Test_ProtoFile_MessageDescs[3].Reference(),
+		xxx_Test_protoFile_MessageDescs[3].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Message4{new(Message4)}
 		},
 	)},
 }
-var xxx_Test_ProtoFile_MessageDescs = [4]prototype.Message{
+var xxx_Test_protoFile_MessageDescs = [4]prototype.Message{
 	{
 		Name:            "Message1",
 		ExtensionRanges: [][2]protoreflect.FieldNumber{{10, 536870912}},
diff --git a/types/descriptor/descriptor.pb.go b/types/descriptor/descriptor.pb.go
index becf9c9..9ce6d29 100644
--- a/types/descriptor/descriptor.pb.go
+++ b/types/descriptor/descriptor.pb.go
@@ -45,7 +45,7 @@
 )
 
 func (e FieldDescriptorProto_Type) Type() protoreflect.EnumType {
-	return xxx_Descriptor_ProtoFile_EnumTypes[0]
+	return xxx_Descriptor_protoFile_EnumTypes[0]
 }
 func (e FieldDescriptorProto_Type) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -126,7 +126,7 @@
 )
 
 func (e FieldDescriptorProto_Label) Type() protoreflect.EnumType {
-	return xxx_Descriptor_ProtoFile_EnumTypes[1]
+	return xxx_Descriptor_protoFile_EnumTypes[1]
 }
 func (e FieldDescriptorProto_Label) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -178,7 +178,7 @@
 )
 
 func (e FileOptions_OptimizeMode) Type() protoreflect.EnumType {
-	return xxx_Descriptor_ProtoFile_EnumTypes[2]
+	return xxx_Descriptor_protoFile_EnumTypes[2]
 }
 func (e FileOptions_OptimizeMode) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -229,7 +229,7 @@
 )
 
 func (e FieldOptions_CType) Type() protoreflect.EnumType {
-	return xxx_Descriptor_ProtoFile_EnumTypes[3]
+	return xxx_Descriptor_protoFile_EnumTypes[3]
 }
 func (e FieldOptions_CType) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -282,7 +282,7 @@
 )
 
 func (e FieldOptions_JSType) Type() protoreflect.EnumType {
-	return xxx_Descriptor_ProtoFile_EnumTypes[4]
+	return xxx_Descriptor_protoFile_EnumTypes[4]
 }
 func (e FieldOptions_JSType) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -335,7 +335,7 @@
 )
 
 func (e MethodOptions_IdempotencyLevel) Type() protoreflect.EnumType {
-	return xxx_Descriptor_ProtoFile_EnumTypes[5]
+	return xxx_Descriptor_protoFile_EnumTypes[5]
 }
 func (e MethodOptions_IdempotencyLevel) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
@@ -391,13 +391,13 @@
 	return xxx_FileDescriptorSet{m}
 }
 func (m xxx_FileDescriptorSet) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[0].Type
+	return xxx_Descriptor_protoFile_MessageTypes[0].Type
 }
 func (m xxx_FileDescriptorSet) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_FileDescriptorSet) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_FileDescriptorSet) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -453,13 +453,13 @@
 	return xxx_FileDescriptorProto{m}
 }
 func (m xxx_FileDescriptorProto) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[1].Type
+	return xxx_Descriptor_protoFile_MessageTypes[1].Type
 }
 func (m xxx_FileDescriptorProto) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[1].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
 }
 func (m xxx_FileDescriptorProto) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[1].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
 }
 func (m xxx_FileDescriptorProto) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -581,13 +581,13 @@
 	return xxx_DescriptorProto{m}
 }
 func (m xxx_DescriptorProto) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[2].Type
+	return xxx_Descriptor_protoFile_MessageTypes[2].Type
 }
 func (m xxx_DescriptorProto) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[2].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[2].KnownFieldsOf(m.m)
 }
 func (m xxx_DescriptorProto) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[2].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[2].UnknownFieldsOf(m.m)
 }
 func (m xxx_DescriptorProto) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -685,13 +685,13 @@
 	return xxx_ExtensionRangeOptions{m}
 }
 func (m xxx_ExtensionRangeOptions) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[3].Type
+	return xxx_Descriptor_protoFile_MessageTypes[3].Type
 }
 func (m xxx_ExtensionRangeOptions) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[3].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[3].KnownFieldsOf(m.m)
 }
 func (m xxx_ExtensionRangeOptions) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[3].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[3].UnknownFieldsOf(m.m)
 }
 func (m xxx_ExtensionRangeOptions) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -762,13 +762,13 @@
 	return xxx_FieldDescriptorProto{m}
 }
 func (m xxx_FieldDescriptorProto) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[4].Type
+	return xxx_Descriptor_protoFile_MessageTypes[4].Type
 }
 func (m xxx_FieldDescriptorProto) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[4].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[4].KnownFieldsOf(m.m)
 }
 func (m xxx_FieldDescriptorProto) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[4].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[4].UnknownFieldsOf(m.m)
 }
 func (m xxx_FieldDescriptorProto) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -866,13 +866,13 @@
 	return xxx_OneofDescriptorProto{m}
 }
 func (m xxx_OneofDescriptorProto) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[5].Type
+	return xxx_Descriptor_protoFile_MessageTypes[5].Type
 }
 func (m xxx_OneofDescriptorProto) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[5].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[5].KnownFieldsOf(m.m)
 }
 func (m xxx_OneofDescriptorProto) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[5].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[5].UnknownFieldsOf(m.m)
 }
 func (m xxx_OneofDescriptorProto) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -922,13 +922,13 @@
 	return xxx_EnumDescriptorProto{m}
 }
 func (m xxx_EnumDescriptorProto) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[6].Type
+	return xxx_Descriptor_protoFile_MessageTypes[6].Type
 }
 func (m xxx_EnumDescriptorProto) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[6].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[6].KnownFieldsOf(m.m)
 }
 func (m xxx_EnumDescriptorProto) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[6].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[6].UnknownFieldsOf(m.m)
 }
 func (m xxx_EnumDescriptorProto) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -992,13 +992,13 @@
 	return xxx_EnumValueDescriptorProto{m}
 }
 func (m xxx_EnumValueDescriptorProto) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[7].Type
+	return xxx_Descriptor_protoFile_MessageTypes[7].Type
 }
 func (m xxx_EnumValueDescriptorProto) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[7].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[7].KnownFieldsOf(m.m)
 }
 func (m xxx_EnumValueDescriptorProto) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[7].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[7].UnknownFieldsOf(m.m)
 }
 func (m xxx_EnumValueDescriptorProto) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1048,13 +1048,13 @@
 	return xxx_ServiceDescriptorProto{m}
 }
 func (m xxx_ServiceDescriptorProto) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[8].Type
+	return xxx_Descriptor_protoFile_MessageTypes[8].Type
 }
 func (m xxx_ServiceDescriptorProto) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[8].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[8].KnownFieldsOf(m.m)
 }
 func (m xxx_ServiceDescriptorProto) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[8].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[8].UnknownFieldsOf(m.m)
 }
 func (m xxx_ServiceDescriptorProto) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1111,13 +1111,13 @@
 	return xxx_MethodDescriptorProto{m}
 }
 func (m xxx_MethodDescriptorProto) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[9].Type
+	return xxx_Descriptor_protoFile_MessageTypes[9].Type
 }
 func (m xxx_MethodDescriptorProto) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[9].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[9].KnownFieldsOf(m.m)
 }
 func (m xxx_MethodDescriptorProto) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[9].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[9].UnknownFieldsOf(m.m)
 }
 func (m xxx_MethodDescriptorProto) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1272,13 +1272,13 @@
 	return xxx_FileOptions{m}
 }
 func (m xxx_FileOptions) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[10].Type
+	return xxx_Descriptor_protoFile_MessageTypes[10].Type
 }
 func (m xxx_FileOptions) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[10].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[10].KnownFieldsOf(m.m)
 }
 func (m xxx_FileOptions) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[10].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[10].UnknownFieldsOf(m.m)
 }
 func (m xxx_FileOptions) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1522,13 +1522,13 @@
 	return xxx_MessageOptions{m}
 }
 func (m xxx_MessageOptions) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[11].Type
+	return xxx_Descriptor_protoFile_MessageTypes[11].Type
 }
 func (m xxx_MessageOptions) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[11].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[11].KnownFieldsOf(m.m)
 }
 func (m xxx_MessageOptions) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[11].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[11].UnknownFieldsOf(m.m)
 }
 func (m xxx_MessageOptions) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1662,13 +1662,13 @@
 	return xxx_FieldOptions{m}
 }
 func (m xxx_FieldOptions) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[12].Type
+	return xxx_Descriptor_protoFile_MessageTypes[12].Type
 }
 func (m xxx_FieldOptions) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[12].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[12].KnownFieldsOf(m.m)
 }
 func (m xxx_FieldOptions) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[12].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[12].UnknownFieldsOf(m.m)
 }
 func (m xxx_FieldOptions) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1759,13 +1759,13 @@
 	return xxx_OneofOptions{m}
 }
 func (m xxx_OneofOptions) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[13].Type
+	return xxx_Descriptor_protoFile_MessageTypes[13].Type
 }
 func (m xxx_OneofOptions) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[13].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[13].KnownFieldsOf(m.m)
 }
 func (m xxx_OneofOptions) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[13].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[13].UnknownFieldsOf(m.m)
 }
 func (m xxx_OneofOptions) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1816,13 +1816,13 @@
 	return xxx_EnumOptions{m}
 }
 func (m xxx_EnumOptions) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[14].Type
+	return xxx_Descriptor_protoFile_MessageTypes[14].Type
 }
 func (m xxx_EnumOptions) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[14].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[14].KnownFieldsOf(m.m)
 }
 func (m xxx_EnumOptions) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[14].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[14].UnknownFieldsOf(m.m)
 }
 func (m xxx_EnumOptions) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1886,13 +1886,13 @@
 	return xxx_EnumValueOptions{m}
 }
 func (m xxx_EnumValueOptions) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[15].Type
+	return xxx_Descriptor_protoFile_MessageTypes[15].Type
 }
 func (m xxx_EnumValueOptions) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[15].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[15].KnownFieldsOf(m.m)
 }
 func (m xxx_EnumValueOptions) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[15].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[15].UnknownFieldsOf(m.m)
 }
 func (m xxx_EnumValueOptions) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -1949,13 +1949,13 @@
 	return xxx_ServiceOptions{m}
 }
 func (m xxx_ServiceOptions) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[16].Type
+	return xxx_Descriptor_protoFile_MessageTypes[16].Type
 }
 func (m xxx_ServiceOptions) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[16].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[16].KnownFieldsOf(m.m)
 }
 func (m xxx_ServiceOptions) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[16].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[16].UnknownFieldsOf(m.m)
 }
 func (m xxx_ServiceOptions) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -2013,13 +2013,13 @@
 	return xxx_MethodOptions{m}
 }
 func (m xxx_MethodOptions) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[17].Type
+	return xxx_Descriptor_protoFile_MessageTypes[17].Type
 }
 func (m xxx_MethodOptions) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[17].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[17].KnownFieldsOf(m.m)
 }
 func (m xxx_MethodOptions) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[17].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[17].UnknownFieldsOf(m.m)
 }
 func (m xxx_MethodOptions) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -2091,13 +2091,13 @@
 	return xxx_UninterpretedOption{m}
 }
 func (m xxx_UninterpretedOption) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[18].Type
+	return xxx_Descriptor_protoFile_MessageTypes[18].Type
 }
 func (m xxx_UninterpretedOption) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[18].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[18].KnownFieldsOf(m.m)
 }
 func (m xxx_UninterpretedOption) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[18].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[18].UnknownFieldsOf(m.m)
 }
 func (m xxx_UninterpretedOption) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -2217,13 +2217,13 @@
 	return xxx_SourceCodeInfo{m}
 }
 func (m xxx_SourceCodeInfo) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[19].Type
+	return xxx_Descriptor_protoFile_MessageTypes[19].Type
 }
 func (m xxx_SourceCodeInfo) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[19].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[19].KnownFieldsOf(m.m)
 }
 func (m xxx_SourceCodeInfo) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[19].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[19].UnknownFieldsOf(m.m)
 }
 func (m xxx_SourceCodeInfo) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -2261,13 +2261,13 @@
 	return xxx_GeneratedCodeInfo{m}
 }
 func (m xxx_GeneratedCodeInfo) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[20].Type
+	return xxx_Descriptor_protoFile_MessageTypes[20].Type
 }
 func (m xxx_GeneratedCodeInfo) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[20].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[20].KnownFieldsOf(m.m)
 }
 func (m xxx_GeneratedCodeInfo) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[20].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[20].UnknownFieldsOf(m.m)
 }
 func (m xxx_GeneratedCodeInfo) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -2304,13 +2304,13 @@
 	return xxx_DescriptorProto_ExtensionRange{m}
 }
 func (m xxx_DescriptorProto_ExtensionRange) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[21].Type
+	return xxx_Descriptor_protoFile_MessageTypes[21].Type
 }
 func (m xxx_DescriptorProto_ExtensionRange) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[21].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[21].KnownFieldsOf(m.m)
 }
 func (m xxx_DescriptorProto_ExtensionRange) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[21].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[21].UnknownFieldsOf(m.m)
 }
 func (m xxx_DescriptorProto_ExtensionRange) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -2363,13 +2363,13 @@
 	return xxx_DescriptorProto_ReservedRange{m}
 }
 func (m xxx_DescriptorProto_ReservedRange) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[22].Type
+	return xxx_Descriptor_protoFile_MessageTypes[22].Type
 }
 func (m xxx_DescriptorProto_ReservedRange) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[22].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[22].KnownFieldsOf(m.m)
 }
 func (m xxx_DescriptorProto_ReservedRange) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[22].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[22].UnknownFieldsOf(m.m)
 }
 func (m xxx_DescriptorProto_ReservedRange) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -2418,13 +2418,13 @@
 	return xxx_EnumDescriptorProto_EnumReservedRange{m}
 }
 func (m xxx_EnumDescriptorProto_EnumReservedRange) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[23].Type
+	return xxx_Descriptor_protoFile_MessageTypes[23].Type
 }
 func (m xxx_EnumDescriptorProto_EnumReservedRange) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[23].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[23].KnownFieldsOf(m.m)
 }
 func (m xxx_EnumDescriptorProto_EnumReservedRange) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[23].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[23].UnknownFieldsOf(m.m)
 }
 func (m xxx_EnumDescriptorProto_EnumReservedRange) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -2470,13 +2470,13 @@
 	return xxx_UninterpretedOption_NamePart{m}
 }
 func (m xxx_UninterpretedOption_NamePart) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[24].Type
+	return xxx_Descriptor_protoFile_MessageTypes[24].Type
 }
 func (m xxx_UninterpretedOption_NamePart) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[24].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[24].KnownFieldsOf(m.m)
 }
 func (m xxx_UninterpretedOption_NamePart) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[24].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[24].UnknownFieldsOf(m.m)
 }
 func (m xxx_UninterpretedOption_NamePart) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -2595,13 +2595,13 @@
 	return xxx_SourceCodeInfo_Location{m}
 }
 func (m xxx_SourceCodeInfo_Location) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[25].Type
+	return xxx_Descriptor_protoFile_MessageTypes[25].Type
 }
 func (m xxx_SourceCodeInfo_Location) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[25].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[25].KnownFieldsOf(m.m)
 }
 func (m xxx_SourceCodeInfo_Location) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[25].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[25].UnknownFieldsOf(m.m)
 }
 func (m xxx_SourceCodeInfo_Location) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -2673,13 +2673,13 @@
 	return xxx_GeneratedCodeInfo_Annotation{m}
 }
 func (m xxx_GeneratedCodeInfo_Annotation) Type() protoreflect.MessageType {
-	return xxx_Descriptor_ProtoFile_MessageTypes[26].Type
+	return xxx_Descriptor_protoFile_MessageTypes[26].Type
 }
 func (m xxx_GeneratedCodeInfo_Annotation) KnownFields() protoreflect.KnownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[26].KnownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[26].KnownFieldsOf(m.m)
 }
 func (m xxx_GeneratedCodeInfo_Annotation) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Descriptor_ProtoFile_MessageTypes[26].UnknownFieldsOf(m.m)
+	return xxx_Descriptor_protoFile_MessageTypes[26].UnknownFieldsOf(m.m)
 }
 func (m xxx_GeneratedCodeInfo_Annotation) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -2924,61 +2924,61 @@
 }
 
 func init() {
-	xxx_Descriptor_ProtoFile_FileDesc.Messages = xxx_Descriptor_ProtoFile_MessageDescs[0:21]
-	xxx_Descriptor_ProtoFile_MessageDescs[2].Messages = xxx_Descriptor_ProtoFile_MessageDescs[21:23]
-	xxx_Descriptor_ProtoFile_MessageDescs[4].Enums = xxx_Descriptor_ProtoFile_EnumDescs[0:2]
-	xxx_Descriptor_ProtoFile_MessageDescs[6].Messages = xxx_Descriptor_ProtoFile_MessageDescs[23:24]
-	xxx_Descriptor_ProtoFile_MessageDescs[10].Enums = xxx_Descriptor_ProtoFile_EnumDescs[2:3]
-	xxx_Descriptor_ProtoFile_MessageDescs[12].Enums = xxx_Descriptor_ProtoFile_EnumDescs[3:5]
-	xxx_Descriptor_ProtoFile_MessageDescs[17].Enums = xxx_Descriptor_ProtoFile_EnumDescs[5:6]
-	xxx_Descriptor_ProtoFile_MessageDescs[18].Messages = xxx_Descriptor_ProtoFile_MessageDescs[24:25]
-	xxx_Descriptor_ProtoFile_MessageDescs[19].Messages = xxx_Descriptor_ProtoFile_MessageDescs[25:26]
-	xxx_Descriptor_ProtoFile_MessageDescs[20].Messages = xxx_Descriptor_ProtoFile_MessageDescs[26:27]
-	xxx_Descriptor_ProtoFile_MessageDescs[0].Fields[0].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[1].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[1].Fields[5].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[2].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[1].Fields[6].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[6].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[1].Fields[7].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[8].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[1].Fields[8].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[4].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[1].Fields[9].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[10].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[1].Fields[10].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[19].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[2].Fields[1].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[4].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[2].Fields[2].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[4].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[2].Fields[3].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[2].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[2].Fields[4].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[6].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[2].Fields[5].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[21].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[2].Fields[6].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[5].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[2].Fields[7].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[11].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[2].Fields[8].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[22].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[3].Fields[0].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[18].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[4].Fields[2].EnumType = xxx_Descriptor_ProtoFile_EnumTypes[1]
-	xxx_Descriptor_ProtoFile_MessageDescs[4].Fields[3].EnumType = xxx_Descriptor_ProtoFile_EnumTypes[0]
-	xxx_Descriptor_ProtoFile_MessageDescs[4].Fields[9].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[12].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[5].Fields[1].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[13].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[6].Fields[1].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[7].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[6].Fields[2].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[14].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[6].Fields[3].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[23].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[7].Fields[2].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[15].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[8].Fields[1].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[9].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[8].Fields[2].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[16].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[9].Fields[3].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[17].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[10].Fields[5].EnumType = xxx_Descriptor_ProtoFile_EnumTypes[2]
-	xxx_Descriptor_ProtoFile_MessageDescs[10].Fields[20].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[18].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[11].Fields[4].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[18].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[12].Fields[0].EnumType = xxx_Descriptor_ProtoFile_EnumTypes[3]
-	xxx_Descriptor_ProtoFile_MessageDescs[12].Fields[2].EnumType = xxx_Descriptor_ProtoFile_EnumTypes[4]
-	xxx_Descriptor_ProtoFile_MessageDescs[12].Fields[6].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[18].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[13].Fields[0].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[18].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[14].Fields[2].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[18].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[15].Fields[1].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[18].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[16].Fields[1].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[18].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[17].Fields[1].EnumType = xxx_Descriptor_ProtoFile_EnumTypes[5]
-	xxx_Descriptor_ProtoFile_MessageDescs[17].Fields[2].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[18].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[18].Fields[0].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[24].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[19].Fields[0].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[25].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[20].Fields[0].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[26].Type
-	xxx_Descriptor_ProtoFile_MessageDescs[21].Fields[2].MessageType = xxx_Descriptor_ProtoFile_MessageTypes[3].Type
+	xxx_Descriptor_protoFile_FileDesc.Messages = xxx_Descriptor_protoFile_MessageDescs[0:21]
+	xxx_Descriptor_protoFile_MessageDescs[2].Messages = xxx_Descriptor_protoFile_MessageDescs[21:23]
+	xxx_Descriptor_protoFile_MessageDescs[4].Enums = xxx_Descriptor_protoFile_EnumDescs[0:2]
+	xxx_Descriptor_protoFile_MessageDescs[6].Messages = xxx_Descriptor_protoFile_MessageDescs[23:24]
+	xxx_Descriptor_protoFile_MessageDescs[10].Enums = xxx_Descriptor_protoFile_EnumDescs[2:3]
+	xxx_Descriptor_protoFile_MessageDescs[12].Enums = xxx_Descriptor_protoFile_EnumDescs[3:5]
+	xxx_Descriptor_protoFile_MessageDescs[17].Enums = xxx_Descriptor_protoFile_EnumDescs[5:6]
+	xxx_Descriptor_protoFile_MessageDescs[18].Messages = xxx_Descriptor_protoFile_MessageDescs[24:25]
+	xxx_Descriptor_protoFile_MessageDescs[19].Messages = xxx_Descriptor_protoFile_MessageDescs[25:26]
+	xxx_Descriptor_protoFile_MessageDescs[20].Messages = xxx_Descriptor_protoFile_MessageDescs[26:27]
+	xxx_Descriptor_protoFile_MessageDescs[0].Fields[0].MessageType = xxx_Descriptor_protoFile_MessageTypes[1].Type
+	xxx_Descriptor_protoFile_MessageDescs[1].Fields[5].MessageType = xxx_Descriptor_protoFile_MessageTypes[2].Type
+	xxx_Descriptor_protoFile_MessageDescs[1].Fields[6].MessageType = xxx_Descriptor_protoFile_MessageTypes[6].Type
+	xxx_Descriptor_protoFile_MessageDescs[1].Fields[7].MessageType = xxx_Descriptor_protoFile_MessageTypes[8].Type
+	xxx_Descriptor_protoFile_MessageDescs[1].Fields[8].MessageType = xxx_Descriptor_protoFile_MessageTypes[4].Type
+	xxx_Descriptor_protoFile_MessageDescs[1].Fields[9].MessageType = xxx_Descriptor_protoFile_MessageTypes[10].Type
+	xxx_Descriptor_protoFile_MessageDescs[1].Fields[10].MessageType = xxx_Descriptor_protoFile_MessageTypes[19].Type
+	xxx_Descriptor_protoFile_MessageDescs[2].Fields[1].MessageType = xxx_Descriptor_protoFile_MessageTypes[4].Type
+	xxx_Descriptor_protoFile_MessageDescs[2].Fields[2].MessageType = xxx_Descriptor_protoFile_MessageTypes[4].Type
+	xxx_Descriptor_protoFile_MessageDescs[2].Fields[3].MessageType = xxx_Descriptor_protoFile_MessageTypes[2].Type
+	xxx_Descriptor_protoFile_MessageDescs[2].Fields[4].MessageType = xxx_Descriptor_protoFile_MessageTypes[6].Type
+	xxx_Descriptor_protoFile_MessageDescs[2].Fields[5].MessageType = xxx_Descriptor_protoFile_MessageTypes[21].Type
+	xxx_Descriptor_protoFile_MessageDescs[2].Fields[6].MessageType = xxx_Descriptor_protoFile_MessageTypes[5].Type
+	xxx_Descriptor_protoFile_MessageDescs[2].Fields[7].MessageType = xxx_Descriptor_protoFile_MessageTypes[11].Type
+	xxx_Descriptor_protoFile_MessageDescs[2].Fields[8].MessageType = xxx_Descriptor_protoFile_MessageTypes[22].Type
+	xxx_Descriptor_protoFile_MessageDescs[3].Fields[0].MessageType = xxx_Descriptor_protoFile_MessageTypes[18].Type
+	xxx_Descriptor_protoFile_MessageDescs[4].Fields[2].EnumType = xxx_Descriptor_protoFile_EnumTypes[1]
+	xxx_Descriptor_protoFile_MessageDescs[4].Fields[3].EnumType = xxx_Descriptor_protoFile_EnumTypes[0]
+	xxx_Descriptor_protoFile_MessageDescs[4].Fields[9].MessageType = xxx_Descriptor_protoFile_MessageTypes[12].Type
+	xxx_Descriptor_protoFile_MessageDescs[5].Fields[1].MessageType = xxx_Descriptor_protoFile_MessageTypes[13].Type
+	xxx_Descriptor_protoFile_MessageDescs[6].Fields[1].MessageType = xxx_Descriptor_protoFile_MessageTypes[7].Type
+	xxx_Descriptor_protoFile_MessageDescs[6].Fields[2].MessageType = xxx_Descriptor_protoFile_MessageTypes[14].Type
+	xxx_Descriptor_protoFile_MessageDescs[6].Fields[3].MessageType = xxx_Descriptor_protoFile_MessageTypes[23].Type
+	xxx_Descriptor_protoFile_MessageDescs[7].Fields[2].MessageType = xxx_Descriptor_protoFile_MessageTypes[15].Type
+	xxx_Descriptor_protoFile_MessageDescs[8].Fields[1].MessageType = xxx_Descriptor_protoFile_MessageTypes[9].Type
+	xxx_Descriptor_protoFile_MessageDescs[8].Fields[2].MessageType = xxx_Descriptor_protoFile_MessageTypes[16].Type
+	xxx_Descriptor_protoFile_MessageDescs[9].Fields[3].MessageType = xxx_Descriptor_protoFile_MessageTypes[17].Type
+	xxx_Descriptor_protoFile_MessageDescs[10].Fields[5].EnumType = xxx_Descriptor_protoFile_EnumTypes[2]
+	xxx_Descriptor_protoFile_MessageDescs[10].Fields[20].MessageType = xxx_Descriptor_protoFile_MessageTypes[18].Type
+	xxx_Descriptor_protoFile_MessageDescs[11].Fields[4].MessageType = xxx_Descriptor_protoFile_MessageTypes[18].Type
+	xxx_Descriptor_protoFile_MessageDescs[12].Fields[0].EnumType = xxx_Descriptor_protoFile_EnumTypes[3]
+	xxx_Descriptor_protoFile_MessageDescs[12].Fields[2].EnumType = xxx_Descriptor_protoFile_EnumTypes[4]
+	xxx_Descriptor_protoFile_MessageDescs[12].Fields[6].MessageType = xxx_Descriptor_protoFile_MessageTypes[18].Type
+	xxx_Descriptor_protoFile_MessageDescs[13].Fields[0].MessageType = xxx_Descriptor_protoFile_MessageTypes[18].Type
+	xxx_Descriptor_protoFile_MessageDescs[14].Fields[2].MessageType = xxx_Descriptor_protoFile_MessageTypes[18].Type
+	xxx_Descriptor_protoFile_MessageDescs[15].Fields[1].MessageType = xxx_Descriptor_protoFile_MessageTypes[18].Type
+	xxx_Descriptor_protoFile_MessageDescs[16].Fields[1].MessageType = xxx_Descriptor_protoFile_MessageTypes[18].Type
+	xxx_Descriptor_protoFile_MessageDescs[17].Fields[1].EnumType = xxx_Descriptor_protoFile_EnumTypes[5]
+	xxx_Descriptor_protoFile_MessageDescs[17].Fields[2].MessageType = xxx_Descriptor_protoFile_MessageTypes[18].Type
+	xxx_Descriptor_protoFile_MessageDescs[18].Fields[0].MessageType = xxx_Descriptor_protoFile_MessageTypes[24].Type
+	xxx_Descriptor_protoFile_MessageDescs[19].Fields[0].MessageType = xxx_Descriptor_protoFile_MessageTypes[25].Type
+	xxx_Descriptor_protoFile_MessageDescs[20].Fields[0].MessageType = xxx_Descriptor_protoFile_MessageTypes[26].Type
+	xxx_Descriptor_protoFile_MessageDescs[21].Fields[2].MessageType = xxx_Descriptor_protoFile_MessageTypes[3].Type
 	var err error
-	Descriptor_ProtoFile, err = prototype.NewFile(&xxx_Descriptor_ProtoFile_FileDesc)
+	Descriptor_protoFile, err = prototype.NewFile(&xxx_Descriptor_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -2995,52 +2995,52 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Descriptor_ProtoFile protoreflect.FileDescriptor
+var Descriptor_protoFile protoreflect.FileDescriptor
 
-var xxx_Descriptor_ProtoFile_FileDesc = prototype.File{
+var xxx_Descriptor_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "google/protobuf/descriptor.proto",
 	Package: "google.protobuf",
 }
-var xxx_Descriptor_ProtoFile_EnumTypes = [6]protoreflect.EnumType{
+var xxx_Descriptor_protoFile_EnumTypes = [6]protoreflect.EnumType{
 	prototype.GoEnum(
-		xxx_Descriptor_ProtoFile_EnumDescs[0].Reference(),
+		xxx_Descriptor_protoFile_EnumDescs[0].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return FieldDescriptorProto_Type(n)
 		},
 	),
 	prototype.GoEnum(
-		xxx_Descriptor_ProtoFile_EnumDescs[1].Reference(),
+		xxx_Descriptor_protoFile_EnumDescs[1].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return FieldDescriptorProto_Label(n)
 		},
 	),
 	prototype.GoEnum(
-		xxx_Descriptor_ProtoFile_EnumDescs[2].Reference(),
+		xxx_Descriptor_protoFile_EnumDescs[2].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return FileOptions_OptimizeMode(n)
 		},
 	),
 	prototype.GoEnum(
-		xxx_Descriptor_ProtoFile_EnumDescs[3].Reference(),
+		xxx_Descriptor_protoFile_EnumDescs[3].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return FieldOptions_CType(n)
 		},
 	),
 	prototype.GoEnum(
-		xxx_Descriptor_ProtoFile_EnumDescs[4].Reference(),
+		xxx_Descriptor_protoFile_EnumDescs[4].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return FieldOptions_JSType(n)
 		},
 	),
 	prototype.GoEnum(
-		xxx_Descriptor_ProtoFile_EnumDescs[5].Reference(),
+		xxx_Descriptor_protoFile_EnumDescs[5].Reference(),
 		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return MethodOptions_IdempotencyLevel(n)
 		},
 	),
 }
-var xxx_Descriptor_ProtoFile_EnumDescs = [6]prototype.Enum{
+var xxx_Descriptor_protoFile_EnumDescs = [6]prototype.Enum{
 	{
 		Name: "Type",
 		Values: []prototype.EnumValue{
@@ -3105,171 +3105,171 @@
 		},
 	},
 }
-var xxx_Descriptor_ProtoFile_MessageTypes = [27]protoimpl.MessageType{
+var xxx_Descriptor_protoFile_MessageTypes = [27]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[0].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_FileDescriptorSet{new(FileDescriptorSet)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[1].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[1].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_FileDescriptorProto{new(FileDescriptorProto)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[2].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[2].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_DescriptorProto{new(DescriptorProto)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[3].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[3].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_ExtensionRangeOptions{new(ExtensionRangeOptions)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[4].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[4].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_FieldDescriptorProto{new(FieldDescriptorProto)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[5].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[5].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_OneofDescriptorProto{new(OneofDescriptorProto)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[6].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[6].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_EnumDescriptorProto{new(EnumDescriptorProto)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[7].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[7].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_EnumValueDescriptorProto{new(EnumValueDescriptorProto)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[8].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[8].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_ServiceDescriptorProto{new(ServiceDescriptorProto)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[9].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[9].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_MethodDescriptorProto{new(MethodDescriptorProto)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[10].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[10].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_FileOptions{new(FileOptions)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[11].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[11].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_MessageOptions{new(MessageOptions)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[12].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[12].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_FieldOptions{new(FieldOptions)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[13].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[13].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_OneofOptions{new(OneofOptions)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[14].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[14].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_EnumOptions{new(EnumOptions)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[15].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[15].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_EnumValueOptions{new(EnumValueOptions)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[16].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[16].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_ServiceOptions{new(ServiceOptions)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[17].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[17].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_MethodOptions{new(MethodOptions)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[18].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[18].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_UninterpretedOption{new(UninterpretedOption)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[19].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[19].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_SourceCodeInfo{new(SourceCodeInfo)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[20].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[20].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_GeneratedCodeInfo{new(GeneratedCodeInfo)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[21].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[21].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_DescriptorProto_ExtensionRange{new(DescriptorProto_ExtensionRange)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[22].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[22].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_DescriptorProto_ReservedRange{new(DescriptorProto_ReservedRange)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[23].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[23].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_EnumDescriptorProto_EnumReservedRange{new(EnumDescriptorProto_EnumReservedRange)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[24].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[24].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_UninterpretedOption_NamePart{new(UninterpretedOption_NamePart)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[25].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[25].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_SourceCodeInfo_Location{new(SourceCodeInfo_Location)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Descriptor_ProtoFile_MessageDescs[26].Reference(),
+		xxx_Descriptor_protoFile_MessageDescs[26].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_GeneratedCodeInfo_Annotation{new(GeneratedCodeInfo_Annotation)}
 		},
 	)},
 }
-var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
+var xxx_Descriptor_protoFile_MessageDescs = [27]prototype.Message{
 	{
 		Name: "FileDescriptorSet",
 		Fields: []prototype.Field{
diff --git a/types/plugin/plugin.pb.go b/types/plugin/plugin.pb.go
index 83f4cf2..dc5a60e 100644
--- a/types/plugin/plugin.pb.go
+++ b/types/plugin/plugin.pb.go
@@ -36,13 +36,13 @@
 	return xxx_Version{m}
 }
 func (m xxx_Version) Type() protoreflect.MessageType {
-	return xxx_Plugin_ProtoFile_MessageTypes[0].Type
+	return xxx_Plugin_protoFile_MessageTypes[0].Type
 }
 func (m xxx_Version) KnownFields() protoreflect.KnownFields {
-	return xxx_Plugin_ProtoFile_MessageTypes[0].KnownFieldsOf(m.m)
+	return xxx_Plugin_protoFile_MessageTypes[0].KnownFieldsOf(m.m)
 }
 func (m xxx_Version) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Plugin_ProtoFile_MessageTypes[0].UnknownFieldsOf(m.m)
+	return xxx_Plugin_protoFile_MessageTypes[0].UnknownFieldsOf(m.m)
 }
 func (m xxx_Version) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -137,13 +137,13 @@
 	return xxx_CodeGeneratorRequest{m}
 }
 func (m xxx_CodeGeneratorRequest) Type() protoreflect.MessageType {
-	return xxx_Plugin_ProtoFile_MessageTypes[1].Type
+	return xxx_Plugin_protoFile_MessageTypes[1].Type
 }
 func (m xxx_CodeGeneratorRequest) KnownFields() protoreflect.KnownFields {
-	return xxx_Plugin_ProtoFile_MessageTypes[1].KnownFieldsOf(m.m)
+	return xxx_Plugin_protoFile_MessageTypes[1].KnownFieldsOf(m.m)
 }
 func (m xxx_CodeGeneratorRequest) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Plugin_ProtoFile_MessageTypes[1].UnknownFieldsOf(m.m)
+	return xxx_Plugin_protoFile_MessageTypes[1].UnknownFieldsOf(m.m)
 }
 func (m xxx_CodeGeneratorRequest) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -225,13 +225,13 @@
 	return xxx_CodeGeneratorResponse{m}
 }
 func (m xxx_CodeGeneratorResponse) Type() protoreflect.MessageType {
-	return xxx_Plugin_ProtoFile_MessageTypes[2].Type
+	return xxx_Plugin_protoFile_MessageTypes[2].Type
 }
 func (m xxx_CodeGeneratorResponse) KnownFields() protoreflect.KnownFields {
-	return xxx_Plugin_ProtoFile_MessageTypes[2].KnownFieldsOf(m.m)
+	return xxx_Plugin_protoFile_MessageTypes[2].KnownFieldsOf(m.m)
 }
 func (m xxx_CodeGeneratorResponse) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Plugin_ProtoFile_MessageTypes[2].UnknownFieldsOf(m.m)
+	return xxx_Plugin_protoFile_MessageTypes[2].UnknownFieldsOf(m.m)
 }
 func (m xxx_CodeGeneratorResponse) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -341,13 +341,13 @@
 	return xxx_CodeGeneratorResponse_File{m}
 }
 func (m xxx_CodeGeneratorResponse_File) Type() protoreflect.MessageType {
-	return xxx_Plugin_ProtoFile_MessageTypes[3].Type
+	return xxx_Plugin_protoFile_MessageTypes[3].Type
 }
 func (m xxx_CodeGeneratorResponse_File) KnownFields() protoreflect.KnownFields {
-	return xxx_Plugin_ProtoFile_MessageTypes[3].KnownFieldsOf(m.m)
+	return xxx_Plugin_protoFile_MessageTypes[3].KnownFieldsOf(m.m)
 }
 func (m xxx_CodeGeneratorResponse_File) UnknownFields() protoreflect.UnknownFields {
-	return xxx_Plugin_ProtoFile_MessageTypes[3].UnknownFieldsOf(m.m)
+	return xxx_Plugin_protoFile_MessageTypes[3].UnknownFieldsOf(m.m)
 }
 func (m xxx_CodeGeneratorResponse_File) Interface() protoreflect.ProtoMessage {
 	return m.m
@@ -438,13 +438,13 @@
 }
 
 func init() {
-	xxx_Plugin_ProtoFile_FileDesc.Messages = xxx_Plugin_ProtoFile_MessageDescs[0:3]
-	xxx_Plugin_ProtoFile_MessageDescs[2].Messages = xxx_Plugin_ProtoFile_MessageDescs[3:4]
-	xxx_Plugin_ProtoFile_MessageDescs[1].Fields[2].MessageType = protoimpl.X.MessageTypeOf((*descriptor.FileDescriptorProto)(nil))
-	xxx_Plugin_ProtoFile_MessageDescs[1].Fields[3].MessageType = xxx_Plugin_ProtoFile_MessageTypes[0].Type
-	xxx_Plugin_ProtoFile_MessageDescs[2].Fields[1].MessageType = xxx_Plugin_ProtoFile_MessageTypes[3].Type
+	xxx_Plugin_protoFile_FileDesc.Messages = xxx_Plugin_protoFile_MessageDescs[0:3]
+	xxx_Plugin_protoFile_MessageDescs[2].Messages = xxx_Plugin_protoFile_MessageDescs[3:4]
+	xxx_Plugin_protoFile_MessageDescs[1].Fields[2].MessageType = protoimpl.X.MessageTypeOf((*descriptor.FileDescriptorProto)(nil))
+	xxx_Plugin_protoFile_MessageDescs[1].Fields[3].MessageType = xxx_Plugin_protoFile_MessageTypes[0].Type
+	xxx_Plugin_protoFile_MessageDescs[2].Fields[1].MessageType = xxx_Plugin_protoFile_MessageTypes[3].Type
 	var err error
-	Plugin_ProtoFile, err = prototype.NewFile(&xxx_Plugin_ProtoFile_FileDesc)
+	Plugin_protoFile, err = prototype.NewFile(&xxx_Plugin_protoFile_FileDesc)
 	if err != nil {
 		panic(err)
 	}
@@ -452,9 +452,9 @@
 
 const _ = protoimpl.EnforceVersion(protoimpl.Version - 0)
 
-var Plugin_ProtoFile protoreflect.FileDescriptor
+var Plugin_protoFile protoreflect.FileDescriptor
 
-var xxx_Plugin_ProtoFile_FileDesc = prototype.File{
+var xxx_Plugin_protoFile_FileDesc = prototype.File{
 	Syntax:  protoreflect.Proto2,
 	Path:    "google/protobuf/compiler/plugin.proto",
 	Package: "google.protobuf.compiler",
@@ -462,33 +462,33 @@
 		{FileDescriptor: prototype.PlaceholderFile("google/protobuf/descriptor.proto", "google.protobuf")},
 	},
 }
-var xxx_Plugin_ProtoFile_MessageTypes = [4]protoimpl.MessageType{
+var xxx_Plugin_protoFile_MessageTypes = [4]protoimpl.MessageType{
 	{Type: prototype.GoMessage(
-		xxx_Plugin_ProtoFile_MessageDescs[0].Reference(),
+		xxx_Plugin_protoFile_MessageDescs[0].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_Version{new(Version)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Plugin_ProtoFile_MessageDescs[1].Reference(),
+		xxx_Plugin_protoFile_MessageDescs[1].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_CodeGeneratorRequest{new(CodeGeneratorRequest)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Plugin_ProtoFile_MessageDescs[2].Reference(),
+		xxx_Plugin_protoFile_MessageDescs[2].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_CodeGeneratorResponse{new(CodeGeneratorResponse)}
 		},
 	)},
 	{Type: prototype.GoMessage(
-		xxx_Plugin_ProtoFile_MessageDescs[3].Reference(),
+		xxx_Plugin_protoFile_MessageDescs[3].Reference(),
 		func(protoreflect.MessageType) protoreflect.Message {
 			return xxx_CodeGeneratorResponse_File{new(CodeGeneratorResponse_File)}
 		},
 	)},
 }
-var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
+var xxx_Plugin_protoFile_MessageDescs = [4]prototype.Message{
 	{
 		Name: "Version",
 		Fields: []prototype.Field{
