Change MessageName to check if Message has an XXX_MessageName() method, and use the name returned by that method instead of internal registry when present.
PiperOrigin-RevId: 131111087
diff --git a/proto/properties.go b/proto/properties.go
index 69ddda8..ec2289c 100644
--- a/proto/properties.go
+++ b/proto/properties.go
@@ -844,7 +844,15 @@
}
// MessageName returns the fully-qualified proto name for the given message type.
-func MessageName(x Message) string { return revProtoTypes[reflect.TypeOf(x)] }
+func MessageName(x Message) string {
+ type xname interface {
+ XXX_MessageName() string
+ }
+ if m, ok := x.(xname); ok {
+ return m.XXX_MessageName()
+ }
+ return revProtoTypes[reflect.TypeOf(x)]
+}
// MessageType returns the message type (pointer to struct) for a named message.
func MessageType(name string) reflect.Type { return protoTypes[name] }