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
 }