Просмотр исходного кода

reflect/prototype: hoist semantic options into builders

Add fields to the Message and Field builder structs which hold the value
of MessageOptions.map_entry, FieldOptions.packed, and FieldOptions.weak
options. Remove all access to the contents of options messages from the
prototype package.

Change IsPacked to always return false for unpackable field types,
which is consistent with the equivalent C++ API.

This change helps avoid dependency cycles between prototype and the
options messages. (Previously this was resolved by accessing options
with reflection, but just breaking the dependency from prototype to the
options message is cleaner and simpler.)

Change-Id: I756aefe2e04cfa8fea31eaaaa0b5a99d4ac9e851
Reviewed-on: https://go-review.googlesource.com/c/153517
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
Damien Neil 7 лет назад
Родитель
Сommit
232ea15589
32 измененных файлов с 488 добавлено и 155 удалено
  1. 11 0
      cmd/protoc-gen-go/internal_gengo/reflect.go
  2. 1 0
      cmd/protoc-gen-go/testdata/annotations/annotations.pb.go
  3. 2 0
      cmd/protoc-gen-go/testdata/comments/comments.pb.go
  4. 1 0
      cmd/protoc-gen-go/testdata/comments/deprecated.pb.go
  5. 1 0
      cmd/protoc-gen-go/testdata/extensions/base/base.pb.go
  6. 3 0
      cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go
  7. 1 0
      cmd/protoc-gen-go/testdata/extensions/extra/extra.pb.go
  8. 18 0
      cmd/protoc-gen-go/testdata/fieldnames/fieldnames.pb.go
  9. 3 0
      cmd/protoc-gen-go/testdata/import_public/a.pb.go
  10. 2 0
      cmd/protoc-gen-go/testdata/import_public/b.pb.go
  11. 8 0
      cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go
  12. 1 0
      cmd/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go
  13. 1 0
      cmd/protoc-gen-go/testdata/imports/test_import_a1m1.pb.go
  14. 1 0
      cmd/protoc-gen-go/testdata/imports/test_import_a1m2.pb.go
  15. 5 0
      cmd/protoc-gen-go/testdata/imports/test_import_all.pb.go
  16. 2 0
      cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go
  17. 2 0
      cmd/protoc-gen-go/testdata/proto2/enum.pb.go
  18. 115 0
      cmd/protoc-gen-go/testdata/proto2/fields.pb.go
  19. 3 0
      cmd/protoc-gen-go/testdata/proto2/nested_messages.pb.go
  20. 2 0
      cmd/protoc-gen-go/testdata/proto2/proto2.pb.go
  21. 46 0
      cmd/protoc-gen-go/testdata/proto3/fields.pb.go
  22. 10 16
      internal/encoding/pack/pack_test.go
  23. 6 3
      internal/impl/message_test.go
  24. 4 3
      internal/legacy/message.go
  25. 11 2
      reflect/protodesc/protodesc.go
  26. 21 0
      reflect/prototype/protofile.go
  27. 51 118
      reflect/prototype/protofile_type.go
  28. 6 5
      reflect/prototype/standalone.go
  29. 8 6
      reflect/prototype/standalone_type.go
  30. 5 2
      reflect/prototype/type_test.go
  31. 124 0
      types/descriptor/descriptor.pb.go
  32. 13 0
      types/plugin/plugin.pb.go

+ 11 - 0
cmd/protoc-gen-go/internal_gengo/reflect.go

@@ -289,6 +289,14 @@ func genReflectFileDescriptor(gen *protogen.Plugin, g *protogen.GeneratedFile, f
 					if oneof := field.OneofType(); oneof != nil {
 					if oneof := field.OneofType(); oneof != nil {
 						g.P("OneofName: ", strconv.Quote(string(oneof.Name())), ",")
 						g.P("OneofName: ", strconv.Quote(string(oneof.Name())), ",")
 					}
 					}
+					if field.IsPacked() {
+						g.P("IsPacked: ", prototypePackage.Ident("True"), ",")
+					} else {
+						g.P("IsPacked: ", prototypePackage.Ident("False"), ",")
+					}
+					if field.IsWeak() {
+						g.P("IsWeak: true,")
+					}
 					// NOTE: MessageType and EnumType are populated by init.
 					// NOTE: MessageType and EnumType are populated by init.
 					g.P("},")
 					g.P("},")
 				}
 				}
@@ -326,6 +334,9 @@ func genReflectFileDescriptor(gen *protogen.Plugin, g *protogen.GeneratedFile, f
 				}
 				}
 				g.P("ExtensionRanges: [][2]", protoreflectPackage.Ident("FieldNumber"), "{", strings.Join(ss, ","), "},")
 				g.P("ExtensionRanges: [][2]", protoreflectPackage.Ident("FieldNumber"), "{", strings.Join(ss, ","), "},")
 			}
 			}
+			if message.Desc.IsMapEntry() {
+				g.P("IsMapEntry: true,")
+			}
 			// NOTE: Messages, Enums, and Extensions are populated by init.
 			// NOTE: Messages, Enums, and Extensions are populated by init.
 			g.P("},")
 			g.P("},")
 		}
 		}

+ 1 - 0
cmd/protoc-gen-go/testdata/annotations/annotations.pb.go

@@ -198,6 +198,7 @@ var xxx_Annotations_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "AnnotationsTestField",
 				JSONName:    "AnnotationsTestField",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},

+ 2 - 0
cmd/protoc-gen-go/testdata/comments/comments.pb.go

@@ -458,6 +458,7 @@ var xxx_Comments_ProtoFile_MessageDescs = [6]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "Field1A",
 				JSONName:    "Field1A",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "Oneof1AField1",
 				Name:        "Oneof1AField1",
@@ -466,6 +467,7 @@ var xxx_Comments_ProtoFile_MessageDescs = [6]prototype.Message{
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "Oneof1AField1",
 				JSONName:    "Oneof1AField1",
 				OneofName:   "Oneof1a",
 				OneofName:   "Oneof1a",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 		Oneofs: []prototype.Oneof{
 		Oneofs: []prototype.Oneof{

+ 1 - 0
cmd/protoc-gen-go/testdata/comments/deprecated.pb.go

@@ -184,6 +184,7 @@ var xxx_Deprecated_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "deprecatedField",
 				JSONName:    "deprecatedField",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},

+ 1 - 0
cmd/protoc-gen-go/testdata/extensions/base/base.pb.go

@@ -206,6 +206,7 @@ var xxx_Base_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "field",
 				JSONName:    "field",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 		ExtensionRanges: [][2]protoreflect.FieldNumber{{4, 10}, {16, 536870912}},
 		ExtensionRanges: [][2]protoreflect.FieldNumber{{4, 10}, {16, 536870912}},

+ 3 - 0
cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go

@@ -1131,6 +1131,7 @@ var xxx_Ext_ProtoFile_MessageDescs = [8]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.BytesKind,
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "data",
 				JSONName:    "data",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -1143,6 +1144,7 @@ var xxx_Ext_ProtoFile_MessageDescs = [8]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "extensionGroup",
 				JSONName:    "extensionGroup",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -1158,6 +1160,7 @@ var xxx_Ext_ProtoFile_MessageDescs = [8]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "repeatedXGroup",
 				JSONName:    "repeatedXGroup",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},

+ 1 - 0
cmd/protoc-gen-go/testdata/extensions/extra/extra.pb.go

@@ -128,6 +128,7 @@ var xxx_Extra_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.BytesKind,
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "data",
 				JSONName:    "data",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},

+ 18 - 0
cmd/protoc-gen-go/testdata/fieldnames/fieldnames.pb.go

@@ -426,6 +426,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "fieldOne",
 				JSONName:    "fieldOne",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "FieldTwo",
 				Name:        "FieldTwo",
@@ -433,6 +434,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "FieldTwo",
 				JSONName:    "FieldTwo",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "fieldThree",
 				Name:        "fieldThree",
@@ -440,6 +442,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "fieldThree",
 				JSONName:    "fieldThree",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "field__four",
 				Name:        "field__four",
@@ -447,6 +450,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "fieldFour",
 				JSONName:    "fieldFour",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "descriptor",
 				Name:        "descriptor",
@@ -454,6 +458,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "descriptor",
 				JSONName:    "descriptor",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "marshal",
 				Name:        "marshal",
@@ -461,6 +466,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "marshal",
 				JSONName:    "marshal",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "unmarshal",
 				Name:        "unmarshal",
@@ -468,6 +474,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "unmarshal",
 				JSONName:    "unmarshal",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "proto_message",
 				Name:        "proto_message",
@@ -475,6 +482,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "protoMessage",
 				JSONName:    "protoMessage",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "CamelCase",
 				Name:        "CamelCase",
@@ -482,6 +490,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "CamelCase",
 				JSONName:    "CamelCase",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "CamelCase_",
 				Name:        "CamelCase_",
@@ -489,6 +498,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "CamelCase",
 				JSONName:    "CamelCase",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "camel_case",
 				Name:        "camel_case",
@@ -496,6 +506,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "camelCase",
 				JSONName:    "camelCase",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "CamelCase__",
 				Name:        "CamelCase__",
@@ -503,6 +514,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "CamelCase",
 				JSONName:    "CamelCase",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "get_name",
 				Name:        "get_name",
@@ -510,6 +522,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "getName",
 				JSONName:    "getName",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "name",
 				Name:        "name",
@@ -517,6 +530,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "name",
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "OneofConflictA",
 				Name:        "OneofConflictA",
@@ -525,6 +539,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "OneofConflictA",
 				JSONName:    "OneofConflictA",
 				OneofName:   "oneof_conflict_a",
 				OneofName:   "oneof_conflict_a",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_no_conflict",
 				Name:        "oneof_no_conflict",
@@ -533,6 +548,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "oneofNoConflict",
 				JSONName:    "oneofNoConflict",
 				OneofName:   "oneof_conflict_b",
 				OneofName:   "oneof_conflict_b",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "OneofConflictB",
 				Name:        "OneofConflictB",
@@ -541,6 +557,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "OneofConflictB",
 				JSONName:    "OneofConflictB",
 				OneofName:   "oneof_conflict_b",
 				OneofName:   "oneof_conflict_b",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_message_conflict",
 				Name:        "oneof_message_conflict",
@@ -549,6 +566,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "oneofMessageConflict",
 				JSONName:    "oneofMessageConflict",
 				OneofName:   "oneof_conflict_c",
 				OneofName:   "oneof_conflict_c",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 		Oneofs: []prototype.Oneof{
 		Oneofs: []prototype.Oneof{

+ 3 - 0
cmd/protoc-gen-go/testdata/import_public/a.pb.go

@@ -196,6 +196,7 @@ var xxx_A_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "m",
 				JSONName:    "m",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "e",
 				Name:        "e",
@@ -203,6 +204,7 @@ var xxx_A_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.EnumKind,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "e",
 				JSONName:    "e",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "local",
 				Name:        "local",
@@ -210,6 +212,7 @@ var xxx_A_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "local",
 				JSONName:    "local",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},

+ 2 - 0
cmd/protoc-gen-go/testdata/import_public/b.pb.go

@@ -143,6 +143,7 @@ var xxx_B_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "m",
 				JSONName:    "m",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "e",
 				Name:        "e",
@@ -150,6 +151,7 @@ var xxx_B_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.EnumKind,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "e",
 				JSONName:    "e",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},

+ 8 - 0
cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go

@@ -546,6 +546,7 @@ var xxx_A_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "m2",
 				JSONName:    "m2",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "s",
 				Name:        "s",
@@ -554,6 +555,7 @@ var xxx_A_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "s",
 				JSONName:    "s",
 				Default:     protoreflect.ValueOf(string("default")),
 				Default:     protoreflect.ValueOf(string("default")),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "b",
 				Name:        "b",
@@ -562,6 +564,7 @@ var xxx_A_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.BytesKind,
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "b",
 				JSONName:    "b",
 				Default:     protoreflect.ValueOf(("default")),
 				Default:     protoreflect.ValueOf(("default")),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "f",
 				Name:        "f",
@@ -570,6 +573,7 @@ var xxx_A_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.DoubleKind,
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "f",
 				JSONName:    "f",
 				Default:     protoreflect.ValueOf(float64(math.NaN())),
 				Default:     protoreflect.ValueOf(float64(math.NaN())),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_int32",
 				Name:        "oneof_int32",
@@ -578,6 +582,7 @@ var xxx_A_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "oneofInt32",
 				JSONName:    "oneofInt32",
 				OneofName:   "oneof_field",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_int64",
 				Name:        "oneof_int64",
@@ -586,6 +591,7 @@ var xxx_A_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.Int64Kind,
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "oneofInt64",
 				JSONName:    "oneofInt64",
 				OneofName:   "oneof_field",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 		Oneofs: []prototype.Oneof{
 		Oneofs: []prototype.Oneof{
@@ -603,6 +609,7 @@ var xxx_A_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "submessageOneofInt32",
 				JSONName:    "submessageOneofInt32",
 				OneofName:   "submessage_oneof_field",
 				OneofName:   "submessage_oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "submessage_oneof_int64",
 				Name:        "submessage_oneof_int64",
@@ -611,6 +618,7 @@ var xxx_A_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.Int64Kind,
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "submessageOneofInt64",
 				JSONName:    "submessageOneofInt64",
 				OneofName:   "submessage_oneof_field",
 				OneofName:   "submessage_oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 		Oneofs: []prototype.Oneof{
 		Oneofs: []prototype.Oneof{

+ 1 - 0
cmd/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go

@@ -241,6 +241,7 @@ var xxx_M1_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "m1",
 				JSONName:    "m1",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},

+ 1 - 0
cmd/protoc-gen-go/testdata/imports/test_import_a1m1.pb.go

@@ -133,6 +133,7 @@ var xxx_TestImportA1M1_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "f",
 				JSONName:    "f",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},

+ 1 - 0
cmd/protoc-gen-go/testdata/imports/test_import_a1m2.pb.go

@@ -133,6 +133,7 @@ var xxx_TestImportA1M2_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "f",
 				JSONName:    "f",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},

+ 5 - 0
cmd/protoc-gen-go/testdata/imports/test_import_all.pb.go

@@ -184,6 +184,7 @@ var xxx_TestImportAll_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "am1",
 				JSONName:    "am1",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "am2",
 				Name:        "am2",
