internal: generate extension numbers, fix editions parsing

Before this commit, message-level Go editions features were not parsed
correctly.

Change-Id: I94ead5428fadae5fd70ed991fa405ce9388e9660
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/603015
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Michael Stapelberg <stapelberg@google.com>
Reviewed-by: Lasse Folger <lassefolger@google.com>
diff --git a/internal/cmd/generate-protos/main.go b/internal/cmd/generate-protos/main.go
index b2d0803..071dc73 100644
--- a/internal/cmd/generate-protos/main.go
+++ b/internal/cmd/generate-protos/main.go
@@ -311,6 +311,7 @@
 
 	var processEnums func([]*protogen.Enum)
 	var processMessages func([]*protogen.Message)
+	var processExtensions func([]*protogen.Extension)
 	const protoreflectPackage = protogen.GoImportPath("google.golang.org/protobuf/reflect/protoreflect")
 	processEnums = func(enums []*protogen.Enum) {
 		for _, enum := range enums {
@@ -377,10 +378,24 @@
 
 			processEnums(message.Enums)
 			processMessages(message.Messages)
+			processExtensions(message.Extensions)
 		}
 	}
+	processExtensions = func(extensions []*protogen.Extension) {
+		if len(extensions) == 0 {
+			return
+		}
+
+		g.P("// Extension numbers")
+		g.P("const (")
+		for _, ext := range extensions {
+			g.P(ext.Extendee.GoIdent.GoName, "_", ext.GoName, "_ext_number ", protoreflectPackage.Ident("FieldNumber"), " = ", ext.Desc.Number())
+		}
+		g.P(")")
+	}
 	processEnums(file.Enums)
 	processMessages(file.Messages)
+	processExtensions(file.Extensions)
 }
 
 // generateSourceContextStringer generates the implementation for the
diff --git a/internal/filedesc/editions.go b/internal/filedesc/editions.go
index 11f5f35..fd4d0c8 100644
--- a/internal/filedesc/editions.go
+++ b/internal/filedesc/editions.go
@@ -68,7 +68,7 @@
 			v, m := protowire.ConsumeBytes(b)
 			b = b[m:]
 			switch num {
-			case genid.GoFeatures_LegacyUnmarshalJsonEnum_field_number:
+			case genid.FeatureSet_Go_ext_number:
 				parent = unmarshalGoFeature(v, parent)
 			}
 		}
diff --git a/internal/genid/go_features_gen.go b/internal/genid/go_features_gen.go
index 546388c..7f67cbb 100644
--- a/internal/genid/go_features_gen.go
+++ b/internal/genid/go_features_gen.go
@@ -29,3 +29,8 @@
 const (
 	GoFeatures_LegacyUnmarshalJsonEnum_field_number protoreflect.FieldNumber = 1
 )
+
+// Extension numbers
+const (
+	FeatureSet_Go_ext_number protoreflect.FieldNumber = 1002
+)