// Copyright 2024 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// This proto verifies that we keep the name mangling algorithm (which is
// position dependent) intact in the protoc_gen_go generator. The field names
// and the getter names have to be kept intact over time, both in the OPEN and
// in the HYBRID API. How fields are "mangled" is described in a comment per
// field.

// The order of "evaluation" of fields is important. Fields are evaluated in
// order of appearance, except the oneof union names, that are evaluated after
// their first member. For each field, check if there is a previous field name
// or getter name that clashes with this field or it's getter. In case there is
// a clash, add an _ to the field name and repeat. In the case of oneof's, the
// union will be renamed if it clashes with it's first member, but not if it
// clashes with it's second.

// This scheme is here for backwards compatibility.
// The type of clashes that can be are the following:
// 1 - My field name clashes with their getter name
// 2 - My getter name clashes with their field name

edition = "2023";

package net.proto2.go.testdata.nameclashopaque;

import "google/protobuf/go_features.proto";

option go_package = "google.golang.org/protobuf/cmd/protoc-gen-go/testdata/nameclash/test_name_clash_opaque";

option features.(pb.go).api_level = API_OPAQUE;

message M1 {
  // Old Scheme:
  // initial name in Go     | Clashes with field | type | final name
  // Foo                    | -                  | -    | Foo
  // GetFoo                 | foo                | 1    | GetFoo_
  // GetGetFoo              | -                  | -    | GetGetFoo
  // New Scheme:
  // initial name in Go     | Clashes with field | type | Getter name
  // Foo                    | get_foo            | G    | Get_Foo
  // GetFoo                 | get_get_foo        | G    | Get_GetFoo
  // GetGetFoo              | -                  | -    | GetGetGetFoo
  int32 foo = 1;
  int32 get_foo = 2;
  int32 get_get_foo = 3;
}

message M2 {
  // Old Scheme:
  // initial name in Go     | Clashes with field | type | final name
  // GetGetFoo              | -                  | -    | GetGetFoo
  // GetFoo                 | get_get_foo        | 2    | GetFoo_
  // Foo                    | -                  | -    | Foo
  // New Scheme:
  // initial name in Go     | Clashes with field | type | Getter name
  // Foo                    | get_foo            | G    | Get_Foo
  // GetFoo                 | get_get_foo        | G    | Get_GetFoo
  // GetGetFoo              | -                  | -    | GetGetGetFoo
  int32 get_get_foo = 3;
  int32 get_foo = 2;
  int32 foo = 1;
}

message M3 {
  // Old Scheme:
  // initial name in Go     | Clashes with field | type | final name
  // GetFoo                 | -                  | -    | GetFoo
  // GetGetFoo              | get_foo            | 1    | GetGetFoo_
  // Foo                    | get_foo            | 2    | Foo_
  // New Scheme:
  // initial name in Go     | Clashes with field | type | Getter name
  // Foo                    | get_foo            | G    | Get_Foo
  // GetFoo                 | get_get_foo        | G    | Get_GetFoo
  // GetGetFoo              | -                  | -    | GetGetGetFoo
  int32 get_foo = 2;
  int32 get_get_foo = 3;
  int32 foo = 1;
}

message M4 {
  // Old Scheme:
  // initial name in Go     | Clashes with field | type | final name
  // GetFoo                 | -                  | -    | GetFoo
  // GetGetFoo              | get_foo            | 1    | GetGetFoo_
  //  GetGetGetFoo          | -                  | -    | GetGetGetFoo
  //                        |                    |      |
  // Foo                    | get_foo            | 2    | Foo_
  // New Scheme:
  // initial name in Go     | Clashes with field | type | Getter name
  // Foo                    | get_foo            | G    | Get_Foo
  // GetFoo                 | get_get_foo        | G    | Get_GetFoo
  // GetGetGetFoo           | -                  | -    | GetGetGetGetFoo
  int32 get_foo = 2;
  oneof get_get_foo {
    int32 get_get_get_foo = 3;
  }
  int32 foo = 1;
}

