Просмотр исходного кода

goprotobuf: Hack for proto2 message set text formatting/parsing.

R=r
CC=golang-dev
http://codereview.appspot.com/5532096
David Symonds 14 лет назад
Родитель
Сommit
20c736669e
2 измененных файлов с 13 добавлено и 3 удалено
  1. 10 1
      compiler/generator/generator.go
  2. 3 2
      proto/text_parser_test.go

+ 10 - 1
compiler/generator/generator.go

@@ -1256,12 +1256,21 @@ func (g *Generator) generateExtension(ext *ExtensionDescriptor) {
 		g.RecordTypeUse(*n)
 	}
 
+	typeName := ext.TypeName()
+
+	// Special case for proto2 message sets: If this extension is extending
+	// proto2_bridge.MessageSet, and its final name component is "message_set_extension",
+	// then drop that last component.
+	if extendedType == "*proto2_bridge.MessageSet" && typeName[len(typeName)-1] == "message_set_extension" {
+		typeName = typeName[:len(typeName)-1]
+	}
+
 	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(ext.TypeName(), "."), `",`)
+	g.P(`Name: "`, g.packageName, ".", strings.Join(typeName, "."), `",`)
 	g.P("Tag: ", tag, ",")
 
 	g.Out()

+ 3 - 2
proto/text_parser_test.go

@@ -32,10 +32,11 @@
 package proto_test
 
 import (
-	. "./testdata/_obj/test_proto"
-	. "code.google.com/p/goprotobuf/proto"
 	"reflect"
 	"testing"
+
+	. "./testdata/_obj/test_proto"
+	. "code.google.com/p/goprotobuf/proto"
 )
 
 type UnmarshalTextTest struct {