reflect/protoregistry: provide more informative errors for conflicts
The v2 implementation strictly enforces that there are no conflicts at
all in the protobuf namespace unlike the prior v1 implementation.
This change is almost certainly going to cause loud failures for users
that were unknowingly tolerating registration conflicts.
We modify internal/filedesc to be able to record the Go package path
that the file descriptor is declared within. This information is used
by reflect/protoregistry to print both the previous Go package that
registered some declaration, and current Go package that is attempting
to register some declaration.
Change-Id: Ib5eb21c1c98495afc51aa08bd4404bd9d64b5b57
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/186177
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/internal/testprotos/benchmarks/benchmarks.pb.go b/internal/testprotos/benchmarks/benchmarks.pb.go
index 6328f64..220ab24 100644
--- a/internal/testprotos/benchmarks/benchmarks.pb.go
+++ b/internal/testprotos/benchmarks/benchmarks.pb.go
@@ -6,6 +6,7 @@
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
sync "sync"
)
@@ -158,8 +159,10 @@
}
}
}
+ type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_benchmarks_proto_rawDesc,
NumEnums: 0,
NumMessages: 1,
diff --git a/internal/testprotos/benchmarks/datasets/google_message1/proto2/benchmark_message1_proto2.pb.go b/internal/testprotos/benchmarks/datasets/google_message1/proto2/benchmark_message1_proto2.pb.go
index 8741be6..c470106 100644
--- a/internal/testprotos/benchmarks/datasets/google_message1/proto2/benchmark_message1_proto2.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message1/proto2/benchmark_message1_proto2.pb.go
@@ -6,6 +6,7 @@
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
sync "sync"
)
@@ -798,8 +799,10 @@
}
}
}
+ type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_datasets_google_message1_proto2_benchmark_message1_proto2_proto_rawDesc,
NumEnums: 0,
NumMessages: 2,
diff --git a/internal/testprotos/benchmarks/datasets/google_message1/proto3/benchmark_message1_proto3.pb.go b/internal/testprotos/benchmarks/datasets/google_message1/proto3/benchmark_message1_proto3.pb.go
index 8957480..440a0a3 100644
--- a/internal/testprotos/benchmarks/datasets/google_message1/proto3/benchmark_message1_proto3.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message1/proto3/benchmark_message1_proto3.pb.go
@@ -6,6 +6,7 @@
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
sync "sync"
)
@@ -753,8 +754,10 @@
}
}
}
+ type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_datasets_google_message1_proto3_benchmark_message1_proto3_proto_rawDesc,
NumEnums: 0,
NumMessages: 2,
diff --git a/internal/testprotos/benchmarks/datasets/google_message2/benchmark_message2.pb.go b/internal/testprotos/benchmarks/datasets/google_message2/benchmark_message2.pb.go
index fe056e8..ececca4 100644
--- a/internal/testprotos/benchmarks/datasets/google_message2/benchmark_message2.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message2/benchmark_message2.pb.go
@@ -6,6 +6,7 @@
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
sync "sync"
)
@@ -790,8 +791,10 @@
}
}
}
+ type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_datasets_google_message2_benchmark_message2_proto_rawDesc,
NumEnums: 0,
NumMessages: 3,
diff --git a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3.pb.go b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3.pb.go
index 17d473b..54c2c45 100644
--- a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3.pb.go
@@ -7,6 +7,7 @@
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoiface "google.golang.org/protobuf/runtime/protoiface"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
sync "sync"
)
@@ -6569,8 +6570,10 @@
}
}
}
+ type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_datasets_google_message3_benchmark_message3_proto_rawDesc,
NumEnums: 0,
NumMessages: 33,
diff --git a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_1.pb.go b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_1.pb.go
index f4df4ca..edf87f5 100644
--- a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_1.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_1.pb.go
@@ -7,6 +7,7 @@
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoiface "google.golang.org/protobuf/runtime/protoiface"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
sync "sync"
)
@@ -8822,8 +8823,10 @@
}
}
}
+ type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_datasets_google_message3_benchmark_message3_1_proto_rawDesc,
NumEnums: 0,
NumMessages: 59,
diff --git a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_2.pb.go b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_2.pb.go
index 1aab9e8..abdf3d1 100644
--- a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_2.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_2.pb.go
@@ -7,6 +7,7 @@
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoiface "google.golang.org/protobuf/runtime/protoiface"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
sync "sync"
)
@@ -6107,8 +6108,10 @@
}
}
}
+ type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_datasets_google_message3_benchmark_message3_2_proto_rawDesc,
NumEnums: 0,
NumMessages: 34,
diff --git a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_3.pb.go b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_3.pb.go
index 5f8bb62..9de4c35 100644
--- a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_3.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_3.pb.go
@@ -6,6 +6,7 @@
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
sync "sync"
)
@@ -5789,8 +5790,10 @@
}
}
}
+ type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_datasets_google_message3_benchmark_message3_3_proto_rawDesc,
NumEnums: 0,
NumMessages: 37,
diff --git a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_4.pb.go b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_4.pb.go
index aab4648..652affd 100644
--- a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_4.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_4.pb.go
@@ -7,6 +7,7 @@
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoiface "google.golang.org/protobuf/runtime/protoiface"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
sync "sync"
)
@@ -6349,8 +6350,10 @@
}
}
}
+ type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_datasets_google_message3_benchmark_message3_4_proto_rawDesc,
NumEnums: 0,
NumMessages: 54,
diff --git a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_5.pb.go b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_5.pb.go
index 9cf0fa1..484eb6e 100644
--- a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_5.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_5.pb.go
@@ -7,6 +7,7 @@
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoiface "google.golang.org/protobuf/runtime/protoiface"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
sync "sync"
)
@@ -5809,8 +5810,10 @@
}
}
}
+ type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_datasets_google_message3_benchmark_message3_5_proto_rawDesc,
NumEnums: 0,
NumMessages: 49,
diff --git a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_6.pb.go b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_6.pb.go
index 27aa102..7c2bd28 100644
--- a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_6.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_6.pb.go
@@ -7,6 +7,7 @@
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoiface "google.golang.org/protobuf/runtime/protoiface"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
sync "sync"
)
@@ -5425,8 +5426,10 @@
}
}
}
+ type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_datasets_google_message3_benchmark_message3_6_proto_rawDesc,
NumEnums: 0,
NumMessages: 42,
diff --git a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_7.pb.go b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_7.pb.go
index e326424..f2c7189 100644
--- a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_7.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_7.pb.go
@@ -6,6 +6,7 @@
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
sync "sync"
)
@@ -726,8 +727,10 @@
}
}
}
+ type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_datasets_google_message3_benchmark_message3_7_proto_rawDesc,
NumEnums: 0,
NumMessages: 10,
diff --git a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_8.pb.go b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_8.pb.go
index 6840a38..2205d99 100644
--- a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_8.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_8.pb.go
@@ -7,6 +7,7 @@
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
prototype "google.golang.org/protobuf/reflect/prototype"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
sync "sync"
)
@@ -10435,8 +10436,10 @@
if File_datasets_google_message3_benchmark_message3_8_proto != nil {
return
}
+ type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_datasets_google_message3_benchmark_message3_8_proto_rawDesc,
NumEnums: 59,
NumMessages: 0,
diff --git a/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4.pb.go b/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4.pb.go
index 020d2fd..a1d6e83 100644
--- a/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4.pb.go
@@ -7,6 +7,7 @@
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoiface "google.golang.org/protobuf/runtime/protoiface"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
sync "sync"
)
@@ -5888,8 +5889,10 @@
}
}
}
+ type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_datasets_google_message4_benchmark_message4_proto_rawDesc,
NumEnums: 0,
NumMessages: 45,
diff --git a/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4_1.pb.go b/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4_1.pb.go
index a6c3064..a0395e9 100644
--- a/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4_1.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4_1.pb.go
@@ -7,6 +7,7 @@
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoiface "google.golang.org/protobuf/runtime/protoiface"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
sync "sync"
)
@@ -5991,8 +5992,10 @@
}
}
}
+ type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_datasets_google_message4_benchmark_message4_1_proto_rawDesc,
NumEnums: 0,
NumMessages: 44,
diff --git a/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4_2.pb.go b/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4_2.pb.go
index ba2380f..18995dc 100644
--- a/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4_2.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4_2.pb.go
@@ -6,6 +6,7 @@
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
sync "sync"
)
@@ -3725,8 +3726,10 @@
}
}
}
+ type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_datasets_google_message4_benchmark_message4_2_proto_rawDesc,
NumEnums: 0,
NumMessages: 35,
diff --git a/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4_3.pb.go b/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4_3.pb.go
index 263e9b4..36cc75a 100644
--- a/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4_3.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message4/benchmark_message4_3.pb.go
@@ -7,6 +7,7 @@
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
prototype "google.golang.org/protobuf/reflect/prototype"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
sync "sync"
)
@@ -4782,8 +4783,10 @@
if File_datasets_google_message4_benchmark_message4_3_proto != nil {
return
}
+ type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_datasets_google_message4_benchmark_message4_3_proto_rawDesc,
NumEnums: 42,
NumMessages: 0,