Add E_ prefixes to *all* extension descriptors to avoid namespace collisions.
R=r
http://codereview.appspot.com/879046
diff --git a/compiler/main.go b/compiler/main.go
index 5864cde..c8aaa45 100644
--- a/compiler/main.go
+++ b/compiler/main.go
@@ -200,8 +200,8 @@
func (e *ExtensionDescriptor) typeName() (s []string) {
name := proto.GetString(e.Name)
if e.parent == nil {
- s = make([]string, 2)
- s[0] = "E" // top-level extension namespace
+ // top-level extension
+ s = make([]string, 1)
} else {
pname := e.parent.typeName()
s = make([]string, len(pname)+1)
@@ -908,11 +908,11 @@
func (g *Generator) GenerateExtension(ext *ExtensionDescriptor) {
// The full type name
typeName := ext.typeName()
- // Each scope of the extension is individually CamelCased, and all are joined with "_".
+ // Each scope of the extension is individually CamelCased, and all are joined with "_" with a "E_" prefix.
for i, s := range typeName {
typeName[i] = CamelCase(s)
}
- ccTypeName := strings.Join(typeName, "_")
+ ccTypeName := "E_" + strings.Join(typeName, "_")
extendedType := "*" + g.TypeName(g.objectNamed(*ext.Extendee))
field := ext.FieldDescriptorProto
diff --git a/compiler/testdata/extension_test.go b/compiler/testdata/extension_test.go
index 1ddb229..6ff10ca 100644
--- a/compiler/testdata/extension_test.go
+++ b/compiler/testdata/extension_test.go
@@ -47,8 +47,7 @@
// Use extension within scope of another type.
vol := proto.Uint32(11)
- t.Logf("bm: %T, user.LoudMessage_Volume: %T", bm, user.LoudMessage_Volume)
- err := proto.SetExtension(bm, user.LoudMessage_Volume, vol)
+ err := proto.SetExtension(bm, user.E_LoudMessage_Volume, vol)
if err != nil {
t.Fatal("Failed setting extension:", err)
}
@@ -60,18 +59,18 @@
if err := proto.Unmarshal(buf, bm_new); err != nil {
t.Fatal("Failed decoding message with extension:", err)
}
- if !proto.HasExtension(bm_new, user.LoudMessage_Volume) {
+ if !proto.HasExtension(bm_new, user.E_LoudMessage_Volume) {
t.Fatal("Decoded message didn't contain extension.")
}
- vol_out, err := proto.GetExtension(bm_new, user.LoudMessage_Volume)
+ vol_out, err := proto.GetExtension(bm_new, user.E_LoudMessage_Volume)
if err != nil {
t.Fatal("Failed getting extension:", err)
}
if v := vol_out.(*uint32); *v != *vol {
t.Errorf("vol_out = %v, expected %v", *v, *vol)
}
- proto.ClearExtension(bm_new, user.LoudMessage_Volume)
- if proto.HasExtension(bm_new, user.LoudMessage_Volume) {
+ proto.ClearExtension(bm_new, user.E_LoudMessage_Volume)
+ if proto.HasExtension(bm_new, user.E_LoudMessage_Volume) {
t.Fatal("Failed clearing extension.")
}
}
@@ -85,7 +84,7 @@
Name: proto.String("Dave"),
Rank: proto.String("Major"),
}
- err := proto.SetExtension(bm, user.LoginMessage_UserMessage, um)
+ err := proto.SetExtension(bm, user.E_LoginMessage_UserMessage, um)
if err != nil {
t.Fatal("Failed setting extension:", err)
}
@@ -97,10 +96,10 @@
if err := proto.Unmarshal(buf, bm_new); err != nil {
t.Fatal("Failed decoding message with extension:", err)
}
- if !proto.HasExtension(bm_new, user.LoginMessage_UserMessage) {
+ if !proto.HasExtension(bm_new, user.E_LoginMessage_UserMessage) {
t.Fatal("Decoded message didn't contain extension.")
}
- um_out, err := proto.GetExtension(bm_new, user.LoginMessage_UserMessage)
+ um_out, err := proto.GetExtension(bm_new, user.E_LoginMessage_UserMessage)
if err != nil {
t.Fatal("Failed getting extension:", err)
}
@@ -110,8 +109,8 @@
if r := um_out.(*user.UserMessage).Rank; *r != *um.Rank {
t.Errorf("um_out.Rank = %q, expected %q", *r, *um.Rank)
}
- proto.ClearExtension(bm_new, user.LoginMessage_UserMessage)
- if proto.HasExtension(bm_new, user.LoginMessage_UserMessage) {
+ proto.ClearExtension(bm_new, user.E_LoginMessage_UserMessage)
+ if proto.HasExtension(bm_new, user.E_LoginMessage_UserMessage) {
t.Fatal("Failed clearing extension.")
}
}
diff --git a/compiler/testdata/test.pb.go.golden b/compiler/testdata/test.pb.go.golden
index 6807d20..d801efa 100644
--- a/compiler/testdata/test.pb.go.golden
+++ b/compiler/testdata/test.pb.go.golden
@@ -131,7 +131,7 @@
return new(ReplyExtensions)
}
-var ReplyExtensions_Time = &proto.ExtensionDesc{
+var E_ReplyExtensions_Time = &proto.ExtensionDesc{
ExtendedType: (*Reply)(nil),
ExtensionType: (*float64)(nil),
Field: 101,