@@ -191,6 +192,7 @@ var xxx_TestImportAll_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "am2",
 				JSONName:    "am2",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "bm1",
 				Name:        "bm1",
@@ -198,6 +200,7 @@ var xxx_TestImportAll_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "bm1",
 				JSONName:    "bm1",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "bm2",
 				Name:        "bm2",
@@ -205,6 +208,7 @@ var xxx_TestImportAll_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "bm2",
 				JSONName:    "bm2",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "fmt",
 				Name:        "fmt",
@@ -212,6 +216,7 @@ var xxx_TestImportAll_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "fmt",
 				JSONName:    "fmt",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},

+ 2 - 0
cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go

@@ -205,6 +205,7 @@ var xxx_Nopackage_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "stringField",
 				JSONName:    "stringField",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "enum_field",
 				Name:        "enum_field",
@@ -213,6 +214,7 @@ var xxx_Nopackage_ProtoFile_MessageDescs = [1]prototype.Message{
 				Kind:        protoreflect.EnumKind,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "enumField",
 				JSONName:    "enumField",
 				Default:     protoreflect.ValueOf(string("ZERO")),
 				Default:     protoreflect.ValueOf(string("ZERO")),
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},

+ 2 - 0
cmd/protoc-gen-go/testdata/proto2/enum.pb.go

@@ -611,6 +611,7 @@ var xxx_Enum_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.EnumKind,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "defaultDuplicate1",
 				JSONName:    "defaultDuplicate1",
 				Default:     protoreflect.ValueOf(string("duplicate1")),
 				Default:     protoreflect.ValueOf(string("duplicate1")),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_duplicate2",
 				Name:        "default_duplicate2",
@@ -619,6 +620,7 @@ var xxx_Enum_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.EnumKind,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "defaultDuplicate2",
 				JSONName:    "defaultDuplicate2",
 				Default:     protoreflect.ValueOf(string("duplicate2")),
 				Default:     protoreflect.ValueOf(string("duplicate2")),
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},

+ 115 - 0
cmd/protoc-gen-go/testdata/proto2/fields.pb.go

@@ -1673,6 +1673,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "optionalBool",
 				JSONName:    "optionalBool",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_enum",
 				Name:        "optional_enum",
@@ -1680,6 +1681,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.EnumKind,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "optionalEnum",
 				JSONName:    "optionalEnum",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_int32",
 				Name:        "optional_int32",
@@ -1687,6 +1689,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "optionalInt32",
 				JSONName:    "optionalInt32",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_sint32",
 				Name:        "optional_sint32",
@@ -1694,6 +1697,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Sint32Kind,
 				Kind:        protoreflect.Sint32Kind,
 				JSONName:    "optionalSint32",
 				JSONName:    "optionalSint32",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_uint32",
 				Name:        "optional_uint32",
@@ -1701,6 +1705,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Uint32Kind,
 				Kind:        protoreflect.Uint32Kind,
 				JSONName:    "optionalUint32",
 				JSONName:    "optionalUint32",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_int64",
 				Name:        "optional_int64",
@@ -1708,6 +1713,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int64Kind,
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "optionalInt64",
 				JSONName:    "optionalInt64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_sint64",
 				Name:        "optional_sint64",
@@ -1715,6 +1721,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Sint64Kind,
 				Kind:        protoreflect.Sint64Kind,
 				JSONName:    "optionalSint64",
 				JSONName:    "optionalSint64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_uint64",
 				Name:        "optional_uint64",
@@ -1722,6 +1729,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Uint64Kind,
 				Kind:        protoreflect.Uint64Kind,
 				JSONName:    "optionalUint64",
 				JSONName:    "optionalUint64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_sfixed32",
 				Name:        "optional_sfixed32",
@@ -1729,6 +1737,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Sfixed32Kind,
 				Kind:        protoreflect.Sfixed32Kind,
 				JSONName:    "optionalSfixed32",
 				JSONName:    "optionalSfixed32",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_fixed32",
 				Name:        "optional_fixed32",
@@ -1736,6 +1745,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Fixed32Kind,
 				Kind:        protoreflect.Fixed32Kind,
 				JSONName:    "optionalFixed32",
 				JSONName:    "optionalFixed32",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_float",
 				Name:        "optional_float",
@@ -1743,6 +1753,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.FloatKind,
 				Kind:        protoreflect.FloatKind,
 				JSONName:    "optionalFloat",
 				JSONName:    "optionalFloat",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_sfixed64",
 				Name:        "optional_sfixed64",
@@ -1750,6 +1761,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Sfixed64Kind,
 				Kind:        protoreflect.Sfixed64Kind,
 				JSONName:    "optionalSfixed64",
 				JSONName:    "optionalSfixed64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_fixed64",
 				Name:        "optional_fixed64",
@@ -1757,6 +1769,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Fixed64Kind,
 				Kind:        protoreflect.Fixed64Kind,
 				JSONName:    "optionalFixed64",
 				JSONName:    "optionalFixed64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_double",
 				Name:        "optional_double",
@@ -1764,6 +1777,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.DoubleKind,
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "optionalDouble",
 				JSONName:    "optionalDouble",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_string",
 				Name:        "optional_string",
@@ -1771,6 +1785,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "optionalString",
 				JSONName:    "optionalString",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_bytes",
 				Name:        "optional_bytes",
@@ -1778,6 +1793,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.BytesKind,
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "optionalBytes",
 				JSONName:    "optionalBytes",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_Message",
 				Name:        "optional_Message",
@@ -1785,6 +1801,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "optionalMessage",
 				JSONName:    "optionalMessage",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optionalgroup",
 				Name:        "optionalgroup",
@@ -1792,6 +1809,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.GroupKind,
 				Kind:        protoreflect.GroupKind,
 				JSONName:    "optionalgroup",
 				JSONName:    "optionalgroup",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "required_bool",
 				Name:        "required_bool",
@@ -1799,6 +1817,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "requiredBool",
 				JSONName:    "requiredBool",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "required_enum",
 				Name:        "required_enum",
@@ -1806,6 +1825,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.EnumKind,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "requiredEnum",
 				JSONName:    "requiredEnum",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "required_int32",
 				Name:        "required_int32",
@@ -1813,6 +1833,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "requiredInt32",
 				JSONName:    "requiredInt32",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "required_sint32",
 				Name:        "required_sint32",
@@ -1820,6 +1841,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.Sint32Kind,
 				Kind:        protoreflect.Sint32Kind,
 				JSONName:    "requiredSint32",
 				JSONName:    "requiredSint32",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "required_uint32",
 				Name:        "required_uint32",
@@ -1827,6 +1849,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.Uint32Kind,
 				Kind:        protoreflect.Uint32Kind,
 				JSONName:    "requiredUint32",
 				JSONName:    "requiredUint32",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "required_int64",
 				Name:        "required_int64",
@@ -1834,6 +1857,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.Int64Kind,
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "requiredInt64",
 				JSONName:    "requiredInt64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "required_sint64",
 				Name:        "required_sint64",
@@ -1841,6 +1865,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.Sint64Kind,
 				Kind:        protoreflect.Sint64Kind,
 				JSONName:    "requiredSint64",
 				JSONName:    "requiredSint64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "required_uint64",
 				Name:        "required_uint64",
@@ -1848,6 +1873,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.Uint64Kind,
 				Kind:        protoreflect.Uint64Kind,
 				JSONName:    "requiredUint64",
 				JSONName:    "requiredUint64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "required_sfixed32",
 				Name:        "required_sfixed32",
@@ -1855,6 +1881,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.Sfixed32Kind,
 				Kind:        protoreflect.Sfixed32Kind,
 				JSONName:    "requiredSfixed32",
 				JSONName:    "requiredSfixed32",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "required_fixed32",
 				Name:        "required_fixed32",
@@ -1862,6 +1889,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.Fixed32Kind,
 				Kind:        protoreflect.Fixed32Kind,
 				JSONName:    "requiredFixed32",
 				JSONName:    "requiredFixed32",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "required_float",
 				Name:        "required_float",
@@ -1869,6 +1897,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.FloatKind,
 				Kind:        protoreflect.FloatKind,
 				JSONName:    "requiredFloat",
 				JSONName:    "requiredFloat",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "required_sfixed64",
 				Name:        "required_sfixed64",
@@ -1876,6 +1905,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.Sfixed64Kind,
 				Kind:        protoreflect.Sfixed64Kind,
 				JSONName:    "requiredSfixed64",
 				JSONName:    "requiredSfixed64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "required_fixed64",
 				Name:        "required_fixed64",
@@ -1883,6 +1913,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.Fixed64Kind,
 				Kind:        protoreflect.Fixed64Kind,
 				JSONName:    "requiredFixed64",
 				JSONName:    "requiredFixed64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "required_double",
 				Name:        "required_double",
@@ -1890,6 +1921,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.DoubleKind,
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "requiredDouble",
 				JSONName:    "requiredDouble",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "required_string",
 				Name:        "required_string",
@@ -1897,6 +1929,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "requiredString",
 				JSONName:    "requiredString",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "required_bytes",
 				Name:        "required_bytes",
@@ -1904,6 +1937,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.BytesKind,
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "requiredBytes",
 				JSONName:    "requiredBytes",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "required_Message",
 				Name:        "required_Message",
@@ -1911,6 +1945,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "requiredMessage",
 				JSONName:    "requiredMessage",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "requiredgroup",
 				Name:        "requiredgroup",
@@ -1918,6 +1953,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.GroupKind,
 				Kind:        protoreflect.GroupKind,
 				JSONName:    "requiredgroup",
 				JSONName:    "requiredgroup",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "repeated_bool",
 				Name:        "repeated_bool",
@@ -1925,6 +1961,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "repeatedBool",
 				JSONName:    "repeatedBool",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "repeated_enum",
 				Name:        "repeated_enum",
@@ -1932,6 +1969,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.EnumKind,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "repeatedEnum",
 				JSONName:    "repeatedEnum",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "repeated_int32",
 				Name:        "repeated_int32",
@@ -1939,6 +1977,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "repeatedInt32",
 				JSONName:    "repeatedInt32",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "repeated_sint32",
 				Name:        "repeated_sint32",
@@ -1946,6 +1985,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Sint32Kind,
 				Kind:        protoreflect.Sint32Kind,
 				JSONName:    "repeatedSint32",
 				JSONName:    "repeatedSint32",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "repeated_uint32",
 				Name:        "repeated_uint32",
@@ -1953,6 +1993,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Uint32Kind,
 				Kind:        protoreflect.Uint32Kind,
 				JSONName:    "repeatedUint32",
 				JSONName:    "repeatedUint32",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "repeated_int64",
 				Name:        "repeated_int64",
@@ -1960,6 +2001,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Int64Kind,
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "repeatedInt64",
 				JSONName:    "repeatedInt64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "repeated_sint64",
 				Name:        "repeated_sint64",
@@ -1967,6 +2009,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Sint64Kind,
 				Kind:        protoreflect.Sint64Kind,
 				JSONName:    "repeatedSint64",
 				JSONName:    "repeatedSint64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "repeated_uint64",
 				Name:        "repeated_uint64",
@@ -1974,6 +2017,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Uint64Kind,
 				Kind:        protoreflect.Uint64Kind,
 				JSONName:    "repeatedUint64",
 				JSONName:    "repeatedUint64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "repeated_sfixed32",
 				Name:        "repeated_sfixed32",
@@ -1981,6 +2025,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Sfixed32Kind,
 				Kind:        protoreflect.Sfixed32Kind,
 				JSONName:    "repeatedSfixed32",
 				JSONName:    "repeatedSfixed32",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "repeated_fixed32",
 				Name:        "repeated_fixed32",
@@ -1988,6 +2033,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Fixed32Kind,
 				Kind:        protoreflect.Fixed32Kind,
 				JSONName:    "repeatedFixed32",
 				JSONName:    "repeatedFixed32",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "repeated_float",
 				Name:        "repeated_float",
@@ -1995,6 +2041,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.FloatKind,
 				Kind:        protoreflect.FloatKind,
 				JSONName:    "repeatedFloat",
 				JSONName:    "repeatedFloat",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "repeated_sfixed64",
 				Name:        "repeated_sfixed64",
@@ -2002,6 +2049,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Sfixed64Kind,
 				Kind:        protoreflect.Sfixed64Kind,
 				JSONName:    "repeatedSfixed64",
 				JSONName:    "repeatedSfixed64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "repeated_fixed64",
 				Name:        "repeated_fixed64",
@@ -2009,6 +2057,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Fixed64Kind,
 				Kind:        protoreflect.Fixed64Kind,
 				JSONName:    "repeatedFixed64",
 				JSONName:    "repeatedFixed64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "repeated_double",
 				Name:        "repeated_double",
@@ -2016,6 +2065,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.DoubleKind,
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "repeatedDouble",
 				JSONName:    "repeatedDouble",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "repeated_string",
 				Name:        "repeated_string",
@@ -2023,6 +2073,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "repeatedString",
 				JSONName:    "repeatedString",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "repeated_bytes",
 				Name:        "repeated_bytes",
@@ -2030,6 +2081,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.BytesKind,
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "repeatedBytes",
 				JSONName:    "repeatedBytes",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "repeated_Message",
 				Name:        "repeated_Message",
@@ -2037,6 +2089,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "repeatedMessage",
 				JSONName:    "repeatedMessage",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "repeatedgroup",
 				Name:        "repeatedgroup",
@@ -2044,6 +2097,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.GroupKind,
 				Kind:        protoreflect.GroupKind,
 				JSONName:    "repeatedgroup",
 				JSONName:    "repeatedgroup",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_bool",
 				Name:        "default_bool",
