all: rename ExtensionType Descriptor method to TypeDescriptor (1/2)

Descriptor methods generally return a Descriptor with no Go type
information. ExtensionType's Descriptor is an exception, returning an
ExtensionTypeDescriptor containing both the proto descriptor and a
reference back to the ExtensionType. The pure descriptor is accessed
by xt.Descriptor().Descriptor().

Rename ExtensionType's Descriptor method to TypeDescriptor to make it
clear that it behaves a bit differently.

Change 1/2: Add the TypeDescriptor method and deprecate Descriptor.

Change-Id: I1806095044d35a474d60f94d2a28bdf528f12238
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/192139
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
diff --git a/encoding/protojson/decode.go b/encoding/protojson/decode.go
index 5e32d8b..3e1deed 100644
--- a/encoding/protojson/decode.go
+++ b/encoding/protojson/decode.go
@@ -183,7 +183,7 @@
 				return errors.New("unable to resolve [%v]: %v", extName, err)
 			}
 			if extType != nil {
-				fd = extType.Descriptor()
+				fd = extType.TypeDescriptor()
 			}
 		} else {
 			// The name can either be the JSON name or the proto field name.
diff --git a/encoding/prototext/decode.go b/encoding/prototext/decode.go
index 7207dde..79e1eaf 100644
--- a/encoding/prototext/decode.go
+++ b/encoding/prototext/decode.go
@@ -127,7 +127,7 @@
 				return errors.New("unable to resolve [%v]: %v", extName, err)
 			}
 			if xt != nil {
-				fd = xt.Descriptor()
+				fd = xt.TypeDescriptor()
 			}
 		}
 
diff --git a/internal/encoding/messageset/messageset.go b/internal/encoding/messageset/messageset.go
index b1c6db5..b7b5477 100644
--- a/internal/encoding/messageset/messageset.go
+++ b/internal/encoding/messageset/messageset.go
@@ -65,7 +65,7 @@
 	if err != nil {
 		return nil, err
 	}
-	if !IsMessageSetExtension(xt.Descriptor()) {
+	if !IsMessageSetExtension(xt.TypeDescriptor()) {
 		return nil, preg.NotFound
 	}
 	return xt, nil
diff --git a/internal/impl/codec_extension.go b/internal/impl/codec_extension.go
index 7e430ee..8a999ef 100644
--- a/internal/impl/codec_extension.go
+++ b/internal/impl/codec_extension.go
@@ -29,7 +29,7 @@
 		return e
 	}
 
-	xd := xt.Descriptor()
+	xd := xt.TypeDescriptor()
 	var wiretag uint64
 	if !xd.IsPacked() {
 		wiretag = wire.EncodeTag(xd.Number(), wireTypes[xd.Kind()])
diff --git a/internal/impl/extension.go b/internal/impl/extension.go
index 1ba473d..2ac8b7b 100644
--- a/internal/impl/extension.go
+++ b/internal/impl/extension.go
@@ -119,6 +119,10 @@
 	return xi.goType
 }
 func (xi *ExtensionInfo) Descriptor() pref.ExtensionTypeDescriptor {
+	// TODO: Remove.
+	return xi.TypeDescriptor()
+}
+func (xi *ExtensionInfo) TypeDescriptor() pref.ExtensionTypeDescriptor {
 	if atomic.LoadUint32(&xi.init) == extensionInfoUninitialized {
 		xi.lazyInitSlow()
 	}
diff --git a/internal/impl/legacy_extension.go b/internal/impl/legacy_extension.go
index ec5420d..02e021b 100644
--- a/internal/impl/legacy_extension.go
+++ b/internal/impl/legacy_extension.go
@@ -33,11 +33,11 @@
 	}
 
 	tt := xt.GoType()
