Explorar el Código

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 hace 7 años
padre
commit
232ea15589
Se han modificado 32 ficheros con 488 adiciones y 155 borrados
  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 {
 						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.
 					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, ","), "},")
 			}
+			if message.Desc.IsMapEntry() {
+				g.P("IsMapEntry: true,")
+			}
 			// NOTE: Messages, Enums, and Extensions are populated by init.
 			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,
 				Kind:        protoreflect.StringKind,
 				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,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "Field1A",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "Oneof1AField1",
@@ -466,6 +467,7 @@ var xxx_Comments_ProtoFile_MessageDescs = [6]prototype.Message{
 				Kind:        protoreflect.StringKind,
 				JSONName:    "Oneof1AField1",
 				OneofName:   "Oneof1a",
+				IsPacked:    prototype.False,
 			},
 		},
 		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,
 				Kind:        protoreflect.StringKind,
 				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,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "field",
+				IsPacked:    prototype.False,
 			},
 		},
 		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,
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "data",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -1143,6 +1144,7 @@ var xxx_Ext_ProtoFile_MessageDescs = [8]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "extensionGroup",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -1158,6 +1160,7 @@ var xxx_Ext_ProtoFile_MessageDescs = [8]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.StringKind,
 				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,
 				Kind:        protoreflect.BytesKind,
 				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,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "fieldOne",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "FieldTwo",
@@ -433,6 +434,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "FieldTwo",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "fieldThree",
@@ -440,6 +442,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "fieldThree",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "field__four",
@@ -447,6 +450,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "fieldFour",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "descriptor",
@@ -454,6 +458,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "descriptor",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "marshal",
@@ -461,6 +466,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "marshal",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "unmarshal",
@@ -468,6 +474,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "unmarshal",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "proto_message",
@@ -475,6 +482,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "protoMessage",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "CamelCase",
@@ -482,6 +490,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "CamelCase",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "CamelCase_",
@@ -489,6 +498,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "CamelCase",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "camel_case",
@@ -496,6 +506,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "camelCase",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "CamelCase__",
@@ -503,6 +514,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "CamelCase",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "get_name",
@@ -510,6 +522,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "getName",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "name",
@@ -517,6 +530,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "OneofConflictA",
@@ -525,6 +539,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.StringKind,
 				JSONName:    "OneofConflictA",
 				OneofName:   "oneof_conflict_a",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_no_conflict",
@@ -533,6 +548,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.StringKind,
 				JSONName:    "oneofNoConflict",
 				OneofName:   "oneof_conflict_b",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "OneofConflictB",
@@ -541,6 +557,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.StringKind,
 				JSONName:    "OneofConflictB",
 				OneofName:   "oneof_conflict_b",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_message_conflict",
@@ -549,6 +566,7 @@ var xxx_Fieldnames_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.StringKind,
 				JSONName:    "oneofMessageConflict",
 				OneofName:   "oneof_conflict_c",
+				IsPacked:    prototype.False,
 			},
 		},
 		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,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "m",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "e",
@@ -203,6 +204,7 @@ var xxx_A_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "e",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "local",
@@ -210,6 +212,7 @@ var xxx_A_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				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,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "m",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "e",
@@ -150,6 +151,7 @@ var xxx_B_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.EnumKind,
 				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,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "m2",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "s",
@@ -554,6 +555,7 @@ var xxx_A_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.StringKind,
 				JSONName:    "s",
 				Default:     protoreflect.ValueOf(string("default")),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "b",
@@ -562,6 +564,7 @@ var xxx_A_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "b",
 				Default:     protoreflect.ValueOf(("default")),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "f",
@@ -570,6 +573,7 @@ var xxx_A_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "f",
 				Default:     protoreflect.ValueOf(float64(math.NaN())),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_int32",
@@ -578,6 +582,7 @@ var xxx_A_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "oneofInt32",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_int64",
@@ -586,6 +591,7 @@ var xxx_A_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "oneofInt64",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 		},
 		Oneofs: []prototype.Oneof{
@@ -603,6 +609,7 @@ var xxx_A_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "submessageOneofInt32",
 				OneofName:   "submessage_oneof_field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "submessage_oneof_int64",
@@ -611,6 +618,7 @@ var xxx_A_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "submessageOneofInt64",
 				OneofName:   "submessage_oneof_field",
+				IsPacked:    prototype.False,
 			},
 		},
 		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,
 				Kind:        protoreflect.MessageKind,
 				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,
 				Kind:        protoreflect.MessageKind,
 				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,
 				Kind:        protoreflect.MessageKind,
 				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,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "am1",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "am2",
