diff --git a/internal/fileinit/desc.go b/internal/fileinit/desc.go
index 4a0861b..fdca09b 100644
--- a/internal/fileinit/desc.go
+++ b/internal/fileinit/desc.go
@@ -251,7 +251,7 @@
 )
 
 func (fd *fileDesc) ParentFile() pref.FileDescriptor { return fd }
-func (fd *fileDesc) Parent() (pref.Descriptor, bool) { return nil, false }
+func (fd *fileDesc) Parent() pref.Descriptor         { return nil }
 func (fd *fileDesc) Index() int                      { return 0 }
 func (fd *fileDesc) Syntax() pref.Syntax             { return fd.lazyInit().syntax }
 func (fd *fileDesc) Name() pref.Name                 { return fd.Package().Name() }
@@ -611,7 +611,7 @@
 }
 
 func (d *baseDesc) ParentFile() pref.FileDescriptor     { return d.parentFile }
-func (d *baseDesc) Parent() (pref.Descriptor, bool)     { return d.parent, true }
+func (d *baseDesc) Parent() pref.Descriptor             { return d.parent }
 func (d *baseDesc) Index() int                          { return d.index }
 func (d *baseDesc) Syntax() pref.Syntax                 { return d.parentFile.Syntax() }
 func (d *baseDesc) IsPlaceholder() bool                 { return false }
