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.