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.
