reflect/protoreflect: rename methods with Type suffix

The protobuf type system uses the word "descriptor" instead of "type".
We should avoid the "type" verbage when we aren't talking about Go types.
The old names are temporarily kept around for compatibility reasons.

Change-Id: Icc99c913528ead011f7a74aa8399d9c5ec6dc56e
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/172238
Reviewed-by: Herbie Ong <herbie@google.com>
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/cmd/protoc-gen-go-grpc/internal_gengogrpc/grpc.go b/cmd/protoc-gen-go-grpc/internal_gengogrpc/grpc.go
index c307633..3610c89 100644
--- a/cmd/protoc-gen-go-grpc/internal_gengogrpc/grpc.go
+++ b/cmd/protoc-gen-go-grpc/internal_gengogrpc/grpc.go
@@ -181,20 +181,20 @@
 func clientSignature(g *protogen.GeneratedFile, method *protogen.Method) string {
 	s := method.GoName + "(ctx " + g.QualifiedGoIdent(contextPackage.Ident("Context"))
 	if !method.Desc.IsStreamingClient() {
-		s += ", in *" + g.QualifiedGoIdent(method.InputType.GoIdent)
+		s += ", in *" + g.QualifiedGoIdent(method.Input.GoIdent)
 	}
 	s += ", opts ..." + g.QualifiedGoIdent(grpcPackage.Ident("CallOption")) + ") ("
 	if !method.Desc.IsStreamingClient() && !method.Desc.IsStreamingServer() {
-		s += "*" + g.QualifiedGoIdent(method.OutputType.GoIdent)
+		s += "*" + g.QualifiedGoIdent(method.Output.GoIdent)
 	} else {
-		s += method.ParentService.GoName + "_" + method.GoName + "Client"
+		s += method.Parent.GoName + "_" + method.GoName + "Client"
 	}
 	s += ", error)"
 	return s
 }
 
 func genClientMethod(gen *protogen.Plugin, file *protogen.File, g *protogen.GeneratedFile, method *protogen.Method, index int) {
-	service := method.ParentService
+	service := method.Parent
 	sname := fmt.Sprintf("/%s/%s", service.Desc.FullName(), method.Desc.Name())
 
 	if method.Desc.Options().(*descriptorpb.MethodOptions).GetDeprecated() {
@@ -202,7 +202,7 @@
 	}
 	g.P("func (c *", unexport(service.GoName), "Client) ", clientSignature(g, method), "{")
 	if !method.Desc.IsStreamingServer() && !method.Desc.IsStreamingClient() {
-		g.P("out := new(", method.OutputType.GoIdent, ")")
+		g.P("out := new(", method.Output.GoIdent, ")")
 		g.P(`err := c.cc.Invoke(ctx, "`, sname, `", in, out, opts...)`)
 		g.P("if err != nil { return nil, err }")
 		g.P("return out, nil")
@@ -230,13 +230,13 @@
 	// Stream auxiliary types and methods.
 	g.P("type ", service.GoName, "_", method.GoName, "Client interface {")
 	if genSend {
-		g.P("Send(*", method.InputType.GoIdent, ") error")
+		g.P("Send(*", method.Input.GoIdent, ") error")
 	}
 	if genRecv {
-		g.P("Recv() (*", method.OutputType.GoIdent, ", error)")
+		g.P("Recv() (*", method.Output.GoIdent, ", error)")
 	}
 	if genCloseAndRecv {
-		g.P("CloseAndRecv() (*", method.OutputType.GoIdent, ", error)")
+		g.P("CloseAndRecv() (*", method.Output.GoIdent, ", error)")
 	}
 	g.P(grpcPackage.Ident("ClientStream"))
 	g.P("}")
@@ -248,23 +248,23 @@
 	g.P()
 
 	if genSend {
-		g.P("func (x *", streamType, ") Send(m *", method.InputType.GoIdent, ") error {")
+		g.P("func (x *", streamType, ") Send(m *", method.Input.GoIdent, ") error {")
 		g.P("return x.ClientStream.SendMsg(m)")
 		g.P("}")
 		g.P()
 	}
 	if genRecv {
-		g.P("func (x *", streamType, ") Recv() (*", method.OutputType.GoIdent, ", error) {")
-		g.P("m := new(", method.OutputType.GoIdent, ")")
+		g.P("func (x *", streamType, ") Recv() (*", method.Output.GoIdent, ", error) {")
+		g.P("m := new(", method.Output.GoIdent, ")")
 		g.P("if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err }")
 		g.P("return m, nil")
 		g.P("}")
 		g.P()
 	}
 	if genCloseAndRecv {
-		g.P("func (x *", streamType, ") CloseAndRecv() (*", method.OutputType.GoIdent, ", error) {")
+		g.P("func (x *", streamType, ") CloseAndRecv() (*", method.Output.GoIdent, ", error) {")
 		g.P("if err := x.ClientStream.CloseSend(); err != nil { return nil, err }")
-		g.P("m := new(", method.OutputType.GoIdent, ")")
+		g.P("m := new(", method.Output.GoIdent, ")")
 		g.P("if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err }")
 		g.P("return m, nil")
 		g.P("}")
@@ -277,24 +277,24 @@
 	ret := "error"
 	if !method.Desc.IsStreamingClient() && !method.Desc.IsStreamingServer() {
 		reqArgs = append(reqArgs, g.QualifiedGoIdent(contextPackage.Ident("Context")))
-		ret = "(*" + g.QualifiedGoIdent(method.OutputType.GoIdent) + ", error)"
+		ret = "(*" + g.QualifiedGoIdent(method.Output.GoIdent) + ", error)"
 	}
 	if !method.Desc.IsStreamingClient() {
-		reqArgs = append(reqArgs, "*"+g.QualifiedGoIdent(method.InputType.GoIdent))
+		reqArgs = append(reqArgs, "*"+g.QualifiedGoIdent(method.Input.GoIdent))
 	}
 	if method.Desc.IsStreamingClient() || method.Desc.IsStreamingServer() {
-		reqArgs = append(reqArgs, method.ParentService.GoName+"_"+method.GoName+"Server")
+		reqArgs = append(reqArgs, method.Parent.GoName+"_"+method.GoName+"Server")
 	}
 	return method.GoName + "(" + strings.Join(reqArgs, ", ") + ") " + ret
 }
 
 func genServerMethod(gen *protogen.Plugin, file *protogen.File, g *protogen.GeneratedFile, method *protogen.Method) string {
-	service := method.ParentService
+	service := method.Parent
 	hname := fmt.Sprintf("_%s_%s_Handler", service.GoName, method.GoName)
 
 	if !method.Desc.IsStreamingClient() && !method.Desc.IsStreamingServer() {
 		g.P("func ", hname, "(srv interface{}, ctx ", contextPackage.Ident("Context"), ", dec func(interface{}) error, interceptor ", grpcPackage.Ident("UnaryServerInterceptor"), ") (interface{}, error) {")
-		g.P("in := new(", method.InputType.GoIdent, ")")
+		g.P("in := new(", method.Input.GoIdent, ")")
 		g.P("if err := dec(in); err != nil { return nil, err }")
 		g.P("if interceptor == nil { return srv.(", service.GoName, "Server).", method.GoName, "(ctx, in) }")
 		g.P("info := &", grpcPackage.Ident("UnaryServerInfo"), "{")
@@ -302,7 +302,7 @@
 		g.P("FullMethod: ", strconv.Quote(fmt.Sprintf("/%s/%s", service.Desc.FullName(), method.GoName)), ",")
 		g.P("}")
 		g.P("handler := func(ctx ", contextPackage.Ident("Context"), ", req interface{}) (interface{}, error) {")
-		g.P("return srv.(", service.GoName, "Server).", method.GoName, "(ctx, req.(*", method.InputType.GoIdent, "))")
+		g.P("return srv.(", service.GoName, "Server).", method.GoName, "(ctx, req.(*", method.Input.GoIdent, "))")
 		g.P("}")
 		g.P("return interceptor(ctx, in, info, handler)")
 		g.P("}")
@@ -312,7 +312,7 @@
 	streamType := unexport(service.GoName) + method.GoName + "Server"
 	g.P("func ", hname, "(srv interface{}, stream ", grpcPackage.Ident("ServerStream"), ") error {")
 	if !method.Desc.IsStreamingClient() {
-		g.P("m := new(", method.InputType.GoIdent, ")")
+		g.P("m := new(", method.Input.GoIdent, ")")
 		g.P("if err := stream.RecvMsg(m); err != nil { return err }")
 		g.P("return srv.(", service.GoName, "Server).", method.GoName, "(m, &", streamType, "{stream})")
 	} else {
@@ -328,13 +328,13 @@
 	// Stream auxiliary types and methods.
 	g.P("type ", service.GoName, "_", method.GoName, "Server interface {")
 	if genSend {
-		g.P("Send(*", method.OutputType.GoIdent, ") error")
+		g.P("Send(*", method.Output.GoIdent, ") error")
 	}
 	if genSendAndClose {
-		g.P("SendAndClose(*", method.OutputType.GoIdent, ") error")
+		g.P("SendAndClose(*", method.Output.GoIdent, ") error")
 	}
 	if genRecv {
-		g.P("Recv() (*", method.InputType.GoIdent, ", error)")
+		g.P("Recv() (*", method.Input.GoIdent, ", error)")
 	}
 	g.P(grpcPackage.Ident("ServerStream"))
 	g.P("}")
@@ -346,20 +346,20 @@
 	g.P()
 
 	if genSend {
-		g.P("func (x *", streamType, ") Send(m *", method.OutputType.GoIdent, ") error {")
+		g.P("func (x *", streamType, ") Send(m *", method.Output.GoIdent, ") error {")
 		g.P("return x.ServerStream.SendMsg(m)")
 		g.P("}")
 		g.P()
 	}
 	if genSendAndClose {
-		g.P("func (x *", streamType, ") SendAndClose(m *", method.OutputType.GoIdent, ") error {")
+		g.P("func (x *", streamType, ") SendAndClose(m *", method.Output.GoIdent, ") error {")
 		g.P("return x.ServerStream.SendMsg(m)")
 		g.P("}")
 		g.P()
 	}
 	if genRecv {
-		g.P("func (x *", streamType, ") Recv() (*", method.InputType.GoIdent, ", error) {")
-		g.P("m := new(", method.InputType.GoIdent, ")")
+		g.P("func (x *", streamType, ") Recv() (*", method.Input.GoIdent, ", error) {")
+		g.P("m := new(", method.Input.GoIdent, ")")
 		g.P("if err := x.ServerStream.RecvMsg(m); err != nil { return nil, err }")
 		g.P("return m, nil")
 		g.P("}")
diff --git a/cmd/protoc-gen-go/internal_gengo/main.go b/cmd/protoc-gen-go/internal_gengo/main.go
index 0697ffd..6453f17 100644
--- a/cmd/protoc-gen-go/internal_gengo/main.go
+++ b/cmd/protoc-gen-go/internal_gengo/main.go
@@ -350,13 +350,13 @@
 	g.Annotate(message.GoIdent.GoName, message.Location)
 	g.P("type ", message.GoIdent, " struct {")
 	for _, field := range message.Fields {
-		if field.OneofType != nil {
+		if field.Oneof != nil {
 			// It would be a bit simpler to iterate over the oneofs below,
 			// but generating the field here keeps the contents of the Go
 			// struct in the same order as the contents of the source
 			// .proto file.
-			if field == field.OneofType.Fields[0] {
-				genOneofField(gen, g, f, message, field.OneofType)
+			if field == field.Oneof.Fields[0] {
+				genOneofField(gen, g, f, message, field.Oneof)
 			}
 			continue
 		}
@@ -370,8 +370,8 @@
 			fmt.Sprintf("json:%q", fieldJSONTag(field)),
 		}
 		if field.Desc.IsMap() {
-			key := field.MessageType.Fields[0]
-			val := field.MessageType.Fields[1]
+			key := field.Message.Fields[0]
+			val := field.Message.Fields[1]
 			tags = append(tags,
 				fmt.Sprintf("protobuf_key:%q", fieldProtobufTag(key)),
 				fmt.Sprintf("protobuf_val:%q", fieldProtobufTag(val)),
@@ -459,9 +459,9 @@
 			g.P("var ", defVarName, " []byte = []byte(", strconv.Quote(string(def.Bytes())), ")")
 		case protoreflect.EnumKind:
 			evalueDesc := field.Desc.DefaultEnumValue()
-			enum := field.EnumType
+			enum := field.Enum
 			evalue := enum.Values[evalueDesc.Index()]
-			g.P("const ", defVarName, " ", field.EnumType.GoIdent, " = ", evalue.GoIdent)
+			g.P("const ", defVarName, " ", field.Enum.GoIdent, " = ", evalue.GoIdent)
 		case protoreflect.FloatKind, protoreflect.DoubleKind:
 			// Floating point numbers need extra handling for -Inf/Inf/NaN.
 			f := field.Desc.Default().Float()
@@ -498,7 +498,7 @@
 	// Getter methods.
 	for _, field := range message.Fields {
 		if isFirstOneofField(field) {
-			genOneofGetter(gen, g, f, message, field.OneofType)
+			genOneofGetter(gen, g, f, message, field.Oneof)
 		}
 		goType, pointer := fieldGoType(g, field)
 		defaultValue := fieldDefaultValue(g, message, field)
@@ -507,8 +507,8 @@
 		}
 		g.Annotate(message.GoIdent.GoName+".Get"+field.GoName, field.Location)
 		g.P("func (x *", message.GoIdent, ") Get", field.GoName, "() ", goType, " {")
-		if field.OneofType != nil {
-			g.P("if x, ok := x.Get", field.OneofType.GoName, "().(*", fieldOneofType(field), "); ok {")
+		if field.Oneof != nil {
+			g.P("if x, ok := x.Get", field.Oneof.GoName, "().(*", fieldOneofType(field), "); ok {")
 			g.P("return x.", field.GoName)
 			g.P("}")
 		} else {
@@ -549,7 +549,7 @@
 	case protoreflect.BoolKind:
 		goType = "bool"
 	case protoreflect.EnumKind:
-		goType = g.QualifiedGoIdent(field.EnumType.GoIdent)
+		goType = g.QualifiedGoIdent(field.Enum.GoIdent)
 	case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:
 		goType = "int32"
 	case protoreflect.Uint32Kind, protoreflect.Fixed32Kind:
@@ -569,11 +569,11 @@
 		pointer = false
 	case protoreflect.MessageKind, protoreflect.GroupKind:
 		if field.Desc.IsMap() {
-			keyType, _ := fieldGoType(g, field.MessageType.Fields[0])
-			valType, _ := fieldGoType(g, field.MessageType.Fields[1])
+			keyType, _ := fieldGoType(g, field.Message.Fields[0])
+			valType, _ := fieldGoType(g, field.Message.Fields[1])
 			return fmt.Sprintf("map[%v]%v", keyType, valType), false
 		}
-		goType = "*" + g.QualifiedGoIdent(field.MessageType.GoIdent)
+		goType = "*" + g.QualifiedGoIdent(field.Message.GoIdent)
 		pointer = false
 	}
 	if field.Desc.Cardinality() == protoreflect.Repeated {
@@ -581,7 +581,7 @@
 		pointer = false
 	}
 	// Extension fields always have pointer type, even when defined in a proto3 file.
-	if field.Desc.Syntax() == protoreflect.Proto3 && field.Desc.ExtendedType() == nil {
+	if field.Desc.Syntax() == protoreflect.Proto3 && field.Desc.Extendee() == nil {
 		pointer = false
 	}
 	return goType, pointer
@@ -590,7 +590,7 @@
 func fieldProtobufTag(field *protogen.Field) string {
 	var enumName string
 	if field.Desc.Kind() == protoreflect.EnumKind {
-		enumName = enumLegacyName(field.EnumType)
+		enumName = enumLegacyName(field.Enum)
 	}
 	return tag.Marshal(field.Desc, enumName)
 }
@@ -614,7 +614,7 @@
 	case protoreflect.MessageKind, protoreflect.GroupKind, protoreflect.BytesKind:
 		return "nil"
 	case protoreflect.EnumKind:
-		return g.QualifiedGoIdent(field.EnumType.Values[0].GoIdent)
+		return g.QualifiedGoIdent(field.Enum.Values[0].GoIdent)
 	default:
 		return "0"
 	}
@@ -645,7 +645,7 @@
 		}
 
 		g.P("{")
-		g.P("ExtendedType: (*", extension.ExtendedType.GoIdent, ")(nil),")
+		g.P("ExtendedType: (*", extension.Extendee.GoIdent, ")(nil),")
 		goType, pointer := fieldGoType(g, extension)
 		if pointer {
 			goType = "*" + goType
@@ -662,13 +662,13 @@
 	g.P("var (")
 	for i, extension := range f.allExtensions {
 		ed := extension.Desc
-		targetName := string(ed.ExtendedType().FullName())
+		targetName := string(ed.Extendee().FullName())
 		typeName := ed.Kind().String()
 		switch ed.Kind() {
 		case protoreflect.EnumKind:
-			typeName = string(ed.EnumType().FullName())
+			typeName = string(ed.Enum().FullName())
 		case protoreflect.MessageKind, protoreflect.GroupKind:
-			typeName = string(ed.MessageType().FullName())
+			typeName = string(ed.Message().FullName())
 		}
 		fieldName := string(ed.Name())
 		g.P("// extend ", targetName, " { ", ed.Cardinality().String(), " ", typeName, " ", fieldName, " = ", ed.Number(), "; }")
@@ -681,11 +681,11 @@
 // isExtensionMessageSetELement returns the adjusted name of an extension
 // which extends proto2.bridge.MessageSet.
 func isExtensionMessageSetElement(extension *protogen.Extension) (name protoreflect.FullName, ok bool) {
-	opts := extension.ExtendedType.Desc.Options().(*descriptorpb.MessageOptions)
+	opts := extension.Extendee.Desc.Options().(*descriptorpb.MessageOptions)
 	if !opts.GetMessageSetWireFormat() || extension.Desc.Name() != "message_set_extension" {
 		return "", false
 	}
-	if extension.ParentMessage == nil {
+	if extension.Parent == nil {
 		// This case shouldn't be given special handling at all--we're
 		// only supposed to drop the ".message_set_extension" for
 		// extensions defined within a message (i.e., the extension
@@ -704,8 +704,8 @@
 // extensionVar returns the var holding the ExtensionDesc for an extension.
 func extensionVar(f *protogen.File, extension *protogen.Extension) protogen.GoIdent {
 	name := "E_"
-	if extension.ParentMessage != nil {
-		name += extension.ParentMessage.GoIdent.GoName + "_"
+	if extension.Parent != nil {
+		name += extension.Parent.GoIdent.GoName + "_"
 	}
 	name += extension.GoName
 	return f.GoImportPath.Ident(name)
@@ -820,7 +820,7 @@
 
 // isFirstOneofField reports whether this is the first field in a oneof.
 func isFirstOneofField(field *protogen.Field) bool {
-	return field.OneofType != nil && field.OneofType.Fields[0] == field
+	return field.Oneof != nil && field.Oneof.Fields[0] == field
 }
 
 // oneofFieldName returns the name of the struct field holding the oneof value.
@@ -834,14 +834,14 @@
 // oneofInterfaceName returns the name of the interface type implemented by
 // the oneof field value types.
 func oneofInterfaceName(oneof *protogen.Oneof) string {
-	return fmt.Sprintf("is%s_%s", oneof.ParentMessage.GoIdent.GoName, oneof.GoName)
+	return fmt.Sprintf("is%s_%s", oneof.Parent.GoIdent.GoName, oneof.GoName)
 }
 
 // fieldOneofType returns the wrapper type used to represent a field in a oneof.
 func fieldOneofType(field *protogen.Field) protogen.GoIdent {
 	ident := protogen.GoIdent{
-		GoImportPath: field.ParentMessage.GoIdent.GoImportPath,
-		GoName:       field.ParentMessage.GoIdent.GoName + "_" + field.GoName,
+		GoImportPath: field.Parent.GoIdent.GoImportPath,
+		GoName:       field.Parent.GoIdent.GoName + "_" + field.GoName,
 	}
 	// Check for collisions with nested messages or enums.
 	//
@@ -853,13 +853,13 @@
 	// field and type names in mostly unpredictable ways.
 Loop:
 	for {
-		for _, message := range field.ParentMessage.Messages {
+		for _, message := range field.Parent.Messages {
 			if message.GoIdent == ident {
 				ident.GoName += "_"
 				continue Loop
 			}
 		}
-		for _, enum := range field.ParentMessage.Enums {
+		for _, enum := range field.Parent.Enums {
 			if enum.GoIdent == ident {
 				ident.GoName += "_"
 				continue Loop
diff --git a/cmd/protoc-gen-go/internal_gengo/reflect.go b/cmd/protoc-gen-go/internal_gengo/reflect.go
index fb33ea2..ec45e16 100644
--- a/cmd/protoc-gen-go/internal_gengo/reflect.go
+++ b/cmd/protoc-gen-go/internal_gengo/reflect.go
@@ -82,7 +82,7 @@
 	}
 	for _, extension := range f.allExtensions {
 		source := string(extension.Desc.FullName())
-		genMessage(extension.ExtendedType, source+":extendee")
+		genMessage(extension.Extendee, source+":extendee")
 	}
 	for _, message := range f.allMessages {
 		for _, field := range message.Fields {
@@ -90,20 +90,20 @@
 				continue
 			}
 			source := string(field.Desc.FullName())
-			genEnum(field.EnumType, source+":type_name")
-			genMessage(field.MessageType, source+":type_name")
+			genEnum(field.Enum, source+":type_name")
+			genMessage(field.Message, source+":type_name")
 		}
 	}
 	for _, extension := range f.allExtensions {
 		source := string(extension.Desc.FullName())
-		genEnum(extension.EnumType, source+":type_name")
-		genMessage(extension.MessageType, source+":type_name")
+		genEnum(extension.Enum, source+":type_name")
+		genMessage(extension.Message, source+":type_name")
 	}
 	for _, service := range f.Services {
 		for _, method := range service.Methods {
 			source := string(method.Desc.FullName())
-			genMessage(method.InputType, source+":input_type")
-			genMessage(method.OutputType, source+":output_type")
+			genMessage(method.Input, source+":input_type")
+			genMessage(method.Output, source+":output_type")
 		}
 	}
 	if len(depIdxs) > math.MaxInt32 {
diff --git a/encoding/bench_test.go b/encoding/bench_test.go
index ca866c0..32c81d3 100644
--- a/encoding/bench_test.go
+++ b/encoding/bench_test.go
@@ -125,7 +125,7 @@
 }
 
 func setMap(mmap pref.Map, fd pref.FieldDescriptor, level int) {
-	fields := fd.MessageType().Fields()
+	fields := fd.Message().Fields()
 	keyDesc := fields.ByNumber(1)
 	valDesc := fields.ByNumber(2)
 
diff --git a/encoding/jsonpb/decode.go b/encoding/jsonpb/decode.go
index 80700df..4b46ffc 100644
--- a/encoding/jsonpb/decode.go
+++ b/encoding/jsonpb/decode.go
@@ -242,7 +242,7 @@
 			}
 		} else {
 			// If field is a oneof, check if it has already been set.
-			if od := fd.OneofType(); od != nil {
+			if od := fd.Oneof(); od != nil {
 				idx := uint64(od.Index())
 				if seenOneofs.Has(idx) {
 					return errors.New("%v: oneof is already set", od.FullName())
@@ -276,12 +276,12 @@
 }
 
 func isKnownValue(fd pref.FieldDescriptor) bool {
-	md := fd.MessageType()
+	md := fd.Message()
 	return md != nil && md.FullName() == "google.protobuf.Value"
 }
 
 func isNullValue(fd pref.FieldDescriptor) bool {
-	ed := fd.EnumType()
+	ed := fd.Enum()
 	return ed != nil && ed.FullName() == "google.protobuf.NullValue"
 }
 
@@ -506,7 +506,7 @@
 	case json.String:
 		// Lookup EnumNumber based on name.
 		s := jval.String()
-		if enumVal := fd.EnumType().Values().ByName(pref.Name(s)); enumVal != nil {
+		if enumVal := fd.Enum().Values().ByName(pref.Name(s)); enumVal != nil {
 			return pref.ValueOf(enumVal.Number()), nil
 		}
 		return pref.Value{}, newError("invalid enum value %q", jval)
@@ -602,7 +602,7 @@
 		return unexpectedJSONError{jval}
 	}
 
-	fields := fd.MessageType().Fields()
+	fields := fd.Message().Fields()
 	keyDesc := fields.ByNumber(1)
 	valDesc := fields.ByNumber(2)
 
diff --git a/encoding/jsonpb/encode.go b/encoding/jsonpb/encode.go
index 2d2d626..9375091 100644
--- a/encoding/jsonpb/encode.go
+++ b/encoding/jsonpb/encode.go
@@ -178,19 +178,16 @@
 		}
 
 	case pref.EnumKind:
-		enumType := fd.EnumType()
-		num := val.Enum()
-
-		if enumType.FullName() == "google.protobuf.NullValue" {
+		if fd.Enum().FullName() == "google.protobuf.NullValue" {
 			o.encoder.WriteNull()
-		} else if desc := enumType.Values().ByNumber(num); desc != nil {
+		} else if desc := fd.Enum().Values().ByNumber(val.Enum()); desc != nil {
 			err := o.encoder.WriteString(string(desc.Name()))
 			if !nerr.Merge(err) {
 				return err
 			}
 		} else {
 			// Use numeric value if there is no enum value descriptor.
-			o.encoder.WriteInt(int64(num))
+			o.encoder.WriteInt(int64(val.Enum()))
 		}
 
 	case pref.MessageKind, pref.GroupKind:
@@ -229,7 +226,7 @@
 	o.encoder.StartObject()
 	defer o.encoder.EndObject()
 
-	msgFields := fd.MessageType().Fields()
+	msgFields := fd.Message().Fields()
 	keyType := msgFields.ByNumber(1)
 	valType := msgFields.ByNumber(2)
 
@@ -286,7 +283,7 @@
 		name := xt.FullName()
 		// If extended type is a MessageSet, set field name to be the message type name.
 		if isMessageSetExtension(xt) {
-			name = xt.MessageType().FullName()
+			name = xt.Message().FullName()
 		}
 
 		num := xt.Number()
@@ -328,13 +325,13 @@
 	if xt.Name() != "message_set_extension" {
 		return false
 	}
-	mt := xt.MessageType()
-	if mt == nil {
+	md := xt.Message()
+	if md == nil {
 		return false
 	}
-	if xt.FullName().Parent() != mt.FullName() {
+	if xt.FullName().Parent() != md.FullName() {
 		return false
 	}
-	xmt, ok := xt.ExtendedType().(interface{ IsMessageSet() bool })
-	return ok && xmt.IsMessageSet()
+	xmd, ok := xt.Extendee().(interface{ IsMessageSet() bool })
+	return ok && xmd.IsMessageSet()
 }
diff --git a/encoding/textpb/decode.go b/encoding/textpb/decode.go
index 218d95f..863911f 100644
--- a/encoding/textpb/decode.go
+++ b/encoding/textpb/decode.go
@@ -164,7 +164,7 @@
 			}
 		} else {
 			// If field is a oneof, check if it has already been set.
-			if od := fd.OneofType(); od != nil {
+			if od := fd.Oneof(); od != nil {
 				idx := uint64(od.Index())
 				if seenOneofs.Has(idx) {
 					return errors.New("oneof %v is already set", od.FullName())
@@ -313,7 +313,7 @@
 		}
 		if name, ok := input.Name(); ok {
 			// Lookup EnumNumber based on name.
-			if enumVal := fd.EnumType().Values().ByName(name); enumVal != nil {
+			if enumVal := fd.Enum().Values().ByName(name); enumVal != nil {
 				return pref.ValueOf(enumVal.Number()), nil
 			}
 		}
@@ -356,7 +356,7 @@
 // unmarshalMap unmarshals given []text.Value into given protoreflect.Map.
 func (o UnmarshalOptions) unmarshalMap(input []text.Value, fd pref.FieldDescriptor, mmap pref.Map) error {
 	var nerr errors.NonFatal
-	fields := fd.MessageType().Fields()
+	fields := fd.Message().Fields()
 	keyDesc := fields.ByNumber(1)
 	valDesc := fields.ByNumber(2)
 
diff --git a/encoding/textpb/encode.go b/encoding/textpb/encode.go
index c706898..bce34b7 100644
--- a/encoding/textpb/encode.go
+++ b/encoding/textpb/encode.go
@@ -101,7 +101,7 @@
 		name := text.ValueOf(fd.Name())
 		// Use type name for group field name.
 		if fd.Kind() == pref.GroupKind {
-			name = text.ValueOf(fd.MessageType().Name())
+			name = text.ValueOf(fd.Message().Name())
 		}
 		pval := knownFields.Get(num)
 		var err error
@@ -189,7 +189,7 @@
 
 	case pref.EnumKind:
 		num := val.Enum()
-		if desc := fd.EnumType().Values().ByNumber(num); desc != nil {
+		if desc := fd.Enum().Values().ByNumber(num); desc != nil {
 			return text.ValueOf(desc.Name()), nil
 		}
 		// Use numeric value if there is no enum description.
@@ -231,7 +231,7 @@
 	var nerr errors.NonFatal
 	// values is a list of messages.
 	values := make([]text.Value, 0, mmap.Len())
-	msgFields := fd.MessageType().Fields()
+	msgFields := fd.Message().Fields()
 	keyType := msgFields.ByNumber(1)
 	valType := msgFields.ByNumber(2)
 
@@ -274,7 +274,7 @@
 		name := xt.FullName()
 		// If extended type is a MessageSet, set field name to be the message type name.
 		if isMessageSetExtension(xt) {
-			name = xt.MessageType().FullName()
+			name = xt.Message().FullName()
 		}
 
 		num := xt.Number()
@@ -306,15 +306,15 @@
 	if xt.Name() != "message_set_extension" {
 		return false
 	}
-	mt := xt.MessageType()
-	if mt == nil {
+	md := xt.Message()
+	if md == nil {
 		return false
 	}
-	if xt.FullName().Parent() != mt.FullName() {
+	if xt.FullName().Parent() != md.FullName() {
 		return false
 	}
-	xmt, ok := xt.ExtendedType().(interface{ IsMessageSet() bool })
-	return ok && xmt.IsMessageSet()
+	xmd, ok := xt.Extendee().(interface{ IsMessageSet() bool })
+	return ok && xmd.IsMessageSet()
 }
 
 // appendUnknown parses the given []byte and appends field(s) into the given fields slice.
diff --git a/internal/cmd/generate-protos/main.go b/internal/cmd/generate-protos/main.go
index ec358e3..78e3c19 100644
--- a/internal/cmd/generate-protos/main.go
+++ b/internal/cmd/generate-protos/main.go
@@ -234,9 +234,9 @@
 				typeName := fd.Kind().String()
 				switch fd.Kind() {
 				case protoreflect.EnumKind:
-					typeName = string(fd.EnumType().FullName())
+					typeName = string(fd.Enum().FullName())
 				case protoreflect.MessageKind, protoreflect.GroupKind:
-					typeName = string(fd.MessageType().FullName())
+					typeName = string(fd.Message().FullName())
 				}
 				g.P(message.GoIdent.GoName, "_", field.GoName, "=", fd.Number(), "// ", fd.Cardinality(), " ", typeName)
 			}
diff --git a/internal/encoding/pack/pack.go b/internal/encoding/pack/pack.go
index 93dc4ed..6cb9aa2 100644
--- a/internal/encoding/pack/pack.go
+++ b/internal/encoding/pack/pack.go
@@ -325,7 +325,7 @@
 				kind = fieldDesc.Kind()
 				switch kind {
 				case protoreflect.MessageKind, protoreflect.GroupKind:
-					subDesc = fieldDesc.MessageType()
+					subDesc = fieldDesc.Message()
 					if subDesc == nil || subDesc.IsPlaceholder() {
 						kind = 0
 					}
diff --git a/internal/encoding/tag/tag.go b/internal/encoding/tag/tag.go
index 23c07f5..72499c1 100644
--- a/internal/encoding/tag/tag.go
+++ b/internal/encoding/tag/tag.go
@@ -166,7 +166,7 @@
 		// The name of the FieldDescriptor for a group field is
 		// lowercased. To find the original capitalization, we
 		// look in the field's MessageType.
-		name = string(fd.MessageType().Name())
+		name = string(fd.Message().Name())
 	}
 	tag = append(tag, "name="+name)
 	if jsonName := fd.JSONName(); jsonName != "" && jsonName != name {
@@ -175,13 +175,13 @@
 	// The previous implementation does not tag extension fields as proto3,
 	// even when the field is defined in a proto3 file. Match that behavior
 	// for consistency.
-	if fd.Syntax() == pref.Proto3 && fd.ExtendedType() == nil {
+	if fd.Syntax() == pref.Proto3 && fd.Extendee() == nil {
 		tag = append(tag, "proto3")
 	}
 	if fd.Kind() == pref.EnumKind && enumName != "" {
 		tag = append(tag, "enum="+enumName)
 	}
-	if fd.OneofType() != nil {
+	if fd.Oneof() != nil {
 		tag = append(tag, "oneof")
 	}
 	// This must appear last in the tag, since commas in strings aren't escaped.
diff --git a/internal/fileinit/desc.go b/internal/fileinit/desc.go
index 120b7b9..1d1e10a 100644
--- a/internal/fileinit/desc.go
+++ b/internal/fileinit/desc.go
@@ -439,13 +439,19 @@
 func (fd *fieldDesc) HasDefault() bool                           { return fd.defVal.has }
 func (fd *fieldDesc) Default() pref.Value                        { return fd.defVal.get() }
 func (fd *fieldDesc) DefaultEnumValue() pref.EnumValueDescriptor { return fd.defVal.enum }
-func (fd *fieldDesc) OneofType() pref.OneofDescriptor            { return fd.oneofType }
-func (fd *fieldDesc) ExtendedType() pref.MessageDescriptor       { return nil }
-func (fd *fieldDesc) EnumType() pref.EnumDescriptor              { return fd.enumType }
-func (fd *fieldDesc) MessageType() pref.MessageDescriptor        { return fd.messageType }
+func (fd *fieldDesc) Oneof() pref.OneofDescriptor                { return fd.oneofType }
+func (fd *fieldDesc) Extendee() pref.MessageDescriptor           { return nil }
+func (fd *fieldDesc) Enum() pref.EnumDescriptor                  { return fd.enumType }
+func (fd *fieldDesc) Message() pref.MessageDescriptor            { return fd.messageType }
 func (fd *fieldDesc) Format(s fmt.State, r rune)                 { pfmt.FormatDesc(s, r, fd) }
 func (fd *fieldDesc) ProtoType(pref.FieldDescriptor)             {}
 
+// TODO: Remove these methods.
+func (fd *fieldDesc) OneofType() pref.OneofDescriptor      { return fd.Oneof() }
+func (fd *fieldDesc) ExtendedType() pref.MessageDescriptor { return fd.Extendee() }
+func (fd *fieldDesc) EnumType() pref.EnumDescriptor        { return fd.Enum() }
+func (fd *fieldDesc) MessageType() pref.MessageDescriptor  { return fd.Message() }
+
 func (od *oneofDesc) Options() pref.ProtoMessage {
 	return unmarshalOptions(descopts.Oneof, od.options)
 }
@@ -506,10 +512,10 @@
 func (xd *extensionDesc) HasDefault() bool                           { return xd.lazyInit().defVal.has }
 func (xd *extensionDesc) Default() pref.Value                        { return xd.lazyInit().defVal.get() }
 func (xd *extensionDesc) DefaultEnumValue() pref.EnumValueDescriptor { return xd.lazyInit().defVal.enum }
-func (xd *extensionDesc) OneofType() pref.OneofDescriptor            { return nil }
-func (xd *extensionDesc) ExtendedType() pref.MessageDescriptor       { return xd.extendedType }
-func (xd *extensionDesc) EnumType() pref.EnumDescriptor              { return xd.lazyInit().enumType }
-func (xd *extensionDesc) MessageType() pref.MessageDescriptor        { return xd.lazyInit().messageType }
+func (xd *extensionDesc) Oneof() pref.OneofDescriptor                { return nil }
+func (xd *extensionDesc) Extendee() pref.MessageDescriptor           { return xd.extendedType }
+func (xd *extensionDesc) Enum() pref.EnumDescriptor                  { return xd.lazyInit().enumType }
+func (xd *extensionDesc) Message() pref.MessageDescriptor            { return xd.lazyInit().messageType }
 func (xd *extensionDesc) Format(s fmt.State, r rune)                 { pfmt.FormatDesc(s, r, xd) }
 func (xd *extensionDesc) ProtoType(pref.FieldDescriptor)             {}
 func (xd *extensionDesc) ProtoInternal(pragma.DoNotImplement)        {}
@@ -527,6 +533,12 @@
 	return xd.legacyDesc
 }
 
+// TODO: Remove these methods.
+func (xd *extensionDesc) OneofType() pref.OneofDescriptor      { return xd.Oneof() }
+func (xd *extensionDesc) ExtendedType() pref.MessageDescriptor { return xd.Extendee() }
+func (xd *extensionDesc) EnumType() pref.EnumDescriptor        { return xd.Enum() }
+func (xd *extensionDesc) MessageType() pref.MessageDescriptor  { return xd.Message() }
+
 type (
 	serviceDesc struct {
 		baseDesc
@@ -563,14 +575,18 @@
 func (md *methodDesc) Options() pref.ProtoMessage {
 	return unmarshalOptions(descopts.Method, md.options)
 }
-func (md *methodDesc) InputType() pref.MessageDescriptor   { return md.inputType }
-func (md *methodDesc) OutputType() pref.MessageDescriptor  { return md.outputType }
+func (md *methodDesc) Input() pref.MessageDescriptor       { return md.inputType }
+func (md *methodDesc) Output() pref.MessageDescriptor      { return md.outputType }
 func (md *methodDesc) IsStreamingClient() bool             { return md.isStreamingClient }
 func (md *methodDesc) IsStreamingServer() bool             { return md.isStreamingServer }
 func (md *methodDesc) Format(s fmt.State, r rune)          { pfmt.FormatDesc(s, r, md) }
 func (md *methodDesc) ProtoType(pref.MethodDescriptor)     {}
 func (md *methodDesc) ProtoInternal(pragma.DoNotImplement) {}
 
+// TODO: Remove these methods.
+func (md *methodDesc) InputType() pref.MessageDescriptor  { return md.Input() }
+func (md *methodDesc) OutputType() pref.MessageDescriptor { return md.Output() }
+
 type baseDesc struct {
 	parentFile *fileDesc
 	parent     pref.Descriptor
diff --git a/internal/fileinit/fileinit_test.go b/internal/fileinit/fileinit_test.go
index c116751..08a5883 100644
--- a/internal/fileinit/fileinit_test.go
+++ b/internal/fileinit/fileinit_test.go
@@ -70,7 +70,7 @@
 
 	// Verify that message descriptors for map entries have no Go type info.
 	mapEntryName := protoreflect.FullName("goproto.proto.test.TestAllTypes.MapInt32Int32Entry")
-	d := testpb.File_test_test_proto.Messages().ByName("TestAllTypes").Fields().ByName("map_int32_int32").MessageType()
+	d := testpb.File_test_test_proto.Messages().ByName("TestAllTypes").Fields().ByName("map_int32_int32").Message()
 	if gotName, wantName := d.FullName(), mapEntryName; gotName != wantName {
 		t.Fatalf("looked up wrong descriptor: got %v, want %v", gotName, wantName)
 	}
diff --git a/internal/impl/legacy_extension.go b/internal/impl/legacy_extension.go
index 4a60f05..e187127 100644
--- a/internal/impl/legacy_extension.go
+++ b/internal/impl/legacy_extension.go
@@ -149,7 +149,7 @@
 }
 
 func (p legacyExtensionTypes) Register(t pref.ExtensionType) {
-	if p.mi.PBType.FullName() != t.ExtendedType().FullName() {
+	if p.mi.PBType.FullName() != t.Extendee().FullName() {
 		panic("extended type mismatch")
 	}
 	if !p.mi.PBType.ExtensionRanges().Has(t.Number()) {
diff --git a/internal/impl/legacy_test.go b/internal/impl/legacy_test.go
index 84cf071..799289b 100644
--- a/internal/impl/legacy_test.go
+++ b/internal/impl/legacy_test.go
@@ -769,7 +769,7 @@
 								// Ignore New since it a constructor.
 							case "Options":
 								// Ignore descriptor options since protos are not cmperable.
-							case "EnumType", "MessageType", "ExtendedType":
+							case "Oneof", "Extendee", "Enum", "Message":
 								// Avoid descending into a dependency to avoid a cycle.
 								// Just record the full name if available.
 								//
@@ -778,6 +778,12 @@
 								if !v.IsNil() {
 									out[name] = v.Interface().(pref.Descriptor).FullName()
 								}
+							// TODO: Remove this when the methods are deleted.
+							case "OneofType", "ExtendedType", "EnumType", "MessageType":
+								v := m.Call(nil)[0]
+								if !v.IsNil() {
+									out[name] = v.Interface().(pref.Descriptor).FullName()
+								}
 							default:
 								out[name] = m.Call(nil)[0].Interface()
 							}
diff --git a/internal/impl/message.go b/internal/impl/message.go
index c719e47..6e0f904 100644
--- a/internal/impl/message.go
+++ b/internal/impl/message.go
@@ -115,8 +115,8 @@
 		switch {
 		case fd.IsWeak():
 			fi = fieldInfoForWeak(fd, specialByName["XXX_weak"])
-		case fd.OneofType() != nil:
-			fi = fieldInfoForOneof(fd, oneofsByName[fd.OneofType().Name()], oneofWrappersByNumber[fd.Number()])
+		case fd.Oneof() != nil:
+			fi = fieldInfoForOneof(fd, oneofsByName[fd.Oneof().Name()], oneofWrappersByNumber[fd.Number()])
 		case fd.IsMap():
 			fi = fieldInfoForMap(fd, fs)
 		case fd.Cardinality() == pref.Repeated:
diff --git a/internal/impl/message_field.go b/internal/impl/message_field.go
index 581481c..ec29a9b 100644
--- a/internal/impl/message_field.go
+++ b/internal/impl/message_field.go
@@ -98,8 +98,8 @@
 	if ft.Kind() != reflect.Map {
 		panic(fmt.Sprintf("invalid type: got %v, want map kind", ft))
 	}
-	keyConv := pvalue.NewLegacyConverter(ft.Key(), fd.MessageType().Fields().ByNumber(1).Kind(), legacyWrapper)
-	valConv := pvalue.NewLegacyConverter(ft.Elem(), fd.MessageType().Fields().ByNumber(2).Kind(), legacyWrapper)
+	keyConv := pvalue.NewLegacyConverter(ft.Key(), fd.Message().Fields().ByNumber(1).Kind(), legacyWrapper)
+	valConv := pvalue.NewLegacyConverter(ft.Elem(), fd.Message().Fields().ByNumber(2).Kind(), legacyWrapper)
 	fieldOffset := offsetOf(fs)
 	// TODO: Implement unsafe fast path?
 	return fieldInfo{
diff --git a/internal/legacy/extension.go b/internal/legacy/extension.go
index 19205ea..94ad7b7 100644
--- a/internal/legacy/extension.go
+++ b/internal/legacy/extension.go
@@ -64,7 +64,7 @@
 
 	// Determine the parent type if possible.
 	var parent piface.MessageV1
-	if mt, ok := t.ExtendedType().(pref.MessageType); ok {
+	if mt, ok := t.Extendee().(pref.MessageType); ok {
 		// Create a new parent message and unwrap it if possible.
 		mv := mt.New().Interface()
 		t := reflect.TypeOf(mv)
@@ -97,7 +97,7 @@
 	if t.Kind() == pref.EnumKind {
 		// Derive Go type name.
 		// For legacy enums, unwrap the wrapper to get the underlying Go type.
-		et := t.EnumType().(pref.EnumType)
+		et := t.Enum().(pref.EnumType)
 		var ev interface{} = et.New(0)
 		if u, ok := ev.(pvalue.Unwrapper); ok {
 			ev = u.ProtoUnwrap()
diff --git a/internal/legacy/file_test.go b/internal/legacy/file_test.go
index 15dca7b..20e4aa2 100644
--- a/internal/legacy/file_test.go
+++ b/internal/legacy/file_test.go
@@ -431,7 +431,7 @@
 					case "HasJSONName":
 						// Ignore this since the semantics of the field has
 						// changed across protoc and protoc-gen-go releases.
-					case "OneofType", "ExtendedType", "EnumType", "MessageType":
+					case "Oneof", "Extendee", "Enum", "Message":
 						// Avoid descending into a dependency to avoid a cycle.
 						// Just record the full name if available.
 						//
@@ -440,6 +440,12 @@
 						if !v.IsNil() {
 							out[name] = v.Interface().(pref.Descriptor).FullName()
 						}
+					// TODO: Remove this when the methods are deleted.
+					case "OneofType", "ExtendedType", "EnumType", "MessageType":
+						v := m.Call(nil)[0]
+						if !v.IsNil() {
+							out[name] = v.Interface().(pref.Descriptor).FullName()
+						}
 					default:
 						out[name] = m.Call(nil)[0].Interface()
 					}
diff --git a/internal/legacy/legacy_test.go b/internal/legacy/legacy_test.go
index 2f4dbbc..3bac3b3 100644
--- a/internal/legacy/legacy_test.go
+++ b/internal/legacy/legacy_test.go
@@ -55,24 +55,24 @@
 
 	var (
 		wantMTA = messageATypes[0]
-		wantMDA = messageATypes[0].Fields().ByNumber(1).MessageType()
+		wantMDA = messageATypes[0].Fields().ByNumber(1).Message()
 		wantMTB = messageBTypes[0]
-		wantMDB = messageBTypes[0].Fields().ByNumber(2).MessageType()
+		wantMDB = messageBTypes[0].Fields().ByNumber(2).Message()
 		wantET  = enumTypes[0]
-		wantED  = messageATypes[0].Fields().ByNumber(3).EnumType()
+		wantED  = messageATypes[0].Fields().ByNumber(3).Enum()
 	)
 
 	for _, gotMT := range messageATypes[1:] {
 		if gotMT != wantMTA {
 			t.Error("MessageType(MessageA) mismatch")
 		}
-		if gotMDA := gotMT.Fields().ByNumber(1).MessageType(); gotMDA != wantMDA {
+		if gotMDA := gotMT.Fields().ByNumber(1).Message(); gotMDA != wantMDA {
 			t.Error("MessageDescriptor(MessageA) mismatch")
 		}
-		if gotMDB := gotMT.Fields().ByNumber(2).MessageType(); gotMDB != wantMDB {
+		if gotMDB := gotMT.Fields().ByNumber(2).Message(); gotMDB != wantMDB {
 			t.Error("MessageDescriptor(MessageB) mismatch")
 		}
-		if gotED := gotMT.Fields().ByNumber(3).EnumType(); gotED != wantED {
+		if gotED := gotMT.Fields().ByNumber(3).Enum(); gotED != wantED {
 			t.Error("EnumDescriptor(Enum) mismatch")
 		}
 	}
@@ -80,13 +80,13 @@
 		if gotMT != wantMTB {
 			t.Error("MessageType(MessageB) mismatch")
 		}
-		if gotMDA := gotMT.Fields().ByNumber(1).MessageType(); gotMDA != wantMDA {
+		if gotMDA := gotMT.Fields().ByNumber(1).Message(); gotMDA != wantMDA {
 			t.Error("MessageDescriptor(MessageA) mismatch")
 		}
-		if gotMDB := gotMT.Fields().ByNumber(2).MessageType(); gotMDB != wantMDB {
+		if gotMDB := gotMT.Fields().ByNumber(2).Message(); gotMDB != wantMDB {
 			t.Error("MessageDescriptor(MessageB) mismatch")
 		}
-		if gotED := gotMT.Fields().ByNumber(3).EnumType(); gotED != wantED {
+		if gotED := gotMT.Fields().ByNumber(3).Enum(); gotED != wantED {
 			t.Error("EnumDescriptor(Enum) mismatch")
 		}
 	}
diff --git a/internal/prototype/go_type.go b/internal/prototype/go_type.go
index a9fcc39..8dba537 100644
--- a/internal/prototype/go_type.go
+++ b/internal/prototype/go_type.go
@@ -118,12 +118,12 @@
 // The type M is the concrete message type returned by NewMessage,
 // which is often, but not required to be, a pointer to a named struct type.
 func GoExtension(xd protoreflect.ExtensionDescriptor, et protoreflect.EnumType, mt protoreflect.MessageType) protoreflect.ExtensionType {
-	if xd.ExtendedType() == nil {
+	if xd.Extendee() == nil {
 		panic("field descriptor does not extend a message")
 	}
 	switch xd.Kind() {
 	case protoreflect.EnumKind:
-		if et2, ok := xd.EnumType().(protoreflect.EnumType); ok && et == nil {
+		if et2, ok := xd.Enum().(protoreflect.EnumType); ok && et == nil {
 			et = et2
 		}
 		if et == nil {
@@ -133,7 +133,7 @@
 			panic("message type provided for enum kind")
 		}
 	case protoreflect.MessageKind, protoreflect.GroupKind:
-		if mt2, ok := xd.MessageType().(protoreflect.MessageType); ok && mt == nil {
+		if mt2, ok := xd.Message().(protoreflect.MessageType); ok && mt == nil {
 			mt = mt2
 		}
 		if et != nil {
diff --git a/internal/prototype/protofile_list.go b/internal/prototype/protofile_list.go
index 188be49..f136b5f 100644
--- a/internal/prototype/protofile_list.go
+++ b/internal/prototype/protofile_list.go
@@ -101,11 +101,11 @@
 
 func (p *oneofFieldsMeta) lazyInit(parent pref.Descriptor) *oneofFields {
 	p.once.Do(func() {
-		otyp := parent.(pref.OneofDescriptor)
-		mtyp, _ := parent.Parent()
-		fs := mtyp.(pref.MessageDescriptor).Fields()
+		od := parent.(pref.OneofDescriptor)
+		md, _ := parent.Parent()
+		fs := md.(pref.MessageDescriptor).Fields()
 		for i := 0; i < fs.Len(); i++ {
-			if f := fs.Get(i); otyp == f.OneofType() {
+			if f := fs.Get(i); od == f.Oneof() {
 				p.typs = append(p.typs, f)
 			}
 		}
diff --git a/internal/prototype/protofile_type.go b/internal/prototype/protofile_type.go
index 9f23ea2..271fdbc 100644
--- a/internal/prototype/protofile_type.go
+++ b/internal/prototype/protofile_type.go
@@ -160,20 +160,26 @@
 }
 func (t fieldDesc) IsWeak() bool { return t.f.IsWeak }
 func (t fieldDesc) IsMap() bool {
-	mt := t.MessageType()
+	mt := t.Message()
 	return mt != nil && mt.IsMapEntry()
 }
 func (t fieldDesc) HasDefault() bool                           { return t.f.Default.IsValid() }
 func (t fieldDesc) Default() pref.Value                        { return t.f.dv.value(t, t.f.Default) }
 func (t fieldDesc) DefaultEnumValue() pref.EnumValueDescriptor { return t.f.dv.enum(t, t.f.Default) }
-func (t fieldDesc) OneofType() pref.OneofDescriptor            { return t.f.ot.lazyInit(t, t.f.OneofName) }
-func (t fieldDesc) ExtendedType() pref.MessageDescriptor       { return nil }
-func (t fieldDesc) MessageType() pref.MessageDescriptor        { return t.f.mt.lazyInit(t, &t.f.MessageType) }
-func (t fieldDesc) EnumType() pref.EnumDescriptor              { return t.f.et.lazyInit(t, &t.f.EnumType) }
+func (t fieldDesc) Oneof() pref.OneofDescriptor                { return t.f.ot.lazyInit(t, t.f.OneofName) }
+func (t fieldDesc) Extendee() pref.MessageDescriptor           { return nil }
+func (t fieldDesc) Enum() pref.EnumDescriptor                  { return t.f.et.lazyInit(t, &t.f.EnumType) }
+func (t fieldDesc) Message() pref.MessageDescriptor            { return t.f.mt.lazyInit(t, &t.f.MessageType) }
 func (t fieldDesc) Format(s fmt.State, r rune)                 { pfmt.FormatDesc(s, r, t) }
 func (t fieldDesc) ProtoType(pref.FieldDescriptor)             {}
 func (t fieldDesc) ProtoInternal(pragma.DoNotImplement)        {}
 
+// TODO: Remove these methods.
+func (t fieldDesc) OneofType() pref.OneofDescriptor      { return t.Oneof() }
+func (t fieldDesc) ExtendedType() pref.MessageDescriptor { return t.Extendee() }
+func (t fieldDesc) EnumType() pref.EnumDescriptor        { return t.Enum() }
+func (t fieldDesc) MessageType() pref.MessageDescriptor  { return t.Message() }
+
 func isPacked(packed OptionalBool, s pref.Syntax, c pref.Cardinality, k pref.Kind) bool {
 	if packed == False || (packed == DefaultBool && s == pref.Proto2) {
 		return false
@@ -289,17 +295,19 @@
 func (t extensionDesc) HasDefault() bool                           { return t.x.Default.IsValid() }
 func (t extensionDesc) Default() pref.Value                        { return t.x.dv.value(t, t.x.Default) }
 func (t extensionDesc) DefaultEnumValue() pref.EnumValueDescriptor { return t.x.dv.enum(t, t.x.Default) }
-func (t extensionDesc) OneofType() pref.OneofDescriptor            { return nil }
-func (t extensionDesc) ExtendedType() pref.MessageDescriptor {
-	return t.x.xt.lazyInit(t, &t.x.ExtendedType)
-}
-func (t extensionDesc) MessageType() pref.MessageDescriptor {
-	return t.x.mt.lazyInit(t, &t.x.MessageType)
-}
-func (t extensionDesc) EnumType() pref.EnumDescriptor       { return t.x.et.lazyInit(t, &t.x.EnumType) }
-func (t extensionDesc) Format(s fmt.State, r rune)          { pfmt.FormatDesc(s, r, t) }
-func (t extensionDesc) ProtoType(pref.FieldDescriptor)      {}
-func (t extensionDesc) ProtoInternal(pragma.DoNotImplement) {}
+func (t extensionDesc) Oneof() pref.OneofDescriptor                { return nil }
+func (t extensionDesc) Extendee() pref.MessageDescriptor           { return t.x.xt.lazyInit(t, &t.x.ExtendedType) }
+func (t extensionDesc) Enum() pref.EnumDescriptor                  { return t.x.et.lazyInit(t, &t.x.EnumType) }
+func (t extensionDesc) Message() pref.MessageDescriptor            { return t.x.mt.lazyInit(t, &t.x.MessageType) }
+func (t extensionDesc) Format(s fmt.State, r rune)                 { pfmt.FormatDesc(s, r, t) }
+func (t extensionDesc) ProtoType(pref.FieldDescriptor)             {}
+func (t extensionDesc) ProtoInternal(pragma.DoNotImplement)        {}
+
+// TODO: Remove these methods.
+func (t extensionDesc) OneofType() pref.OneofDescriptor      { return t.Oneof() }
+func (t extensionDesc) ExtendedType() pref.MessageDescriptor { return t.Extendee() }
+func (t extensionDesc) EnumType() pref.EnumDescriptor        { return t.Enum() }
+func (t extensionDesc) MessageType() pref.MessageDescriptor  { return t.Message() }
 
 type enumMeta struct {
 	inheritedMeta
@@ -377,14 +385,18 @@
 func (t methodDesc) FullName() pref.FullName             { return t.m.fullName }
 func (t methodDesc) IsPlaceholder() bool                 { return false }
 func (t methodDesc) Options() pref.ProtoMessage          { return altOptions(t.m.Options, descopts.Method) }
-func (t methodDesc) InputType() pref.MessageDescriptor   { return t.m.mit.lazyInit(t, &t.m.InputType) }
-func (t methodDesc) OutputType() pref.MessageDescriptor  { return t.m.mot.lazyInit(t, &t.m.OutputType) }
+func (t methodDesc) Input() pref.MessageDescriptor       { return t.m.mit.lazyInit(t, &t.m.InputType) }
+func (t methodDesc) Output() pref.MessageDescriptor      { return t.m.mot.lazyInit(t, &t.m.OutputType) }
 func (t methodDesc) IsStreamingClient() bool             { return t.m.IsStreamingClient }
 func (t methodDesc) IsStreamingServer() bool             { return t.m.IsStreamingServer }
 func (t methodDesc) Format(s fmt.State, r rune)          { pfmt.FormatDesc(s, r, t) }
 func (t methodDesc) ProtoType(pref.MethodDescriptor)     {}
 func (t methodDesc) ProtoInternal(pragma.DoNotImplement) {}
 
+// TODO: Remove these methods.
+func (t methodDesc) InputType() pref.MessageDescriptor  { return t.Input() }
+func (t methodDesc) OutputType() pref.MessageDescriptor { return t.Output() }
+
 type defaultValue struct {
 	once sync.Once
 	val  pref.Value
@@ -417,12 +429,12 @@
 				// default value for an enum value is the wrong type.
 				switch v := v.Interface().(type) {
 				case string:
-					if ev := t.EnumType().Values().ByName(pref.Name(v)); ev != nil {
+					if ev := t.Enum().Values().ByName(pref.Name(v)); ev != nil {
 						p.eval = ev
 						p.val = pref.ValueOf(p.eval.Number())
 					}
 				case pref.EnumNumber:
-					p.eval = t.EnumType().Values().ByNumber(v)
+					p.eval = t.Enum().Values().ByNumber(v)
 				}
 			case pref.BytesKind:
 				// Store a copy of the default bytes, so that we can detect
@@ -455,8 +467,8 @@
 		case pref.EnumKind:
 			p.val = zeroEnum
 			if t.Syntax() == pref.Proto2 {
-				if et := t.EnumType(); et != nil {
-					if vs := et.Values(); vs.Len() > 0 {
+				if ed := t.Enum(); ed != nil {
+					if vs := ed.Values(); vs.Len() > 0 {
 						p.val = pref.ValueOf(vs.Get(0).Number())
 					}
 				}
diff --git a/internal/prototype/standalone_type.go b/internal/prototype/standalone_type.go
index 4dd681b..098e5ae 100644
--- a/internal/prototype/standalone_type.go
+++ b/internal/prototype/standalone_type.go
@@ -89,10 +89,16 @@
 func (t standaloneExtension) DefaultEnumValue() pref.EnumValueDescriptor {
 	return t.x.dv.enum(t, t.x.Default)
 }
-func (t standaloneExtension) OneofType() pref.OneofDescriptor      { return nil }
-func (t standaloneExtension) MessageType() pref.MessageDescriptor  { return t.x.MessageType }
-func (t standaloneExtension) EnumType() pref.EnumDescriptor        { return t.x.EnumType }
-func (t standaloneExtension) ExtendedType() pref.MessageDescriptor { return t.x.ExtendedType }
-func (t standaloneExtension) Format(s fmt.State, r rune)           { pfmt.FormatDesc(s, r, t) }
-func (t standaloneExtension) ProtoType(pref.FieldDescriptor)       {}
-func (t standaloneExtension) ProtoInternal(pragma.DoNotImplement)  {}
+func (t standaloneExtension) Oneof() pref.OneofDescriptor         { return nil }
+func (t standaloneExtension) Extendee() pref.MessageDescriptor    { return t.x.ExtendedType }
+func (t standaloneExtension) Enum() pref.EnumDescriptor           { return t.x.EnumType }
+func (t standaloneExtension) Message() pref.MessageDescriptor     { return t.x.MessageType }
+func (t standaloneExtension) Format(s fmt.State, r rune)          { pfmt.FormatDesc(s, r, t) }
+func (t standaloneExtension) ProtoType(pref.FieldDescriptor)      {}
+func (t standaloneExtension) ProtoInternal(pragma.DoNotImplement) {}
+
+// TODO: Remove these methods.
+func (t standaloneExtension) OneofType() pref.OneofDescriptor      { return t.Oneof() }
+func (t standaloneExtension) ExtendedType() pref.MessageDescriptor { return t.Extendee() }
+func (t standaloneExtension) EnumType() pref.EnumDescriptor        { return t.Enum() }
+func (t standaloneExtension) MessageType() pref.MessageDescriptor  { return t.Message() }
diff --git a/internal/prototype/type_test.go b/internal/prototype/type_test.go
index fa4258e..a8c171b 100644
--- a/internal/prototype/type_test.go
+++ b/internal/prototype/type_test.go
@@ -391,42 +391,42 @@
 				"Fields": M{
 					"Len": 2,
 					"ByNumber:1": M{
-						"Parent":       M{"FullName": pref.FullName("test.A")},
-						"Index":        0,
-						"Name":         pref.Name("key"),
-						"FullName":     pref.FullName("test.A.key"),
-						"Number":       pref.FieldNumber(1),
-						"Cardinality":  pref.Optional,
-						"Kind":         pref.StringKind,
-						"Options":      &descriptorpb.FieldOptions{Deprecated: scalar.Bool(true)},
-						"HasJSONName":  false,
-						"JSONName":     "key",
-						"IsPacked":     false,
-						"IsMap":        false,
-						"IsWeak":       false,
-						"Default":      "",
-						"OneofType":    nil,
-						"ExtendedType": nil,
-						"MessageType":  nil,
-						"EnumType":     nil,
+						"Parent":      M{"FullName": pref.FullName("test.A")},
+						"Index":       0,
+						"Name":        pref.Name("key"),
+						"FullName":    pref.FullName("test.A.key"),
+						"Number":      pref.FieldNumber(1),
+						"Cardinality": pref.Optional,
+						"Kind":        pref.StringKind,
+						"Options":     &descriptorpb.FieldOptions{Deprecated: scalar.Bool(true)},
+						"HasJSONName": false,
+						"JSONName":    "key",
+						"IsPacked":    false,
+						"IsMap":       false,
+						"IsWeak":      false,
+						"Default":     "",
+						"Oneof":       nil,
+						"Extendee":    nil,
+						"Message":     nil,
+						"Enum":        nil,
 					},
 					"ByNumber:2": M{
-						"Parent":       M{"FullName": pref.FullName("test.A")},
-						"Index":        1,
-						"Name":         pref.Name("value"),
-						"FullName":     pref.FullName("test.A.value"),
-						"Number":       pref.FieldNumber(2),
-						"Cardinality":  pref.Optional,
-						"Kind":         pref.MessageKind,
-						"JSONName":     "value",
-						"IsPacked":     false,
-						"IsMap":        false,
-						"IsWeak":       false,
-						"Default":      nil,
-						"OneofType":    nil,
-						"ExtendedType": nil,
-						"MessageType":  M{"FullName": pref.FullName("test.B"), "IsPlaceholder": false},
-						"EnumType":     nil,
+						"Parent":      M{"FullName": pref.FullName("test.A")},
+						"Index":       1,
+						"Name":        pref.Name("value"),
+						"FullName":    pref.FullName("test.A.value"),
+						"Number":      pref.FieldNumber(2),
+						"Cardinality": pref.Optional,
+						"Kind":        pref.MessageKind,
+						"JSONName":    "value",
+						"IsPacked":    false,
+						"IsMap":       false,
+						"IsWeak":      false,
+						"Default":     nil,
+						"Oneof":       nil,
+						"Extendee":    nil,
+						"Message":     M{"FullName": pref.FullName("test.B"), "IsPlaceholder": false},
+						"Enum":        nil,
 					},
 					"ByNumber:3": nil,
 				},
@@ -444,11 +444,11 @@
 					"Len":                  6,
 					"ByJSONName:field_one": nil,
 					"ByJSONName:fieldOne": M{
-						"Name":      pref.Name("field_one"),
-						"Index":     0,
-						"JSONName":  "fieldOne",
-						"Default":   "hello, \"world!\"\n",
-						"OneofType": M{"Name": pref.Name("O1"), "IsPlaceholder": false},
+						"Name":     pref.Name("field_one"),
+						"Index":    0,
+						"JSONName": "fieldOne",
+						"Default":  "hello, \"world!\"\n",
+						"Oneof":    M{"Name": pref.Name("O1"), "IsPlaceholder": false},
 					},
 					"ByJSONName:fieldTwo": nil,
 					"ByJSONName:Field2": M{
@@ -457,20 +457,20 @@
 						"HasJSONName": true,
 						"JSONName":    "Field2",
 						"Default":     pref.EnumNumber(1),
-						"OneofType":   M{"Name": pref.Name("O2"), "IsPlaceholder": false},
+						"Oneof":       M{"Name": pref.Name("O2"), "IsPlaceholder": false},
 					},
 					"ByName:fieldThree": nil,
 					"ByName:field_three": M{
-						"IsMap":       false,
-						"MessageType": M{"FullName": pref.FullName("test.C"), "IsPlaceholder": false},
-						"OneofType":   M{"Name": pref.Name("O2"), "IsPlaceholder": false},
+						"IsMap":   false,
+						"Message": M{"FullName": pref.FullName("test.C"), "IsPlaceholder": false},
+						"Oneof":   M{"Name": pref.Name("O2"), "IsPlaceholder": false},
 					},
 					"ByNumber:12": nil,
 					"ByNumber:4": M{
 						"Cardinality": pref.Repeated,
 						"IsMap":       true,
 						"Default":     nil,
-						"MessageType": M{"FullName": pref.FullName("test.A"), "IsPlaceholder": false},
+						"Message":     M{"FullName": pref.FullName("test.A"), "IsPlaceholder": false},
 					},
 					"ByNumber:5": M{
 						"Cardinality": pref.Repeated,
@@ -481,7 +481,7 @@
 					"ByNumber:6": M{
 						"Cardinality": pref.Required,
 						"Default":     []byte(nil),
-						"OneofType":   nil,
+						"Oneof":       nil,
 					},
 				},
 				"Oneofs": M{
@@ -601,14 +601,14 @@
 		"Extensions": M{
 			"Len": 1,
 			"ByName:X": M{
-				"Name":         pref.Name("X"),
-				"Number":       pref.FieldNumber(1000),
-				"Cardinality":  pref.Repeated,
-				"Kind":         pref.MessageKind,
-				"IsPacked":     false,
-				"MessageType":  M{"FullName": pref.FullName("test.C"), "IsPlaceholder": false},
-				"ExtendedType": M{"FullName": pref.FullName("test.B"), "IsPlaceholder": false},
-				"Options":      &descriptorpb.FieldOptions{Packed: scalar.Bool(true)},
+				"Name":        pref.Name("X"),
+				"Number":      pref.FieldNumber(1000),
+				"Cardinality": pref.Repeated,
+				"Kind":        pref.MessageKind,
+				"IsPacked":    false,
+				"Message":     M{"FullName": pref.FullName("test.C"), "IsPlaceholder": false},
+				"Extendee":    M{"FullName": pref.FullName("test.B"), "IsPlaceholder": false},
+				"Options":     &descriptorpb.FieldOptions{Packed: scalar.Bool(true)},
 			},
 		},
 		"Services": M{
@@ -625,8 +625,8 @@
 						"Parent":            M{"FullName": pref.FullName("test.S")},
 						"Name":              pref.Name("M"),
 						"FullName":          pref.FullName("test.S.M"),
-						"InputType":         M{"FullName": pref.FullName("test.A"), "IsPlaceholder": false},
-						"OutputType":        M{"FullName": pref.FullName("test.C.A"), "IsPlaceholder": false},
+						"Input":             M{"FullName": pref.FullName("test.A"), "IsPlaceholder": false},
+						"Output":            M{"FullName": pref.FullName("test.C.A"), "IsPlaceholder": false},
 						"IsStreamingClient": true,
 						"IsStreamingServer": true,
 						"Options":           &descriptorpb.MethodOptions{Deprecated: scalar.Bool(true)},
@@ -728,7 +728,7 @@
 			Cardinality: optional
 			Kind:        message
 			JSONName:    "value"
-			MessageType: test.B
+			Message:     test.B
 		}]
 	}, {
 		Name: B
@@ -740,7 +740,7 @@
 			JSONName:    "fieldOne"
 			HasDefault:  true
 			Default:     "hello, \"world!\"\n"
-			OneofType:   O1
+			Oneof:       O1
 		}, {
 			Name:        field_two
 			Number:      2
@@ -750,16 +750,16 @@
 			JSONName:    "Field2"
 			HasDefault:  true
 			Default:     1
-			OneofType:   O2
-			EnumType:    test.E1
+			Oneof:       O2
+			Enum:        test.E1
 		}, {
 			Name:        field_three
 			Number:      3
 			Cardinality: optional
 			Kind:        message
 			JSONName:    "fieldThree"
-			OneofType:   O2
-			MessageType: test.C
+			Oneof:       O2
+			Message:     test.C
 		}, {
 			Name:        field_four
 			Number:      4
@@ -768,7 +768,7 @@
 			HasJSONName: true
 			JSONName:    "Field4"
 			IsMap:       true
-			MessageType: test.A
+			Message:     test.A
 		}, {
 			Name:        field_five
 			Number:      5
@@ -817,12 +817,12 @@
 			]
 		}]
 		Extensions: [{
-			Name:         X
-			Number:       1000
-			Cardinality:  repeated
-			Kind:         message
-			ExtendedType: test.B
-			MessageType:  test.C
+			Name:        X
+			Number:      1000
+			Cardinality: repeated
+			Kind:        message
+			Extendee:    test.B
+			Message:     test.C
 		}]
 	}]
 	Enums: [{
@@ -835,19 +835,19 @@
 		ReservedRanges: [10:20, 30]
 	}]
 	Extensions: [{
-		Name:         X
-		Number:       1000
-		Cardinality:  repeated
-		Kind:         message
-		ExtendedType: test.B
-		MessageType:  test.C
+		Name:        X
+		Number:      1000
+		Cardinality: repeated
+		Kind:        message
+		Extendee:    test.B
+		Message:     test.C
 	}]
 	Services: [{
 		Name: S
 		Methods: [{
 			Name:              M
-			InputType:         test.A
-			OutputType:        test.C.A
+			Input:             test.A
+			Output:            test.C.A
 			IsStreamingClient: true
 			IsStreamingServer: true
 		}]
diff --git a/internal/typefmt/desc_test.go b/internal/typefmt/desc_test.go
index 346362b..6fe9017 100644
--- a/internal/typefmt/desc_test.go
+++ b/internal/typefmt/desc_test.go
@@ -27,6 +27,14 @@
 		"DescriptorProto":       true,
 		"ExtensionRangeOptions": true,
 		"Options":               true,
+
+		// TODO: Remove these when the methods are removed.
+		"OneofType":    true,
+		"ExtendedType": true,
+		"EnumType":     true,
+		"MessageType":  true,
+		"InputType":    true,
+		"OutputType":   true,
 	}
 
 	for rt, m := range descriptorAccessors {
diff --git a/internal/typefmt/stringer.go b/internal/typefmt/stringer.go
index feb28ef..eec6fd2 100644
--- a/internal/typefmt/stringer.go
+++ b/internal/typefmt/stringer.go
@@ -106,12 +106,12 @@
 var descriptorAccessors = map[reflect.Type][]string{
 	reflect.TypeOf((*pref.FileDescriptor)(nil)).Elem():      {"Path", "Package", "Imports", "Messages", "Enums", "Extensions", "Services"},
 	reflect.TypeOf((*pref.MessageDescriptor)(nil)).Elem():   {"IsMapEntry", "Fields", "Oneofs", "ReservedNames", "ReservedRanges", "RequiredNumbers", "ExtensionRanges", "Messages", "Enums", "Extensions"},
-	reflect.TypeOf((*pref.FieldDescriptor)(nil)).Elem():     {"Number", "Cardinality", "Kind", "HasJSONName", "JSONName", "IsPacked", "IsMap", "IsWeak", "HasDefault", "Default", "OneofType", "ExtendedType", "MessageType", "EnumType"},
+	reflect.TypeOf((*pref.FieldDescriptor)(nil)).Elem():     {"Number", "Cardinality", "Kind", "HasJSONName", "JSONName", "IsPacked", "IsMap", "IsWeak", "HasDefault", "Default", "Oneof", "Extendee", "Message", "Enum"},
 	reflect.TypeOf((*pref.OneofDescriptor)(nil)).Elem():     {"Fields"}, // not directly used; must keep in sync with formatDescOpt
 	reflect.TypeOf((*pref.EnumDescriptor)(nil)).Elem():      {"Values", "ReservedNames", "ReservedRanges"},
 	reflect.TypeOf((*pref.EnumValueDescriptor)(nil)).Elem(): {"Number"},
 	reflect.TypeOf((*pref.ServiceDescriptor)(nil)).Elem():   {"Methods"},
-	reflect.TypeOf((*pref.MethodDescriptor)(nil)).Elem():    {"InputType", "OutputType", "IsStreamingClient", "IsStreamingServer"},
+	reflect.TypeOf((*pref.MethodDescriptor)(nil)).Elem():    {"Input", "Output", "IsStreamingClient", "IsStreamingServer"},
 }
 
 func FormatDesc(s fmt.State, r rune, t pref.Descriptor) {
diff --git a/proto/decode.go b/proto/decode.go
index 0b1aa3f..5a867a2 100644
--- a/proto/decode.go
+++ b/proto/decode.go
@@ -118,7 +118,7 @@
 		// TODO: C++ merges into oneofs, while v1 does not.
 		// Evaluate which behavior to pick.
 		var m protoreflect.Message
-		if knownFields.Has(num) && field.OneofType() == nil {
+		if knownFields.Has(num) && field.Oneof() == nil {
 			m = knownFields.Get(num).Message()
 		} else {
 			m = knownFields.NewMessage(num)
@@ -144,8 +144,8 @@
 		return 0, wire.ParseError(n)
 	}
 	var (
-		keyField = field.MessageType().Fields().ByNumber(1)
-		valField = field.MessageType().Fields().ByNumber(2)
+		keyField = field.Message().Fields().ByNumber(1)
+		valField = field.Message().Fields().ByNumber(2)
 		key      protoreflect.Value
 		val      protoreflect.Value
 		haveKey  bool
diff --git a/proto/encode.go b/proto/encode.go
index 8635790..1b48b41 100644
--- a/proto/encode.go
+++ b/proto/encode.go
@@ -184,7 +184,7 @@
 		b = wire.AppendTag(b, num, wireTypes[kind])
 		return o.marshalSingular(b, num, field, value)
 	case field.IsMap():
-		return o.marshalMap(b, num, kind, field.MessageType(), value.Map())
+		return o.marshalMap(b, num, kind, field.Message(), value.Map())
 	case field.IsPacked():
 		return o.marshalPacked(b, num, field, value.List())
 	default:
diff --git a/proto/isinit.go b/proto/isinit.go
index 33dfb64..08edbd8 100644
--- a/proto/isinit.go
+++ b/proto/isinit.go
@@ -48,12 +48,12 @@
 		}
 		// Look for fields containing a message: Messages, groups, and maps
 		// with a message or group value.
-		ft := field.MessageType()
-		if ft == nil {
+		md := field.Message()
+		if md == nil {
 			return true
 		}
 		if field.IsMap() {
-			if ft.Fields().ByNumber(2).MessageType() == nil {
+			if md.Fields().ByNumber(2).Message() == nil {
 				return true
 			}
 		}
diff --git a/proto/size.go b/proto/size.go
index ab21cb3..3bc5a3c 100644
--- a/proto/size.go
+++ b/proto/size.go
@@ -61,7 +61,7 @@
 	case field.Cardinality() != protoreflect.Repeated:
 		return wire.SizeTag(num) + sizeSingular(num, kind, value)
 	case field.IsMap():
-		return sizeMap(num, kind, field.MessageType(), value.Map())
+		return sizeMap(num, kind, field.Message(), value.Map())
 	case field.IsPacked():
 		return sizePacked(num, kind, value.List())
 	default:
diff --git a/protogen/protogen.go b/protogen/protogen.go
index 9dd48fc..41c2392 100644
--- a/protogen/protogen.go
+++ b/protogen/protogen.go
@@ -582,12 +582,12 @@
 	seenOneofs := make(map[int]bool)
 	for _, field := range message.Fields {
 		field.GoName = makeNameUnique(field.GoName, true)
-		if field.OneofType != nil {
-			if !seenOneofs[field.OneofType.Desc.Index()] {
+		if field.Oneof != nil {
+			if !seenOneofs[field.Oneof.Desc.Index()] {
 				// If this is a field in a oneof that we haven't seen before,
 				// make the name for that oneof unique as well.
-				field.OneofType.GoName = makeNameUnique(field.OneofType.GoName, false)
-				seenOneofs[field.OneofType.Desc.Index()] = true
+				field.Oneof.GoName = makeNameUnique(field.Oneof.GoName, false)
+				seenOneofs[field.Oneof.Desc.Index()] = true
 			}
 		}
 	}
@@ -626,32 +626,32 @@
 	// '{{GoName}}' and a getter method named 'Get{{GoName}}'.
 	GoName string
 
-	ParentMessage *Message // message in which this field is defined; nil if top-level extension
-	ExtendedType  *Message // extended message for extension fields; nil otherwise
-	MessageType   *Message // type for message or group fields; nil otherwise
-	EnumType      *Enum    // type for enum fields; nil otherwise
-	OneofType     *Oneof   // containing oneof; nil if not part of a oneof
-	Location      Location // location of this field
+	Parent   *Message // message in which this field is defined; nil if top-level extension
+	Oneof    *Oneof   // containing oneof; nil if not part of a oneof
+	Extendee *Message // extended message for extension fields; nil otherwise
+	Enum     *Enum    // type for enum fields; nil otherwise
+	Message  *Message // type for message or group fields; nil otherwise
+	Location Location // location of this field
 }
 
 func newField(gen *Plugin, f *File, message *Message, desc protoreflect.FieldDescriptor) *Field {
 	var loc Location
 	switch {
-	case desc.ExtendedType() != nil && message == nil:
+	case desc.Extendee() != nil && message == nil:
 		loc = f.location(fieldnum.FileDescriptorProto_Extension, int32(desc.Index()))
-	case desc.ExtendedType() != nil && message != nil:
+	case desc.Extendee() != nil && message != nil:
 		loc = message.Location.appendPath(fieldnum.DescriptorProto_Extension, int32(desc.Index()))
 	default:
 		loc = message.Location.appendPath(fieldnum.DescriptorProto_Field, int32(desc.Index()))
 	}
 	field := &Field{
-		Desc:          desc,
-		GoName:        camelCase(string(desc.Name())),
-		ParentMessage: message,
-		Location:      loc,
+		Desc:     desc,
+		GoName:   camelCase(string(desc.Name())),
+		Parent:   message,
+		Location: loc,
 	}
-	if desc.OneofType() != nil {
-		field.OneofType = message.Oneofs[desc.OneofType().Index()]
+	if desc.Oneof() != nil {
+		field.Oneof = message.Oneofs[desc.Oneof().Index()]
 	}
 	return field
 }
@@ -663,27 +663,27 @@
 	desc := field.Desc
 	switch desc.Kind() {
 	case protoreflect.MessageKind, protoreflect.GroupKind:
-		mname := desc.MessageType().FullName()
+		mname := desc.Message().FullName()
 		message, ok := gen.messagesByName[mname]
 		if !ok {
 			return fmt.Errorf("field %v: no descriptor for type %v", desc.FullName(), mname)
 		}
-		field.MessageType = message
+		field.Message = message
 	case protoreflect.EnumKind:
-		ename := field.Desc.EnumType().FullName()
+		ename := field.Desc.Enum().FullName()
 		enum, ok := gen.enumsByName[ename]
 		if !ok {
 			return fmt.Errorf("field %v: no descriptor for enum %v", desc.FullName(), ename)
 		}
-		field.EnumType = enum
+		field.Enum = enum
 	}
-	if desc.ExtendedType() != nil {
-		mname := desc.ExtendedType().FullName()
+	if desc.Extendee() != nil {
+		mname := desc.Extendee().FullName()
 		message, ok := gen.messagesByName[mname]
 		if !ok {
 			return fmt.Errorf("field %v: no descriptor for type %v", desc.FullName(), mname)
 		}
-		field.ExtendedType = message
+		field.Extendee = message
 	}
 	return nil
 }
@@ -692,18 +692,19 @@
 type Oneof struct {
 	Desc protoreflect.OneofDescriptor
 
-	GoName        string   // Go field name of this oneof
-	ParentMessage *Message // message in which this oneof occurs
-	Fields        []*Field // fields that are part of this oneof
-	Location      Location // location of this oneof
+	GoName string   // Go field name of this oneof
+	Parent *Message // message in which this oneof occurs
+	Fields []*Field // fields that are part of this oneof
+
+	Location Location // location of this oneof
 }
 
 func newOneof(gen *Plugin, f *File, message *Message, desc protoreflect.OneofDescriptor) *Oneof {
 	return &Oneof{
-		Desc:          desc,
-		ParentMessage: message,
-		GoName:        camelCase(string(desc.Name())),
-		Location:      message.Location.appendPath(fieldnum.DescriptorProto_OneofDecl, int32(desc.Index())),
+		Desc:     desc,
+		Parent:   message,
+		GoName:   camelCase(string(desc.Name())),
+		Location: message.Location.appendPath(fieldnum.DescriptorProto_OneofDecl, int32(desc.Index())),
 	}
 }
 
@@ -717,9 +718,10 @@
 type Enum struct {
 	Desc protoreflect.EnumDescriptor
 
-	GoIdent  GoIdent      // name of the generated Go type
-	Values   []*EnumValue // enum values
-	Location Location     // location of this enum
+	GoIdent GoIdent      // name of the generated Go type
+	Values  []*EnumValue // enum values
+
+	Location Location // location of this enum
 }
 
 func newEnum(gen *Plugin, f *File, parent *Message, desc protoreflect.EnumDescriptor) *Enum {
@@ -745,7 +747,8 @@
 type EnumValue struct {
 	Desc protoreflect.EnumValueDescriptor
 
-	GoIdent  GoIdent  // name of the generated Go type
+	GoIdent GoIdent // name of the generated Go type
+
 	Location Location // location of this enum value
 }
 
@@ -770,9 +773,10 @@
 type Service struct {
 	Desc protoreflect.ServiceDescriptor
 
-	GoName   string
-	Location Location  // location of this service
-	Methods  []*Method // service method definitions
+	GoName  string
+	Methods []*Method // service method definitions
+
+	Location Location // location of this service
 }
 
 func newService(gen *Plugin, f *File, desc protoreflect.ServiceDescriptor) *Service {
@@ -791,19 +795,20 @@
 type Method struct {
 	Desc protoreflect.MethodDescriptor
 
-	GoName        string
-	ParentService *Service
-	Location      Location // location of this method
-	InputType     *Message
-	OutputType    *Message
+	GoName string
+	Parent *Service
+	Input  *Message
+	Output *Message
+
+	Location Location // location of this method
 }
 
 func newMethod(gen *Plugin, f *File, service *Service, desc protoreflect.MethodDescriptor) *Method {
 	method := &Method{
-		Desc:          desc,
-		GoName:        camelCase(string(desc.Name())),
-		ParentService: service,
-		Location:      service.Location.appendPath(fieldnum.ServiceDescriptorProto_Method, int32(desc.Index())),
+		Desc:     desc,
+		GoName:   camelCase(string(desc.Name())),
+		Parent:   service,
+		Location: service.Location.appendPath(fieldnum.ServiceDescriptorProto_Method, int32(desc.Index())),
 	}
 	return method
 }
@@ -811,19 +816,19 @@
 func (method *Method) init(gen *Plugin) error {
 	desc := method.Desc
 
-	inName := desc.InputType().FullName()
+	inName := desc.Input().FullName()
 	in, ok := gen.messagesByName[inName]
 	if !ok {
 		return fmt.Errorf("method %v: no descriptor for type %v", desc.FullName(), inName)
 	}
-	method.InputType = in
+	method.Input = in
 
-	outName := desc.OutputType().FullName()
+	outName := desc.Output().FullName()
 	out, ok := gen.messagesByName[outName]
 	if !ok {
 		return fmt.Errorf("method %v: no descriptor for type %v", desc.FullName(), outName)
 	}
-	method.OutputType = out
+	method.Output = out
 
 	return nil
 }
diff --git a/reflect/protodesc/toproto.go b/reflect/protodesc/toproto.go
index efe0572..ad288a2 100644
--- a/reflect/protodesc/toproto.go
+++ b/reflect/protodesc/toproto.go
@@ -100,14 +100,14 @@
 		Number:   scalar.Int32(int32(field.Number())),
 		Label:    descriptorpb.FieldDescriptorProto_Label(field.Cardinality()).Enum(),
 		Type:     descriptorpb.FieldDescriptorProto_Type(field.Kind()).Enum(),
-		Extendee: fullNameOf(field.ExtendedType()),
+		Extendee: fullNameOf(field.Extendee()),
 		Options:  field.Options().(*descriptorpb.FieldOptions),
 	}
 	switch field.Kind() {
 	case protoreflect.EnumKind:
-		p.TypeName = fullNameOf(field.EnumType())
+		p.TypeName = fullNameOf(field.Enum())
 	case protoreflect.MessageKind, protoreflect.GroupKind:
-		p.TypeName = fullNameOf(field.MessageType())
+		p.TypeName = fullNameOf(field.Message())
 	}
 	if field.HasJSONName() {
 		p.JsonName = scalar.String(field.JSONName())
@@ -125,7 +125,7 @@
 			p.DefaultValue = scalar.String(def)
 		}
 	}
-	if oneof := field.OneofType(); oneof != nil {
+	if oneof := field.Oneof(); oneof != nil {
 		p.OneofIndex = scalar.Int32(int32(oneof.Index()))
 	}
 	return p
@@ -191,8 +191,8 @@
 func ToMethodDescriptorProto(method protoreflect.MethodDescriptor) *descriptorpb.MethodDescriptorProto {
 	p := &descriptorpb.MethodDescriptorProto{
 		Name:       scalar.String(string(method.Name())),
-		InputType:  fullNameOf(method.InputType()),
-		OutputType: fullNameOf(method.OutputType()),
+		InputType:  fullNameOf(method.Input()),
+		OutputType: fullNameOf(method.Output()),
 		Options:    method.Options().(*descriptorpb.MethodOptions),
 	}
 	if method.IsStreamingClient() {
diff --git a/reflect/protoreflect/type.go b/reflect/protoreflect/type.go
index 50324d6..6a56f43 100644
--- a/reflect/protoreflect/type.go
+++ b/reflect/protoreflect/type.go
@@ -297,26 +297,39 @@
 	// The Value type is determined by the Kind.
 	Default() Value
 
-	// DefaultEnumValue returns the EnummValueDescriptor for the default value
+	// DefaultEnumValue returns the EnumValueDescriptor for the default value
 	// of an enum field, and is nil for any other kind of field.
 	DefaultEnumValue() EnumValueDescriptor
 
-	// OneofType is the containing oneof that this field belongs to,
+	// Oneof is the containing oneof that this field belongs to,
 	// and is nil if this field is not part of a oneof.
-	OneofType() OneofDescriptor
+	Oneof() OneofDescriptor
 
-	// ExtendedType returns a MessageDescriptor for the extended message
+	// Extendee returns a message descriptor for the extended message
 	// that this extension field belongs in.
 	// It returns nil if this field is not an extension.
+	Extendee() MessageDescriptor
+
+	// Enum is the enum descriptor if Kind is EnumKind.
+	// It returns nil for any other Kind.
+	Enum() EnumDescriptor
+
+	// Message is the message descriptor if Kind is
+	// MessageKind or GroupKind. It returns nil for any other Kind.
+	Message() MessageDescriptor
+
+	// OneofType has been renamed to Oneof.
+	// Deprecated: Use Oneof instead; this will be removed.
+	OneofType() OneofDescriptor
+	// ExtendedType has been renamed to Extendee.
+	// Deprecated: Use Extendee instead; this will be removed.
 	ExtendedType() MessageDescriptor
-
-	// MessageType is the message type if Kind is MessageKind or GroupKind.
-	// It returns nil for any other Kind.
-	MessageType() MessageDescriptor
-
-	// EnumType is the enum type if Kind is EnumKind.
-	// It returns nil for any other Kind.
+	// EnumType has been renamed to Enum.
+	// Deprecated: Use Enum instead; this will be removed.
 	EnumType() EnumDescriptor
+	// MessageType has been renamed to Message.
+	// Deprecated: Use Message instead; this will be removed.
+	MessageType() MessageDescriptor
 
 	isFieldDescriptor
 }
@@ -387,7 +400,7 @@
 //
 // While a normal field is a member of the parent message that it is declared
 // within (see Descriptor.Parent), an extension field is a member of some other
-// target message (see ExtensionDescriptor.ExtendedType) and may have no
+// target message (see ExtensionDescriptor.Extendee) and may have no
 // relationship with the parent. However, the full name of an extension field is
 // relative to the parent that it is declared within.
 //
@@ -550,15 +563,22 @@
 type MethodDescriptor interface {
 	Descriptor
 
-	// InputType is the input message type.
-	InputType() MessageDescriptor
-	// OutputType is the output message type.
-	OutputType() MessageDescriptor
+	// Input is the input message descriptor.
+	Input() MessageDescriptor
+	// Output is the output message descriptor.
+	Output() MessageDescriptor
 	// IsStreamingClient reports whether the client streams multiple messages.
 	IsStreamingClient() bool
 	// IsStreamingServer reports whether the server streams multiple messages.
 	IsStreamingServer() bool
 
+	// InputType has been renamed to Input.
+	// Deprecated: Use Input instead; this will be removed.
+	InputType() MessageDescriptor
+	// OutputType has been renamed to Output.
+	// Deprecated: Use Output instead; this will be removed.
+	OutputType() MessageDescriptor
+
 	isMethodDescriptor
 }
 type isMethodDescriptor interface{ ProtoType(MethodDescriptor) }
diff --git a/reflect/protoregistry/registry.go b/reflect/protoregistry/registry.go
index ee91406..2f1aa62 100644
--- a/reflect/protoregistry/registry.go
+++ b/reflect/protoregistry/registry.go
@@ -372,7 +372,7 @@
 			// Check for conflicts in extensionsByMessage.
 			if xt, _ := typ.(protoreflect.ExtensionType); xt != nil {
 				field := xt.Number()
-				message := xt.ExtendedType().FullName()
+				message := xt.Extendee().FullName()
 				if r.extensionsByMessage[message][field] != nil {
 					if firstErr == nil {
 						firstErr = errors.New("extension %v is already registered on message %v", name, message)