@@ -191,6 +192,7 @@ var xxx_TestImportAll_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "am2",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "bm1",
@@ -198,6 +200,7 @@ var xxx_TestImportAll_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "bm1",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "bm2",
@@ -205,6 +208,7 @@ var xxx_TestImportAll_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "bm2",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "fmt",
@@ -212,6 +216,7 @@ var xxx_TestImportAll_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				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,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "stringField",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "enum_field",
@@ -213,6 +214,7 @@ var xxx_Nopackage_ProtoFile_MessageDescs = [1]prototype.Message{
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "enumField",
 				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,
 				JSONName:    "defaultDuplicate1",
 				Default:     protoreflect.ValueOf(string("duplicate1")),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_duplicate2",
@@ -619,6 +620,7 @@ var xxx_Enum_ProtoFile_MessageDescs = [2]prototype.Message{
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "defaultDuplicate2",
 				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,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "optionalBool",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_enum",
@@ -1680,6 +1681,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "optionalEnum",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_int32",
@@ -1687,6 +1689,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "optionalInt32",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_sint32",
@@ -1694,6 +1697,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Sint32Kind,
 				JSONName:    "optionalSint32",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_uint32",
@@ -1701,6 +1705,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Uint32Kind,
 				JSONName:    "optionalUint32",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_int64",
@@ -1708,6 +1713,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "optionalInt64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_sint64",
@@ -1715,6 +1721,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Sint64Kind,
 				JSONName:    "optionalSint64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_uint64",
@@ -1722,6 +1729,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Uint64Kind,
 				JSONName:    "optionalUint64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_sfixed32",
@@ -1729,6 +1737,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Sfixed32Kind,
 				JSONName:    "optionalSfixed32",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_fixed32",
@@ -1736,6 +1745,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Fixed32Kind,
 				JSONName:    "optionalFixed32",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_float",
@@ -1743,6 +1753,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.FloatKind,
 				JSONName:    "optionalFloat",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_sfixed64",
@@ -1750,6 +1761,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Sfixed64Kind,
 				JSONName:    "optionalSfixed64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_fixed64",
@@ -1757,6 +1769,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Fixed64Kind,
 				JSONName:    "optionalFixed64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_double",
@@ -1764,6 +1777,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "optionalDouble",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_string",
@@ -1771,6 +1785,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "optionalString",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_bytes",
@@ -1778,6 +1793,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "optionalBytes",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_Message",
@@ -1785,6 +1801,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "optionalMessage",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optionalgroup",
@@ -1792,6 +1809,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.GroupKind,
 				JSONName:    "optionalgroup",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "required_bool",
@@ -1799,6 +1817,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "requiredBool",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "required_enum",
@@ -1806,6 +1825,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "requiredEnum",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "required_int32",
@@ -1813,6 +1833,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "requiredInt32",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "required_sint32",
@@ -1820,6 +1841,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.Sint32Kind,
 				JSONName:    "requiredSint32",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "required_uint32",
@@ -1827,6 +1849,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.Uint32Kind,
 				JSONName:    "requiredUint32",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "required_int64",
@@ -1834,6 +1857,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "requiredInt64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "required_sint64",
@@ -1841,6 +1865,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.Sint64Kind,
 				JSONName:    "requiredSint64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "required_uint64",
@@ -1848,6 +1873,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.Uint64Kind,
 				JSONName:    "requiredUint64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "required_sfixed32",
@@ -1855,6 +1881,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.Sfixed32Kind,
 				JSONName:    "requiredSfixed32",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "required_fixed32",
@@ -1862,6 +1889,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.Fixed32Kind,
 				JSONName:    "requiredFixed32",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "required_float",
@@ -1869,6 +1897,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.FloatKind,
 				JSONName:    "requiredFloat",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "required_sfixed64",
@@ -1876,6 +1905,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.Sfixed64Kind,
 				JSONName:    "requiredSfixed64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "required_fixed64",
@@ -1883,6 +1913,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.Fixed64Kind,
 				JSONName:    "requiredFixed64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "required_double",
@@ -1890,6 +1921,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "requiredDouble",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "required_string",
@@ -1897,6 +1929,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "requiredString",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "required_bytes",
@@ -1904,6 +1937,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "requiredBytes",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "required_Message",
@@ -1911,6 +1945,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "requiredMessage",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "requiredgroup",
@@ -1918,6 +1953,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.GroupKind,
 				JSONName:    "requiredgroup",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "repeated_bool",
@@ -1925,6 +1961,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "repeatedBool",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "repeated_enum",
@@ -1932,6 +1969,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "repeatedEnum",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "repeated_int32",
@@ -1939,6 +1977,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "repeatedInt32",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "repeated_sint32",
@@ -1946,6 +1985,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Sint32Kind,
 				JSONName:    "repeatedSint32",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "repeated_uint32",
@@ -1953,6 +1993,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Uint32Kind,
 				JSONName:    "repeatedUint32",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "repeated_int64",
@@ -1960,6 +2001,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "repeatedInt64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "repeated_sint64",
@@ -1967,6 +2009,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Sint64Kind,
 				JSONName:    "repeatedSint64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "repeated_uint64",
@@ -1974,6 +2017,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Uint64Kind,
 				JSONName:    "repeatedUint64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "repeated_sfixed32",
@@ -1981,6 +2025,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Sfixed32Kind,
 				JSONName:    "repeatedSfixed32",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "repeated_fixed32",
@@ -1988,6 +2033,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Fixed32Kind,
 				JSONName:    "repeatedFixed32",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "repeated_float",
@@ -1995,6 +2041,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.FloatKind,
 				JSONName:    "repeatedFloat",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "repeated_sfixed64",
@@ -2002,6 +2049,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Sfixed64Kind,
 				JSONName:    "repeatedSfixed64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "repeated_fixed64",
@@ -2009,6 +2057,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Fixed64Kind,
 				JSONName:    "repeatedFixed64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "repeated_double",
@@ -2016,6 +2065,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "repeatedDouble",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "repeated_string",
@@ -2023,6 +2073,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "repeatedString",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "repeated_bytes",
@@ -2030,6 +2081,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "repeatedBytes",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "repeated_Message",
@@ -2037,6 +2089,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "repeatedMessage",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "repeatedgroup",
@@ -2044,6 +2097,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.GroupKind,
 				JSONName:    "repeatedgroup",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_bool",
@@ -2052,6 +2106,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "defaultBool",
 				Default:     protoreflect.ValueOf(bool(true)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_enum",
@@ -2060,6 +2115,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "defaultEnum",
 				Default:     protoreflect.ValueOf(string("ONE")),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_int32",
@@ -2068,6 +2124,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "defaultInt32",
 				Default:     protoreflect.ValueOf(int32(1)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_sint32",
@@ -2076,6 +2133,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Sint32Kind,
 				JSONName:    "defaultSint32",
 				Default:     protoreflect.ValueOf(int32(1)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_uint32",
@@ -2084,6 +2142,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Uint32Kind,
 				JSONName:    "defaultUint32",
 				Default:     protoreflect.ValueOf(uint32(1)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_int64",
@@ -2092,6 +2151,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "defaultInt64",
 				Default:     protoreflect.ValueOf(int64(1)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_sint64",
@@ -2100,6 +2160,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Sint64Kind,
 				JSONName:    "defaultSint64",
 				Default:     protoreflect.ValueOf(int64(1)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_uint64",
@@ -2108,6 +2169,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Uint64Kind,
 				JSONName:    "defaultUint64",
 				Default:     protoreflect.ValueOf(uint64(1)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_sfixed32",
@@ -2116,6 +2178,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Sfixed32Kind,
 				JSONName:    "defaultSfixed32",
 				Default:     protoreflect.ValueOf(int32(1)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_fixed32",
@@ -2124,6 +2187,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Fixed32Kind,
 				JSONName:    "defaultFixed32",
 				Default:     protoreflect.ValueOf(uint32(1)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_float",
@@ -2132,6 +2196,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.FloatKind,
 				JSONName:    "defaultFloat",
 				Default:     protoreflect.ValueOf(float32(3.14)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_sfixed64",
@@ -2140,6 +2205,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Sfixed64Kind,
 				JSONName:    "defaultSfixed64",
 				Default:     protoreflect.ValueOf(int64(1)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_fixed64",
@@ -2148,6 +2214,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Fixed64Kind,
 				JSONName:    "defaultFixed64",
 				Default:     protoreflect.ValueOf(uint64(1)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_double",
@@ -2156,6 +2223,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "defaultDouble",
 				Default:     protoreflect.ValueOf(float64(3.1415)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_string",
@@ -2164,6 +2232,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.StringKind,
 				JSONName:    "defaultString",
 				Default:     protoreflect.ValueOf(string("hello,\"world!\"\n")),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_bytes",
@@ -2172,6 +2241,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "defaultBytes",
 				Default:     protoreflect.ValueOf(("hello,ޭ\xbe\xef")),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_zero_string",
@@ -2180,6 +2250,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.StringKind,
 				JSONName:    "defaultZeroString",
 				Default:     protoreflect.ValueOf(string("")),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_zero_bytes",
@@ -2188,6 +2259,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "defaultZeroBytes",
 				Default:     protoreflect.ValueOf(("")),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_float_neginf",
@@ -2196,6 +2268,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.FloatKind,
 				JSONName:    "defaultFloatNeginf",
 				Default:     protoreflect.ValueOf(float32(math.Inf(-1))),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_float_posinf",
@@ -2204,6 +2277,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.FloatKind,
 				JSONName:    "defaultFloatPosinf",
 				Default:     protoreflect.ValueOf(float32(math.Inf(+1))),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_float_nan",
@@ -2212,6 +2286,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.FloatKind,
 				JSONName:    "defaultFloatNan",
 				Default:     protoreflect.ValueOf(float32(math.NaN())),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_double_neginf",
@@ -2220,6 +2295,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "defaultDoubleNeginf",
 				Default:     protoreflect.ValueOf(float64(math.Inf(-1))),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_double_posinf",
@@ -2228,6 +2304,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "defaultDoublePosinf",
 				Default:     protoreflect.ValueOf(float64(math.Inf(+1))),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_double_nan",
@@ -2236,6 +2313,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "defaultDoubleNan",
 				Default:     protoreflect.ValueOf(float64(math.NaN())),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "map_int32_int64",
@@ -2243,6 +2321,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "mapInt32Int64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "map_string_message",
@@ -2250,6 +2329,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "mapStringMessage",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "map_fixed64_enum",
@@ -2257,6 +2337,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "mapFixed64Enum",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_bool",
@@ -2265,6 +2346,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "oneofBool",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_enum",
@@ -2273,6 +2355,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "oneofEnum",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_int32",
@@ -2281,6 +2364,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "oneofInt32",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_sint32",
@@ -2289,6 +2373,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Sint32Kind,
 				JSONName:    "oneofSint32",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_uint32",
@@ -2297,6 +2382,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Uint32Kind,
 				JSONName:    "oneofUint32",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_int64",
@@ -2305,6 +2391,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "oneofInt64",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_sint64",
@@ -2313,6 +2400,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Sint64Kind,
 				JSONName:    "oneofSint64",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_uint64",
@@ -2321,6 +2409,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Uint64Kind,
 				JSONName:    "oneofUint64",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_sfixed32",
@@ -2329,6 +2418,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Sfixed32Kind,
 				JSONName:    "oneofSfixed32",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_fixed32",
@@ -2337,6 +2427,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Fixed32Kind,
 				JSONName:    "oneofFixed32",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_float",
@@ -2345,6 +2436,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.FloatKind,
 				JSONName:    "oneofFloat",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_sfixed64",
@@ -2353,6 +2445,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Sfixed64Kind,
 				JSONName:    "oneofSfixed64",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_fixed64",
@@ -2361,6 +2454,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Fixed64Kind,
 				JSONName:    "oneofFixed64",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_double",
@@ -2369,6 +2463,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "oneofDouble",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_string",
@@ -2377,6 +2472,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.StringKind,
 				JSONName:    "oneofString",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_bytes",
@@ -2385,6 +2481,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "oneofBytes",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_Message",
@@ -2393,6 +2490,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "oneofMessage",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneofgroup",
@@ -2401,6 +2499,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.GroupKind,
 				JSONName:    "oneofgroup",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_largest_tag",
@@ -2409,6 +2508,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "oneofLargestTag",
 				OneofName:   "oneof_field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_two_1",
@@ -2417,6 +2517,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "oneofTwo1",
 				OneofName:   "oneof_two",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_two_2",
@@ -2425,6 +2526,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "oneofTwo2",
 				OneofName:   "oneof_two",
+				IsPacked:    prototype.False,
 			},
 		},
 		Oneofs: []prototype.Oneof{
@@ -2443,6 +2545,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "optionalGroup",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -2455,6 +2558,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "requiredGroup",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -2467,6 +2571,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "repeatedGroup",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -2479,6 +2584,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "key",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "value",
@@ -2486,8 +2592,10 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "value",
+				IsPacked:    prototype.False,
 			},
 		},
+		IsMapEntry: true,
 	},
 	{
 		Name: "MapStringMessageEntry",
@@ -2498,6 +2606,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "key",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "value",
@@ -2505,8 +2614,10 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "value",
+				IsPacked:    prototype.False,
 			},
 		},
+		IsMapEntry: true,
 	},
 	{
 		Name: "MapFixed64EnumEntry",
@@ -2517,6 +2628,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Fixed64Kind,
 				JSONName:    "key",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "value",
@@ -2524,8 +2636,10 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "value",
+				IsPacked:    prototype.False,
 			},
 		},
+		IsMapEntry: true,
 	},
 	{
 		Name: "OneofGroup",
@@ -2536,6 +2650,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [9]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				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,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "l2",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "l3",
@@ -270,6 +271,7 @@ var xxx_NestedMessages_ProtoFile_MessageDescs = [3]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "l3",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -282,6 +284,7 @@ var xxx_NestedMessages_ProtoFile_MessageDescs = [3]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				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,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "i32",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "m",
@@ -144,6 +145,7 @@ var xxx_Proto2_ProtoFile_MessageDescs = [1]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				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,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "optionalBool",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_enum",
@@ -589,6 +590,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "optionalEnum",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_int32",
@@ -596,6 +598,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "optionalInt32",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_sint32",
@@ -603,6 +606,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Sint32Kind,
 				JSONName:    "optionalSint32",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_uint32",
@@ -610,6 +614,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Uint32Kind,
 				JSONName:    "optionalUint32",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_int64",
@@ -617,6 +622,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "optionalInt64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_sint64",
@@ -624,6 +630,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Sint64Kind,
 				JSONName:    "optionalSint64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_uint64",
@@ -631,6 +638,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Uint64Kind,
 				JSONName:    "optionalUint64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_sfixed32",
@@ -638,6 +646,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Sfixed32Kind,
 				JSONName:    "optionalSfixed32",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_fixed32",
@@ -645,6 +654,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Fixed32Kind,
 				JSONName:    "optionalFixed32",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_float",
@@ -652,6 +662,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.FloatKind,
 				JSONName:    "optionalFloat",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_sfixed64",
@@ -659,6 +670,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Sfixed64Kind,
 				JSONName:    "optionalSfixed64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_fixed64",
@@ -666,6 +678,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Fixed64Kind,
 				JSONName:    "optionalFixed64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_double",
@@ -673,6 +686,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "optionalDouble",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_string",
@@ -680,6 +694,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "optionalString",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_bytes",
@@ -687,6 +702,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "optionalBytes",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optional_Message",
@@ -694,6 +710,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "optionalMessage",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "repeated_bool",
@@ -701,6 +718,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "repeatedBool",
+				IsPacked:    prototype.True,
 			},
 			{
 				Name:        "repeated_enum",
@@ -708,6 +726,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "repeatedEnum",
+				IsPacked:    prototype.True,
 			},
 			{
 				Name:        "repeated_int32",
@@ -715,6 +734,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "repeatedInt32",
+				IsPacked:    prototype.True,
 			},
 			{
 				Name:        "repeated_sint32",
@@ -722,6 +742,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Sint32Kind,
 				JSONName:    "repeatedSint32",
+				IsPacked:    prototype.True,
 			},
 			{
 				Name:        "repeated_uint32",
@@ -729,6 +750,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Uint32Kind,
 				JSONName:    "repeatedUint32",
+				IsPacked:    prototype.True,
 			},
 			{
 				Name:        "repeated_int64",
@@ -736,6 +758,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "repeatedInt64",
+				IsPacked:    prototype.True,
 			},
 			{
 				Name:        "repeated_sint64",
@@ -743,6 +766,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Sint64Kind,
 				JSONName:    "repeatedSint64",
+				IsPacked:    prototype.True,
 			},
 			{
 				Name:        "repeated_uint64",
@@ -750,6 +774,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Uint64Kind,
 				JSONName:    "repeatedUint64",
+				IsPacked:    prototype.True,
 			},
 			{
 				Name:        "repeated_sfixed32",
@@ -757,6 +782,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Sfixed32Kind,
 				JSONName:    "repeatedSfixed32",
+				IsPacked:    prototype.True,
 			},
 			{
 				Name:        "repeated_fixed32",
@@ -764,6 +790,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Fixed32Kind,
 				JSONName:    "repeatedFixed32",
+				IsPacked:    prototype.True,
 			},
 			{
 				Name:        "repeated_float",
@@ -771,6 +798,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.FloatKind,
 				JSONName:    "repeatedFloat",
+				IsPacked:    prototype.True,
 			},
 			{
 				Name:        "repeated_sfixed64",
@@ -778,6 +806,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Sfixed64Kind,
 				JSONName:    "repeatedSfixed64",
+				IsPacked:    prototype.True,
 			},
 			{
 				Name:        "repeated_fixed64",
@@ -785,6 +814,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Fixed64Kind,
 				JSONName:    "repeatedFixed64",
+				IsPacked:    prototype.True,
 			},
 			{
 				Name:        "repeated_double",
@@ -792,6 +822,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "repeatedDouble",
+				IsPacked:    prototype.True,
 			},
 			{
 				Name:        "repeated_string",
@@ -799,6 +830,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "repeatedString",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "repeated_bytes",
@@ -806,6 +838,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "repeatedBytes",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "repeated_Message",
@@ -813,6 +846,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "repeatedMessage",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "map_int32_int64",
@@ -820,6 +854,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "mapInt32Int64",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "map_string_message",
@@ -827,6 +862,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "mapStringMessage",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "map_fixed64_enum",
@@ -834,6 +870,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "mapFixed64Enum",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -846,6 +883,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "key",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "value",
@@ -853,8 +891,10 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "value",
+				IsPacked:    prototype.False,
 			},
 		},
+		IsMapEntry: true,
 	},
 	{
 		Name: "MapStringMessageEntry",
@@ -865,6 +905,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "key",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "value",
@@ -872,8 +913,10 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "value",
+				IsPacked:    prototype.False,
 			},
 		},
+		IsMapEntry: true,
 	},
 	{
 		Name: "MapFixed64EnumEntry",
@@ -884,6 +927,7 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Fixed64Kind,
 				JSONName:    "key",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "value",
@@ -891,8 +935,10 @@ var xxx_Fields_ProtoFile_MessageDescs = [5]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "value",
+				IsPacked:    prototype.False,
 			},
 		},
+		IsMapEntry: true,
 	},
 	{
 		Name: "Message",

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

@@ -14,8 +14,6 @@ import (
 	pref "github.com/golang/protobuf/v2/reflect/protoreflect"
 	ptype "github.com/golang/protobuf/v2/reflect/prototype"
 	cmp "github.com/google/go-cmp/cmp"
-
-	descriptorpb "github.com/golang/protobuf/v2/types/descriptor"
 )
 
 var msgDesc = func() pref.MessageDescriptor {
@@ -23,16 +21,16 @@ var msgDesc = func() pref.MessageDescriptor {
 		Syntax:   pref.Proto2,
 		FullName: "Message",
 		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: "F12", Number: 12, Cardinality: pref.Optional, Kind: pref.BytesKind},
 			{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
 }()
 
-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.
 func dhex(s string) []byte {
 	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: "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: "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{
@@ -1017,7 +1019,8 @@ var messageMapDesc = mustMakeMessageDesc(ptype.StandaloneMessage{
 		{Name: "key", Number: 1, Cardinality: pref.Optional, Kind: pref.StringKind},
 		{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 }

+ 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()
 		} else if t.Kind() == reflect.Map {
 			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{
 					ms.parseField(tagKey, "", "", t.Key(), 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
 		m.Name = protoreflect.Name(md.GetName())
 		m.Options = md.GetOptions()
+		m.IsMapEntry = md.GetOptions().GetMapEntry()
 		for _, fd := range md.GetField() {
 			var f prototype.Field
 			f.Name = protoreflect.Name(fd.GetName())
 			f.Number = protoreflect.FieldNumber(fd.GetNumber())
 			f.Cardinality = protoreflect.Cardinality(fd.GetLabel())
 			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()
 			if fd.DefaultValue != nil {
 				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())
 			}
-			opts, _ := f.Options.(*descriptorpb.FieldOptions)
 			switch f.Kind {
 			case protoreflect.EnumKind:
 				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.
 // When creating an entire file, the syntax and full name is derived from
 // 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
 
 import "github.com/golang/protobuf/v2/reflect/protoreflect"
@@ -103,6 +110,7 @@ type Message struct {
 	ExtensionRanges       [][2]protoreflect.FieldNumber
 	ExtensionRangeOptions []protoreflect.ProtoMessage
 	Options               protoreflect.ProtoMessage
+	IsMapEntry            bool
 
 	Enums      []Enum
 	Messages   []Message
@@ -131,6 +139,8 @@ type Field struct {
 	MessageType protoreflect.MessageDescriptor
 	EnumType    protoreflect.EnumDescriptor
 	Options     protoreflect.ProtoMessage
+	IsPacked    OptionalBool
+	IsWeak      bool
 
 	*fieldMeta
 }
@@ -154,6 +164,7 @@ type Extension struct {
 	EnumType     protoreflect.EnumDescriptor
 	ExtendedType protoreflect.MessageDescriptor
 	Options      protoreflect.ProtoMessage
+	IsPacked     OptionalBool
 
 	*extensionMeta
 }
@@ -206,3 +217,13 @@ type Method struct {
 
 	*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
 	es enumsMeta
 	xs extensionsMeta
-	mo messageOptions
 }
 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) IsPlaceholder() bool                { return false }
 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) Oneofs() pref.OneofDescriptors      { return t.m.os.lazyInit(t, t.m.Oneofs) }
 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
 }
 
-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 {
 	inheritedMeta
 
@@ -231,25 +214,29 @@ type fieldMeta struct {
 	ot oneofReference
 	mt messageReference
 	et enumReference
-	fo fieldOptions
 }
 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) 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) }
@@ -261,6 +248,20 @@ func (t fieldDesc) Format(s fmt.State, r rune)                 { pfmt.FormatDesc
 func (t fieldDesc) ProtoType(pref.FieldDescriptor)             {}
 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 {
 	once sync.Once
 	name string
@@ -310,77 +311,6 @@ func (p *oneofReference) lazyInit(parent pref.Descriptor, name pref.Name) pref.O
 	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 {
 	inheritedMeta
 
@@ -410,19 +340,22 @@ type extensionMeta struct {
 }
 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) IsMap() bool                                { return false }
 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
 	ExtensionRangeOptions []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.
@@ -67,7 +67,7 @@ func NewMessages(ts []*StandaloneMessage) ([]protoreflect.MessageDescriptor, err
 		for i, f := range t.Fields {
 			// Resolve placeholder messages with a concrete standalone message.
 			// 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 {
 					t.Fields[i].MessageType = m
 				}
@@ -118,6 +118,7 @@ type StandaloneExtension struct {
 	EnumType     protoreflect.EnumDescriptor
 	ExtendedType protoreflect.MessageDescriptor
 	Options      protoreflect.ProtoMessage
+	IsPacked     OptionalBool
 
 	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 {
 	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) Oneofs() pref.OneofDescriptors { return t.m.oneofs.lazyInit(t, t.m.Oneofs) }
 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) HasJSONName() bool             { return false }
 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 {
 	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),
 				Deprecated: scalar.Bool(true),
 			},
+			IsMapEntry: true,
 			Fields: []ptype.Field{{
 				Name:        "key", // "test.A.key"
 				Number:      1,
@@ -92,6 +93,7 @@ func TestFile(t *testing.T) {
 				Cardinality: pref.Repeated,
 				Kind:        pref.Int32Kind,
 				Options:     &descriptorpb.FieldOptions{Packed: scalar.Bool(true)},
+				IsPacked:    ptype.True,
 			}, {
 				Name:        "field_six", // "test.B.field_six"
 				Number:      6,
@@ -132,6 +134,7 @@ func TestFile(t *testing.T) {
 				Cardinality:  pref.Repeated,
 				Kind:         pref.MessageKind,
 				Options:      &descriptorpb.FieldOptions{Packed: scalar.Bool(false)},
+				IsPacked:     ptype.False,
 				MessageType:  ptype.PlaceholderMessage("test.C"),
 				ExtendedType: ptype.PlaceholderMessage("test.B"),
 			}},
@@ -156,6 +159,7 @@ func TestFile(t *testing.T) {
 			Cardinality:  pref.Repeated,
 			Kind:         pref.MessageKind,
 			Options:      &descriptorpb.FieldOptions{Packed: scalar.Bool(true)},
+			IsPacked:     ptype.True,
 			MessageType:  ptype.PlaceholderMessage("test.C"),
 			ExtendedType: ptype.PlaceholderMessage("test.B"),
 		}},
@@ -601,7 +605,7 @@ func testFileAccessors(t *testing.T, fd pref.FileDescriptor) {
 				"Number":       pref.FieldNumber(1000),
 				"Cardinality":  pref.Repeated,
 				"Kind":         pref.MessageKind,
-				"IsPacked":     true,
+				"IsPacked":     false,
 				"MessageType":  M{"FullName": pref.FullName("test.C"), "IsPlaceholder": false},
 				"ExtendedType": M{"FullName": pref.FullName("test.B"), "IsPlaceholder": false},
 				"Options":      &descriptorpb.FieldOptions{Packed: scalar.Bool(true)},
@@ -862,7 +866,6 @@ func testFileFormat(t *testing.T, fd pref.FileDescriptor) {
 		Number:       1000
 		Cardinality:  repeated
 		Kind:         message
-		IsPacked:     true
 		ExtendedType: test.B
 		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,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "file",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -3321,6 +3322,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "package",
@@ -3328,6 +3330,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "package",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "dependency",
@@ -3335,6 +3338,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "dependency",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "public_dependency",
@@ -3342,6 +3346,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "publicDependency",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "weak_dependency",
@@ -3349,6 +3354,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "weakDependency",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "message_type",
@@ -3356,6 +3362,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "messageType",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "enum_type",
@@ -3363,6 +3370,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "enumType",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "service",
@@ -3370,6 +3378,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "service",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "extension",
@@ -3377,6 +3386,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "extension",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "options",
@@ -3384,6 +3394,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "options",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "source_code_info",
@@ -3391,6 +3402,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "sourceCodeInfo",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "syntax",
@@ -3398,6 +3410,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "syntax",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -3410,6 +3423,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "field",
@@ -3417,6 +3431,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "field",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "extension",
@@ -3424,6 +3439,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "extension",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "nested_type",
@@ -3431,6 +3447,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "nestedType",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "enum_type",
@@ -3438,6 +3455,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "enumType",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "extension_range",
@@ -3445,6 +3463,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "extensionRange",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_decl",
@@ -3452,6 +3471,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "oneofDecl",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "options",
@@ -3459,6 +3479,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "options",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "reserved_range",
@@ -3466,6 +3487,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "reservedRange",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "reserved_name",
@@ -3473,6 +3495,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "reservedName",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -3485,6 +3508,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "uninterpretedOption",
+				IsPacked:    prototype.False,
 			},
 		},
 		ExtensionRanges: [][2]protoreflect.FieldNumber{{1000, 536870912}},
@@ -3498,6 +3522,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "number",
@@ -3505,6 +3530,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "number",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "label",
@@ -3512,6 +3538,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "label",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "type",
@@ -3519,6 +3546,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "type",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "type_name",
@@ -3526,6 +3554,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "typeName",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "extendee",
@@ -3533,6 +3562,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "extendee",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "default_value",
@@ -3540,6 +3570,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "defaultValue",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "oneof_index",
@@ -3547,6 +3578,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "oneofIndex",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "json_name",
@@ -3554,6 +3586,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "jsonName",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "options",
@@ -3561,6 +3594,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "options",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -3573,6 +3607,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "options",
@@ -3580,6 +3615,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "options",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -3592,6 +3628,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "value",
@@ -3599,6 +3636,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "value",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "options",
@@ -3606,6 +3644,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "options",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "reserved_range",
@@ -3613,6 +3652,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "reservedRange",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "reserved_name",
@@ -3620,6 +3660,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "reservedName",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -3632,6 +3673,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "number",
@@ -3639,6 +3681,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "number",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "options",
@@ -3646,6 +3689,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "options",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -3658,6 +3702,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "method",
@@ -3665,6 +3710,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "method",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "options",
@@ -3672,6 +3718,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "options",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -3684,6 +3731,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "input_type",
@@ -3691,6 +3739,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "inputType",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "output_type",
@@ -3698,6 +3747,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "outputType",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "options",
@@ -3705,6 +3755,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "options",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "client_streaming",
@@ -3713,6 +3764,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "clientStreaming",
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "server_streaming",
@@ -3721,6 +3773,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "serverStreaming",
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -3733,6 +3786,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "javaPackage",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "java_outer_classname",
@@ -3740,6 +3794,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "javaOuterClassname",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "java_multiple_files",
@@ -3748,6 +3803,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "javaMultipleFiles",
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "java_generate_equals_and_hash",
@@ -3755,6 +3811,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "javaGenerateEqualsAndHash",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "java_string_check_utf8",
@@ -3763,6 +3820,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "javaStringCheckUtf8",
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "optimize_for",
@@ -3771,6 +3829,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "optimizeFor",
 				Default:     protoreflect.ValueOf(string("SPEED")),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "go_package",
@@ -3778,6 +3837,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "goPackage",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "cc_generic_services",
@@ -3786,6 +3846,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "ccGenericServices",
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "java_generic_services",
@@ -3794,6 +3855,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "javaGenericServices",
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "py_generic_services",
@@ -3802,6 +3864,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "pyGenericServices",
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "php_generic_services",
@@ -3810,6 +3873,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "phpGenericServices",
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "deprecated",
@@ -3818,6 +3882,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "deprecated",
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "cc_enable_arenas",
@@ -3826,6 +3891,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "ccEnableArenas",
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "objc_class_prefix",
@@ -3833,6 +3899,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "objcClassPrefix",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "csharp_namespace",
@@ -3840,6 +3907,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "csharpNamespace",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "swift_prefix",
@@ -3847,6 +3915,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "swiftPrefix",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "php_class_prefix",
@@ -3854,6 +3923,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "phpClassPrefix",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "php_namespace",
@@ -3861,6 +3931,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "phpNamespace",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "php_metadata_namespace",
@@ -3868,6 +3939,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "phpMetadataNamespace",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "ruby_package",
@@ -3875,6 +3947,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "rubyPackage",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "uninterpreted_option",
@@ -3882,6 +3955,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "uninterpretedOption",
+				IsPacked:    prototype.False,
 			},
 		},
 		ReservedRanges:  [][2]protoreflect.FieldNumber{{38, 39}},
@@ -3897,6 +3971,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "messageSetWireFormat",
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "no_standard_descriptor_accessor",
@@ -3905,6 +3980,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "noStandardDescriptorAccessor",
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "deprecated",
@@ -3913,6 +3989,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "deprecated",
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "map_entry",
@@ -3920,6 +3997,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "mapEntry",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "uninterpreted_option",
@@ -3927,6 +4005,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "uninterpretedOption",
+				IsPacked:    prototype.False,
 			},
 		},
 		ReservedRanges:  [][2]protoreflect.FieldNumber{{8, 9}, {9, 10}},
@@ -3942,6 +4021,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "ctype",
 				Default:     protoreflect.ValueOf(string("STRING")),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "packed",
@@ -3949,6 +4029,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "packed",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "jstype",
@@ -3957,6 +4038,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "jstype",
 				Default:     protoreflect.ValueOf(string("JS_NORMAL")),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "lazy",
@@ -3965,6 +4047,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "lazy",
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "deprecated",
@@ -3973,6 +4056,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "deprecated",
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "weak",
@@ -3981,6 +4065,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "weak",
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "uninterpreted_option",
@@ -3988,6 +4073,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "uninterpretedOption",
+				IsPacked:    prototype.False,
 			},
 		},
 		ReservedRanges:  [][2]protoreflect.FieldNumber{{4, 5}},
@@ -4002,6 +4088,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "uninterpretedOption",
+				IsPacked:    prototype.False,
 			},
 		},
 		ExtensionRanges: [][2]protoreflect.FieldNumber{{1000, 536870912}},
@@ -4015,6 +4102,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "allowAlias",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "deprecated",
@@ -4023,6 +4111,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "deprecated",
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "uninterpreted_option",
@@ -4030,6 +4119,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "uninterpretedOption",
+				IsPacked:    prototype.False,
 			},
 		},
 		ReservedRanges:  [][2]protoreflect.FieldNumber{{5, 6}},
