goprotobuf: push out internal changes.
- group text parsing and formatting
- foreign extension types
R=adg
CC=golang-dev
http://codereview.appspot.com/4437079
diff --git a/compiler/generator/generator.go b/compiler/generator/generator.go
index 4d0063d..2d93658 100644
--- a/compiler/generator/generator.go
+++ b/compiler/generator/generator.go
@@ -49,7 +49,7 @@
"strings"
"goprotobuf.googlecode.com/hg/proto"
- plugin "goprotobuf.googlecode.com/hg/compiler/plugin"
+ plugin "goprotobuf.googlecode.com/hg/compiler/plugin"
descriptor "goprotobuf.googlecode.com/hg/compiler/descriptor"
)
@@ -890,7 +890,17 @@
packed = ",packed"
}
name := proto.GetString(field.Name)
- if name == CamelCase(name) {
+ if *field.Type == descriptor.FieldDescriptorProto_TYPE_GROUP {
+ // We must use the type name for groups instead of
+ // the field name to preserve capitalization.
+ // type_name in FieldDescriptorProto is fully-qualified,
+ // but we only want the local part.
+ name = *field.TypeName
+ if i := strings.LastIndex(name, "."); i >= 0 {
+ name = name[i+1:]
+ }
+ name = ",name=" + name
+ } else if name == CamelCase(name) {
name = ""
} else {
name = ",name=" + name
@@ -1140,6 +1150,10 @@
fieldType, wireType := g.GoType(ext.parent, field)
tag := g.goTag(field, wireType)
g.RecordTypeUse(*ext.Extendee)
+ if n := ext.FieldDescriptorProto.TypeName; n != nil {
+ // foreign extension type
+ g.RecordTypeUse(*n)
+ }
g.P("var ", ccTypeName, " = &", g.ProtoPkg, ".ExtensionDesc{")
g.In()