-	if xt.Descriptor().Cardinality() == pref.Repeated {
+	if xt.TypeDescriptor().Cardinality() == pref.Repeated {
 		tt = tt.Elem().Elem()
 	}
 	xi := &ExtensionInfo{}
-	InitExtensionInfo(xi, xt.Descriptor().Descriptor(), tt)
+	InitExtensionInfo(xi, xt.TypeDescriptor().Descriptor(), tt)
 	xi.lazyInit() // populate legacy fields
 
 	if xi, ok := legacyExtensionInfoCache.LoadOrStore(xt, xi); ok {
diff --git a/internal/impl/legacy_test.go b/internal/impl/legacy_test.go
index e306e6b..08daace 100644
--- a/internal/impl/legacy_test.go
+++ b/internal/impl/legacy_test.go
@@ -358,7 +358,7 @@
 	}
 	for i, xt := range extensionTypes {
 		var got interface{}
-		xd := xt.Descriptor()
+		xd := xt.TypeDescriptor()
 		if !(xd.IsList() || xd.IsMap() || xd.Message() != nil) {
 			got = xt.InterfaceOf(m.Get(xd))
 		}
@@ -370,7 +370,7 @@
 
 	// All fields should be unpopulated.
 	for _, xt := range extensionTypes {
-		xd := xt.Descriptor()
+		xd := xt.TypeDescriptor()
 		if m.Has(xd) {
 			t.Errorf("Message.Has(%d) = true, want false", xd.Number())
 		}
@@ -404,11 +404,11 @@
 		19: &[]*EnumMessages{m2b},
 	}
 	for i, xt := range extensionTypes {
-		m.Set(xt.Descriptor(), xt.ValueOf(setValues[i]))
+		m.Set(xt.TypeDescriptor(), xt.ValueOf(setValues[i]))
 	}
 	for i, xt := range extensionTypes[len(extensionTypes)/2:] {
 		v := extensionTypes[i].ValueOf(setValues[i])
-		m.Get(xt.Descriptor()).List().Append(v)
+		m.Get(xt.TypeDescriptor()).List().Append(v)
 	}
 
 	// Get the values and check for equality.
@@ -435,7 +435,7 @@
 		19: &[]*EnumMessages{m2b, m2a},
 	}
 	for i, xt := range extensionTypes {
-		xd := xt.Descriptor()
+		xd := xt.TypeDescriptor()
 		got := xt.InterfaceOf(m.Get(xd))
 		want := getValues[i]
 		if diff := cmp.Diff(want, got, opts); diff != "" {
@@ -445,15 +445,15 @@
 
 	// Clear all singular fields and truncate all repeated fields.
 	for _, xt := range extensionTypes[:len(extensionTypes)/2] {
-		m.Clear(xt.Descriptor())
+		m.Clear(xt.TypeDescriptor())
 	}
 	for _, xt := range extensionTypes[len(extensionTypes)/2:] {
-		m.Get(xt.Descriptor()).List().Truncate(0)
+		m.Get(xt.TypeDescriptor()).List().Truncate(0)
 	}
 
 	// Clear all repeated fields.
 	for _, xt := range extensionTypes[len(extensionTypes)/2:] {
-		m.Clear(xt.Descriptor())
+		m.Clear(xt.TypeDescriptor())
 	}
 }
 
@@ -517,7 +517,7 @@
 				}),
 				cmp.Transformer("", func(xt pref.ExtensionType) map[string]interface{} {
 					return map[string]interface{}{
-						"Descriptor": xt.Descriptor(),
+						"Descriptor": xt.TypeDescriptor(),
 						"GoType":     xt.GoType(),
 					}
 				}),