diff --git a/internal/impl/legacy_file_test.go b/internal/impl/legacy_file_test.go
index d4c5890..dad814f 100644
--- a/internal/impl/legacy_file_test.go
+++ b/internal/impl/legacy_file_test.go
@@ -421,8 +421,8 @@
 				name := v.Type().Method(i).Name
 				if m := v.Method(i); m.Type().NumIn() == 0 && m.Type().NumOut() == 1 {
 					switch name {
-					case "ParentFile":
-						// Ignore parent file to avoid recursive cycle.
+					case "ParentFile", "Parent":
+						// Ignore parents to avoid recursive cycle.
 					case "Index":
 						// Ignore index since legacy descriptors have no parent.
 					case "Options":
diff --git a/internal/impl/legacy_test.go b/internal/impl/legacy_test.go
index 583ff33..7fb96ca 100644
--- a/internal/impl/legacy_test.go
+++ b/internal/impl/legacy_test.go
@@ -504,6 +504,8 @@
 						name := v.Type().Method(i).Name
 						if m := v.Method(i); m.Type().NumIn() == 0 && m.Type().NumOut() == 1 {
 							switch name {
+							case "ParentFile", "Parent":
+							// Ignore parents to avoid recursive cycle.
 							case "New":
 								// Ignore New since it a constructor.
 							case "Options":
diff --git a/internal/prototype/placeholder_type.go b/internal/prototype/placeholder_type.go
index c7a82c2..e4e7742 100644
--- a/internal/prototype/placeholder_type.go
+++ b/internal/prototype/placeholder_type.go
@@ -31,7 +31,7 @@
 type placeholderName pref.FullName
 
 func (t placeholderName) ParentFile() pref.FileDescriptor     { return nil }
-func (t placeholderName) Parent() (pref.Descriptor, bool)     { return nil, false }
+func (t placeholderName) Parent() pref.Descriptor             { return nil }
 func (t placeholderName) Index() int                          { return 0 }
 func (t placeholderName) Syntax() pref.Syntax                 { return 0 }
 func (t placeholderName) Name() pref.Name                     { return pref.FullName(t).Name() }
diff --git a/internal/prototype/protofile_list.go b/internal/prototype/protofile_list.go
index 41bcdcc..139c0a1 100644
--- a/internal/prototype/protofile_list.go
+++ b/internal/prototype/protofile_list.go
@@ -111,8 +111,7 @@
 func (p *oneofFieldsMeta) lazyInit(parent pref.Descriptor) *oneofFields {
 	p.once.Do(func() {
 		od := parent.(pref.OneofDescriptor)
-		md, _ := parent.Parent()
-		fs := md.(pref.MessageDescriptor).Fields()
+		fs := parent.Parent().(pref.MessageDescriptor).Fields()
 		for i := 0; i < fs.Len(); i++ {
 			if f := fs.Get(i); od == f.ContainingOneof() {
 				p.typs = append(p.typs, f)
diff --git a/internal/prototype/protofile_type.go b/internal/prototype/protofile_type.go
index a560b73..4fe5fa9 100644
--- a/internal/prototype/protofile_type.go
+++ b/internal/prototype/protofile_type.go
@@ -64,7 +64,7 @@
 	return fileDesc{f}
 }
 func (t fileDesc) ParentFile() pref.FileDescriptor       { return t }
-func (t fileDesc) Parent() (pref.Descriptor, bool)       { return nil, false }
+func (t fileDesc) Parent() pref.Descriptor               { return nil }
 func (t fileDesc) Index() int                            { return 0 }
 func (t fileDesc) Syntax() pref.Syntax                   { return t.f.Syntax }
 func (t fileDesc) Name() pref.Name                       { return t.f.Package.Name() }
@@ -83,7 +83,7 @@
 func (t fileDesc) ProtoInternal(pragma.DoNotImplement)   {}
 
 func parentFile(d protoreflect.Descriptor) protoreflect.FileDescriptor {
-	for ; d != nil; d, _ = d.Parent() {
+	for ; d != nil; d = d.Parent() {
 		if fd, ok := d.(protoreflect.FileDescriptor); ok {
 			return fd
 		}
@@ -104,7 +104,7 @@
 type messageDesc struct{ m *Message }
 
 func (t messageDesc) ParentFile() pref.FileDescriptor { return parentFile(t) }
-func (t messageDesc) Parent() (pref.Descriptor, bool) { return t.m.parent, true }
+func (t messageDesc) Parent() pref.Descriptor         { return t.m.parent }
 func (t messageDesc) Index() int                      { return t.m.index }
 func (t messageDesc) Syntax() pref.Syntax             { return t.m.syntax }
 func (t messageDesc) Name() pref.Name                 { return t.m.Name }
@@ -156,7 +156,7 @@
 type fieldDesc struct{ f *Field }
 
 func (t fieldDesc) ParentFile() pref.FileDescriptor { return parentFile(t) }
-func (t fieldDesc) Parent() (pref.Descriptor, bool) { return t.f.parent, true }
+func (t fieldDesc) Parent() pref.Descriptor         { return t.f.parent }
 func (t fieldDesc) Index() int                      { return t.f.index }
 func (t fieldDesc) Syntax() pref.Syntax             { return t.f.syntax }
 func (t fieldDesc) Name() pref.Name                 { return t.f.Name }
@@ -264,8 +264,7 @@
 func (p *oneofReference) lazyInit(parent pref.Descriptor, name pref.Name) pref.OneofDescriptor {
 	p.once.Do(func() {
 		if name != "" {
-			mtyp, _ := parent.Parent()
-			p.otyp = mtyp.(pref.MessageDescriptor).Oneofs().ByName(name)
+			p.otyp = parent.Parent().(pref.MessageDescriptor).Oneofs().ByName(name)
 			// TODO: We need validate to detect this mismatch.
 		}
 	})
@@ -280,7 +279,7 @@
 type oneofDesc struct{ o *Oneof }
 
 func (t oneofDesc) ParentFile() pref.FileDescriptor     { return parentFile(t) }
-func (t oneofDesc) Parent() (pref.Descriptor, bool)     { return t.o.parent, true }
+func (t oneofDesc) Parent() pref.Descriptor             { return t.o.parent }
 func (t oneofDesc) Index() int                          { return t.o.index }
 func (t oneofDesc) Syntax() pref.Syntax                 { return t.o.syntax }
 func (t oneofDesc) Name() pref.Name                     { return t.o.Name }
@@ -303,7 +302,7 @@
 type extensionDesc struct{ x *Extension }
 
 func (t extensionDesc) ParentFile() pref.FileDescriptor { return parentFile(t) }
-func (t extensionDesc) Parent() (pref.Descriptor, bool) { return t.x.parent, true }
+func (t extensionDesc) Parent() pref.Descriptor         { return t.x.parent }
 func (t extensionDesc) Syntax() pref.Syntax             { return t.x.syntax }
 func (t extensionDesc) Index() int                      { return t.x.index }
 func (t extensionDesc) Name() pref.Name                 { return t.x.Name }
@@ -352,7 +351,7 @@
 type enumDesc struct{ e *Enum }
 
 func (t enumDesc) ParentFile() pref.FileDescriptor     { return parentFile(t) }
-func (t enumDesc) Parent() (pref.Descriptor, bool)     { return t.e.parent, true }
+func (t enumDesc) Parent() pref.Descriptor             { return t.e.parent }
 func (t enumDesc) Index() int                          { return t.e.index }
 func (t enumDesc) Syntax() pref.Syntax                 { return t.e.syntax }
 func (t enumDesc) Name() pref.Name                     { return t.e.Name }
@@ -372,7 +371,7 @@
 type enumValueDesc struct{ v *EnumValue }
 
 func (t enumValueDesc) ParentFile() pref.FileDescriptor { return parentFile(t) }
-func (t enumValueDesc) Parent() (pref.Descriptor, bool) { return t.v.parent, true }
+func (t enumValueDesc) Parent() pref.Descriptor         { return t.v.parent }
 func (t enumValueDesc) Index() int                      { return t.v.index }
 func (t enumValueDesc) Syntax() pref.Syntax             { return t.v.syntax }
 func (t enumValueDesc) Name() pref.Name                 { return t.v.Name }
@@ -394,7 +393,7 @@
 type serviceDesc struct{ s *Service }
 
 func (t serviceDesc) ParentFile() pref.FileDescriptor { return parentFile(t) }
-func (t serviceDesc) Parent() (pref.Descriptor, bool) { return t.s.parent, true }
+func (t serviceDesc) Parent() pref.Descriptor         { return t.s.parent }
 func (t serviceDesc) Index() int                      { return t.s.index }
 func (t serviceDesc) Syntax() pref.Syntax             { return t.s.syntax }
 func (t serviceDesc) Name() pref.Name                 { return t.s.Name }
@@ -417,7 +416,7 @@
 type methodDesc struct{ m *Method }
 
 func (t methodDesc) ParentFile() pref.FileDescriptor     { return parentFile(t) }
-func (t methodDesc) Parent() (pref.Descriptor, bool)     { return t.m.parent, true }
+func (t methodDesc) Parent() pref.Descriptor             { return t.m.parent }
 func (t methodDesc) Index() int                          { return t.m.index }
 func (t methodDesc) Syntax() pref.Syntax                 { return t.m.syntax }
 func (t methodDesc) Name() pref.Name                     { return t.m.Name }
@@ -577,7 +576,7 @@
 			}
 			// No match. (e.g., refName: foo.firetruck, curName: foo.fire)
 		}
-		cur, _ = cur.Parent() // nil after ascending above FileDescriptor
+		cur = cur.Parent() // nil after ascending above FileDescriptor
 	}
 
 	// Descend downwards to resolve all relative names.
diff --git a/internal/prototype/standalone_type.go b/internal/prototype/standalone_type.go
index f2960a5..ade656f 100644
--- a/internal/prototype/standalone_type.go
+++ b/internal/prototype/standalone_type.go
@@ -16,7 +16,7 @@
 type standaloneMessage struct{ m *StandaloneMessage }
 
 func (t standaloneMessage) ParentFile() pref.FileDescriptor { return nil }
-func (t standaloneMessage) Parent() (pref.Descriptor, bool) { return nil, false }
+func (t standaloneMessage) Parent() pref.Descriptor         { return nil }
 func (t standaloneMessage) Index() int                      { return 0 }
 func (t standaloneMessage) Syntax() pref.Syntax             { return t.m.Syntax }
 func (t standaloneMessage) Name() pref.Name                 { return t.m.FullName.Name() }
@@ -49,7 +49,7 @@
 type standaloneEnum struct{ e *StandaloneEnum }
 
 func (t standaloneEnum) ParentFile() pref.FileDescriptor { return nil }
-func (t standaloneEnum) Parent() (pref.Descriptor, bool) { return nil, false }
+func (t standaloneEnum) Parent() pref.Descriptor         { return nil }
 func (t standaloneEnum) Index() int                      { return 0 }
 func (t standaloneEnum) Syntax() pref.Syntax             { return t.e.Syntax }
 func (t standaloneEnum) Name() pref.Name                 { return t.e.FullName.Name() }
@@ -68,7 +68,7 @@
 type standaloneExtension struct{ x *StandaloneExtension }
 
 func (t standaloneExtension) ParentFile() pref.FileDescriptor { return nil }
-func (t standaloneExtension) Parent() (pref.Descriptor, bool) { return nil, false }
+func (t standaloneExtension) Parent() pref.Descriptor         { return nil }
 func (t standaloneExtension) Index() int                      { return 0 }
 func (t standaloneExtension) Syntax() pref.Syntax             { return pref.Proto2 }
 func (t standaloneExtension) Name() pref.Name                 { return t.x.FullName.Name() }
diff --git a/reflect/protoreflect/type.go b/reflect/protoreflect/type.go
index fd48271..5c954c1 100644
--- a/reflect/protoreflect/type.go
+++ b/reflect/protoreflect/type.go
@@ -45,8 +45,8 @@
 	//	| MethodDescriptor    | ServiceDescriptor                 |
 	//	+---------------------+-----------------------------------+
 	//
-	// Support for this functionality is optional and may return (nil, false).
-	Parent() (Descriptor, bool)
+	// Support for this functionality is optional and may return nil.
+	Parent() Descriptor
 
 	// Index returns the the index of this descriptor within its parent.
 	// It returns 0 if the descriptor does not have a parent or if the parent
