diff --git a/cmd/protoc-gen-go/internal_gengo/reflect.go b/cmd/protoc-gen-go/internal_gengo/reflect.go
index 4cc1089..69de0df 100644
--- a/cmd/protoc-gen-go/internal_gengo/reflect.go
+++ b/cmd/protoc-gen-go/internal_gengo/reflect.go
@@ -191,7 +191,7 @@
 		for i, enum := range f.allEnums {
 			g.P(prototypePackage.Ident("GoEnum"), "(")
 			g.P(enumDescsVar, "[", i, "].Reference(),")
-			g.P("func(_ ", protoreflectPackage.Ident("EnumType"), ", n ", protoreflectPackage.Ident("EnumNumber"), ") ", protoreflectPackage.Ident("ProtoEnum"), " {")
+			g.P("func(_ ", protoreflectPackage.Ident("EnumType"), ", n ", protoreflectPackage.Ident("EnumNumber"), ") ", protoreflectPackage.Ident("Enum"), " {")
 			g.P("return ", enum.GoIdent, "(n)")
 			g.P("},")
 			g.P("),")
@@ -352,19 +352,12 @@
 		return
 	}
 
-	shadowType := shadowTypeName(enum.GoIdent)
-	g.P("type ", shadowType, " ", enum.GoIdent)
-	g.P()
-
 	idx := f.allEnumsByPtr[enum]
 	typesVar := enumTypesVarName(f)
-	g.P("func (e ", enum.GoIdent, ") ProtoReflect() ", protoreflectPackage.Ident("Enum"), " {")
-	g.P("return (", shadowType, ")(e)")
-	g.P("}")
-	g.P("func (e ", shadowType, ") Type() ", protoreflectPackage.Ident("EnumType"), " {")
+	g.P("func (e ", enum.GoIdent, ") Type() ", protoreflectPackage.Ident("EnumType"), " {")
 	g.P("return ", typesVar, "[", idx, "]")
 	g.P("}")
-	g.P("func (e ", shadowType, ") Number() ", protoreflectPackage.Ident("EnumNumber"), " {")
+	g.P("func (e ", enum.GoIdent, ") Number() ", protoreflectPackage.Ident("EnumNumber"), " {")
 	g.P("return ", protoreflectPackage.Ident("EnumNumber"), "(e)")
 	g.P("}")
 }
diff --git a/cmd/protoc-gen-go/testdata/annotations/annotations.pb.go b/cmd/protoc-gen-go/testdata/annotations/annotations.pb.go
index ef72ffd..ddba63c 100644
--- a/cmd/protoc-gen-go/testdata/annotations/annotations.pb.go
+++ b/cmd/protoc-gen-go/testdata/annotations/annotations.pb.go
@@ -22,15 +22,10 @@
 	AnnotationsTestEnum_ANNOTATIONS_TEST_ENUM_VALUE AnnotationsTestEnum = 0
 )
 