@@ -4045,6 +4135,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "deprecated",
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "uninterpreted_option",
@@ -4052,6 +4143,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "uninterpretedOption",
+				IsPacked:    prototype.False,
 			},
 		},
 		ExtensionRanges: [][2]protoreflect.FieldNumber{{1000, 536870912}},
@@ -4066,6 +4158,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "deprecated",
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "uninterpreted_option",
@@ -4073,6 +4166,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "uninterpretedOption",
+				IsPacked:    prototype.False,
 			},
 		},
 		ExtensionRanges: [][2]protoreflect.FieldNumber{{1000, 536870912}},
@@ -4087,6 +4181,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "deprecated",
 				Default:     protoreflect.ValueOf(bool(false)),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "idempotency_level",
@@ -4095,6 +4190,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Kind:        protoreflect.EnumKind,
 				JSONName:    "idempotencyLevel",
 				Default:     protoreflect.ValueOf(string("IDEMPOTENCY_UNKNOWN")),
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "uninterpreted_option",
@@ -4102,6 +4198,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "uninterpretedOption",
+				IsPacked:    prototype.False,
 			},
 		},
 		ExtensionRanges: [][2]protoreflect.FieldNumber{{1000, 536870912}},
@@ -4115,6 +4212,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "identifier_value",
@@ -4122,6 +4220,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "identifierValue",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "positive_int_value",
@@ -4129,6 +4228,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Uint64Kind,
 				JSONName:    "positiveIntValue",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "negative_int_value",
