reflect/protoregistry: remove Files.Find{Enum,Message,Extension,Service}ByName
This is a breaking change.
The replacement is the Files.FindDescriptorByName method,
which is more flexible as it handles all descriptor types.
Change-Id: I2ccd544a7630396a2428b1d41f836c5246070912
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/183700
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/internal/filedesc/build.go b/internal/filedesc/build.go
index 28bd370..5f46e34 100644
--- a/internal/filedesc/build.go
+++ b/internal/filedesc/build.go
@@ -40,8 +40,7 @@
// If nil, it uses protoregistry.GlobalFiles.
FileRegistry interface {
FindFileByPath(string) (protoreflect.FileDescriptor, error)
- FindEnumByName(pref.FullName) (pref.EnumDescriptor, error)
- FindMessageByName(pref.FullName) (pref.MessageDescriptor, error)
+ FindDescriptorByName(pref.FullName) (pref.Descriptor, error)
Register(...pref.FileDescriptor) error
}
}
diff --git a/internal/filedesc/desc_lazy.go b/internal/filedesc/desc_lazy.go
index 3583012..9fc5b1b 100644
--- a/internal/filedesc/desc_lazy.go
+++ b/internal/filedesc/desc_lazy.go
@@ -33,8 +33,8 @@
// Weak fields are only resolved by name.
if fd.L1.IsWeak {
r := file.builder.FileRegistry
- if md, _ := r.FindMessageByName(fd.L1.Message.FullName()); md != nil {
- fd.L1.Message = md
+ if d, _ := r.FindDescriptorByName(fd.L1.Message.FullName()); d != nil {
+ fd.L1.Message = d.(pref.MessageDescriptor)
}
continue
}
@@ -106,8 +106,8 @@
return ed2
}
}
- if ed2, _ := r.FindEnumByName(ed.FullName()); ed2 != nil {
- return ed2
+ if d, _ := r.FindDescriptorByName(ed.FullName()); d != nil {
+ return d.(pref.EnumDescriptor)
}
return ed
}
@@ -124,8 +124,8 @@
return md2
}
}
- if md2, _ := r.FindMessageByName(md.FullName()); md2 != nil {
- return md2
+ if d, _ := r.FindDescriptorByName(md.FullName()); d != nil {
+ return d.(pref.MessageDescriptor)
}
return md
}
diff --git a/internal/filetype/build.go b/internal/filetype/build.go
index 635099b..fa1bb9a 100644
--- a/internal/filetype/build.go
+++ b/internal/filetype/build.go
@@ -274,8 +274,7 @@
}
fileRegistry interface {
FindFileByPath(string) (pref.FileDescriptor, error)
- FindEnumByName(pref.FullName) (pref.EnumDescriptor, error)
- FindMessageByName(pref.FullName) (pref.MessageDescriptor, error)
+ FindDescriptorByName(pref.FullName) (pref.Descriptor, error)
Register(...pref.FileDescriptor) error
}
)
diff --git a/reflect/protodesc/protodesc.go b/reflect/protodesc/protodesc.go
index 59e4024..bb6d245 100644
--- a/reflect/protodesc/protodesc.go
+++ b/reflect/protodesc/protodesc.go
@@ -22,10 +22,7 @@
// It is implemented by protoregistry.Files.
type Resolver interface {
FindFileByPath(string) (protoreflect.FileDescriptor, error)
- FindEnumByName(protoreflect.FullName) (protoreflect.EnumDescriptor, error)
- FindMessageByName(protoreflect.FullName) (protoreflect.MessageDescriptor, error)
-
- // TODO: use FindDescriptorByName instead.
+ FindDescriptorByName(protoreflect.FullName) (protoreflect.Descriptor, error)
}
// TODO: Should we be responsible for validating other parts of the descriptor
@@ -460,24 +457,11 @@
return r.remote.FindFileByPath(s)
}
-func (r resolver) FindEnumByName(s protoreflect.FullName) (protoreflect.EnumDescriptor, error) {
+func (r resolver) FindDescriptorByName(s protoreflect.FullName) (protoreflect.Descriptor, error) {
if d, ok := r.local[s]; ok {
- if ed, ok := d.(protoreflect.EnumDescriptor); ok {
- return ed, nil
- }
- return nil, errors.New("found wrong type")
+ return d, nil
}
- return r.remote.FindEnumByName(s)
-}
-
-func (r resolver) FindMessageByName(s protoreflect.FullName) (protoreflect.MessageDescriptor, error) {
- if d, ok := r.local[s]; ok {
- if md, ok := d.(protoreflect.MessageDescriptor); ok {
- return md, nil
- }
- return nil, errors.New("found wrong type")
- }
- return r.remote.FindMessageByName(s)
+ return r.remote.FindDescriptorByName(s)
}
type importSet map[string]bool
@@ -513,11 +497,33 @@
// scoping rules.
func findEnumDescriptor(s string, isWeak bool, imps importSet, r Resolver) (protoreflect.EnumDescriptor, error) {
+ d, err := findDescriptor(s, isWeak, imps, r)
+ if err != nil {
+ return nil, err
+ }
+ if ed, ok := d.(protoreflect.EnumDescriptor); ok {
+ return ed, nil
+ }
+ return nil, errors.New("invalid descriptor type")
+}
+
+func findMessageDescriptor(s string, isWeak bool, imps importSet, r Resolver) (protoreflect.MessageDescriptor, error) {
+ d, err := findDescriptor(s, isWeak, imps, r)
+ if err != nil {
+ return nil, err
+ }
+ if md, ok := d.(protoreflect.MessageDescriptor); ok {
+ return md, nil
+ }
+ return nil, errors.New("invalid descriptor type")
+}
+
+func findDescriptor(s string, isWeak bool, imps importSet, r Resolver) (protoreflect.Descriptor, error) {
if !strings.HasPrefix(s, ".") {
return nil, errors.New("identifier name must be fully qualified with a leading dot: %v", s)
}
name := protoreflect.FullName(strings.TrimPrefix(s, "."))
- ed, err := r.FindEnumByName(name)
+ d, err := r.FindDescriptorByName(name)
if err != nil {
if err == protoregistry.NotFound {
if isWeak {
@@ -529,31 +535,8 @@
}
return nil, err
}
- if err := imps.check(ed); err != nil {
+ if err := imps.check(d); err != nil {
return nil, err
}
- return ed, nil
-}
-
-func findMessageDescriptor(s string, isWeak bool, imps importSet, r Resolver) (protoreflect.MessageDescriptor, error) {
- if !strings.HasPrefix(s, ".") {
- return nil, errors.New("identifier name must be fully qualified with a leading dot: %v", s)
- }
- name := protoreflect.FullName(strings.TrimPrefix(s, "."))
- md, err := r.FindMessageByName(name)
- if err != nil {
- if err == protoregistry.NotFound {
- if isWeak {
- return filedesc.PlaceholderMessage(name), nil
- }
- // TODO: This should be an error.
- return filedesc.PlaceholderMessage(name), nil
- // return nil, errors.New("could not resolve message: %v", name)
- }
- return nil, err
- }
- if err := imps.check(md); err != nil {
- return nil, err
- }
- return md, nil
+ return d, nil
}
diff --git a/reflect/protoregistry/registry.go b/reflect/protoregistry/registry.go
index d94536f..1337d26 100644
--- a/reflect/protoregistry/registry.go
+++ b/reflect/protoregistry/registry.go
@@ -218,61 +218,6 @@
return name
}
-// FindEnumByName looks up an enum by the enum's full name.
-//
-// This returns (nil, NotFound) if not found.
-//
-// Deprecated: Use FindDescriptorByName instead.
-func (r *Files) FindEnumByName(name protoreflect.FullName) (protoreflect.EnumDescriptor, error) {
- d, _ := r.FindDescriptorByName(name)
- if d, ok := d.(protoreflect.EnumDescriptor); ok {
- return d, nil
- }
- return nil, NotFound
-}
-
-// FindMessageByName looks up a message by the message's full name.
-//
-// This returns (nil, NotFound) if not found.
-//
-// Deprecated: Use FindDescriptorByName instead.
-func (r *Files) FindMessageByName(name protoreflect.FullName) (protoreflect.MessageDescriptor, error) {
- d, _ := r.FindDescriptorByName(name)
- if d, ok := d.(protoreflect.MessageDescriptor); ok {
- return d, nil
- }
- return nil, NotFound
-}
-
-// FindExtensionByName looks up an extension field by the field's full name.
-// Note that this is the full name of the field as determined by
-// where the extension is declared and is unrelated to the full name of the
-// message being extended.
-//
-// This returns (nil, NotFound) if not found.
-//
-// Deprecated: Use FindDescriptorByName instead.
-func (r *Files) FindExtensionByName(name protoreflect.FullName) (protoreflect.ExtensionDescriptor, error) {
- d, _ := r.FindDescriptorByName(name)
- if d, ok := d.(protoreflect.ExtensionDescriptor); ok {
- return d, nil
- }
- return nil, NotFound
-}
-
-// FindServiceByName looks up a service by the service's full name.
-//
-// This returns (nil, NotFound) if not found.
-//
-// Deprecated: Use FindDescriptorByName instead.
-func (r *Files) FindServiceByName(name protoreflect.FullName) (protoreflect.ServiceDescriptor, error) {
- d, _ := r.FindDescriptorByName(name)
- if d, ok := d.(protoreflect.ServiceDescriptor); ok {
- return d, nil
- }
- return nil, NotFound
-}
-
// FindFileByPath looks up a file by the path.
//
// This returns (nil, NotFound) if not found.