-type xxx_AnnotationsTestEnum AnnotationsTestEnum
-
-func (e AnnotationsTestEnum) ProtoReflect() protoreflect.Enum {
-	return (xxx_AnnotationsTestEnum)(e)
-}
-func (e xxx_AnnotationsTestEnum) Type() protoreflect.EnumType {
+func (e AnnotationsTestEnum) Type() protoreflect.EnumType {
 	return xxx_Annotations_ProtoFile_EnumTypes[0]
 }
-func (e xxx_AnnotationsTestEnum) Number() protoreflect.EnumNumber {
+func (e AnnotationsTestEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -167,7 +162,7 @@
 var xxx_Annotations_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
 	prototype.GoEnum(
 		xxx_Annotations_ProtoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return AnnotationsTestEnum(n)
 		},
 	),
diff --git a/cmd/protoc-gen-go/testdata/comments/deprecated.pb.go b/cmd/protoc-gen-go/testdata/comments/deprecated.pb.go
index ae3d74b..b981bae 100644
--- a/cmd/protoc-gen-go/testdata/comments/deprecated.pb.go
+++ b/cmd/protoc-gen-go/testdata/comments/deprecated.pb.go
@@ -21,15 +21,10 @@
 	DeprecatedEnum_DEPRECATED DeprecatedEnum = 0 // Deprecated: Do not use.
 )
 
-type xxx_DeprecatedEnum DeprecatedEnum
-
-func (e DeprecatedEnum) ProtoReflect() protoreflect.Enum {
-	return (xxx_DeprecatedEnum)(e)
-}
-func (e xxx_DeprecatedEnum) Type() protoreflect.EnumType {
+func (e DeprecatedEnum) Type() protoreflect.EnumType {
 	return xxx_Deprecated_ProtoFile_EnumTypes[0]
 }
-func (e xxx_DeprecatedEnum) Number() protoreflect.EnumNumber {
+func (e DeprecatedEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -153,7 +148,7 @@
 var xxx_Deprecated_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
 	prototype.GoEnum(
 		xxx_Deprecated_ProtoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return DeprecatedEnum(n)
 		},
 	),
diff --git a/cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go b/cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go
index 2a948e1..fc1c914 100644
--- a/cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go
+++ b/cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go
@@ -24,15 +24,10 @@
 	Enum_ZERO Enum = 0
 )
 
-type xxx_Enum Enum
-
-func (e Enum) ProtoReflect() protoreflect.Enum {
-	return (xxx_Enum)(e)
-}
-func (e xxx_Enum) Type() protoreflect.EnumType {
+func (e Enum) Type() protoreflect.EnumType {
 	return xxx_Ext_ProtoFile_EnumTypes[0]
 }
-func (e xxx_Enum) Number() protoreflect.EnumNumber {
+func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -1058,7 +1053,7 @@
 var xxx_Ext_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
 	prototype.GoEnum(
 		xxx_Ext_ProtoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enum(n)
 		},
 	),
diff --git a/cmd/protoc-gen-go/testdata/extensions/proto3/ext3.pb.go b/cmd/protoc-gen-go/testdata/extensions/proto3/ext3.pb.go
index aa8b177..550921b 100644
--- a/cmd/protoc-gen-go/testdata/extensions/proto3/ext3.pb.go
+++ b/cmd/protoc-gen-go/testdata/extensions/proto3/ext3.pb.go
@@ -23,15 +23,10 @@
 	Enum_ZERO Enum = 0
 )
 
-type xxx_Enum Enum
-
-func (e Enum) ProtoReflect() protoreflect.Enum {
-	return (xxx_Enum)(e)
-}
-func (e xxx_Enum) Type() protoreflect.EnumType {
+func (e Enum) Type() protoreflect.EnumType {
 	return xxx_Ext3_ProtoFile_EnumTypes[0]
 }
-func (e xxx_Enum) Number() protoreflect.EnumNumber {
+func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -523,7 +518,7 @@
 var xxx_Ext3_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
 	prototype.GoEnum(
 		xxx_Ext3_ProtoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enum(n)
 		},
 	),
diff --git a/cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go b/cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go
index 3e83c85..87b3229 100644
--- a/cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go
+++ b/cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go
@@ -28,15 +28,10 @@
 	E_ZERO E = 0
 )
 
-type xxx_E E
-
-func (e E) ProtoReflect() protoreflect.Enum {
-	return (xxx_E)(e)
-}
-func (e xxx_E) Type() protoreflect.EnumType {
+func (e E) Type() protoreflect.EnumType {
 	return xxx_A_ProtoFile_EnumTypes[0]
 }
-func (e xxx_E) Number() protoreflect.EnumNumber {
+func (e E) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -77,15 +72,10 @@
 	M_M_ZERO M_Subenum = 0
 )
 
-type xxx_M_Subenum M_Subenum
-
-func (e M_Subenum) ProtoReflect() protoreflect.Enum {
-	return (xxx_M_Subenum)(e)
-}
-func (e xxx_M_Subenum) Type() protoreflect.EnumType {
+func (e M_Subenum) Type() protoreflect.EnumType {
 	return xxx_A_ProtoFile_EnumTypes[1]
 }
-func (e xxx_M_Subenum) Number() protoreflect.EnumNumber {
+func (e M_Subenum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -126,15 +116,10 @@
 	M_Submessage_M_SUBMESSAGE_ZERO M_Submessage_Submessage_Subenum = 0
 )
 
-type xxx_M_Submessage_Submessage_Subenum M_Submessage_Submessage_Subenum
-
-func (e M_Submessage_Submessage_Subenum) ProtoReflect() protoreflect.Enum {
-	return (xxx_M_Submessage_Submessage_Subenum)(e)
-}
-func (e xxx_M_Submessage_Submessage_Subenum) Type() protoreflect.EnumType {
+func (e M_Submessage_Submessage_Subenum) Type() protoreflect.EnumType {
 	return xxx_A_ProtoFile_EnumTypes[2]
 }
-func (e xxx_M_Submessage_Submessage_Subenum) Number() protoreflect.EnumNumber {
+func (e M_Submessage_Submessage_Subenum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -491,19 +476,19 @@
 var xxx_A_ProtoFile_EnumTypes = [3]protoreflect.EnumType{
 	prototype.GoEnum(
 		xxx_A_ProtoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return E(n)
 		},
 	),
 	prototype.GoEnum(
 		xxx_A_ProtoFile_EnumDescs[1].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return M_Subenum(n)
 		},
 	),
 	prototype.GoEnum(
 		xxx_A_ProtoFile_EnumDescs[2].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return M_Submessage_Submessage_Subenum(n)
 		},
 	),
diff --git a/cmd/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go b/cmd/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go
index 91da206..1cc319c 100644
--- a/cmd/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go
+++ b/cmd/protoc-gen-go/testdata/imports/test_a_1/m1.pb.go
@@ -22,15 +22,10 @@
 	E1_E1_ZERO E1 = 0
 )
 
-type xxx_E1 E1
-
-func (e E1) ProtoReflect() protoreflect.Enum {
-	return (xxx_E1)(e)
-}
-func (e xxx_E1) Type() protoreflect.EnumType {
+func (e E1) Type() protoreflect.EnumType {
 	return xxx_M1_ProtoFile_EnumTypes[0]
 }
-func (e xxx_E1) Number() protoreflect.EnumNumber {
+func (e E1) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -201,7 +196,7 @@
 var xxx_M1_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
 	prototype.GoEnum(
 		xxx_M1_ProtoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return E1(n)
 		},
 	),
diff --git a/cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go b/cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go
index 6bfdcee..b1f2540 100644
--- a/cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go
+++ b/cmd/protoc-gen-go/testdata/nopackage/nopackage.pb.go
@@ -22,15 +22,10 @@
 	Enum_ZERO Enum = 0
 )
 
-type xxx_Enum Enum
-
-func (e Enum) ProtoReflect() protoreflect.Enum {
-	return (xxx_Enum)(e)
-}
-func (e xxx_Enum) Type() protoreflect.EnumType {
+func (e Enum) Type() protoreflect.EnumType {
 	return xxx_Nopackage_ProtoFile_EnumTypes[0]
 }
-func (e xxx_Enum) Number() protoreflect.EnumNumber {
+func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -174,7 +169,7 @@
 var xxx_Nopackage_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
 	prototype.GoEnum(
 		xxx_Nopackage_ProtoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enum(n)
 		},
 	),
diff --git a/cmd/protoc-gen-go/testdata/proto2/enum.pb.go b/cmd/protoc-gen-go/testdata/proto2/enum.pb.go
index f5d0dd4..7e70607 100644
--- a/cmd/protoc-gen-go/testdata/proto2/enum.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto2/enum.pb.go
@@ -26,15 +26,10 @@
 	EnumType1_TWO EnumType1 = 2
 )
 
-type xxx_EnumType1 EnumType1
-
-func (e EnumType1) ProtoReflect() protoreflect.Enum {
-	return (xxx_EnumType1)(e)
-}
-func (e xxx_EnumType1) Type() protoreflect.EnumType {
+func (e EnumType1) Type() protoreflect.EnumType {
 	return xxx_Enum_ProtoFile_EnumTypes[0]
 }
-func (e xxx_EnumType1) Number() protoreflect.EnumNumber {
+func (e EnumType1) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -78,15 +73,10 @@
 	EnumType2_duplicate2 EnumType2 = 1
 )
 
-type xxx_EnumType2 EnumType2
-
-func (e EnumType2) ProtoReflect() protoreflect.Enum {
-	return (xxx_EnumType2)(e)
-}
-func (e xxx_EnumType2) Type() protoreflect.EnumType {
+func (e EnumType2) Type() protoreflect.EnumType {
 	return xxx_Enum_ProtoFile_EnumTypes[1]
 }
-func (e xxx_EnumType2) Number() protoreflect.EnumNumber {
+func (e EnumType2) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -131,15 +121,10 @@
 	EnumContainerMessage1_NESTED_1A_VALUE EnumContainerMessage1_NestedEnumType1A = 0
 )
 
-type xxx_EnumContainerMessage1_NestedEnumType1A EnumContainerMessage1_NestedEnumType1A
-
-func (e EnumContainerMessage1_NestedEnumType1A) ProtoReflect() protoreflect.Enum {
-	return (xxx_EnumContainerMessage1_NestedEnumType1A)(e)
-}
-func (e xxx_EnumContainerMessage1_NestedEnumType1A) Type() protoreflect.EnumType {
+func (e EnumContainerMessage1_NestedEnumType1A) Type() protoreflect.EnumType {
 	return xxx_Enum_ProtoFile_EnumTypes[2]
 }
-func (e xxx_EnumContainerMessage1_NestedEnumType1A) Number() protoreflect.EnumNumber {
+func (e EnumContainerMessage1_NestedEnumType1A) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -180,15 +165,10 @@
 	EnumContainerMessage1_NESTED_1B_VALUE EnumContainerMessage1_NestedEnumType1B = 0
 )
 
-type xxx_EnumContainerMessage1_NestedEnumType1B EnumContainerMessage1_NestedEnumType1B
-
-func (e EnumContainerMessage1_NestedEnumType1B) ProtoReflect() protoreflect.Enum {
-	return (xxx_EnumContainerMessage1_NestedEnumType1B)(e)
-}
-func (e xxx_EnumContainerMessage1_NestedEnumType1B) Type() protoreflect.EnumType {
+func (e EnumContainerMessage1_NestedEnumType1B) Type() protoreflect.EnumType {
 	return xxx_Enum_ProtoFile_EnumTypes[3]
 }
-func (e xxx_EnumContainerMessage1_NestedEnumType1B) Number() protoreflect.EnumNumber {
+func (e EnumContainerMessage1_NestedEnumType1B) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -231,15 +211,10 @@
 	EnumContainerMessage1_EnumContainerMessage2_NESTED_2A_VALUE EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2A = 0
 )
 
-type xxx_EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2A EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2A
-
-func (e EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2A) ProtoReflect() protoreflect.Enum {
-	return (xxx_EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2A)(e)
-}
-func (e xxx_EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2A) Type() protoreflect.EnumType {
+func (e EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2A) Type() protoreflect.EnumType {
 	return xxx_Enum_ProtoFile_EnumTypes[4]
 }
-func (e xxx_EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2A) Number() protoreflect.EnumNumber {
+func (e EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2A) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -280,15 +255,10 @@
 	EnumContainerMessage1_EnumContainerMessage2_NESTED_2B_VALUE EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B = 0
 )
 
-type xxx_EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B
-
-func (e EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B) ProtoReflect() protoreflect.Enum {
-	return (xxx_EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B)(e)
-}
-func (e xxx_EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B) Type() protoreflect.EnumType {
+func (e EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B) Type() protoreflect.EnumType {
 	return xxx_Enum_ProtoFile_EnumTypes[5]
 }
-func (e xxx_EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B) Number() protoreflect.EnumNumber {
+func (e EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -509,37 +479,37 @@
 var xxx_Enum_ProtoFile_EnumTypes = [6]protoreflect.EnumType{
 	prototype.GoEnum(
 		xxx_Enum_ProtoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return EnumType1(n)
 		},
 	),
 	prototype.GoEnum(
 		xxx_Enum_ProtoFile_EnumDescs[1].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return EnumType2(n)
 		},
 	),
 	prototype.GoEnum(
 		xxx_Enum_ProtoFile_EnumDescs[2].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return EnumContainerMessage1_NestedEnumType1A(n)
 		},
 	),
 	prototype.GoEnum(
 		xxx_Enum_ProtoFile_EnumDescs[3].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return EnumContainerMessage1_NestedEnumType1B(n)
 		},
 	),
 	prototype.GoEnum(
 		xxx_Enum_ProtoFile_EnumDescs[4].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2A(n)
 		},
 	),
 	prototype.GoEnum(
 		xxx_Enum_ProtoFile_EnumDescs[5].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return EnumContainerMessage1_EnumContainerMessage2_NestedEnumType2B(n)
 		},
 	),
diff --git a/cmd/protoc-gen-go/testdata/proto2/fields.pb.go b/cmd/protoc-gen-go/testdata/proto2/fields.pb.go
index 0e51367..3adf069 100644
--- a/cmd/protoc-gen-go/testdata/proto2/fields.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto2/fields.pb.go
@@ -24,15 +24,10 @@
 	FieldTestMessage_ONE  FieldTestMessage_Enum = 1
 )
 
-type xxx_FieldTestMessage_Enum FieldTestMessage_Enum
-
-func (e FieldTestMessage_Enum) ProtoReflect() protoreflect.Enum {
-	return (xxx_FieldTestMessage_Enum)(e)
-}
-func (e xxx_FieldTestMessage_Enum) Type() protoreflect.EnumType {
+func (e FieldTestMessage_Enum) Type() protoreflect.EnumType {
 	return xxx_Fields_ProtoFile_EnumTypes[0]
 }
-func (e xxx_FieldTestMessage_Enum) Number() protoreflect.EnumNumber {
+func (e FieldTestMessage_Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -1608,7 +1603,7 @@
 var xxx_Fields_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
 	prototype.GoEnum(
 		xxx_Fields_ProtoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return FieldTestMessage_Enum(n)
 		},
 	),
diff --git a/cmd/protoc-gen-go/testdata/proto3/enum.pb.go b/cmd/protoc-gen-go/testdata/proto3/enum.pb.go
index 328a439..dcb4a9e 100644
--- a/cmd/protoc-gen-go/testdata/proto3/enum.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto3/enum.pb.go
@@ -24,15 +24,10 @@
 	Enum_TWO  Enum = 2
 )
 
-type xxx_Enum Enum
-
-func (e Enum) ProtoReflect() protoreflect.Enum {
-	return (xxx_Enum)(e)
-}
-func (e xxx_Enum) Type() protoreflect.EnumType {
+func (e Enum) Type() protoreflect.EnumType {
 	return xxx_Enum_ProtoFile_EnumTypes[0]
 }
-func (e xxx_Enum) Number() protoreflect.EnumNumber {
+func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -95,7 +90,7 @@
 var xxx_Enum_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
 	prototype.GoEnum(
 		xxx_Enum_ProtoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enum(n)
 		},
 	),
diff --git a/cmd/protoc-gen-go/testdata/proto3/fields.pb.go b/cmd/protoc-gen-go/testdata/proto3/fields.pb.go
index 1701832..6d47099 100644
--- a/cmd/protoc-gen-go/testdata/proto3/fields.pb.go
+++ b/cmd/protoc-gen-go/testdata/proto3/fields.pb.go
@@ -22,15 +22,10 @@
 	FieldTestMessage_ZERO FieldTestMessage_Enum = 0
 )
 
-type xxx_FieldTestMessage_Enum FieldTestMessage_Enum
-
-func (e FieldTestMessage_Enum) ProtoReflect() protoreflect.Enum {
-	return (xxx_FieldTestMessage_Enum)(e)
-}
-func (e xxx_FieldTestMessage_Enum) Type() protoreflect.EnumType {
+func (e FieldTestMessage_Enum) Type() protoreflect.EnumType {
 	return xxx_Fields_ProtoFile_EnumTypes[0]
 }
-func (e xxx_FieldTestMessage_Enum) Number() protoreflect.EnumNumber {
+func (e FieldTestMessage_Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -542,7 +537,7 @@
 var xxx_Fields_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
 	prototype.GoEnum(
 		xxx_Fields_ProtoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return FieldTestMessage_Enum(n)
 		},
 	),
diff --git a/encoding/textpb/testprotos/pb2/test.pb.go b/encoding/textpb/testprotos/pb2/test.pb.go
index 61388ba..e3e9dea 100644
--- a/encoding/textpb/testprotos/pb2/test.pb.go
+++ b/encoding/textpb/testprotos/pb2/test.pb.go
@@ -31,15 +31,10 @@
 	Enum_TENTH   Enum = 10
 )
 
-type xxx_Enum Enum
-
-func (e Enum) ProtoReflect() protoreflect.Enum {
-	return (xxx_Enum)(e)
-}
-func (e xxx_Enum) Type() protoreflect.EnumType {
+func (e Enum) Type() protoreflect.EnumType {
 	return xxx_Test_ProtoFile_EnumTypes[0]
 }
-func (e xxx_Enum) Number() protoreflect.EnumNumber {
+func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -88,15 +83,10 @@
 	Enums_DIEZ Enums_NestedEnum = 10
 )
 
-type xxx_Enums_NestedEnum Enums_NestedEnum
-
-func (e Enums_NestedEnum) ProtoReflect() protoreflect.Enum {
-	return (xxx_Enums_NestedEnum)(e)
-}
-func (e xxx_Enums_NestedEnum) Type() protoreflect.EnumType {
+func (e Enums_NestedEnum) Type() protoreflect.EnumType {
 	return xxx_Test_ProtoFile_EnumTypes[1]
 }
-func (e xxx_Enums_NestedEnum) Number() protoreflect.EnumNumber {
+func (e Enums_NestedEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -2216,13 +2206,13 @@
 var xxx_Test_ProtoFile_EnumTypes = [2]protoreflect.EnumType{
 	prototype.GoEnum(
 		xxx_Test_ProtoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enum(n)
 		},
 	),
 	prototype.GoEnum(
 		xxx_Test_ProtoFile_EnumDescs[1].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enums_NestedEnum(n)
 		},
 	),
diff --git a/encoding/textpb/testprotos/pb3/test.pb.go b/encoding/textpb/testprotos/pb3/test.pb.go
index 30123ab..839054b 100644
--- a/encoding/textpb/testprotos/pb3/test.pb.go
+++ b/encoding/textpb/testprotos/pb3/test.pb.go
@@ -25,15 +25,10 @@
 	Enum_TEN  Enum = 10
 )
 
-type xxx_Enum Enum
-
-func (e Enum) ProtoReflect() protoreflect.Enum {
-	return (xxx_Enum)(e)
-}
-func (e xxx_Enum) Type() protoreflect.EnumType {
+func (e Enum) Type() protoreflect.EnumType {
 	return xxx_Test_ProtoFile_EnumTypes[0]
 }
-func (e xxx_Enum) Number() protoreflect.EnumNumber {
+func (e Enum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -68,15 +63,10 @@
 	Enums_DIEZ Enums_NestedEnum = 10
 )
 
-type xxx_Enums_NestedEnum Enums_NestedEnum
-
-func (e Enums_NestedEnum) ProtoReflect() protoreflect.Enum {
-	return (xxx_Enums_NestedEnum)(e)
-}
-func (e xxx_Enums_NestedEnum) Type() protoreflect.EnumType {
+func (e Enums_NestedEnum) Type() protoreflect.EnumType {
 	return xxx_Test_ProtoFile_EnumTypes[1]
 }
-func (e xxx_Enums_NestedEnum) Number() protoreflect.EnumNumber {
+func (e Enums_NestedEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -535,13 +525,13 @@
 var xxx_Test_ProtoFile_EnumTypes = [2]protoreflect.EnumType{
 	prototype.GoEnum(
 		xxx_Test_ProtoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enum(n)
 		},
 	),
 	prototype.GoEnum(
 		xxx_Test_ProtoFile_EnumDescs[1].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enums_NestedEnum(n)
 		},
 	),
diff --git a/internal/impl/export.go b/internal/impl/export.go
index 7e2d392..0a153c4 100644
--- a/internal/impl/export.go
+++ b/internal/impl/export.go
@@ -18,8 +18,8 @@
 // ProtoReflect method, otherwise it wraps the v1 enum to implement
 // the v2 reflective interface.
 func (Export) EnumOf(e interface{}) pref.Enum {
-	if ev, ok := e.(pref.ProtoEnum); ok {
-		return ev.ProtoReflect()
+	if ev, ok := e.(pref.Enum); ok {
+		return ev
 	}
 	return legacyWrapper.EnumOf(e)
 }
@@ -29,8 +29,8 @@
 // calling the ProtoReflect.Type method, otherwise it derives an enum type
 // from the v1 named int32 type.
 func (Export) EnumTypeOf(e interface{}) pref.EnumType {
-	if ev, ok := e.(pref.ProtoEnum); ok {
-		return ev.ProtoReflect().Type()
+	if ev, ok := e.(pref.Enum); ok {
+		return ev.Type()
 	}
 	return legacyWrapper.EnumTypeOf(e)
 }
@@ -67,8 +67,8 @@
 	switch t := t.(type) {
 	case nil:
 		return ptype.GoExtension(d, nil, nil)
-	case pref.ProtoEnum:
-		return ptype.GoExtension(d, t.ProtoReflect().Type(), nil)
+	case pref.Enum:
+		return ptype.GoExtension(d, t.Type(), nil)
 	case pref.ProtoMessage:
 		return ptype.GoExtension(d, nil, t.ProtoReflect().Type())
 	}
diff --git a/internal/impl/message_test.go b/internal/impl/message_test.go
index 97fbabd..b98fe65 100644
--- a/internal/impl/message_test.go
+++ b/internal/impl/message_test.go
@@ -936,7 +936,7 @@
 		FullName: "EnumProto2",
 		Values:   []ptype.EnumValue{{Name: "DEAD", Number: 0xdead}, {Name: "BEEF", Number: 0xbeef}},
 	}),
-	func(_ pref.EnumType, n pref.EnumNumber) pref.ProtoEnum {
+	func(_ pref.EnumType, n pref.EnumNumber) pref.Enum {
 		return EnumProto2(n)
 	},
 )
@@ -944,7 +944,6 @@
 func (e EnumProto2) Enum() *EnumProto2       { return &e }
 func (e EnumProto2) Type() pref.EnumType     { return enumProto2Type }
 func (e EnumProto2) Number() pref.EnumNumber { return pref.EnumNumber(e) }
-func (e EnumProto2) ProtoReflect() pref.Enum { return e }
 
 type EnumProto3 int32
 
@@ -954,7 +953,7 @@
 		FullName: "EnumProto3",
 		Values:   []ptype.EnumValue{{Name: "ALPHA", Number: 0}, {Name: "BRAVO", Number: 1}},
 	}),
-	func(_ pref.EnumType, n pref.EnumNumber) pref.ProtoEnum {
+	func(_ pref.EnumType, n pref.EnumNumber) pref.Enum {
 		return EnumProto3(n)
 	},
 )
@@ -962,7 +961,6 @@
 func (e EnumProto3) Enum() *EnumProto3       { return &e }
 func (e EnumProto3) Type() pref.EnumType     { return enumProto3Type }
 func (e EnumProto3) Number() pref.EnumNumber { return pref.EnumNumber(e) }
-func (e EnumProto3) ProtoReflect() pref.Enum { return e }
 
 type EnumMessages struct {
 	EnumP2        *EnumProto2              `protobuf:"1"`
diff --git a/internal/legacy/enum.go b/internal/legacy/enum.go
index e71bc2a..89b5c87 100644
--- a/internal/legacy/enum.go
+++ b/internal/legacy/enum.go
@@ -17,9 +17,9 @@
 	descriptorpb "github.com/golang/protobuf/v2/types/descriptor"
 )
 
-// wrapEnum wraps v as a protoreflect.ProtoEnum,
+// wrapEnum wraps v as a protoreflect.Enum,
 // where v must be a int32 kind and not implement the v2 API already.
-func wrapEnum(v reflect.Value) pref.ProtoEnum {
+func wrapEnum(v reflect.Value) pref.Enum {
 	et := loadEnumType(v.Type())
 	return et.New(pref.EnumNumber(v.Int()))
 }
@@ -37,9 +37,9 @@
 	// Slow-path: derive enum descriptor and initialize EnumType.
 	var m sync.Map // map[protoreflect.EnumNumber]proto.Enum
 	ed := loadEnumDesc(t)
-	et := ptype.GoEnum(ed, func(et pref.EnumType, n pref.EnumNumber) pref.ProtoEnum {
+	et := ptype.GoEnum(ed, func(et pref.EnumType, n pref.EnumNumber) pref.Enum {
 		if e, ok := m.Load(n); ok {
-			return e.(pref.ProtoEnum)
+			return e.(pref.Enum)
 		}
 		e := &enumWrapper{num: n, pbTyp: et, goTyp: t}
 		m.Store(n, e)
@@ -72,7 +72,6 @@
 
 var (
 	_ pref.Enum        = (*enumWrapper)(nil)
-	_ pref.ProtoEnum   = (*enumWrapper)(nil)
 	_ pvalue.Unwrapper = (*enumWrapper)(nil)
 )
 
@@ -99,7 +98,7 @@
 	// Derive the enum descriptor from the raw descriptor proto.
 	e := new(ptype.StandaloneEnum)
 	ev := reflect.Zero(t).Interface()
-	if _, ok := ev.(pref.ProtoEnum); ok {
+	if _, ok := ev.(pref.Enum); ok {
 		panic(fmt.Sprintf("%v already implements proto.Enum", t))
 	}
 	if ed, ok := ev.(enumV1); ok {
diff --git a/internal/legacy/export.go b/internal/legacy/export.go
index f51a33a..c5114f0 100644
--- a/internal/legacy/export.go
+++ b/internal/legacy/export.go
@@ -18,7 +18,7 @@
 type Export struct{}
 
 func (Export) EnumOf(e interface{}) pvalue.LegacyEnum {
-	return wrapEnum(reflect.ValueOf(e)).ProtoReflect().(pvalue.LegacyEnum)
+	return wrapEnum(reflect.ValueOf(e)).(pvalue.LegacyEnum)
 }
 
 func (Export) EnumTypeOf(e interface{}) pref.EnumType {
diff --git a/internal/legacy/message.go b/internal/legacy/message.go
index f4b358f..5158374 100644
--- a/internal/legacy/message.go
+++ b/internal/legacy/message.go
@@ -219,8 +219,8 @@
 
 	// Populate EnumType and MessageType.
 	if f.EnumType == nil && f.Kind == pref.EnumKind {
-		if ev, ok := reflect.Zero(t).Interface().(pref.ProtoEnum); ok {
-			f.EnumType = ev.ProtoReflect().Type()
+		if ev, ok := reflect.Zero(t).Interface().(pref.Enum); ok {
+			f.EnumType = ev.Type()
 		} else {
 			f.EnumType = loadEnumDesc(t)
 		}
diff --git a/internal/testprotos/test/test.pb.go b/internal/testprotos/test/test.pb.go
index f1a3ce3..bb71643 100644
--- a/internal/testprotos/test/test.pb.go
+++ b/internal/testprotos/test/test.pb.go
@@ -25,15 +25,10 @@
 	TestAllTypes_NEG TestAllTypes_NestedEnum = -1
 )
 
-type xxx_TestAllTypes_NestedEnum TestAllTypes_NestedEnum
-
-func (e TestAllTypes_NestedEnum) ProtoReflect() protoreflect.Enum {
-	return (xxx_TestAllTypes_NestedEnum)(e)
-}
-func (e xxx_TestAllTypes_NestedEnum) Type() protoreflect.EnumType {
+func (e TestAllTypes_NestedEnum) Type() protoreflect.EnumType {
 	return xxx_Test_ProtoFile_EnumTypes[0]
 }
-func (e xxx_TestAllTypes_NestedEnum) Number() protoreflect.EnumNumber {
+func (e TestAllTypes_NestedEnum) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -1622,7 +1617,7 @@
 var xxx_Test_ProtoFile_EnumTypes = [1]protoreflect.EnumType{
 	prototype.GoEnum(
 		xxx_Test_ProtoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return TestAllTypes_NestedEnum(n)
 		},
 	),
diff --git a/internal/value/convert.go b/internal/value/convert.go
index 1722d01..9e40ac2 100644
--- a/internal/value/convert.go
+++ b/internal/value/convert.go
@@ -31,7 +31,7 @@
 	stringType  = reflect.TypeOf(string(""))
 	bytesType   = reflect.TypeOf([]byte(nil))
 
-	enumIfaceV2    = reflect.TypeOf((*pref.ProtoEnum)(nil)).Elem()
+	enumIfaceV2    = reflect.TypeOf((*pref.Enum)(nil)).Elem()
 	messageIfaceV1 = reflect.TypeOf((*papi.Message)(nil)).Elem()
 	messageIfaceV2 = reflect.TypeOf((*pref.ProtoMessage)(nil)).Elem()
 
@@ -122,14 +122,14 @@
 	case pref.EnumKind:
 		// Handle v2 enums, which must satisfy the proto.Enum interface.
 		if t.Kind() != reflect.Ptr && t.Implements(enumIfaceV2) {
-			et := reflect.Zero(t).Interface().(pref.ProtoEnum).ProtoReflect().Type()
+			et := reflect.Zero(t).Interface().(pref.Enum).Type()
 			return Converter{
 				PBValueOf: func(v reflect.Value) pref.Value {
 					if v.Type() != t {
 						panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), t))
 					}
-					e := v.Interface().(pref.ProtoEnum)
-					return pref.ValueOf(e.ProtoReflect().Number())
+					e := v.Interface().(pref.Enum)
+					return pref.ValueOf(e.Number())
 				},
 				GoValueOf: func(v pref.Value) reflect.Value {
 					rv := reflect.ValueOf(et.New(v.Enum()))
diff --git a/reflect/protoreflect/proto.go b/reflect/protoreflect/proto.go
index 0746c11..8cf9df7 100644
--- a/reflect/protoreflect/proto.go
+++ b/reflect/protoreflect/proto.go
@@ -41,11 +41,6 @@
 // use the proto.Message type instead, which aliases this type.
 type ProtoMessage interface{ ProtoReflect() Message }
 
-// ProtoEnum is the top-level interface that all proto enums implement.
-// This is declared in the protoreflect package to avoid a cyclic dependency;
-// use the proto.Enum type instead, which aliases this type.
-type ProtoEnum interface{ ProtoReflect() Enum }
-
 // Syntax is the language version of the proto file.
 type Syntax syntax
 
diff --git a/reflect/protoreflect/type.go b/reflect/protoreflect/type.go
index 2cc7f70..573a610 100644
--- a/reflect/protoreflect/type.go
+++ b/reflect/protoreflect/type.go
@@ -470,7 +470,7 @@
 	EnumDescriptor
 
 	// New returns an instance of this enum type with its value set to n.
-	New(n EnumNumber) ProtoEnum
+	New(n EnumNumber) Enum
 
 	// GoType returns the Go type of the enum value.
 	//
diff --git a/reflect/protoreflect/value_union.go b/reflect/protoreflect/value_union.go
index 1fc3993..320742b 100644
--- a/reflect/protoreflect/value_union.go
+++ b/reflect/protoreflect/value_union.go
@@ -96,7 +96,7 @@
 	case Message, List, Map:
 		return valueOfIface(v)
 	default:
-		// TODO: Special case ProtoEnum, ProtoMessage, *[]T, and *map[K]V?
+		// TODO: Special case Enum, ProtoMessage, *[]T, and *map[K]V?
 		// Note: this would violate the documented invariant in Interface.
 		panic(fmt.Sprintf("invalid type: %v", reflect.TypeOf(v)))
 	}
diff --git a/reflect/protoregistry/registry_test.go b/reflect/protoregistry/registry_test.go
index 5be19b1..c7ddae4 100644
--- a/reflect/protoregistry/registry_test.go
+++ b/reflect/protoregistry/registry_test.go
@@ -326,9 +326,9 @@
 	mt1 := (&testpb.Message1{}).ProtoReflect().Type()
 	mt2 := (&testpb.Message2{}).ProtoReflect().Type()
 	mt3 := (&testpb.Message3{}).ProtoReflect().Type()
-	et1 := testpb.Enum1_ONE.ProtoReflect().Type()
-	et2 := testpb.Enum2_UNO.ProtoReflect().Type()
-	et3 := testpb.Enum3_YI.ProtoReflect().Type()
+	et1 := testpb.Enum1_ONE.Type()
+	et2 := testpb.Enum2_UNO.Type()
+	et3 := testpb.Enum3_YI.Type()
 	// Suffix indicates field number.
 	xt11 := extensionType(testpb.E_StringField)
 	xt12 := extensionType(testpb.E_EnumField)
diff --git a/reflect/protoregistry/testprotos/test.pb.go b/reflect/protoregistry/testprotos/test.pb.go
index 94362b3..d0d9dc2 100644
--- a/reflect/protoregistry/testprotos/test.pb.go
+++ b/reflect/protoregistry/testprotos/test.pb.go
@@ -22,15 +22,10 @@
 	Enum1_ONE Enum1 = 1
 )
 
-type xxx_Enum1 Enum1
-
-func (e Enum1) ProtoReflect() protoreflect.Enum {
-	return (xxx_Enum1)(e)
-}
-func (e xxx_Enum1) Type() protoreflect.EnumType {
+func (e Enum1) Type() protoreflect.EnumType {
 	return xxx_Test_ProtoFile_EnumTypes[0]
 }
-func (e xxx_Enum1) Number() protoreflect.EnumNumber {
+func (e Enum1) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -71,15 +66,10 @@
 	Enum2_UNO Enum2 = 1
 )
 
-type xxx_Enum2 Enum2
-
-func (e Enum2) ProtoReflect() protoreflect.Enum {
-	return (xxx_Enum2)(e)
-}
-func (e xxx_Enum2) Type() protoreflect.EnumType {
+func (e Enum2) Type() protoreflect.EnumType {
 	return xxx_Test_ProtoFile_EnumTypes[1]
 }
-func (e xxx_Enum2) Number() protoreflect.EnumNumber {
+func (e Enum2) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -120,15 +110,10 @@
 	Enum3_YI Enum3 = 1
 )
 
-type xxx_Enum3 Enum3
-
-func (e Enum3) ProtoReflect() protoreflect.Enum {
-	return (xxx_Enum3)(e)
-}
-func (e xxx_Enum3) Type() protoreflect.EnumType {
+func (e Enum3) Type() protoreflect.EnumType {
 	return xxx_Test_ProtoFile_EnumTypes[2]
 }
-func (e xxx_Enum3) Number() protoreflect.EnumNumber {
+func (e Enum3) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -492,19 +477,19 @@
 var xxx_Test_ProtoFile_EnumTypes = [3]protoreflect.EnumType{
 	prototype.GoEnum(
 		xxx_Test_ProtoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enum1(n)
 		},
 	),
 	prototype.GoEnum(
 		xxx_Test_ProtoFile_EnumDescs[1].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enum2(n)
 		},
 	),
 	prototype.GoEnum(
 		xxx_Test_ProtoFile_EnumDescs[2].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return Enum3(n)
 		},
 	),
diff --git a/reflect/prototype/go_type.go b/reflect/prototype/go_type.go
index 2776aa3..81e1241 100644
--- a/reflect/prototype/go_type.go
+++ b/reflect/prototype/go_type.go
@@ -16,7 +16,7 @@
 
 // GoEnum creates a new protoreflect.EnumType by combining the provided
 // protoreflect.EnumDescriptor with the provided constructor function.
-func GoEnum(ed protoreflect.EnumDescriptor, fn func(protoreflect.EnumType, protoreflect.EnumNumber) protoreflect.ProtoEnum) protoreflect.EnumType {
+func GoEnum(ed protoreflect.EnumDescriptor, fn func(protoreflect.EnumType, protoreflect.EnumNumber) protoreflect.Enum) protoreflect.EnumType {
 	if ed.IsPlaceholder() {
 		panic("enum descriptor must not be a placeholder")
 	}
@@ -25,7 +25,7 @@
 
 type goEnum struct {
 	protoreflect.EnumDescriptor
-	new func(protoreflect.EnumType, protoreflect.EnumNumber) protoreflect.ProtoEnum
+	new func(protoreflect.EnumType, protoreflect.EnumNumber) protoreflect.Enum
 
 	once sync.Once
 	typ  reflect.Type
@@ -35,7 +35,7 @@
 	t.New(0) // initialize t.typ
 	return t.typ
 }
-func (t *goEnum) New(n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+func (t *goEnum) New(n protoreflect.EnumNumber) protoreflect.Enum {
 	e := t.new(t, n)
 	t.once.Do(func() { t.typ = reflect.TypeOf(e) })
 	if t.typ != reflect.TypeOf(e) {
@@ -208,7 +208,7 @@
 					return t.enumType.New(t.Default().Enum())
 				}
 				t.valueOf = func(v interface{}) protoreflect.Value {
-					ev := v.(protoreflect.ProtoEnum).ProtoReflect()
+					ev := v.(protoreflect.Enum)
 					return protoreflect.ValueOf(ev.Number())
 				}
 				t.interfaceOf = func(pv protoreflect.Value) interface{} {
diff --git a/types/descriptor/descriptor.pb.go b/types/descriptor/descriptor.pb.go
index 35679c3..3b07d56 100644
--- a/types/descriptor/descriptor.pb.go
+++ b/types/descriptor/descriptor.pb.go
@@ -44,15 +44,10 @@
 	FieldDescriptorProto_TYPE_SINT64   FieldDescriptorProto_Type = 18
 )
 
-type xxx_FieldDescriptorProto_Type FieldDescriptorProto_Type
-
-func (e FieldDescriptorProto_Type) ProtoReflect() protoreflect.Enum {
-	return (xxx_FieldDescriptorProto_Type)(e)
-}
-func (e xxx_FieldDescriptorProto_Type) Type() protoreflect.EnumType {
+func (e FieldDescriptorProto_Type) Type() protoreflect.EnumType {
 	return xxx_Descriptor_ProtoFile_EnumTypes[0]
 }
-func (e xxx_FieldDescriptorProto_Type) Number() protoreflect.EnumNumber {
+func (e FieldDescriptorProto_Type) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -130,15 +125,10 @@
 	FieldDescriptorProto_LABEL_REPEATED FieldDescriptorProto_Label = 3
 )
 
-type xxx_FieldDescriptorProto_Label FieldDescriptorProto_Label
-
-func (e FieldDescriptorProto_Label) ProtoReflect() protoreflect.Enum {
-	return (xxx_FieldDescriptorProto_Label)(e)
-}
-func (e xxx_FieldDescriptorProto_Label) Type() protoreflect.EnumType {
+func (e FieldDescriptorProto_Label) Type() protoreflect.EnumType {
 	return xxx_Descriptor_ProtoFile_EnumTypes[1]
 }
-func (e xxx_FieldDescriptorProto_Label) Number() protoreflect.EnumNumber {
+func (e FieldDescriptorProto_Label) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -187,15 +177,10 @@
 	FileOptions_LITE_RUNTIME FileOptions_OptimizeMode = 3
 )
 
-type xxx_FileOptions_OptimizeMode FileOptions_OptimizeMode
-
-func (e FileOptions_OptimizeMode) ProtoReflect() protoreflect.Enum {
-	return (xxx_FileOptions_OptimizeMode)(e)
-}
-func (e xxx_FileOptions_OptimizeMode) Type() protoreflect.EnumType {
+func (e FileOptions_OptimizeMode) Type() protoreflect.EnumType {
 	return xxx_Descriptor_ProtoFile_EnumTypes[2]
 }
-func (e xxx_FileOptions_OptimizeMode) Number() protoreflect.EnumNumber {
+func (e FileOptions_OptimizeMode) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -243,15 +228,10 @@
 	FieldOptions_STRING_PIECE FieldOptions_CType = 2
 )
 
-type xxx_FieldOptions_CType FieldOptions_CType
-
-func (e FieldOptions_CType) ProtoReflect() protoreflect.Enum {
-	return (xxx_FieldOptions_CType)(e)
-}
-func (e xxx_FieldOptions_CType) Type() protoreflect.EnumType {
+func (e FieldOptions_CType) Type() protoreflect.EnumType {
 	return xxx_Descriptor_ProtoFile_EnumTypes[3]
 }
-func (e xxx_FieldOptions_CType) Number() protoreflect.EnumNumber {
+func (e FieldOptions_CType) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -301,15 +281,10 @@
 	FieldOptions_JS_NUMBER FieldOptions_JSType = 2
 )
 
-type xxx_FieldOptions_JSType FieldOptions_JSType
-
-func (e FieldOptions_JSType) ProtoReflect() protoreflect.Enum {
-	return (xxx_FieldOptions_JSType)(e)
-}
-func (e xxx_FieldOptions_JSType) Type() protoreflect.EnumType {
+func (e FieldOptions_JSType) Type() protoreflect.EnumType {
 	return xxx_Descriptor_ProtoFile_EnumTypes[4]
 }
-func (e xxx_FieldOptions_JSType) Number() protoreflect.EnumNumber {
+func (e FieldOptions_JSType) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -359,15 +334,10 @@
 	MethodOptions_IDEMPOTENT          MethodOptions_IdempotencyLevel = 2
 )
 
-type xxx_MethodOptions_IdempotencyLevel MethodOptions_IdempotencyLevel
-
-func (e MethodOptions_IdempotencyLevel) ProtoReflect() protoreflect.Enum {
-	return (xxx_MethodOptions_IdempotencyLevel)(e)
-}
-func (e xxx_MethodOptions_IdempotencyLevel) Type() protoreflect.EnumType {
+func (e MethodOptions_IdempotencyLevel) Type() protoreflect.EnumType {
 	return xxx_Descriptor_ProtoFile_EnumTypes[5]
 }
-func (e xxx_MethodOptions_IdempotencyLevel) Number() protoreflect.EnumNumber {
+func (e MethodOptions_IdempotencyLevel) Number() protoreflect.EnumNumber {
 	return protoreflect.EnumNumber(e)
 }
 
@@ -3035,37 +3005,37 @@
 var xxx_Descriptor_ProtoFile_EnumTypes = [6]protoreflect.EnumType{
 	prototype.GoEnum(
 		xxx_Descriptor_ProtoFile_EnumDescs[0].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return FieldDescriptorProto_Type(n)
 		},
 	),
 	prototype.GoEnum(
 		xxx_Descriptor_ProtoFile_EnumDescs[1].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return FieldDescriptorProto_Label(n)
 		},
 	),
 	prototype.GoEnum(
 		xxx_Descriptor_ProtoFile_EnumDescs[2].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return FileOptions_OptimizeMode(n)
 		},
 	),
 	prototype.GoEnum(
 		xxx_Descriptor_ProtoFile_EnumDescs[3].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return FieldOptions_CType(n)
 		},
 	),
 	prototype.GoEnum(
 		xxx_Descriptor_ProtoFile_EnumDescs[4].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return FieldOptions_JSType(n)
 		},
 	),
 	prototype.GoEnum(
 		xxx_Descriptor_ProtoFile_EnumDescs[5].Reference(),
-		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.ProtoEnum {
+		func(_ protoreflect.EnumType, n protoreflect.EnumNumber) protoreflect.Enum {
 			return MethodOptions_IdempotencyLevel(n)
 		},
 	),