@@ -4136,6 +4236,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int64Kind,
 				JSONName:    "negativeIntValue",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "double_value",
@@ -4143,6 +4244,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.DoubleKind,
 				JSONName:    "doubleValue",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "string_value",
@@ -4150,6 +4252,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.BytesKind,
 				JSONName:    "stringValue",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "aggregate_value",
@@ -4157,6 +4260,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "aggregateValue",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -4169,6 +4273,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "location",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -4181,6 +4286,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "annotation",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -4193,6 +4299,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "start",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "end",
@@ -4200,6 +4307,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "end",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "options",
@@ -4207,6 +4315,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "options",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -4219,6 +4328,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "start",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "end",
@@ -4226,6 +4336,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "end",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -4238,6 +4349,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "start",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "end",
@@ -4245,6 +4357,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "end",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -4257,6 +4370,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "namePart",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "is_extension",
@@ -4264,6 +4378,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Required,
 				Kind:        protoreflect.BoolKind,
 				JSONName:    "isExtension",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -4276,6 +4391,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "path",
+				IsPacked:    prototype.True,
 			},
 			{
 				Name:        "span",
@@ -4283,6 +4399,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "span",
+				IsPacked:    prototype.True,
 			},
 			{
 				Name:        "leading_comments",
@@ -4290,6 +4407,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "leadingComments",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "trailing_comments",
@@ -4297,6 +4415,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "trailingComments",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "leading_detached_comments",
@@ -4304,6 +4423,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "leadingDetachedComments",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -4316,6 +4436,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "path",
+				IsPacked:    prototype.True,
 			},
 			{
 				Name:        "source_file",
@@ -4323,6 +4444,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "sourceFile",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "begin",
@@ -4330,6 +4452,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "begin",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "end",
@@ -4337,6 +4460,7 @@ var xxx_Descriptor_ProtoFile_MessageDescs = [27]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				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,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "major",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "minor",
@@ -505,6 +506,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "minor",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "patch",
@@ -512,6 +514,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.Int32Kind,
 				JSONName:    "patch",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "suffix",
@@ -519,6 +522,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "suffix",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -531,6 +535,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "fileToGenerate",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "parameter",
@@ -538,6 +543,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "parameter",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "proto_file",
@@ -545,6 +551,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "protoFile",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "compiler_version",
@@ -552,6 +559,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "compilerVersion",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -564,6 +572,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "error",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "file",
@@ -571,6 +580,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Repeated,
 				Kind:        protoreflect.MessageKind,
 				JSONName:    "file",
+				IsPacked:    prototype.False,
 			},
 		},
 	},
@@ -583,6 +593,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "name",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "insertion_point",
@@ -590,6 +601,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "insertionPoint",
+				IsPacked:    prototype.False,
 			},
 			{
 				Name:        "content",
@@ -597,6 +609,7 @@ var xxx_Plugin_ProtoFile_MessageDescs = [4]prototype.Message{
 				Cardinality: protoreflect.Optional,
 				Kind:        protoreflect.StringKind,
 				JSONName:    "content",
+				IsPacked:    prototype.False,
 			},
 		},
 	},