@@ -2052,6 +2106,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "defaultBool",
 				JSONName:    "defaultBool",
 				Default:     protoreflect.ValueOf(bool(true)),
 				Default:     protoreflect.ValueOf(bool(true)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_enum",
 				Name:        "default_enum",
@@ -2060,6 +2115,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.EnumKind,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "defaultEnum",
 				JSONName:    "defaultEnum",
 				Default:     protoreflect.ValueOf(string("ONE")),
 				Default:     protoreflect.ValueOf(string("ONE")),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_int32",
 				Name:        "default_int32",
@@ -2068,6 +2124,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "defaultInt32",
 				JSONName:    "defaultInt32",
 				Default:     protoreflect.ValueOf(int32(1)),
 				Default:     protoreflect.ValueOf(int32(1)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_sint32",
 				Name:        "default_sint32",
@@ -2076,6 +2133,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Sint32Kind,
 				Kind:        protoreflect.Sint32Kind,
 				JSONName:    "defaultSint32",
 				JSONName:    "defaultSint32",
 				Default:     protoreflect.ValueOf(int32(1)),
 				Default:     protoreflect.ValueOf(int32(1)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_uint32",
 				Name:        "default_uint32",
@@ -2084,6 +2142,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Uint32Kind,
 				Kind:        protoreflect.Uint32Kind,
 				JSONName:    "defaultUint32",
 				JSONName:    "defaultUint32",
 				Default:     protoreflect.ValueOf(uint32(1)),
 				Default:     protoreflect.ValueOf(uint32(1)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_int64",
 				Name:        "default_int64",
@@ -2092,6 +2151,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Int64Kind,
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "defaultInt64",
 				JSONName:    "defaultInt64",
 				Default:     protoreflect.ValueOf(int64(1)),
 				Default:     protoreflect.ValueOf(int64(1)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_sint64",
 				Name:        "default_sint64",
@@ -2100,6 +2160,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Sint64Kind,
 				Kind:        protoreflect.Sint64Kind,
 				JSONName:    "defaultSint64",
 				JSONName:    "defaultSint64",
 				Default:     protoreflect.ValueOf(int64(1)),
 				Default:     protoreflect.ValueOf(int64(1)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_uint64",
 				Name:        "default_uint64",
@@ -2108,6 +2169,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Uint64Kind,
 				Kind:        protoreflect.Uint64Kind,
 				JSONName:    "defaultUint64",
 				JSONName:    "defaultUint64",
 				Default:     protoreflect.ValueOf(uint64(1)),
 				Default:     protoreflect.ValueOf(uint64(1)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_sfixed32",
 				Name:        "default_sfixed32",
@@ -2116,6 +2178,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Sfixed32Kind,
 				Kind:        protoreflect.Sfixed32Kind,
 				JSONName:    "defaultSfixed32",
 				JSONName:    "defaultSfixed32",
 				Default:     protoreflect.ValueOf(int32(1)),
 				Default:     protoreflect.ValueOf(int32(1)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_fixed32",
 				Name:        "default_fixed32",
@@ -2124,6 +2187,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Fixed32Kind,
 				Kind:        protoreflect.Fixed32Kind,
 				JSONName:    "defaultFixed32",
 				JSONName:    "defaultFixed32",
 				Default:     protoreflect.ValueOf(uint32(1)),
 				Default:     protoreflect.ValueOf(uint32(1)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_float",
 				Name:        "default_float",
@@ -2132,6 +2196,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.FloatKind,
 				Kind:        protoreflect.FloatKind,
 				JSONName:    "defaultFloat",
 				JSONName:    "defaultFloat",
 				Default:     protoreflect.ValueOf(float32(3.14)),
 				Default:     protoreflect.ValueOf(float32(3.14)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_sfixed64",
 				Name:        "default_sfixed64",
@@ -2140,6 +2205,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Sfixed64Kind,
 				Kind:        protoreflect.Sfixed64Kind,
 				JSONName:    "defaultSfixed64",
 				JSONName:    "defaultSfixed64",
 				Default:     protoreflect.ValueOf(int64(1)),
 				Default:     protoreflect.ValueOf(int64(1)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_fixed64",
 				Name:        "default_fixed64",
@@ -2148,6 +2214,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Fixed64Kind,
 				Kind:        protoreflect.Fixed64Kind,
 				JSONName:    "defaultFixed64",
 				JSONName:    "defaultFixed64",
 				Default:     protoreflect.ValueOf(uint64(1)),
 				Default:     protoreflect.ValueOf(uint64(1)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_double",
 				Name:        "default_double",
@@ -2156,6 +2223,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.DoubleKind,
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "defaultDouble",
 				JSONName:    "defaultDouble",
 				Default:     protoreflect.ValueOf(float64(3.1415)),
 				Default:     protoreflect.ValueOf(float64(3.1415)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_string",
 				Name:        "default_string",
@@ -2164,6 +2232,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "defaultString",
 				JSONName:    "defaultString",
 				Default:     protoreflect.ValueOf(string("hello,\"world!\"\n")),
 				Default:     protoreflect.ValueOf(string("hello,\"world!\"\n")),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_bytes",
 				Name:        "default_bytes",
@@ -2172,6 +2241,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.BytesKind,
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "defaultBytes",
 				JSONName:    "defaultBytes",
 				Default:     protoreflect.ValueOf(("hello,ޭ\xbe\xef")),
 				Default:     protoreflect.ValueOf(("hello,ޭ\xbe\xef")),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_zero_string",
 				Name:        "default_zero_string",
@@ -2180,6 +2250,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "defaultZeroString",
 				JSONName:    "defaultZeroString",
 				Default:     protoreflect.ValueOf(string("")),
 				Default:     protoreflect.ValueOf(string("")),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_zero_bytes",
 				Name:        "default_zero_bytes",
@@ -2188,6 +2259,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.BytesKind,
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "defaultZeroBytes",
 				JSONName:    "defaultZeroBytes",
 				Default:     protoreflect.ValueOf(("")),
 				Default:     protoreflect.ValueOf(("")),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_float_neginf",
 				Name:        "default_float_neginf",
@@ -2196,6 +2268,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.FloatKind,
 				Kind:        protoreflect.FloatKind,
 				JSONName:    "defaultFloatNeginf",
 				JSONName:    "defaultFloatNeginf",
 				Default:     protoreflect.ValueOf(float32(math.Inf(-1))),
 				Default:     protoreflect.ValueOf(float32(math.Inf(-1))),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_float_posinf",
 				Name:        "default_float_posinf",
@@ -2204,6 +2277,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.FloatKind,
 				Kind:        protoreflect.FloatKind,
 				JSONName:    "defaultFloatPosinf",
 				JSONName:    "defaultFloatPosinf",
 				Default:     protoreflect.ValueOf(float32(math.Inf(+1))),
 				Default:     protoreflect.ValueOf(float32(math.Inf(+1))),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_float_nan",
 				Name:        "default_float_nan",
@@ -2212,6 +2286,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.FloatKind,
 				Kind:        protoreflect.FloatKind,
 				JSONName:    "defaultFloatNan",
 				JSONName:    "defaultFloatNan",
 				Default:     protoreflect.ValueOf(float32(math.NaN())),
 				Default:     protoreflect.ValueOf(float32(math.NaN())),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_double_neginf",
 				Name:        "default_double_neginf",
@@ -2220,6 +2295,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.DoubleKind,
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "defaultDoubleNeginf",
 				JSONName:    "defaultDoubleNeginf",
 				Default:     protoreflect.ValueOf(float64(math.Inf(-1))),
 				Default:     protoreflect.ValueOf(float64(math.Inf(-1))),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_double_posinf",
 				Name:        "default_double_posinf",
@@ -2228,6 +2304,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.DoubleKind,
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "defaultDoublePosinf",
 				JSONName:    "defaultDoublePosinf",
 				Default:     protoreflect.ValueOf(float64(math.Inf(+1))),
 				Default:     protoreflect.ValueOf(float64(math.Inf(+1))),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_double_nan",
 				Name:        "default_double_nan",
@@ -2236,6 +2313,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.DoubleKind,
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "defaultDoubleNan",
 				JSONName:    "defaultDoubleNan",
 				Default:     protoreflect.ValueOf(float64(math.NaN())),
 				Default:     protoreflect.ValueOf(float64(math.NaN())),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "map_int32_int64",
 				Name:        "map_int32_int64",
@@ -2243,6 +2321,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "mapInt32Int64",
 				JSONName:    "mapInt32Int64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "map_string_message",
 				Name:        "map_string_message",
@@ -2250,6 +2329,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "mapStringMessage",
 				JSONName:    "mapStringMessage",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "map_fixed64_enum",
 				Name:        "map_fixed64_enum",
@@ -2257,6 +2337,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "mapFixed64Enum",
 				JSONName:    "mapFixed64Enum",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_bool",
 				Name:        "oneof_bool",
@@ -2265,6 +2346,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "oneofBool",
 				JSONName:    "oneofBool",
 				OneofName:   "oneof_field",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_enum",
 				Name:        "oneof_enum",
@@ -2273,6 +2355,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.EnumKind,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "oneofEnum",
 				JSONName:    "oneofEnum",
 				OneofName:   "oneof_field",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_int32",
 				Name:        "oneof_int32",
@@ -2281,6 +2364,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "oneofInt32",
 				JSONName:    "oneofInt32",
 				OneofName:   "oneof_field",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_sint32",
 				Name:        "oneof_sint32",
@@ -2289,6 +2373,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Sint32Kind,
 				Kind:        protoreflect.Sint32Kind,
 				JSONName:    "oneofSint32",
 				JSONName:    "oneofSint32",
 				OneofName:   "oneof_field",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_uint32",
 				Name:        "oneof_uint32",
@@ -2297,6 +2382,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Uint32Kind,
 				Kind:        protoreflect.Uint32Kind,
 				JSONName:    "oneofUint32",
 				JSONName:    "oneofUint32",
 				OneofName:   "oneof_field",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_int64",
 				Name:        "oneof_int64",
@@ -2305,6 +2391,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Int64Kind,
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "oneofInt64",
 				JSONName:    "oneofInt64",
 				OneofName:   "oneof_field",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_sint64",
 				Name:        "oneof_sint64",
@@ -2313,6 +2400,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Sint64Kind,
 				Kind:        protoreflect.Sint64Kind,
 				JSONName:    "oneofSint64",
 				JSONName:    "oneofSint64",
 				OneofName:   "oneof_field",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_uint64",
 				Name:        "oneof_uint64",
@@ -2321,6 +2409,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Uint64Kind,
 				Kind:        protoreflect.Uint64Kind,
 				JSONName:    "oneofUint64",
 				JSONName:    "oneofUint64",
 				OneofName:   "oneof_field",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_sfixed32",
 				Name:        "oneof_sfixed32",
@@ -2329,6 +2418,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Sfixed32Kind,
 				Kind:        protoreflect.Sfixed32Kind,
 				JSONName:    "oneofSfixed32",
 				JSONName:    "oneofSfixed32",
 				OneofName:   "oneof_field",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_fixed32",
 				Name:        "oneof_fixed32",
@@ -2337,6 +2427,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Fixed32Kind,
 				Kind:        protoreflect.Fixed32Kind,
 				JSONName:    "oneofFixed32",
 				JSONName:    "oneofFixed32",
 				OneofName:   "oneof_field",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_float",
 				Name:        "oneof_float",
@@ -2345,6 +2436,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.FloatKind,
 				Kind:        protoreflect.FloatKind,
 				JSONName:    "oneofFloat",
 				JSONName:    "oneofFloat",
 				OneofName:   "oneof_field",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_sfixed64",
 				Name:        "oneof_sfixed64",
@@ -2353,6 +2445,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Sfixed64Kind,
 				Kind:        protoreflect.Sfixed64Kind,
 				JSONName:    "oneofSfixed64",
 				JSONName:    "oneofSfixed64",
 				OneofName:   "oneof_field",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_fixed64",
 				Name:        "oneof_fixed64",
@@ -2361,6 +2454,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Fixed64Kind,
 				Kind:        protoreflect.Fixed64Kind,
 				JSONName:    "oneofFixed64",
 				JSONName:    "oneofFixed64",
 				OneofName:   "oneof_field",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_double",
 				Name:        "oneof_double",
@@ -2369,6 +2463,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.DoubleKind,
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "oneofDouble",
 				JSONName:    "oneofDouble",
 				OneofName:   "oneof_field",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_string",
 				Name:        "oneof_string",
@@ -2377,6 +2472,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "oneofString",
 				JSONName:    "oneofString",
 				OneofName:   "oneof_field",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_bytes",
 				Name:        "oneof_bytes",
@@ -2385,6 +2481,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.BytesKind,
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "oneofBytes",
 				JSONName:    "oneofBytes",
 				OneofName:   "oneof_field",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_Message",
 				Name:        "oneof_Message",
@@ -2393,6 +2490,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "oneofMessage",
 				JSONName:    "oneofMessage",
 				OneofName:   "oneof_field",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneofgroup",
 				Name:        "oneofgroup",
@@ -2401,6 +2499,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.GroupKind,
 				Kind:        protoreflect.GroupKind,
 				JSONName:    "oneofgroup",
 				JSONName:    "oneofgroup",
 				OneofName:   "oneof_field",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_largest_tag",
 				Name:        "oneof_largest_tag",
@@ -2409,6 +2508,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "oneofLargestTag",
 				JSONName:    "oneofLargestTag",
 				OneofName:   "oneof_field",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_two_1",
 				Name:        "oneof_two_1",
@@ -2417,6 +2517,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "oneofTwo1",
 				JSONName:    "oneofTwo1",
 				OneofName:   "oneof_two",
 				OneofName:   "oneof_two",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_two_2",
 				Name:        "oneof_two_2",
@@ -2425,6 +2526,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Int64Kind,
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "oneofTwo2",
 				JSONName:    "oneofTwo2",
 				OneofName:   "oneof_two",
 				OneofName:   "oneof_two",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 		Oneofs: []prototype.Oneof{
 		Oneofs: []prototype.Oneof{
@@ -2443,6 +2545,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "optionalGroup",
 				JSONName:    "optionalGroup",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -2455,6 +2558,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "requiredGroup",
 				JSONName:    "requiredGroup",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -2467,6 +2571,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "repeatedGroup",
 				JSONName:    "repeatedGroup",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -2479,6 +2584,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "key",
 				JSONName:    "key",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "value",
 				Name:        "value",
@@ -2486,8 +2592,10 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int64Kind,
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "value",
 				JSONName:    "value",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
+		IsMapEntry: true,
 	},
 	},
 	{
 	{
 		Name: "MapStringMessageEntry",
 		Name: "MapStringMessageEntry",
@@ -2498,6 +2606,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "key",
 				JSONName:    "key",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "value",
 				Name:        "value",
@@ -2505,8 +2614,10 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "value",
 				JSONName:    "value",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
+		IsMapEntry: true,
 	},
 	},
 	{
 	{
 		Name: "MapFixed64EnumEntry",
 		Name: "MapFixed64EnumEntry",
@@ -2517,6 +2628,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Fixed64Kind,
 				Kind:        protoreflect.Fixed64Kind,
 				JSONName:    "key",
 				JSONName:    "key",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "value",
 				Name:        "value",
@@ -2524,8 +2636,10 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.EnumKind,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "value",
 				JSONName:    "value",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
+		IsMapEntry: true,
 	},
 	},
 	{
 	{
 		Name: "OneofGroup",
 		Name: "OneofGroup",
@@ -2536,6 +2650,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "oneofGroupField",
 				JSONName:    "oneofGroupField",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},

+ 3 - 0
cmd/protoc-gen-go/testdata/proto2/nested_messages.pb.go

@@ -263,6 +263,7 @@ var xxx_NestedMessages_ProtoFile_MessageDescs = [3]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "l2",
 				JSONName:    "l2",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "l3",
 				Name:        "l3",
@@ -270,6 +271,7 @@ var xxx_NestedMessages_ProtoFile_MessageDescs = [3]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "l3",
 				JSONName:    "l3",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -282,6 +284,7 @@ var xxx_NestedMessages_ProtoFile_MessageDescs = [3]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "l3",
 				JSONName:    "l3",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},

+ 2 - 0
cmd/protoc-gen-go/testdata/proto2/proto2.pb.go

@@ -137,6 +137,7 @@ var xxx_Proto2_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "i32",
 				JSONName:    "i32",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "m",
 				Name:        "m",
@@ -144,6 +145,7 @@ var xxx_Proto2_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "m",
 				JSONName:    "m",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},

+ 46 - 0
cmd/protoc-gen-go/testdata/proto3/fields.pb.go

@@ -582,6 +582,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "optionalBool",
 				JSONName:    "optionalBool",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_enum",
 				Name:        "optional_enum",
@@ -589,6 +590,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.EnumKind,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "optionalEnum",
 				JSONName:    "optionalEnum",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_int32",
 				Name:        "optional_int32",
@@ -596,6 +598,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "optionalInt32",
 				JSONName:    "optionalInt32",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_sint32",
 				Name:        "optional_sint32",
@@ -603,6 +606,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Sint32Kind,
 				Kind:        protoreflect.Sint32Kind,
 				JSONName:    "optionalSint32",
 				JSONName:    "optionalSint32",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_uint32",
 				Name:        "optional_uint32",
@@ -610,6 +614,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Uint32Kind,
 				Kind:        protoreflect.Uint32Kind,
 				JSONName:    "optionalUint32",
 				JSONName:    "optionalUint32",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_int64",
 				Name:        "optional_int64",
@@ -617,6 +622,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int64Kind,
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "optionalInt64",
 				JSONName:    "optionalInt64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_sint64",
 				Name:        "optional_sint64",
@@ -624,6 +630,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Sint64Kind,
 				Kind:        protoreflect.Sint64Kind,
 				JSONName:    "optionalSint64",
 				JSONName:    "optionalSint64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_uint64",
 				Name:        "optional_uint64",
@@ -631,6 +638,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Uint64Kind,
 				Kind:        protoreflect.Uint64Kind,
 				JSONName:    "optionalUint64",
 				JSONName:    "optionalUint64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_sfixed32",
 				Name:        "optional_sfixed32",
@@ -638,6 +646,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Sfixed32Kind,
 				Kind:        protoreflect.Sfixed32Kind,
 				JSONName:    "optionalSfixed32",
 				JSONName:    "optionalSfixed32",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_fixed32",
 				Name:        "optional_fixed32",
@@ -645,6 +654,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Fixed32Kind,
 				Kind:        protoreflect.Fixed32Kind,
 				JSONName:    "optionalFixed32",
 				JSONName:    "optionalFixed32",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_float",
 				Name:        "optional_float",
@@ -652,6 +662,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.FloatKind,
 				Kind:        protoreflect.FloatKind,
 				JSONName:    "optionalFloat",
 				JSONName:    "optionalFloat",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_sfixed64",
 				Name:        "optional_sfixed64",
@@ -659,6 +670,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Sfixed64Kind,
 				Kind:        protoreflect.Sfixed64Kind,
 				JSONName:    "optionalSfixed64",
 				JSONName:    "optionalSfixed64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_fixed64",
 				Name:        "optional_fixed64",
@@ -666,6 +678,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Fixed64Kind,
 				Kind:        protoreflect.Fixed64Kind,
 				JSONName:    "optionalFixed64",
 				JSONName:    "optionalFixed64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_double",
 				Name:        "optional_double",
@@ -673,6 +686,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.DoubleKind,
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "optionalDouble",
 				JSONName:    "optionalDouble",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_string",
 				Name:        "optional_string",
@@ -680,6 +694,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "optionalString",
 				JSONName:    "optionalString",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_bytes",
 				Name:        "optional_bytes",
@@ -687,6 +702,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.BytesKind,
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "optionalBytes",
 				JSONName:    "optionalBytes",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optional_Message",
 				Name:        "optional_Message",
@@ -694,6 +710,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "optionalMessage",
 				JSONName:    "optionalMessage",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "repeated_bool",
 				Name:        "repeated_bool",
@@ -701,6 +718,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "repeatedBool",
 				JSONName:    "repeatedBool",
+				IsPacked:    prototype.True,
 			},
 			},
 			{
 			{
 				Name:        "repeated_enum",
 				Name:        "repeated_enum",
@@ -708,6 +726,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.EnumKind,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "repeatedEnum",
 				JSONName:    "repeatedEnum",
+				IsPacked:    prototype.True,
 			},
 			},
 			{
 			{
 				Name:        "repeated_int32",
 				Name:        "repeated_int32",
@@ -715,6 +734,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "repeatedInt32",
 				JSONName:    "repeatedInt32",
+				IsPacked:    prototype.True,
 			},
 			},
 			{
 			{
 				Name:        "repeated_sint32",
 				Name:        "repeated_sint32",
@@ -722,6 +742,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Sint32Kind,
 				Kind:        protoreflect.Sint32Kind,
 				JSONName:    "repeatedSint32",
 				JSONName:    "repeatedSint32",
+				IsPacked:    prototype.True,
 			},
 			},
 			{
 			{
 				Name:        "repeated_uint32",
 				Name:        "repeated_uint32",
@@ -729,6 +750,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Uint32Kind,
 				Kind:        protoreflect.Uint32Kind,
 				JSONName:    "repeatedUint32",
 				JSONName:    "repeatedUint32",
+				IsPacked:    prototype.True,
 			},
 			},
 			{
 			{
 				Name:        "repeated_int64",
 				Name:        "repeated_int64",
@@ -736,6 +758,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Int64Kind,
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "repeatedInt64",
 				JSONName:    "repeatedInt64",
+				IsPacked:    prototype.True,
 			},
 			},
 			{
 			{
 				Name:        "repeated_sint64",
 				Name:        "repeated_sint64",
@@ -743,6 +766,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Sint64Kind,
 				Kind:        protoreflect.Sint64Kind,
 				JSONName:    "repeatedSint64",
 				JSONName:    "repeatedSint64",
+				IsPacked:    prototype.True,
 			},
 			},
 			{
 			{
 				Name:        "repeated_uint64",
 				Name:        "repeated_uint64",
@@ -750,6 +774,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Uint64Kind,
 				Kind:        protoreflect.Uint64Kind,
 				JSONName:    "repeatedUint64",
 				JSONName:    "repeatedUint64",
+				IsPacked:    prototype.True,
 			},
 			},
 			{
 			{
 				Name:        "repeated_sfixed32",
 				Name:        "repeated_sfixed32",
@@ -757,6 +782,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Sfixed32Kind,
 				Kind:        protoreflect.Sfixed32Kind,
 				JSONName:    "repeatedSfixed32",
 				JSONName:    "repeatedSfixed32",
+				IsPacked:    prototype.True,
 			},
 			},
 			{
 			{
 				Name:        "repeated_fixed32",
 				Name:        "repeated_fixed32",
@@ -764,6 +790,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Fixed32Kind,
 				Kind:        protoreflect.Fixed32Kind,
 				JSONName:    "repeatedFixed32",
 				JSONName:    "repeatedFixed32",
+				IsPacked:    prototype.True,
 			},
 			},
 			{
 			{
 				Name:        "repeated_float",
 				Name:        "repeated_float",
@@ -771,6 +798,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.FloatKind,
 				Kind:        protoreflect.FloatKind,
 				JSONName:    "repeatedFloat",
 				JSONName:    "repeatedFloat",
+				IsPacked:    prototype.True,
 			},
 			},
 			{
 			{
 				Name:        "repeated_sfixed64",
 				Name:        "repeated_sfixed64",
@@ -778,6 +806,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Sfixed64Kind,
 				Kind:        protoreflect.Sfixed64Kind,
 				JSONName:    "repeatedSfixed64",
 				JSONName:    "repeatedSfixed64",
+				IsPacked:    prototype.True,
 			},
 			},
 			{
 			{
 				Name:        "repeated_fixed64",
 				Name:        "repeated_fixed64",
@@ -785,6 +814,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Fixed64Kind,
 				Kind:        protoreflect.Fixed64Kind,
 				JSONName:    "repeatedFixed64",
 				JSONName:    "repeatedFixed64",
+				IsPacked:    prototype.True,
 			},
 			},
 			{
 			{
 				Name:        "repeated_double",
 				Name:        "repeated_double",
@@ -792,6 +822,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.DoubleKind,
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "repeatedDouble",
 				JSONName:    "repeatedDouble",
+				IsPacked:    prototype.True,
 			},
 			},
 			{
 			{
 				Name:        "repeated_string",
 				Name:        "repeated_string",
@@ -799,6 +830,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "repeatedString",
 				JSONName:    "repeatedString",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "repeated_bytes",
 				Name:        "repeated_bytes",
@@ -806,6 +838,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.BytesKind,
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "repeatedBytes",
 				JSONName:    "repeatedBytes",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "repeated_Message",
 				Name:        "repeated_Message",
@@ -813,6 +846,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "repeatedMessage",
 				JSONName:    "repeatedMessage",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "map_int32_int64",
 				Name:        "map_int32_int64",
@@ -820,6 +854,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "mapInt32Int64",
 				JSONName:    "mapInt32Int64",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "map_string_message",
 				Name:        "map_string_message",
@@ -827,6 +862,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "mapStringMessage",
 				JSONName:    "mapStringMessage",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "map_fixed64_enum",
 				Name:        "map_fixed64_enum",
@@ -834,6 +870,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "mapFixed64Enum",
 				JSONName:    "mapFixed64Enum",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -846,6 +883,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "key",
 				JSONName:    "key",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "value",
 				Name:        "value",
@@ -853,8 +891,10 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int64Kind,
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "value",
 				JSONName:    "value",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
+		IsMapEntry: true,
 	},
 	},
 	{
 	{
 		Name: "MapStringMessageEntry",
 		Name: "MapStringMessageEntry",
@@ -865,6 +905,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "key",
 				JSONName:    "key",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "value",
 				Name:        "value",
@@ -872,8 +913,10 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "value",
 				JSONName:    "value",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
+		IsMapEntry: true,
 	},
 	},
 	{
 	{
 		Name: "MapFixed64EnumEntry",
 		Name: "MapFixed64EnumEntry",
@@ -884,6 +927,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Fixed64Kind,
 				Kind:        protoreflect.Fixed64Kind,
 				JSONName:    "key",
 				JSONName:    "key",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "value",
 				Name:        "value",
@@ -891,8 +935,10 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.EnumKind,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "value",
 				JSONName:    "value",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
+		IsMapEntry: true,
 	},
 	},
 	{
 	{
 		Name: "Message",
 		Name: "Message",

+ 10 - 16
internal/encoding/pack/pack_test.go

@@ -14,8 +14,6 @@ import (
 	pref "github.com/golang/protobuf/v2/reflect/protoreflect"
 	pref "github.com/golang/protobuf/v2/reflect/protoreflect"
 	ptype "github.com/golang/protobuf/v2/reflect/prototype"
 	ptype "github.com/golang/protobuf/v2/reflect/prototype"
 	cmp "github.com/google/go-cmp/cmp"
 	cmp "github.com/google/go-cmp/cmp"
-
-	descriptorpb "github.com/golang/protobuf/v2/types/descriptor"
 )
 )
 
 
 var msgDesc = func() pref.MessageDescriptor {
 var msgDesc = func() pref.MessageDescriptor {
@@ -23,16 +21,16 @@ var msgDesc = func() pref.MessageDescriptor {
 		Syntax:   pref.Proto2,
 		Syntax:   pref.Proto2,
 		FullName: "Message",
 		FullName: "Message",
 		Fields: []ptype.Field{
 		Fields: []ptype.Field{
-			{Name: "F1", Number: 1, Cardinality: pref.Repeated, Kind: pref.BoolKind, Options: packedOpt(true)},
-			{Name: "F2", Number: 2, Cardinality: pref.Repeated, Kind: pref.Int64Kind, Options: packedOpt(true)},
-			{Name: "F3", Number: 3, Cardinality: pref.Repeated, Kind: pref.Sint64Kind, Options: packedOpt(true)},
-			{Name: "F4", Number: 4, Cardinality: pref.Repeated, Kind: pref.Uint64Kind, Options: packedOpt(true)},
-			{Name: "F5", Number: 5, Cardinality: pref.Repeated, Kind: pref.Fixed32Kind, Options: packedOpt(true)},
-			{Name: "F6", Number: 6, Cardinality: pref.Repeated, Kind: pref.Sfixed32Kind, Options: packedOpt(true)},
-			{Name: "F7", Number: 7, Cardinality: pref.Repeated, Kind: pref.FloatKind, Options: packedOpt(true)},
-			{Name: "F8", Number: 8, Cardinality: pref.Repeated, Kind: pref.Fixed64Kind, Options: packedOpt(true)},
-			{Name: "F9", Number: 9, Cardinality: pref.Repeated, Kind: pref.Sfixed64Kind, Options: packedOpt(true)},
-			{Name: "F10", Number: 10, Cardinality: pref.Repeated, Kind: pref.DoubleKind, Options: packedOpt(true)},
+			{Name: "F1", Number: 1, Cardinality: pref.Repeated, Kind: pref.BoolKind, IsPacked: ptype.True},
+			{Name: "F2", Number: 2, Cardinality: pref.Repeated, Kind: pref.Int64Kind, IsPacked: ptype.True},
+			{Name: "F3", Number: 3, Cardinality: pref.Repeated, Kind: pref.Sint64Kind, IsPacked: ptype.True},
+			{Name: "F4", Number: 4, Cardinality: pref.Repeated, Kind: pref.Uint64Kind, IsPacked: ptype.True},
+			{Name: "F5", Number: 5, Cardinality: pref.Repeated, Kind: pref.Fixed32Kind, IsPacked: ptype.True},
+			{Name: "F6", Number: 6, Cardinality: pref.Repeated, Kind: pref.Sfixed32Kind, IsPacked: ptype.True},
+			{Name: "F7", Number: 7, Cardinality: pref.Repeated, Kind: pref.FloatKind, IsPacked: ptype.True},
+			{Name: "F8", Number: 8, Cardinality: pref.Repeated, Kind: pref.Fixed64Kind, IsPacked: ptype.True},
+			{Name: "F9", Number: 9, Cardinality: pref.Repeated, Kind: pref.Sfixed64Kind, IsPacked: ptype.True},
+			{Name: "F10", Number: 10, Cardinality: pref.Repeated, Kind: pref.DoubleKind, IsPacked: ptype.True},
 			{Name: "F11", Number: 11, Cardinality: pref.Optional, Kind: pref.StringKind},
 			{Name: "F11", Number: 11, Cardinality: pref.Optional, Kind: pref.StringKind},
 			{Name: "F12", Number: 12, Cardinality: pref.Optional, Kind: pref.BytesKind},
 			{Name: "F12", Number: 12, Cardinality: pref.Optional, Kind: pref.BytesKind},
 			{Name: "F13", Number: 13, Cardinality: pref.Optional, Kind: pref.MessageKind, MessageType: ptype.PlaceholderMessage("Message")},
 			{Name: "F13", Number: 13, Cardinality: pref.Optional, Kind: pref.MessageKind, MessageType: ptype.PlaceholderMessage("Message")},
@@ -44,10 +42,6 @@ var msgDesc = func() pref.MessageDescriptor {
 	return mtyp
 	return mtyp
 }()
 }()
 
 
-func packedOpt(b bool) *descriptorpb.FieldOptions {
-	return &descriptorpb.FieldOptions{Packed: &b}
-}
-
 // dhex decodes a hex-string and returns the bytes and panics if s is invalid.
 // dhex decodes a hex-string and returns the bytes and panics if s is invalid.
 func dhex(s string) []byte {
 func dhex(s string) []byte {
 	b, err := hex.DecodeString(s)
 	b, err := hex.DecodeString(s)

+ 6 - 3
internal/impl/message_test.go

@@ -592,7 +592,8 @@ func mustMakeMapEntry(n pref.FieldNumber, keyKind, valKind pref.Kind) ptype.Fiel
 				{Name: "key", Number: 1, Cardinality: pref.Optional, Kind: keyKind},
 				{Name: "key", Number: 1, Cardinality: pref.Optional, Kind: keyKind},
 				{Name: "value", Number: 2, Cardinality: pref.Optional, Kind: valKind},
 				{Name: "value", Number: 2, Cardinality: pref.Optional, Kind: valKind},
 			},
 			},
-			Options: &descriptorpb.MessageOptions{MapEntry: scalar.Bool(true)},
+			Options:    &descriptorpb.MessageOptions{MapEntry: scalar.Bool(true)},
+			IsMapEntry: true,
 		}),
 		}),
 	}
 	}
 }
 }
@@ -1007,7 +1008,8 @@ var enumMapDesc = mustMakeMessageDesc(ptype.StandaloneMessage{
 		{Name: "key", Number: 1, Cardinality: pref.Optional, Kind: pref.StringKind},
 		{Name: "key", Number: 1, Cardinality: pref.Optional, Kind: pref.StringKind},
 		{Name: "value", Number: 2, Cardinality: pref.Optional, Kind: pref.EnumKind, EnumType: enumProto3Type},
 		{Name: "value", Number: 2, Cardinality: pref.Optional, Kind: pref.EnumKind, EnumType: enumProto3Type},
 	},
 	},
-	Options: &descriptorpb.MessageOptions{MapEntry: scalar.Bool(true)},
+	Options:    &descriptorpb.MessageOptions{MapEntry: scalar.Bool(true)},
+	IsMapEntry: true,
 })
 })
 
 
 var messageMapDesc = mustMakeMessageDesc(ptype.StandaloneMessage{
 var messageMapDesc = mustMakeMessageDesc(ptype.StandaloneMessage{
@@ -1017,7 +1019,8 @@ var messageMapDesc = mustMakeMessageDesc(ptype.StandaloneMessage{
 		{Name: "key", Number: 1, Cardinality: pref.Optional, Kind: pref.StringKind},
 		{Name: "key", Number: 1, Cardinality: pref.Optional, Kind: pref.StringKind},
 		{Name: "value", Number: 2, Cardinality: pref.Optional, Kind: pref.MessageKind, MessageType: scalarProto3Type.Type},
 		{Name: "value", Number: 2, Cardinality: pref.Optional, Kind: pref.MessageKind, MessageType: scalarProto3Type.Type},
 	},
 	},
-	Options: &descriptorpb.MessageOptions{MapEntry: scalar.Bool(true)},
+	Options:    &descriptorpb.MessageOptions{MapEntry: scalar.Bool(true)},
+	IsMapEntry: true,
 })
 })
 
 
 func (m *EnumMessages) Type() pref.MessageType            { return enumMessagesType.Type }
 func (m *EnumMessages) Type() pref.MessageType            { return enumMessagesType.Type }

+ 4 - 3
internal/legacy/message.go

@@ -230,9 +230,10 @@ func (ms *messageDescSet) parseField(tag, tagKey, tagVal string, goType reflect.
 			f.MessageType = mv.ProtoReflect().Type()
 			f.MessageType = mv.ProtoReflect().Type()
 		} else if t.Kind() == reflect.Map {
 		} else if t.Kind() == reflect.Map {
 			m := &ptype.StandaloneMessage{
 			m := &ptype.StandaloneMessage{
-				Syntax:   parent.Syntax,
-				FullName: parent.FullName.Append(mapEntryName(f.Name)),
-				Options:  &descriptorpb.MessageOptions{MapEntry: scalar.Bool(true)},
+				Syntax:     parent.Syntax,
+				FullName:   parent.FullName.Append(mapEntryName(f.Name)),
+				Options:    &descriptorpb.MessageOptions{MapEntry: scalar.Bool(true)},
+				IsMapEntry: true,
 				Fields: []ptype.Field{
 				Fields: []ptype.Field{
 					ms.parseField(tagKey, "", "", t.Key(), nil),
 					ms.parseField(tagKey, "", "", t.Key(), nil),
 					ms.parseField(tagVal, "", "", t.Elem(), nil),
 					ms.parseField(tagVal, "", "", t.Elem(), nil),

+ 11 - 2
reflect/protodesc/protodesc.go

@@ -122,13 +122,23 @@ func messagesFromDescriptorProto(mds []*descriptorpb.DescriptorProto, syntax pro
 		var m prototype.Message
 		var m prototype.Message
 		m.Name = protoreflect.Name(md.GetName())
 		m.Name = protoreflect.Name(md.GetName())
 		m.Options = md.GetOptions()
 		m.Options = md.GetOptions()
+		m.IsMapEntry = md.GetOptions().GetMapEntry()
 		for _, fd := range md.GetField() {
 		for _, fd := range md.GetField() {
 			var f prototype.Field
 			var f prototype.Field
 			f.Name = protoreflect.Name(fd.GetName())
 			f.Name = protoreflect.Name(fd.GetName())
 			f.Number = protoreflect.FieldNumber(fd.GetNumber())
 			f.Number = protoreflect.FieldNumber(fd.GetNumber())
 			f.Cardinality = protoreflect.Cardinality(fd.GetLabel())
 			f.Cardinality = protoreflect.Cardinality(fd.GetLabel())
 			f.Kind = protoreflect.Kind(fd.GetType())
 			f.Kind = protoreflect.Kind(fd.GetType())
-			f.Options = fd.GetOptions()
+			opts := fd.GetOptions()
+			f.Options = opts
+			if opts != nil && opts.Packed != nil {
+				if *opts.Packed {
+					f.IsPacked = prototype.True
+				} else {
+					f.IsPacked = prototype.False
+				}
+			}
+			f.IsWeak = opts.GetWeak()
 			f.JSONName = fd.GetJsonName()
 			f.JSONName = fd.GetJsonName()
 			if fd.DefaultValue != nil {
 			if fd.DefaultValue != nil {
 				f.Default, err = defval.Unmarshal(fd.GetDefaultValue(), f.Kind, defval.Descriptor)
 				f.Default, err = defval.Unmarshal(fd.GetDefaultValue(), f.Kind, defval.Descriptor)
@@ -143,7 +153,6 @@ func messagesFromDescriptorProto(mds []*descriptorpb.DescriptorProto, syntax pro
 				}
 				}
 				f.OneofName = protoreflect.Name(md.GetOneofDecl()[i].GetName())
 				f.OneofName = protoreflect.Name(md.GetOneofDecl()[i].GetName())
 			}
 			}
-			opts, _ := f.Options.(*descriptorpb.FieldOptions)
 			switch f.Kind {
 			switch f.Kind {
 			case protoreflect.EnumKind:
 			case protoreflect.EnumKind:
 				f.EnumType, err = findEnumDescriptor(fd.GetTypeName(), r)
 				f.EnumType, err = findEnumDescriptor(fd.GetTypeName(), r)

+ 21 - 0
reflect/prototype/protofile.go

@@ -11,6 +11,13 @@
 // information must be provided such as the full type name and the proto syntax.
 // information must be provided such as the full type name and the proto syntax.
 // When creating an entire file, the syntax and full name is derived from
 // When creating an entire file, the syntax and full name is derived from
 // the parent type.
 // the parent type.
+//
+// Most types contain options, defined as messages in descriptor.proto.
+// To avoid cyclic dependencies, the prototype package treats these options
+// as opaque protoreflect.ProtoMessage values. In some cases where the option
+// contains semantically important information (e.g.,
+// google.protobuf.MessageOptions.map_entry), this information must be provided
+// as a field of the corresponding type (e.g., prototype.Message.MapEntry).
 package prototype
 package prototype
 
 
 import "github.com/golang/protobuf/v2/reflect/protoreflect"
 import "github.com/golang/protobuf/v2/reflect/protoreflect"
@@ -103,6 +110,7 @@ type Message struct {
 	ExtensionRanges       [][2]protoreflect.FieldNumber
 	ExtensionRanges       [][2]protoreflect.FieldNumber
 	ExtensionRangeOptions []protoreflect.ProtoMessage
 	ExtensionRangeOptions []protoreflect.ProtoMessage
 	Options               protoreflect.ProtoMessage
 	Options               protoreflect.ProtoMessage
+	IsMapEntry            bool
 
 
 	Enums      []Enum
 	Enums      []Enum
 	Messages   []Message
 	Messages   []Message
@@ -131,6 +139,8 @@ type Field struct {
 	MessageType protoreflect.MessageDescriptor
 	MessageType protoreflect.MessageDescriptor
 	EnumType    protoreflect.EnumDescriptor
 	EnumType    protoreflect.EnumDescriptor
 	Options     protoreflect.ProtoMessage
 	Options     protoreflect.ProtoMessage
+	IsPacked    OptionalBool
+	IsWeak      bool
 
 
 	*fieldMeta
 	*fieldMeta
 }
 }
@@ -154,6 +164,7 @@ type Extension struct {
 	EnumType     protoreflect.EnumDescriptor
 	EnumType     protoreflect.EnumDescriptor
 	ExtendedType protoreflect.MessageDescriptor
 	ExtendedType protoreflect.MessageDescriptor
 	Options      protoreflect.ProtoMessage
 	Options      protoreflect.ProtoMessage
+	IsPacked     OptionalBool
 
 
 	*extensionMeta
 	*extensionMeta
 }
 }
@@ -206,3 +217,13 @@ type Method struct {
 
 
 	*methodMeta
 	*methodMeta
 }
 }
+
+// OptionalBool is a tristate boolean.
+type OptionalBool uint8
+
+// Tristate boolean values.
+const (
+	DefaultBool OptionalBool = iota
+	True
+	False
+)

+ 51 - 118
reflect/prototype/protofile_type.go

@@ -165,7 +165,6 @@ type messageMeta struct {
 	ms messagesMeta
 	ms messagesMeta
 	es enumsMeta
 	es enumsMeta
 	xs extensionsMeta
 	xs extensionsMeta
-	mo messageOptions
 }
 }
 type messageDesc struct{ m *Message }
 type messageDesc struct{ m *Message }
 
 
@@ -176,7 +175,7 @@ func (t messageDesc) Name() pref.Name                    { return t.m.Name }
 func (t messageDesc) FullName() pref.FullName            { return t.m.fullName }
 func (t messageDesc) FullName() pref.FullName            { return t.m.fullName }
 func (t messageDesc) IsPlaceholder() bool                { return false }
 func (t messageDesc) IsPlaceholder() bool                { return false }
 func (t messageDesc) Options() pref.ProtoMessage         { return altOptions(t.m.Options, optionTypes.Message) }
 func (t messageDesc) Options() pref.ProtoMessage         { return altOptions(t.m.Options, optionTypes.Message) }
-func (t messageDesc) IsMapEntry() bool                   { return t.m.mo.lazyInit(t).isMapEntry }
+func (t messageDesc) IsMapEntry() bool                   { return t.m.IsMapEntry }
 func (t messageDesc) Fields() pref.FieldDescriptors      { return t.m.fs.lazyInit(t, t.m.Fields) }
 func (t messageDesc) Fields() pref.FieldDescriptors      { return t.m.fs.lazyInit(t, t.m.Fields) }
 func (t messageDesc) Oneofs() pref.OneofDescriptors      { return t.m.os.lazyInit(t, t.m.Oneofs) }
 func (t messageDesc) Oneofs() pref.OneofDescriptors      { return t.m.os.lazyInit(t, t.m.Oneofs) }
 func (t messageDesc) ReservedNames() pref.Names          { return (*names)(&t.m.ReservedNames) }
 func (t messageDesc) ReservedNames() pref.Names          { return (*names)(&t.m.ReservedNames) }
@@ -207,22 +206,6 @@ func extensionRangeOptions(i, n int, ms []pref.ProtoMessage) pref.ProtoMessage {
 	return m
 	return m
 }
 }
 
 
-type messageOptions struct {
-	once       sync.Once
-	isMapEntry bool
-}
-
-func (p *messageOptions) lazyInit(m pref.MessageDescriptor) *messageOptions {
-	p.once.Do(func() {
-		if m.Options() != optionTypes.Message {
-			const mapEntryFieldNumber = 7 // google.protobuf.MessageOptions.map_entry
-			fs := m.Options().ProtoReflect().KnownFields()
-			p.isMapEntry = fs.Get(mapEntryFieldNumber).Bool()
-		}
-	})
-	return p
-}
-
 type fieldMeta struct {
 type fieldMeta struct {
 	inheritedMeta
 	inheritedMeta
 
 
@@ -231,25 +214,29 @@ type fieldMeta struct {
 	ot oneofReference
 	ot oneofReference
 	mt messageReference
 	mt messageReference
 	et enumReference
 	et enumReference
-	fo fieldOptions
 }
 }
 type fieldDesc struct{ f *Field }
 type fieldDesc struct{ f *Field }
 
 
-func (t fieldDesc) Parent() (pref.Descriptor, bool)            { return t.f.parent, true }
-func (t fieldDesc) Index() int                                 { return t.f.index }
-func (t fieldDesc) Syntax() pref.Syntax                        { return t.f.syntax }
-func (t fieldDesc) Name() pref.Name                            { return t.f.Name }
-func (t fieldDesc) FullName() pref.FullName                    { return t.f.fullName }
-func (t fieldDesc) IsPlaceholder() bool                        { return false }
-func (t fieldDesc) Options() pref.ProtoMessage                 { return altOptions(t.f.Options, optionTypes.Field) }
-func (t fieldDesc) Number() pref.FieldNumber                   { return t.f.Number }
-func (t fieldDesc) Cardinality() pref.Cardinality              { return t.f.Cardinality }
-func (t fieldDesc) Kind() pref.Kind                            { return t.f.Kind }
-func (t fieldDesc) HasJSONName() bool                          { return t.f.JSONName != "" }
-func (t fieldDesc) JSONName() string                           { return t.f.js.lazyInit(t.f) }
-func (t fieldDesc) IsPacked() bool                             { return t.f.fo.lazyInit(t).isPacked }
-func (t fieldDesc) IsWeak() bool                               { return t.f.fo.lazyInit(t).isWeak }
-func (t fieldDesc) IsMap() bool                                { return t.f.fo.lazyInit(t).isMap }
+func (t fieldDesc) Parent() (pref.Descriptor, bool) { return t.f.parent, true }
+func (t fieldDesc) Index() int                      { return t.f.index }
+func (t fieldDesc) Syntax() pref.Syntax             { return t.f.syntax }
+func (t fieldDesc) Name() pref.Name                 { return t.f.Name }
+func (t fieldDesc) FullName() pref.FullName         { return t.f.fullName }
+func (t fieldDesc) IsPlaceholder() bool             { return false }
+func (t fieldDesc) Options() pref.ProtoMessage      { return altOptions(t.f.Options, optionTypes.Field) }
+func (t fieldDesc) Number() pref.FieldNumber        { return t.f.Number }
+func (t fieldDesc) Cardinality() pref.Cardinality   { return t.f.Cardinality }
+func (t fieldDesc) Kind() pref.Kind                 { return t.f.Kind }
+func (t fieldDesc) HasJSONName() bool               { return t.f.JSONName != "" }
+func (t fieldDesc) JSONName() string                { return t.f.js.lazyInit(t.f) }
+func (t fieldDesc) IsPacked() bool {
+	return isPacked(t.f.IsPacked, t.f.syntax, t.f.Cardinality, t.f.Kind)
+}
+func (t fieldDesc) IsWeak() bool { return t.f.IsWeak }
+func (t fieldDesc) IsMap() bool {
+	mt := t.MessageType()
+	return mt != nil && mt.IsMapEntry()
+}
 func (t fieldDesc) HasDefault() bool                           { return t.f.Default.IsValid() }
 func (t fieldDesc) HasDefault() bool                           { return t.f.Default.IsValid() }
 func (t fieldDesc) Default() pref.Value                        { return t.f.dv.value(t, t.f.Default) }
 func (t fieldDesc) Default() pref.Value                        { return t.f.dv.value(t, t.f.Default) }
 func (t fieldDesc) DefaultEnumValue() pref.EnumValueDescriptor { return t.f.dv.enum(t, t.f.Default) }
 func (t fieldDesc) DefaultEnumValue() pref.EnumValueDescriptor { return t.f.dv.enum(t, t.f.Default) }
@@ -261,6 +248,20 @@ func (t fieldDesc) Format(s fmt.State, r rune)                 { pfmt.FormatDesc
 func (t fieldDesc) ProtoType(pref.FieldDescriptor)             {}
 func (t fieldDesc) ProtoType(pref.FieldDescriptor)             {}
 func (t fieldDesc) ProtoInternal(pragma.DoNotImplement)        {}
 func (t fieldDesc) ProtoInternal(pragma.DoNotImplement)        {}
 
 
+func isPacked(packed OptionalBool, s pref.Syntax, c pref.Cardinality, k pref.Kind) bool {
+	if packed == False || (packed == DefaultBool && s == pref.Proto2) {
+		return false
+	}
+	if c != pref.Repeated {
+		return false
+	}
+	switch k {
+	case pref.StringKind, pref.BytesKind, pref.MessageKind, pref.GroupKind:
+		return false
+	}
+	return true
+}
+
 type jsonName struct {
 type jsonName struct {
 	once sync.Once
 	once sync.Once
 	name string
 	name string
@@ -310,77 +311,6 @@ func (p *oneofReference) lazyInit(parent pref.Descriptor, name pref.Name) pref.O
 	return p.otyp
 	return p.otyp
 }
 }
 
 
-type fieldOptions struct {
-	once     sync.Once
-	isPacked bool
-	isWeak   bool
-	isMap    bool
-}
-
-func (p *fieldOptions) lazyInit(f pref.FieldDescriptor) *fieldOptions {
-	p.once.Do(func() {
-		if f.Cardinality() == pref.Repeated {
-			// In proto3, repeated fields of scalar numeric types use
-			// packed encoding by default.
-			// See https://developers.google.com/protocol-buffers/docs/proto3
-			if f.Syntax() == pref.Proto3 {
-				p.isPacked = isScalarNumeric[f.Kind()]
-			}
-			if f.Kind() == pref.MessageKind {
-				p.isMap = f.MessageType().IsMapEntry()
-			}
-		}
-
-		if f.Options() != optionTypes.Field {
-			const packedFieldNumber = 2 // google.protobuf.FieldOptions.packed
-			const weakFieldNumber = 10  // google.protobuf.FieldOptions.weak
-			fs := f.Options().ProtoReflect().KnownFields()
-			if fs.Has(packedFieldNumber) {
-				p.isPacked = fs.Get(packedFieldNumber).Bool()
-			}
-			p.isWeak = fs.Get(weakFieldNumber).Bool()
-		}
-	})
-	return p
-}
-
-// isPacked reports whether the packed options is set.
-func isPacked(m pref.ProtoMessage) (isPacked bool) {
-	if m != optionTypes.Field {
-		const packedFieldNumber = 2 // google.protobuf.FieldOptions.packed
-		fs := m.ProtoReflect().KnownFields()
-		isPacked = fs.Get(packedFieldNumber).Bool()
-	}
-	return isPacked
-}
-
-// isWeak reports whether the weak options is set.
-func isWeak(m pref.ProtoMessage) (isWeak bool) {
-	if m != optionTypes.Field {
-		const weakFieldNumber = 10 // google.protobuf.FieldOptions.weak
-		fs := m.ProtoReflect().KnownFields()
-		isWeak = fs.Get(weakFieldNumber).Bool()
-	}
-	return isWeak
-}
-
-var isScalarNumeric = map[pref.Kind]bool{
-	pref.BoolKind:     true,
-	pref.EnumKind:     true,
-	pref.Int32Kind:    true,
-	pref.Sint32Kind:   true,
-	pref.Uint32Kind:   true,
-	pref.Int64Kind:    true,
-	pref.Sint64Kind:   true,
-	pref.Uint64Kind:   true,
-	pref.Sfixed32Kind: true,
-	pref.Fixed32Kind:  true,
-	pref.FloatKind:    true,
-	pref.Sfixed64Kind: true,
-	pref.Fixed64Kind:  true,
-	pref.DoubleKind:   true,
-}
-
 type oneofMeta struct {
 type oneofMeta struct {
 	inheritedMeta
 	inheritedMeta
 
 
@@ -410,19 +340,22 @@ type extensionMeta struct {
 }
 }
 type extensionDesc struct{ x *Extension }
 type extensionDesc struct{ x *Extension }
 
 
-func (t extensionDesc) Parent() (pref.Descriptor, bool)            { return t.x.parent, true }
-func (t extensionDesc) Syntax() pref.Syntax                        { return t.x.syntax }
-func (t extensionDesc) Index() int                                 { return t.x.index }
-func (t extensionDesc) Name() pref.Name                            { return t.x.Name }
-func (t extensionDesc) FullName() pref.FullName                    { return t.x.fullName }
-func (t extensionDesc) IsPlaceholder() bool                        { return false }
-func (t extensionDesc) Options() pref.ProtoMessage                 { return altOptions(t.x.Options, optionTypes.Field) }
-func (t extensionDesc) Number() pref.FieldNumber                   { return t.x.Number }
-func (t extensionDesc) Cardinality() pref.Cardinality              { return t.x.Cardinality }
-func (t extensionDesc) Kind() pref.Kind                            { return t.x.Kind }
-func (t extensionDesc) HasJSONName() bool                          { return false }
-func (t extensionDesc) JSONName() string                           { return "" }
-func (t extensionDesc) IsPacked() bool                             { return isPacked(t.Options()) }
+func (t extensionDesc) Parent() (pref.Descriptor, bool) { return t.x.parent, true }
+func (t extensionDesc) Syntax() pref.Syntax             { return t.x.syntax }
+func (t extensionDesc) Index() int                      { return t.x.index }
+func (t extensionDesc) Name() pref.Name                 { return t.x.Name }
+func (t extensionDesc) FullName() pref.FullName         { return t.x.fullName }
+func (t extensionDesc) IsPlaceholder() bool             { return false }
+func (t extensionDesc) Options() pref.ProtoMessage      { return altOptions(t.x.Options, optionTypes.Field) }
+func (t extensionDesc) Number() pref.FieldNumber        { return t.x.Number }
+func (t extensionDesc) Cardinality() pref.Cardinality   { return t.x.Cardinality }
+func (t extensionDesc) Kind() pref.Kind                 { return t.x.Kind }
+func (t extensionDesc) HasJSONName() bool               { return false }
+func (t extensionDesc) JSONName() string                { return "" }
+func (t extensionDesc) IsPacked() bool {
+	// Extensions always use proto2 defaults for packing.
+	return isPacked(t.x.IsPacked, pref.Proto2, t.x.Cardinality, t.x.Kind)
+}
 func (t extensionDesc) IsWeak() bool                               { return false }
 func (t extensionDesc) IsWeak() bool                               { return false }
 func (t extensionDesc) IsMap() bool                                { return false }
 func (t extensionDesc) IsMap() bool                                { return false }
 func (t extensionDesc) HasDefault() bool                           { return t.x.Default.IsValid() }
 func (t extensionDesc) HasDefault() bool                           { return t.x.Default.IsValid() }

+ 6 - 5
reflect/prototype/standalone.go

@@ -24,11 +24,11 @@ type StandaloneMessage struct {
 	ExtensionRanges       [][2]protoreflect.FieldNumber
 	ExtensionRanges       [][2]protoreflect.FieldNumber
 	ExtensionRangeOptions []protoreflect.ProtoMessage
 	ExtensionRangeOptions []protoreflect.ProtoMessage
 	Options               protoreflect.ProtoMessage
 	Options               protoreflect.ProtoMessage
+	IsMapEntry            bool
 
 
-	fields  fieldsMeta
-	oneofs  oneofsMeta
-	nums    numbersMeta
-	options messageOptions
+	fields fieldsMeta
+	oneofs oneofsMeta
+	nums   numbersMeta
 }
 }
 
 
 // NewMessage creates a new protoreflect.MessageDescriptor.
 // NewMessage creates a new protoreflect.MessageDescriptor.
@@ -67,7 +67,7 @@ func NewMessages(ts []*StandaloneMessage) ([]protoreflect.MessageDescriptor, err
 		for i, f := range t.Fields {
 		for i, f := range t.Fields {
 			// Resolve placeholder messages with a concrete standalone message.
 			// Resolve placeholder messages with a concrete standalone message.
 			// If this fails, validateMessage will complain about it later.
 			// If this fails, validateMessage will complain about it later.
-			if f.MessageType != nil && f.MessageType.IsPlaceholder() && !isWeak(f.Options) {
+			if f.MessageType != nil && f.MessageType.IsPlaceholder() && !f.IsWeak {
 				if m, ok := ms[f.MessageType.FullName()]; ok {
 				if m, ok := ms[f.MessageType.FullName()]; ok {
 					t.Fields[i].MessageType = m
 					t.Fields[i].MessageType = m
 				}
 				}
@@ -118,6 +118,7 @@ type StandaloneExtension struct {
 	EnumType     protoreflect.EnumDescriptor
 	EnumType     protoreflect.EnumDescriptor
 	ExtendedType protoreflect.MessageDescriptor
 	ExtendedType protoreflect.MessageDescriptor
 	Options      protoreflect.ProtoMessage
 	Options      protoreflect.ProtoMessage
+	IsPacked     OptionalBool
 
 
 	dv defaultValue
 	dv defaultValue
 }
 }

+ 8 - 6
reflect/prototype/standalone_type.go

@@ -23,7 +23,7 @@ func (t standaloneMessage) IsPlaceholder() bool             { return false }
 func (t standaloneMessage) Options() pref.ProtoMessage {
 func (t standaloneMessage) Options() pref.ProtoMessage {
 	return altOptions(t.m.Options, optionTypes.Message)
 	return altOptions(t.m.Options, optionTypes.Message)
 }
 }
-func (t standaloneMessage) IsMapEntry() bool              { return t.m.options.lazyInit(t).isMapEntry }
+func (t standaloneMessage) IsMapEntry() bool              { return t.m.IsMapEntry }
 func (t standaloneMessage) Fields() pref.FieldDescriptors { return t.m.fields.lazyInit(t, t.m.Fields) }
 func (t standaloneMessage) Fields() pref.FieldDescriptors { return t.m.fields.lazyInit(t, t.m.Fields) }
 func (t standaloneMessage) Oneofs() pref.OneofDescriptors { return t.m.oneofs.lazyInit(t, t.m.Oneofs) }
 func (t standaloneMessage) Oneofs() pref.OneofDescriptors { return t.m.oneofs.lazyInit(t, t.m.Oneofs) }
 func (t standaloneMessage) ReservedNames() pref.Names     { return (*names)(&t.m.ReservedNames) }
 func (t standaloneMessage) ReservedNames() pref.Names     { return (*names)(&t.m.ReservedNames) }
@@ -76,11 +76,13 @@ func (t standaloneExtension) Cardinality() pref.Cardinality { return t.x.Cardina
 func (t standaloneExtension) Kind() pref.Kind               { return t.x.Kind }
 func (t standaloneExtension) Kind() pref.Kind               { return t.x.Kind }
 func (t standaloneExtension) HasJSONName() bool             { return false }
 func (t standaloneExtension) HasJSONName() bool             { return false }
 func (t standaloneExtension) JSONName() string              { return "" }
 func (t standaloneExtension) JSONName() string              { return "" }
-func (t standaloneExtension) IsPacked() bool                { return isPacked(t.Options()) }
-func (t standaloneExtension) IsWeak() bool                  { return false }
-func (t standaloneExtension) IsMap() bool                   { return false }
-func (t standaloneExtension) HasDefault() bool              { return t.x.Default.IsValid() }
-func (t standaloneExtension) Default() pref.Value           { return t.x.dv.value(t, t.x.Default) }
+func (t standaloneExtension) IsPacked() bool {
+	return isPacked(t.x.IsPacked, pref.Proto2, t.x.Cardinality, t.x.Kind)
+}
+func (t standaloneExtension) IsWeak() bool        { return false }
+func (t standaloneExtension) IsMap() bool         { return false }
+func (t standaloneExtension) HasDefault() bool    { return t.x.Default.IsValid() }
+func (t standaloneExtension) Default() pref.Value { return t.x.dv.value(t, t.x.Default) }
 func (t standaloneExtension) DefaultEnumValue() pref.EnumValueDescriptor {
 func (t standaloneExtension) DefaultEnumValue() pref.EnumValueDescriptor {
 	return t.x.dv.enum(t, t.x.Default)
 	return t.x.dv.enum(t, t.x.Default)
 }
 }

+ 5 - 2
reflect/prototype/type_test.go

@@ -41,6 +41,7 @@ func TestFile(t *testing.T) {
 				MapEntry:   scalar.Bool(true),
 				MapEntry:   scalar.Bool(true),
 				Deprecated: scalar.Bool(true),
 				Deprecated: scalar.Bool(true),
 			},
 			},
+			IsMapEntry: true,
 			Fields: []ptype.Field{{
 			Fields: []ptype.Field{{
 				Name:        "key", // "test.A.key"
 				Name:        "key", // "test.A.key"
 				Number:      1,
 				Number:      1,
@@ -92,6 +93,7 @@ func TestFile(t *testing.T) {
 				Cardinality: pref.Repeated,
 				Cardinality: pref.Repeated,
 				Kind:        pref.Int32Kind,
 				Kind:        pref.Int32Kind,
 				Options:     &descriptorpb.FieldOptions{Packed: scalar.Bool(true)},
 				Options:     &descriptorpb.FieldOptions{Packed: scalar.Bool(true)},
+				IsPacked:    ptype.True,
 			}, {
 			}, {
 				Name:        "field_six", // "test.B.field_six"
 				Name:        "field_six", // "test.B.field_six"
 				Number:      6,
 				Number:      6,
@@ -132,6 +134,7 @@ func TestFile(t *testing.T) {
 				Cardinality:  pref.Repeated,
 				Cardinality:  pref.Repeated,
 				Kind:         pref.MessageKind,
 				Kind:         pref.MessageKind,
 				Options:      &descriptorpb.FieldOptions{Packed: scalar.Bool(false)},
 				Options:      &descriptorpb.FieldOptions{Packed: scalar.Bool(false)},
+				IsPacked:     ptype.False,
 				MessageType:  ptype.PlaceholderMessage("test.C"),
 				MessageType:  ptype.PlaceholderMessage("test.C"),
 				ExtendedType: ptype.PlaceholderMessage("test.B"),
 				ExtendedType: ptype.PlaceholderMessage("test.B"),
 			}},
 			}},
@@ -156,6 +159,7 @@ func TestFile(t *testing.T) {
 			Cardinality:  pref.Repeated,
 			Cardinality:  pref.Repeated,
 			Kind:         pref.MessageKind,
 			Kind:         pref.MessageKind,
 			Options:      &descriptorpb.FieldOptions{Packed: scalar.Bool(true)},
 			Options:      &descriptorpb.FieldOptions{Packed: scalar.Bool(true)},
+			IsPacked:     ptype.True,
 			MessageType:  ptype.PlaceholderMessage("test.C"),
 			MessageType:  ptype.PlaceholderMessage("test.C"),
 			ExtendedType: ptype.PlaceholderMessage("test.B"),
 			ExtendedType: ptype.PlaceholderMessage("test.B"),
 		}},
 		}},
@@ -601,7 +605,7 @@ func testFileAccessors(t *testing.T, fd pref.FileDescriptor) {
 				"Number":       pref.FieldNumber(1000),
 				"Number":       pref.FieldNumber(1000),
 				"Cardinality":  pref.Repeated,
 				"Cardinality":  pref.Repeated,
 				"Kind":         pref.MessageKind,
 				"Kind":         pref.MessageKind,
-				"IsPacked":     true,
+				"IsPacked":     false,
 				"MessageType":  M{"FullName": pref.FullName("test.C"), "IsPlaceholder": false},
 				"MessageType":  M{"FullName": pref.FullName("test.C"), "IsPlaceholder": false},
 				"ExtendedType": M{"FullName": pref.FullName("test.B"), "IsPlaceholder": false},
 				"ExtendedType": M{"FullName": pref.FullName("test.B"), "IsPlaceholder": false},
 				"Options":      &descriptorpb.FieldOptions{Packed: scalar.Bool(true)},
 				"Options":      &descriptorpb.FieldOptions{Packed: scalar.Bool(true)},
@@ -862,7 +866,6 @@ func testFileFormat(t *testing.T, fd pref.FileDescriptor) {
 		Number:       1000
 		Number:       1000
 		Cardinality:  repeated
 		Cardinality:  repeated
 		Kind:         message
 		Kind:         message
-		IsPacked:     true
 		ExtendedType: test.B
 		ExtendedType: test.B
 		MessageType:  test.C
 		MessageType:  test.C
 	}]
 	}]

+ 124 - 0
types/descriptor/descriptor.pb.go

@@ -3309,6 +3309,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "file",
 				JSONName:    "file",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -3321,6 +3322,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "name",
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "package",
 				Name:        "package",
@@ -3328,6 +3330,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "package",
 				JSONName:    "package",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "dependency",
 				Name:        "dependency",
@@ -3335,6 +3338,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "dependency",
 				JSONName:    "dependency",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "public_dependency",
 				Name:        "public_dependency",
@@ -3342,6 +3346,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "publicDependency",
 				JSONName:    "publicDependency",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "weak_dependency",
 				Name:        "weak_dependency",
@@ -3349,6 +3354,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "weakDependency",
 				JSONName:    "weakDependency",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "message_type",
 				Name:        "message_type",
@@ -3356,6 +3362,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "messageType",
 				JSONName:    "messageType",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "enum_type",
 				Name:        "enum_type",
@@ -3363,6 +3370,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "enumType",
 				JSONName:    "enumType",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "service",
 				Name:        "service",
@@ -3370,6 +3378,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "service",
 				JSONName:    "service",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "extension",
 				Name:        "extension",
@@ -3377,6 +3386,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "extension",
 				JSONName:    "extension",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "options",
 				Name:        "options",
@@ -3384,6 +3394,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "options",
 				JSONName:    "options",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "source_code_info",
 				Name:        "source_code_info",
@@ -3391,6 +3402,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "sourceCodeInfo",
 				JSONName:    "sourceCodeInfo",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "syntax",
 				Name:        "syntax",
@@ -3398,6 +3410,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "syntax",
 				JSONName:    "syntax",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -3410,6 +3423,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "name",
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "field",
 				Name:        "field",
@@ -3417,6 +3431,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "field",
 				JSONName:    "field",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "extension",
 				Name:        "extension",
@@ -3424,6 +3439,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "extension",
 				JSONName:    "extension",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "nested_type",
 				Name:        "nested_type",
@@ -3431,6 +3447,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "nestedType",
 				JSONName:    "nestedType",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "enum_type",
 				Name:        "enum_type",
@@ -3438,6 +3455,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "enumType",
 				JSONName:    "enumType",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "extension_range",
 				Name:        "extension_range",
@@ -3445,6 +3463,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "extensionRange",
 				JSONName:    "extensionRange",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_decl",
 				Name:        "oneof_decl",
@@ -3452,6 +3471,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "oneofDecl",
 				JSONName:    "oneofDecl",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "options",
 				Name:        "options",
@@ -3459,6 +3479,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "options",
 				JSONName:    "options",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "reserved_range",
 				Name:        "reserved_range",
@@ -3466,6 +3487,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "reservedRange",
 				JSONName:    "reservedRange",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "reserved_name",
 				Name:        "reserved_name",
@@ -3473,6 +3495,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "reservedName",
 				JSONName:    "reservedName",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -3485,6 +3508,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "uninterpretedOption",
 				JSONName:    "uninterpretedOption",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 		ExtensionRanges: [][2]protoreflect.FieldNumber{{1000, 536870912}},
 		ExtensionRanges: [][2]protoreflect.FieldNumber{{1000, 536870912}},
@@ -3498,6 +3522,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "name",
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "number",
 				Name:        "number",
@@ -3505,6 +3530,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "number",
 				JSONName:    "number",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "label",
 				Name:        "label",
@@ -3512,6 +3538,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.EnumKind,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "label",
 				JSONName:    "label",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "type",
 				Name:        "type",
@@ -3519,6 +3546,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.EnumKind,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "type",
 				JSONName:    "type",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "type_name",
 				Name:        "type_name",
@@ -3526,6 +3554,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "typeName",
 				JSONName:    "typeName",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "extendee",
 				Name:        "extendee",
@@ -3533,6 +3562,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "extendee",
 				JSONName:    "extendee",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "default_value",
 				Name:        "default_value",
@@ -3540,6 +3570,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "defaultValue",
 				JSONName:    "defaultValue",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "oneof_index",
 				Name:        "oneof_index",
@@ -3547,6 +3578,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "oneofIndex",
 				JSONName:    "oneofIndex",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "json_name",
 				Name:        "json_name",
@@ -3554,6 +3586,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "jsonName",
 				JSONName:    "jsonName",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "options",
 				Name:        "options",
@@ -3561,6 +3594,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "options",
 				JSONName:    "options",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -3573,6 +3607,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "name",
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "options",
 				Name:        "options",
@@ -3580,6 +3615,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "options",
 				JSONName:    "options",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -3592,6 +3628,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "name",
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "value",
 				Name:        "value",
@@ -3599,6 +3636,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "value",
 				JSONName:    "value",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "options",
 				Name:        "options",
@@ -3606,6 +3644,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "options",
 				JSONName:    "options",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "reserved_range",
 				Name:        "reserved_range",
@@ -3613,6 +3652,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "reservedRange",
 				JSONName:    "reservedRange",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "reserved_name",
 				Name:        "reserved_name",
@@ -3620,6 +3660,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "reservedName",
 				JSONName:    "reservedName",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -3632,6 +3673,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "name",
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "number",
 				Name:        "number",
@@ -3639,6 +3681,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "number",
 				JSONName:    "number",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "options",
 				Name:        "options",
@@ -3646,6 +3689,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "options",
 				JSONName:    "options",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -3658,6 +3702,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "name",
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "method",
 				Name:        "method",
@@ -3665,6 +3710,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "method",
 				JSONName:    "method",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "options",
 				Name:        "options",
@@ -3672,6 +3718,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "options",
 				JSONName:    "options",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -3684,6 +3731,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "name",
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "input_type",
 				Name:        "input_type",
@@ -3691,6 +3739,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "inputType",
 				JSONName:    "inputType",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "output_type",
 				Name:        "output_type",
@@ -3698,6 +3747,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "outputType",
 				JSONName:    "outputType",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "options",
 				Name:        "options",
@@ -3705,6 +3755,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "options",
 				JSONName:    "options",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "client_streaming",
 				Name:        "client_streaming",
@@ -3713,6 +3764,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "clientStreaming",
 				JSONName:    "clientStreaming",
 				Default:     protoreflect.ValueOf(bool(false)),
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "server_streaming",
 				Name:        "server_streaming",
@@ -3721,6 +3773,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "serverStreaming",
 				JSONName:    "serverStreaming",
 				Default:     protoreflect.ValueOf(bool(false)),
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -3733,6 +3786,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "javaPackage",
 				JSONName:    "javaPackage",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "java_outer_classname",
 				Name:        "java_outer_classname",
@@ -3740,6 +3794,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "javaOuterClassname",
 				JSONName:    "javaOuterClassname",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "java_multiple_files",
 				Name:        "java_multiple_files",
@@ -3748,6 +3803,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "javaMultipleFiles",
 				JSONName:    "javaMultipleFiles",
 				Default:     protoreflect.ValueOf(bool(false)),
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "java_generate_equals_and_hash",
 				Name:        "java_generate_equals_and_hash",
@@ -3755,6 +3811,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "javaGenerateEqualsAndHash",
 				JSONName:    "javaGenerateEqualsAndHash",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "java_string_check_utf8",
 				Name:        "java_string_check_utf8",
@@ -3763,6 +3820,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "javaStringCheckUtf8",
 				JSONName:    "javaStringCheckUtf8",
 				Default:     protoreflect.ValueOf(bool(false)),
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "optimize_for",
 				Name:        "optimize_for",
@@ -3771,6 +3829,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.EnumKind,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "optimizeFor",
 				JSONName:    "optimizeFor",
 				Default:     protoreflect.ValueOf(string("SPEED")),
 				Default:     protoreflect.ValueOf(string("SPEED")),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "go_package",
 				Name:        "go_package",
@@ -3778,6 +3837,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "goPackage",
 				JSONName:    "goPackage",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "cc_generic_services",
 				Name:        "cc_generic_services",
@@ -3786,6 +3846,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "ccGenericServices",
 				JSONName:    "ccGenericServices",
 				Default:     protoreflect.ValueOf(bool(false)),
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "java_generic_services",
 				Name:        "java_generic_services",
@@ -3794,6 +3855,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "javaGenericServices",
 				JSONName:    "javaGenericServices",
 				Default:     protoreflect.ValueOf(bool(false)),
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "py_generic_services",
 				Name:        "py_generic_services",
@@ -3802,6 +3864,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "pyGenericServices",
 				JSONName:    "pyGenericServices",
 				Default:     protoreflect.ValueOf(bool(false)),
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "php_generic_services",
 				Name:        "php_generic_services",
@@ -3810,6 +3873,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "phpGenericServices",
 				JSONName:    "phpGenericServices",
 				Default:     protoreflect.ValueOf(bool(false)),
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "deprecated",
 				Name:        "deprecated",
@@ -3818,6 +3882,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "deprecated",
 				JSONName:    "deprecated",
 				Default:     protoreflect.ValueOf(bool(false)),
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "cc_enable_arenas",
 				Name:        "cc_enable_arenas",
@@ -3826,6 +3891,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "ccEnableArenas",
 				JSONName:    "ccEnableArenas",
 				Default:     protoreflect.ValueOf(bool(false)),
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "objc_class_prefix",
 				Name:        "objc_class_prefix",
@@ -3833,6 +3899,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "objcClassPrefix",
 				JSONName:    "objcClassPrefix",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "csharp_namespace",
 				Name:        "csharp_namespace",
@@ -3840,6 +3907,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "csharpNamespace",
 				JSONName:    "csharpNamespace",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "swift_prefix",
 				Name:        "swift_prefix",
@@ -3847,6 +3915,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "swiftPrefix",
 				JSONName:    "swiftPrefix",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "php_class_prefix",
 				Name:        "php_class_prefix",
@@ -3854,6 +3923,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "phpClassPrefix",
 				JSONName:    "phpClassPrefix",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "php_namespace",
 				Name:        "php_namespace",
@@ -3861,6 +3931,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "phpNamespace",
 				JSONName:    "phpNamespace",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "php_metadata_namespace",
 				Name:        "php_metadata_namespace",
@@ -3868,6 +3939,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "phpMetadataNamespace",
 				JSONName:    "phpMetadataNamespace",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "ruby_package",
 				Name:        "ruby_package",
@@ -3875,6 +3947,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "rubyPackage",
 				JSONName:    "rubyPackage",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "uninterpreted_option",
 				Name:        "uninterpreted_option",
@@ -3882,6 +3955,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "uninterpretedOption",
 				JSONName:    "uninterpretedOption",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 		ReservedRanges:  [][2]protoreflect.FieldNumber{{38, 39}},
 		ReservedRanges:  [][2]protoreflect.FieldNumber{{38, 39}},
@@ -3897,6 +3971,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "messageSetWireFormat",
 				JSONName:    "messageSetWireFormat",
 				Default:     protoreflect.ValueOf(bool(false)),
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "no_standard_descriptor_accessor",
 				Name:        "no_standard_descriptor_accessor",
@@ -3905,6 +3980,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "noStandardDescriptorAccessor",
 				JSONName:    "noStandardDescriptorAccessor",
 				Default:     protoreflect.ValueOf(bool(false)),
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "deprecated",
 				Name:        "deprecated",
@@ -3913,6 +3989,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "deprecated",
 				JSONName:    "deprecated",
 				Default:     protoreflect.ValueOf(bool(false)),
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "map_entry",
 				Name:        "map_entry",
@@ -3920,6 +3997,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "mapEntry",
 				JSONName:    "mapEntry",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "uninterpreted_option",
 				Name:        "uninterpreted_option",
@@ -3927,6 +4005,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "uninterpretedOption",
 				JSONName:    "uninterpretedOption",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 		ReservedRanges:  [][2]protoreflect.FieldNumber{{8, 9}, {9, 10}},
 		ReservedRanges:  [][2]protoreflect.FieldNumber{{8, 9}, {9, 10}},
@@ -3942,6 +4021,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.EnumKind,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "ctype",
 				JSONName:    "ctype",
 				Default:     protoreflect.ValueOf(string("STRING")),
 				Default:     protoreflect.ValueOf(string("STRING")),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "packed",
 				Name:        "packed",
@@ -3949,6 +4029,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "packed",
 				JSONName:    "packed",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "jstype",
 				Name:        "jstype",
@@ -3957,6 +4038,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.EnumKind,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "jstype",
 				JSONName:    "jstype",
 				Default:     protoreflect.ValueOf(string("JS_NORMAL")),
 				Default:     protoreflect.ValueOf(string("JS_NORMAL")),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "lazy",
 				Name:        "lazy",
@@ -3965,6 +4047,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "lazy",
 				JSONName:    "lazy",
 				Default:     protoreflect.ValueOf(bool(false)),
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "deprecated",
 				Name:        "deprecated",
@@ -3973,6 +4056,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "deprecated",
 				JSONName:    "deprecated",
 				Default:     protoreflect.ValueOf(bool(false)),
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "weak",
 				Name:        "weak",
@@ -3981,6 +4065,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "weak",
 				JSONName:    "weak",
 				Default:     protoreflect.ValueOf(bool(false)),
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "uninterpreted_option",
 				Name:        "uninterpreted_option",
@@ -3988,6 +4073,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "uninterpretedOption",
 				JSONName:    "uninterpretedOption",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 		ReservedRanges:  [][2]protoreflect.FieldNumber{{4, 5}},
 		ReservedRanges:  [][2]protoreflect.FieldNumber{{4, 5}},
@@ -4002,6 +4088,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "uninterpretedOption",
 				JSONName:    "uninterpretedOption",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 		ExtensionRanges: [][2]protoreflect.FieldNumber{{1000, 536870912}},
 		ExtensionRanges: [][2]protoreflect.FieldNumber{{1000, 536870912}},
@@ -4015,6 +4102,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "allowAlias",
 				JSONName:    "allowAlias",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "deprecated",
 				Name:        "deprecated",
@@ -4023,6 +4111,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "deprecated",
 				JSONName:    "deprecated",
 				Default:     protoreflect.ValueOf(bool(false)),
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "uninterpreted_option",
 				Name:        "uninterpreted_option",
@@ -4030,6 +4119,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "uninterpretedOption",
 				JSONName:    "uninterpretedOption",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 		ReservedRanges:  [][2]protoreflect.FieldNumber{{5, 6}},
 		ReservedRanges:  [][2]protoreflect.FieldNumber{{5, 6}},
@@ -4045,6 +4135,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "deprecated",
 				JSONName:    "deprecated",
 				Default:     protoreflect.ValueOf(bool(false)),
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "uninterpreted_option",
 				Name:        "uninterpreted_option",
@@ -4052,6 +4143,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "uninterpretedOption",
 				JSONName:    "uninterpretedOption",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 		ExtensionRanges: [][2]protoreflect.FieldNumber{{1000, 536870912}},
 		ExtensionRanges: [][2]protoreflect.FieldNumber{{1000, 536870912}},
@@ -4066,6 +4158,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "deprecated",
 				JSONName:    "deprecated",
 				Default:     protoreflect.ValueOf(bool(false)),
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "uninterpreted_option",
 				Name:        "uninterpreted_option",
@@ -4073,6 +4166,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "uninterpretedOption",
 				JSONName:    "uninterpretedOption",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 		ExtensionRanges: [][2]protoreflect.FieldNumber{{1000, 536870912}},
 		ExtensionRanges: [][2]protoreflect.FieldNumber{{1000, 536870912}},
@@ -4087,6 +4181,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "deprecated",
 				JSONName:    "deprecated",
 				Default:     protoreflect.ValueOf(bool(false)),
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "idempotency_level",
 				Name:        "idempotency_level",
@@ -4095,6 +4190,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.EnumKind,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "idempotencyLevel",
 				JSONName:    "idempotencyLevel",
 				Default:     protoreflect.ValueOf(string("IDEMPOTENCY_UNKNOWN")),
 				Default:     protoreflect.ValueOf(string("IDEMPOTENCY_UNKNOWN")),
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "uninterpreted_option",
 				Name:        "uninterpreted_option",
@@ -4102,6 +4198,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "uninterpretedOption",
 				JSONName:    "uninterpretedOption",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 		ExtensionRanges: [][2]protoreflect.FieldNumber{{1000, 536870912}},
 		ExtensionRanges: [][2]protoreflect.FieldNumber{{1000, 536870912}},
@@ -4115,6 +4212,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "name",
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "identifier_value",
 				Name:        "identifier_value",
@@ -4122,6 +4220,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "identifierValue",
 				JSONName:    "identifierValue",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "positive_int_value",
 				Name:        "positive_int_value",
@@ -4129,6 +4228,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Uint64Kind,
 				Kind:        protoreflect.Uint64Kind,
 				JSONName:    "positiveIntValue",
 				JSONName:    "positiveIntValue",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "negative_int_value",
 				Name:        "negative_int_value",
@@ -4136,6 +4236,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int64Kind,
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "negativeIntValue",
 				JSONName:    "negativeIntValue",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "double_value",
 				Name:        "double_value",
@@ -4143,6 +4244,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.DoubleKind,
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "doubleValue",
 				JSONName:    "doubleValue",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "string_value",
 				Name:        "string_value",
@@ -4150,6 +4252,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.BytesKind,
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "stringValue",
 				JSONName:    "stringValue",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "aggregate_value",
 				Name:        "aggregate_value",
@@ -4157,6 +4260,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "aggregateValue",
 				JSONName:    "aggregateValue",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -4169,6 +4273,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "location",
 				JSONName:    "location",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -4181,6 +4286,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "annotation",
 				JSONName:    "annotation",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -4193,6 +4299,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "start",
 				JSONName:    "start",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "end",
 				Name:        "end",
@@ -4200,6 +4307,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "end",
 				JSONName:    "end",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "options",
 				Name:        "options",
@@ -4207,6 +4315,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "options",
 				JSONName:    "options",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -4219,6 +4328,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "start",
 				JSONName:    "start",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "end",
 				Name:        "end",
@@ -4226,6 +4336,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "end",
 				JSONName:    "end",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -4238,6 +4349,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "start",
 				JSONName:    "start",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "end",
 				Name:        "end",
@@ -4245,6 +4357,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "end",
 				JSONName:    "end",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -4257,6 +4370,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "namePart",
 				JSONName:    "namePart",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "is_extension",
 				Name:        "is_extension",
@@ -4264,6 +4378,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.BoolKind,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "isExtension",
 				JSONName:    "isExtension",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -4276,6 +4391,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "path",
 				JSONName:    "path",
+				IsPacked:    prototype.True,
 			},
 			},
 			{
 			{
 				Name:        "span",
 				Name:        "span",
@@ -4283,6 +4399,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "span",
 				JSONName:    "span",
+				IsPacked:    prototype.True,
 			},
 			},
 			{
 			{
 				Name:        "leading_comments",
 				Name:        "leading_comments",
@@ -4290,6 +4407,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "leadingComments",
 				JSONName:    "leadingComments",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "trailing_comments",
 				Name:        "trailing_comments",
@@ -4297,6 +4415,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "trailingComments",
 				JSONName:    "trailingComments",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "leading_detached_comments",
 				Name:        "leading_detached_comments",
@@ -4304,6 +4423,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "leadingDetachedComments",
 				JSONName:    "leadingDetachedComments",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -4316,6 +4436,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "path",
 				JSONName:    "path",
+				IsPacked:    prototype.True,
 			},
 			},
 			{
 			{
 				Name:        "source_file",
 				Name:        "source_file",
@@ -4323,6 +4444,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "sourceFile",
 				JSONName:    "sourceFile",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "begin",
 				Name:        "begin",
@@ -4330,6 +4452,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "begin",
 				JSONName:    "begin",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "end",
 				Name:        "end",
@@ -4337,6 +4460,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "end",
 				JSONName:    "end",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},

+ 13 - 0
types/plugin/plugin.pb.go

@@ -498,6 +498,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "major",
 				JSONName:    "major",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "minor",
 				Name:        "minor",
@@ -505,6 +506,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "minor",
 				JSONName:    "minor",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "patch",
 				Name:        "patch",
@@ -512,6 +514,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "patch",
 				JSONName:    "patch",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "suffix",
 				Name:        "suffix",
@@ -519,6 +522,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "suffix",
 				JSONName:    "suffix",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -531,6 +535,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "fileToGenerate",
 				JSONName:    "fileToGenerate",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "parameter",
 				Name:        "parameter",
@@ -538,6 +543,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "parameter",
 				JSONName:    "parameter",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "proto_file",
 				Name:        "proto_file",
@@ -545,6 +551,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "protoFile",
 				JSONName:    "protoFile",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "compiler_version",
 				Name:        "compiler_version",
@@ -552,6 +559,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "compilerVersion",
 				JSONName:    "compilerVersion",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -564,6 +572,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "error",
 				JSONName:    "error",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "file",
 				Name:        "file",
@@ -571,6 +580,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "file",
 				JSONName:    "file",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},
@@ -583,6 +593,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "name",
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "insertion_point",
 				Name:        "insertion_point",
@@ -590,6 +601,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "insertionPoint",
 				JSONName:    "insertionPoint",
+				IsPacked:    prototype.False,
 			},
 			},
 			{
 			{
 				Name:        "content",
 				Name:        "content",
@@ -597,6 +609,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "content",
 				JSONName:    "content",
+				IsPacked:    prototype.False,
 			},
 			},
 		},
 		},
 	},
 	},