Przeglądaj źródła

protoc-gen-go: generate deprecation comments for oneof fields

Change-Id: Ia16dd78f37407be7fef6127a751bfd95015b35e4
Cherry-Pick: github.com/golang/protobuf@5e0eda4b6dc0f7e3c4ed8b94d87f7f7186b20c9c
Original-Author: Damien Neil <dneil@google.com>
Reviewed-on: https://go-review.googlesource.com/c/151428
Reviewed-by: Damien Neil <dneil@google.com>
Joe Tsai 7 lat temu
rodzic
commit
b4468deb98
1 zmienionych plików z 10 dodań i 5 usunięć
  1. 10 5
      protoc-gen-go/generator/generator.go

+ 10 - 5
protoc-gen-go/generator/generator.go

@@ -1886,6 +1886,7 @@ type oneofSubField struct {
 	fieldNumber   int                                  // Actual field number, as defined in proto, e.g. 12
 	fieldNumber   int                                  // Actual field number, as defined in proto, e.g. 12
 	getterDef     string                               // Default for getters, e.g. "nil", `""` or "Default_MessageType_FieldName"
 	getterDef     string                               // Default for getters, e.g. "nil", `""` or "Default_MessageType_FieldName"
 	protoDef      string                               // Default value as defined in the proto file, e.g "yoshi" or "5"
 	protoDef      string                               // Default value as defined in the proto file, e.g "yoshi" or "5"
+	deprecated    string                               // Deprecation comment, if any.
 }
 }
 
 
 // wireTypeName returns a textual wire type, needed for oneof sub fields in generated code.
 // wireTypeName returns a textual wire type, needed for oneof sub fields in generated code.
@@ -2155,6 +2156,9 @@ func (f *oneofField) getter(g *Generator, mc *msgCtx) {
 	g.P()
 	g.P()
 	// Getters for each oneof
 	// Getters for each oneof
 	for _, sf := range f.subFields {
 	for _, sf := range f.subFields {
+		if sf.deprecated != "" {
+			g.P(sf.deprecated)
+		}
 		g.P("func (m *", mc.goName, ") ", Annotate(mc.message.file, sf.fullPath, sf.getterName), "() "+sf.goType+" {")
 		g.P("func (m *", mc.goName, ") ", Annotate(mc.message.file, sf.fullPath, sf.getterName), "() "+sf.goType+" {")
 		g.P("if x, ok := m.", f.getterName, "().(*", sf.oneofTypeName, "); ok {")
 		g.P("if x, ok := m.", f.getterName, "().(*", sf.oneofTypeName, "); ok {")
 		g.P("return x.", sf.goName)
 		g.P("return x.", sf.goName)
@@ -2584,6 +2588,11 @@ func (g *Generator) generateMessage(message *Descriptor) {
 			}
 			}
 		}
 		}
 
 
+		fieldDeprecated := ""
+		if field.GetOptions().GetDeprecated() {
+			fieldDeprecated = deprecationComment
+		}
+
 		dvalue := g.getterDefault(field, goTypeName)
 		dvalue := g.getterDefault(field, goTypeName)
 		if oneof {
 		if oneof {
 			tname := goTypeName + "_" + fieldName
 			tname := goTypeName + "_" + fieldName
@@ -2627,17 +2636,13 @@ func (g *Generator) generateMessage(message *Descriptor) {
 				getterDef:     dvalue,
 				getterDef:     dvalue,
 				protoDef:      field.GetDefaultValue(),
 				protoDef:      field.GetDefaultValue(),
 				oneofTypeName: tname,
 				oneofTypeName: tname,
+				deprecated:    fieldDeprecated,
 			}
 			}
 			oneofField.subFields = append(oneofField.subFields, &sf)
 			oneofField.subFields = append(oneofField.subFields, &sf)
 			g.RecordTypeUse(field.GetTypeName())
 			g.RecordTypeUse(field.GetTypeName())
 			continue
 			continue
 		}
 		}
 
 
-		fieldDeprecated := ""
-		if field.GetOptions().GetDeprecated() {
-			fieldDeprecated = deprecationComment
-		}
-
 		fieldFullPath := fmt.Sprintf("%s,%d,%d", message.path, messageFieldPath, i)
 		fieldFullPath := fmt.Sprintf("%s,%d,%d", message.path, messageFieldPath, i)
 		c, ok := g.makeComments(fieldFullPath)
 		c, ok := g.makeComments(fieldFullPath)
 		if ok {
 		if ok {