goprotobuf: Correctly generate extension names for .proto files that don't declare a package.
R=r
CC=golang-dev
http://codereview.appspot.com/5653063
diff --git a/compiler/generator/generator.go b/compiler/generator/generator.go
index 4b08cd1..988642c 100644
--- a/compiler/generator/generator.go
+++ b/compiler/generator/generator.go
@@ -1265,12 +1265,19 @@
typeName = typeName[:len(typeName)-1]
}
+ // For text formatting, the package must be exactly what the .proto file declares,
+ // ignoring overrides such as the go_package option, and with no dot/underscore mapping.
+ extName := strings.Join(typeName, ".")
+ if g.file.Package != nil {
+ extName = *g.file.Package + "." + extName
+ }
+
g.P("var ", ccTypeName, " = &", g.ProtoPkg, ".ExtensionDesc{")
g.In()
g.P("ExtendedType: (", extendedType, ")(nil),")
g.P("ExtensionType: (", fieldType, ")(nil),")
g.P("Field: ", field.Number, ",")
- g.P(`Name: "`, g.packageName, ".", strings.Join(typeName, "."), `",`)
+ g.P(`Name: "`, extName, `",`)
g.P("Tag: ", tag, ",")
g.Out()
diff --git a/proto/extensions.go b/proto/extensions.go
index 9f840fa..70297c2 100644
--- a/proto/extensions.go
+++ b/proto/extensions.go
@@ -62,7 +62,7 @@
ExtendedType interface{} // nil pointer to the type that is being extended
ExtensionType interface{} // nil pointer to the extension type
Field int32 // field number
- Name string // fully-qualified name of extension
+ Name string // fully-qualified name of extension, for text formatting
Tag string // protobuf tag style
}