cmd/protoc-gen-go: generate for v2-only dependencies
This removes yet another set of dependencies of v2 on v1.
The only remaining dependency are in the _test.go files,
primarily for proto.Equal.
Changes made:
* cmd/protoc-gen-go no longer generates any functionality that depends
on the v1 package, and instead only depends on v2.
* internal/fileinit.FileBuilder.MessageOutputTypes is switched from
protoreflect.MessageType to protoimpl.MessageType since the
implementation must be fully inialized before registration occurs.
* The test for internal/legacy/file_test.go is switched to a legacy_test
package to avoid a cyclic dependency.
This requires Load{Enum,Message,File}Desc to be exported.
Change-Id: I43e2fe64cff4eea204258ce11e791aca5eb6e569
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/169298
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/internal/legacy/enum.go b/internal/legacy/enum.go
index 23eebd8..831b94c 100644
--- a/internal/legacy/enum.go
+++ b/internal/legacy/enum.go
@@ -36,7 +36,7 @@
// Slow-path: derive enum descriptor and initialize EnumType.
var m sync.Map // map[protoreflect.EnumNumber]proto.Enum
- ed := loadEnumDesc(t)
+ ed := LoadEnumDesc(t)
et := ptype.GoEnum(ed, func(et pref.EnumType, n pref.EnumNumber) pref.Enum {
if e, ok := m.Load(n); ok {
return e.(pref.Enum)
@@ -81,9 +81,11 @@
var enumNumberType = reflect.TypeOf(pref.EnumNumber(0))
-// loadEnumDesc returns an EnumDescriptor derived from the Go type,
+// LoadEnumDesc returns an EnumDescriptor derived from the Go type,
// which must be an int32 kind and not implement the v2 API already.
-func loadEnumDesc(t reflect.Type) pref.EnumDescriptor {
+//
+// This is exported for testing purposes.
+func LoadEnumDesc(t reflect.Type) pref.EnumDescriptor {
// Fast-path: check if an EnumDescriptor is cached for this concrete type.
if ed, ok := enumDescCache.Load(t); ok {
return ed.(pref.EnumDescriptor)
@@ -105,7 +107,7 @@
}
if ed, ok := ev.(enumV1); ok {
b, idxs := ed.EnumDescriptor()
- fd := loadFileDesc(b)
+ fd := LoadFileDesc(b)
// Derive syntax.
switch fd.GetSyntax() {