diff --git a/internal/impl/message_reflect.go b/internal/impl/message_reflect.go
index b01622b..8ed7cc5 100644
--- a/internal/impl/message_reflect.go
+++ b/internal/impl/message_reflect.go
@@ -119,7 +119,7 @@
 	if m != nil {
 		for _, x := range *m {
 			xt := x.GetType()
-			if !f(xt.Descriptor(), xt.ValueOf(x.GetValue())) {
+			if !f(xt.TypeDescriptor(), xt.ValueOf(x.GetValue())) {
 				return
 			}
 		}
@@ -127,15 +127,15 @@
 }
 func (m *extensionMap) Has(xt pref.ExtensionType) (ok bool) {
 	if m != nil {
-		_, ok = (*m)[int32(xt.Descriptor().Number())]
+		_, ok = (*m)[int32(xt.TypeDescriptor().Number())]
 	}
 	return ok
 }
 func (m *extensionMap) Clear(xt pref.ExtensionType) {
-	delete(*m, int32(xt.Descriptor().Number()))
+	delete(*m, int32(xt.TypeDescriptor().Number()))
 }
 func (m *extensionMap) Get(xt pref.ExtensionType) pref.Value {
-	xd := xt.Descriptor()
+	xd := xt.TypeDescriptor()
 	if m != nil {
 		if x, ok := (*m)[int32(xd.Number())]; ok {
 			return xt.ValueOf(x.GetValue())
@@ -150,10 +150,10 @@
 	var x ExtensionField
 	x.SetType(xt)
 	x.SetEagerValue(xt.InterfaceOf(v))
-	(*m)[int32(xt.Descriptor().Number())] = x
+	(*m)[int32(xt.TypeDescriptor().Number())] = x
 }
 func (m *extensionMap) Mutable(xt pref.ExtensionType) pref.Value {
-	xd := xt.Descriptor()
+	xd := xt.TypeDescriptor()
 	if xd.Kind() != pref.MessageKind && xd.Kind() != pref.GroupKind && !xd.IsList() && !xd.IsMap() {
 		panic("invalid Mutable on field with non-composite type")
 	}
diff --git a/proto/decode.go b/proto/decode.go
index e394243..e5ecb3b 100644
--- a/proto/decode.go
+++ b/proto/decode.go
@@ -89,7 +89,7 @@
 				return err
 			}
 			if extType != nil {
-				fd = extType.Descriptor()
+				fd = extType.TypeDescriptor()
 			}
 		}
 		var err error
diff --git a/proto/extension.go b/proto/extension.go
index 2e1c78f..809c12d 100644
--- a/proto/extension.go
+++ b/proto/extension.go
@@ -10,13 +10,13 @@
 
 // HasExtension reports whether an extension field is populated.
 func HasExtension(m Message, ext protoreflect.ExtensionType) bool {
-	return m.ProtoReflect().Has(ext.Descriptor())
+	return m.ProtoReflect().Has(ext.TypeDescriptor())
 }
 
 // ClearExtension clears an extension field such that subsequent
 // HasExtension calls return false.
 func ClearExtension(m Message, ext protoreflect.ExtensionType) {
-	m.ProtoReflect().Clear(ext.Descriptor())
+	m.ProtoReflect().Clear(ext.TypeDescriptor())
 }
 
 // GetExtension retrieves the value for an extension field.
@@ -24,10 +24,10 @@
 // If the field is unpopulated, it returns the default value for
 // scalars and an immutable, empty value for lists, maps, or messages.
 func GetExtension(m Message, ext protoreflect.ExtensionType) interface{} {
-	return ext.InterfaceOf(m.ProtoReflect().Get(ext.Descriptor()))
+	return ext.InterfaceOf(m.ProtoReflect().Get(ext.TypeDescriptor()))
 }
 
 // SetExtension stores the value of an extension field.
 func SetExtension(m Message, ext protoreflect.ExtensionType, value interface{}) {
-	m.ProtoReflect().Set(ext.Descriptor(), ext.ValueOf(value))
+	m.ProtoReflect().Set(ext.TypeDescriptor(), ext.ValueOf(value))
 }
diff --git a/proto/extension_test.go b/proto/extension_test.go
index ce3a142..3432d5c 100644
--- a/proto/extension_test.go
+++ b/proto/extension_test.go
@@ -45,7 +45,7 @@
 			value:       true,
 		},
 	} {
-		desc := fmt.Sprintf("Extension %v, value %v", test.ext.Descriptor().FullName(), test.value)
+		desc := fmt.Sprintf("Extension %v, value %v", test.ext.TypeDescriptor().FullName(), test.value)
 		if proto.HasExtension(test.message, test.ext) {
 			t.Errorf("%v:\nbefore setting extension HasExtension(...) = true, want false", desc)
 		}
diff --git a/proto/messageset.go b/proto/messageset.go
index 14ed199..0d88097 100644
--- a/proto/messageset.go
+++ b/proto/messageset.go
@@ -78,7 +78,7 @@
 			if err != nil {
 				return err
 			}
-			xd := xt.Descriptor()
+			xd := xt.TypeDescriptor()
 			if err := o.unmarshalMessage(v, m.Mutable(xd).Message()); err != nil {
 				// Contents cannot be unmarshaled.
 				return err
diff --git a/reflect/protoreflect/proto.go b/reflect/protoreflect/proto.go
index ca65621..8c7cbfc 100644
--- a/reflect/protoreflect/proto.go
+++ b/reflect/protoreflect/proto.go
@@ -73,13 +73,15 @@
 // ProtoMessage, which can convert to/from a Message.
 //
 //
-//	        ┌── Descriptor() ──┐       ┌───── implements ─────┐
+//	        ┌── Descriptor() ──┐       ┌──── Descriptor() ────┐
 //	        │                  V       │                      V
 //	╔═══════════════╗  ╔═════════════════════════╗  ╔═════════════════════╗
 //	║ ExtensionType ║  ║ ExtensionTypeDescriptor ║  ║ ExtensionDescriptor ║
 //	╚═══════════════╝  ╚═════════════════════════╝  ╚═════════════════════╝
-//	        Λ                  │       Λ                      │
-//	        └───── Type() ─────┘       └─── may implement ────┘
+//	        Λ                  │     │ Λ                      │ Λ
+//	        └───── Type() ─────┘     │ └─── may implement ────┘ │
+//	                                 │                          │
+//	                                 └────── implements ────────┘
 //
 // • An ExtensionType describes a concrete Go implementation of an extension.
 // It has an ExtensionTypeDescriptor and can convert to/from
diff --git a/reflect/protoreflect/type.go b/reflect/protoreflect/type.go
index 00f19ef..237bc95 100644
--- a/reflect/protoreflect/type.go
+++ b/reflect/protoreflect/type.go
@@ -461,7 +461,12 @@
 	//	t.GoType() == reflect.TypeOf(t.InterfaceOf(t.New()))
 	GoType() reflect.Type
 
-	// Descriptor returns the extension descriptor.
+	// TypeDescriptor returns the extension type descriptor.
+	TypeDescriptor() ExtensionTypeDescriptor
+
+	// Descriptor is deprecated.
+	//
+	// TODO: remove.
 	Descriptor() ExtensionTypeDescriptor
 
 	// TODO: What to do with nil?
diff --git a/reflect/protoregistry/registry.go b/reflect/protoregistry/registry.go
index 22b5d8c..9fa3d2e 100644
--- a/reflect/protoregistry/registry.go
+++ b/reflect/protoregistry/registry.go
@@ -434,7 +434,7 @@
 			case protoreflect.MessageType:
 				desc = t.Descriptor()
 			case protoreflect.ExtensionType:
-				desc = t.Descriptor()
+				desc = t.TypeDescriptor()
 			default:
 				panic(fmt.Sprintf("invalid type: %T", t))
 			}
@@ -453,7 +453,7 @@
 
 			// Check for conflicts in extensionsByMessage.
 			if xt, _ := typ.(protoreflect.ExtensionType); xt != nil {
-				xd := xt.Descriptor()
+				xd := xt.TypeDescriptor()
 				field := xd.Number()
 				message := xd.ContainingMessage().FullName()
 				if prev := r.extensionsByMessage[message][field]; prev != nil {
@@ -660,7 +660,7 @@
 	case protoreflect.MessageType:
 		v = d.Descriptor()
 	case protoreflect.ExtensionType:
-		v = d.Descriptor()
+		v = d.TypeDescriptor()
 	}
 	if d, ok := v.(protoreflect.Descriptor); ok {
 		v = d.ParentFile()
diff --git a/reflect/protoregistry/registry_test.go b/reflect/protoregistry/registry_test.go
index a52bf97..b22a803 100644
--- a/reflect/protoregistry/registry_test.go
+++ b/reflect/protoregistry/registry_test.go
@@ -540,7 +540,7 @@
 		case pref.MessageType:
 			return t.Descriptor().FullName()
 		case pref.ExtensionType:
-			return t.Descriptor().FullName()
+			return t.TypeDescriptor().FullName()
 		default:
 			panic("invalid type")
 		}
diff --git a/testing/prototest/prototest.go b/testing/prototest/prototest.go
index 9ff58f9..fbfe7c6 100644
--- a/testing/prototest/prototest.go
+++ b/testing/prototest/prototest.go
@@ -47,7 +47,7 @@
 		})
 	}
 	for _, xt := range opts.ExtensionTypes {
-		testField(t, m1, xt.Descriptor())
+		testField(t, m1, xt.TypeDescriptor())
 	}
 	for i := 0; i < md.Oneofs().Len(); i++ {
 		testOneof(t, m1, md.Oneofs().Get(i))