message M5 {
  // Old Scheme:
  // Note evaluation order - get_get_foo before get_get_get_foo
  // initial name in Go     | Clashes with field | type | final name
  // GetFoo                 | -                  | -    | GetFoo
  // GetGetGetFoo           | -                  | -    | GetGetGetFoo
  //  GetGetFoo             | get_foo            | 1    | GetGetFoo_
  //                        |                    |      |
  // Foo                    | get_foo            | 2    | Foo_
  // New Scheme:
  // initial name in Go     | Clashes with field | type | Getter name
  // Foo                    | get_foo            | G    | Get_Foo
  // GetFoo                 | get_get_foo        | G    | Get_GetFoo
  // GetGetFoo              | get_get_get_foo    | G    | Get_GetGetFoo
  int32 get_foo = 2;
  oneof get_get_get_foo {
    int32 get_get_foo = 3;
  }
  int32 foo = 1;
}

message M6 {
  // Note evaluation order - get_get_get_foo before get_get_foo
  // initial name in Go     | Clashes with field | type | final name
  // GetGetFoo              | -                  | -    | GetGetFoo
  //  GetGetGetFoo          | -                  | -    | GetGetGetFoo
  //                        |                    |      |
  // GetFoo                 | get_get_foo        | 2    | GetFoo_
  // Foo                    | -                  | -    | Foo
  // New Scheme:
  // initial name in Go     | Clashes with field | type | Getter name
  // Foo                    | get_foo            | G    | Get_Foo
  // GetFoo                 | get_get_foo        | G    | Get_GetFoo
  // GetGetGetFoo           | -                  | -    | GetGetGetGetFoo
  oneof get_get_foo {
    int32 get_get_get_foo = 3;
  }
  int32 get_foo = 2;
  int32 foo = 1;
}

message M7 {
  // Note evaluation order - bar before get_get_foo, then get_get_get_foo
  // initial name in Go     | Clashes with field | type | final name
  // GetGetFoo              | -                  | -    | GetGetFoo
  //  Bar                   | -                  | -    | Bar
  //  GetFoo                | foo                | 1    | GetFoo_
  //                        |                    |      |
  // Foo                    | -                  | -    | Foo
  // New Scheme:
  // initial name in Go     | Clashes with field | type | Getter name
  // Foo                    | get_foo            | G    | Get_Foo
  // GetFoo                 | get_get_foo        | G    | Get_GetFoo
  // Bar                    | -                  | -    | GetBar
  oneof get_get_foo {
    bool bar = 4;
    int32 get_foo = 3;
  }
  int32 foo = 1;
}

message M8 {
  // Note evaluation order - get_get_foo before get_get_get_foo
  // initial name in Go     | Clashes with field | type | final name
  // GetGetGetFoo           | get_get_foo        | 1    | GetGetGetFoo_
  //  GetGetFoo             | -                  | -    | GetGetFoo
  //                        |                    |      |
  // GetFoo                 | get_get_foo        | 2    | GetFoo_
  // Foo                    | -                  | -    | Foo
  // New Scheme:
  // initial name in Go     | Clashes with field | type | Getter name
  // Foo                    | get_foo            | G    | Get_Foo
  // GetFoo                 | get_get_foo        | G    | Get_GetFoo
  // GetGetFoo              | get_get_get_foo    | G    | Get_GetGetFoo
  oneof get_get_get_foo {
    int32 get_get_foo = 3;
  }
  int32 get_foo = 2;
  int32 foo = 1;
}

message M9 {
  // Note evaluation order - get_get_foo before get_get_get_foo, then get_foo
  // initial name in Go     | Clashes with field | type | final name
  // GetGetGetFoo           | get_get_foo        | 1    | GetGetGetFoo_
  //  GetGetFoo             | -                  | -    | GetGetFoo
  //  GetFoo                | get_get_foo        | 2    | GetFoo_
  //                        |                    |      |
  // Foo                    | -                  | -    | Foo
  // New Scheme:
  // initial name in Go     | Clashes with field | type | Getter name
  // Foo                    | get_foo            | G    | Get_Foo
  // GetFoo                 | get_get_foo        | G    | Get_GetFoo
  // GetGetFoo              | get_get_get_foo    | G    | Get_GetGetFoo
  oneof get_get_get_foo {
    int32 get_get_foo = 3;
    int32 get_foo = 2;
  }
  int32 foo = 1;
}

message M10 {
  // Set Clashes - no concerns with get-mangling as legacy open struct
  // does not have setters except for weak fields:
  // initial name in Go     | Clashes with field | Setter name
  // Foo                    | set_foo            | Set_Foo
  // SetFoo                 | -                  | SetSetFoo
  int32 foo = 1;
  int32 set_foo = 2;
}

