| // Protocol Buffers - Google's data interchange format |
| // Copyright 2023 Google LLC. All rights reserved. |
| // |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file or at |
| // https://developers.google.com/open-source/licenses/bsd |
| |
| // LINT: LEGACY_NAMES |
| |
| // The purpose of this file is to be hostile on field/message/enum naming and |
| // ensure that it works (e.g. collisions between names and language keywords, |
| // collisions between two different field's accessor's names). |
| |
| syntax = "proto2"; |
| |
| // Note: Ideally this test could be 'package type.if.else.true.false' |
| // which would work in Rust but would break the C++ codegen. |
| |
| package type.type; |
| |
| message Self { |
| optional int32 for = 1; |
| optional Self self = 2; |
| optional bool true = 3; |
| optional string false = 4; |
| } |
| |
| message Pub { |
| enum Self { |
| enum = 0; |
| } |
| } |
| |
| message enum {} |
| |
| message Ref { |
| oneof self { |
| .type.type.Pub.Self const = 3; |
| } |
| } |
| |
| // A message where the accessors would collide that should still work. Note that |
| // not all collisions problems are avoided, not least because C++ Proto does not |
| // avoid all possible collisions (eg a field `x` and `clear_x` will often not |
| // compile on C++). |
| message AccessorsCollide { |
| message X {} |
| message SetX {} |
| optional SetX set_x = 2; |
| optional X x = 3; |
| oneof o { |
| bool x_mut = 5; |
| } |
| } |