// 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.nameclashopaque3;

import "google/protobuf/go_features.proto";

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

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

message M0 {
  int32 i1 = 1;
}

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
  M0 foo = 1;
  M0 get_foo = 2;
  M0 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
  M0 get_get_foo = 3;
  M0 get_foo = 2;
  M0 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
  M0 get_foo = 2;
  M0 get_get_foo = 3;
  M0 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
  M0 get_foo = 2;
  oneof get_get_foo {
    int32 get_get_get_foo = 3;
  }
  M0 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
  M0 get_foo = 2;
  oneof get_get_get_foo {
    int32 get_get_foo = 3;
  }
  M0 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;
  }
  M0 get_foo = 2;
  M0 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;
  }
  M0 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;
  }
  M0 get_foo = 2;
  M0 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;
  }
  M0 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
  M0 foo = 1;
  M0 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
  M0 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
  M0 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
  M0 foo = 1;
  M0 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
  M0 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
  M0 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
  M0 foo = 1;
  M0 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
  M0 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
  M0 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
  M0 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          | -                  | -
  M0 foo = 1;
  oneof which_foo {
    int32 which_which_foo = 2;
  }
}