message M11 {
  // Set Clashes - no concerns with get-mangling as legacy open struct
  // does not have setters except for weak fields:
  // initial name in Go     | Clashes with field | Setter name
  // Foo                    | set_foo            | Set_Foo
  // SetSetFoo              | -                  | SetSetSetFoo
  int32 foo = 1;
  oneof set_foo {
    int32 set_set_foo = 2;
  }
}

message M12 {
  // Set Clashes - no concerns with get-mangling as legacy open struct
  // does not have setters except for weak fields:
  // initial name in Go     | Clashes with field | Setter name
  // Foo                    | set_foo            | Set_Foo
  // SetFoo                 | set_set_foo        | Set_SetFoo
  int32 foo = 1;
  oneof set_set_foo {
    int32 set_foo = 2;
  }
}

message M13 {
  // Has Clashes - no concerns with get-mangling as legacy open struct
  // does not have hassers except for weak fields:
  // initial name in Go     | Clashes with field | Hasser name
  // Foo                    | has_foo            | Has_Foo
  // HasFoo                 | -                  | HasHasFoo
  int32 foo = 1;
  int32 has_foo = 2;
}

message M14 {
  // Has Clashes - no concerns with get-mangling as legacy open struct
  // does not have hassers except for weak fields:
  // initial name in Go     | Clashes with field | Hasser name
  // Foo                    | has_foo            | Has_Foo
  // HasFoo                 | has_has_foo        | Has_HasFoo
  // HasHasFoo              | -                  | HasHasHasFoo
  int32 foo = 1;
  oneof has_foo {
    int32 has_has_foo = 2;
  }
}

message M15 {
  // Has Clashes - no concerns with get-mangling as legacy open struct
  // does not have hassers except for weak fields:
  // initial name in Go     | Clashes with field | Hasser name
  // Foo                    | has_foo            | Has_Foo
  // HasFoo                 | has_has_foo        | Has_HasFoo
  // HasHasFoo              | -                  | HasHasHasFoo
  int32 foo = 1;
  oneof has_has_foo {
    int32 has_foo = 2;
  }
}

message M16 {
  // Clear Clashes - no concerns with get-mangling as legacy open
  // struct does not have clearers except for weak fields:
  // initial name in Go     | Clashes with field | Clearer name
  // Foo                    | clear_foo            | Clear_Foo
  // ClearFoo               | -                  | ClearClearFoo
  int32 foo = 1;
  int32 clear_foo = 2;
}

message M17 {
  // Clear Clashes - no concerns with get-mangling as legacy open
  // struct does not have clearers except for weak fields:
  // initial name in Go     | Clashes with field | Clearer name
  // Foo                    | clear_foo          | Clear_Foo
  // ClearFoo               | clear_clear_foo    | Clear_ClearFoo
  // ClearClearFoo          | -                  | ClearClearClearFoo
  int32 foo = 1;
  oneof clear_foo {
    int32 clear_clear_foo = 2;
  }
}

message M18 {
  // Clear Clashes - no concerns with get-mangling as legacy open
  // struct does not have clearers except for weak fields:
  // initial name in Go     | Clashes with field | Clearer name
  // Foo                    | clear_foo          | Clear_Foo
  // ClearFoo               | clear_clear_foo    | Clear_ClearFoo
  // ClearClearFoo          | -                  | ClearClearClearFoo
  int32 foo = 1;
  oneof clear_clear_foo {
    int32 clear_foo = 2;
  }
}

message M19 {
  // Which Clashes - no concerns with get-mangling as legacy open
  // struct does not have whichers except for weak fields:
  // initial name in Go     | Clashes with field | Whicher name
  // Foo                    | -                  | -
  // WhichFoo               | -                  | -
  // WhichWhichFoo          | -                  | WhichWhichWhichFoo
  int32 foo = 1;
  oneof which_which_foo {
    int32 which_foo = 2;
  }
}

message M20 {
  // Which Clashes - no concerns with get-mangling as legacy open
  // struct does not have whichers except for weak fields:
  // initial name in Go     | Clashes with field | Whicher name
  // Foo                    | -                  | -
  // WhichFoo               | which_which_foo    | Which_WhichFoo
  // WhichWhichFoo          | -                  | -
  int32 foo = 1;
  oneof which_foo {
    int32 which_which_foo = 2;
  }
}

message M21 {
  string _foo = 1;
  string X_foo = 2;
  string get_x_foo = 3;
}
