1 // Protocol Buffers - Google's data interchange format 2 // Copyright 2008 Google Inc. All rights reserved. 3 // 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file or at 6 // https://developers.google.com/open-source/licenses/bsd 7 8 // Author: kenton@google.com (Kenton Varda) 9 // Based on original Protocol Buffers design by 10 // Sanjay Ghemawat, Jeff Dean, and others. 11 12 #ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_ENUM_FIELD_LITE_H__ 13 #define GOOGLE_PROTOBUF_COMPILER_JAVA_ENUM_FIELD_LITE_H__ 14 15 #include <cstdint> 16 #include <string> 17 18 #include "absl/container/flat_hash_map.h" 19 #include "google/protobuf/compiler/java/lite/field_generator.h" 20 #include "google/protobuf/descriptor.h" 21 22 namespace google { 23 namespace protobuf { 24 namespace compiler { 25 namespace java { 26 class Context; // context.h 27 class ClassNameResolver; // name_resolver.h 28 } // namespace java 29 } // namespace compiler 30 } // namespace protobuf 31 } // namespace google 32 33 namespace google { 34 namespace protobuf { 35 namespace compiler { 36 namespace java { 37 38 class ImmutableEnumFieldLiteGenerator : public ImmutableFieldLiteGenerator { 39 public: 40 explicit ImmutableEnumFieldLiteGenerator(const FieldDescriptor* descriptor, 41 int messageBitIndex, 42 Context* context); 43 ImmutableEnumFieldLiteGenerator(const ImmutableEnumFieldLiteGenerator&) = 44 delete; 45 ImmutableEnumFieldLiteGenerator& operator=( 46 const ImmutableEnumFieldLiteGenerator&) = delete; 47 ~ImmutableEnumFieldLiteGenerator() override; 48 49 // implements ImmutableFieldLiteGenerator 50 // ------------------------------------ 51 int GetNumBitsForMessage() const override; 52 void GenerateInterfaceMembers(io::Printer* printer) const override; 53 void GenerateMembers(io::Printer* printer) const override; 54 void GenerateBuilderMembers(io::Printer* printer) const override; 55 void GenerateInitializationCode(io::Printer* printer) const override; 56 void GenerateFieldInfo(io::Printer* printer, 57 std::vector<uint16_t>* output) const override; 58 void GenerateKotlinDslMembers(io::Printer* printer) const override; 59 60 std::string GetBoxedType() const override; 61 62 protected: 63 const FieldDescriptor* descriptor_; 64 absl::flat_hash_map<absl::string_view, std::string> variables_; 65 const int messageBitIndex_; 66 Context* context_; 67 ClassNameResolver* name_resolver_; 68 }; 69 70 class ImmutableEnumOneofFieldLiteGenerator 71 : public ImmutableEnumFieldLiteGenerator { 72 public: 73 ImmutableEnumOneofFieldLiteGenerator(const FieldDescriptor* descriptor, 74 int messageBitIndex, Context* context); 75 ImmutableEnumOneofFieldLiteGenerator( 76 const ImmutableEnumOneofFieldLiteGenerator&) = delete; 77 ImmutableEnumOneofFieldLiteGenerator& operator=( 78 const ImmutableEnumOneofFieldLiteGenerator&) = delete; 79 ~ImmutableEnumOneofFieldLiteGenerator() override; 80 81 void GenerateMembers(io::Printer* printer) const override; 82 void GenerateBuilderMembers(io::Printer* printer) const override; 83 void GenerateFieldInfo(io::Printer* printer, 84 std::vector<uint16_t>* output) const override; 85 }; 86 87 class RepeatedImmutableEnumFieldLiteGenerator 88 : public ImmutableFieldLiteGenerator { 89 public: 90 explicit RepeatedImmutableEnumFieldLiteGenerator( 91 const FieldDescriptor* descriptor, int messageBitIndex, Context* context); 92 RepeatedImmutableEnumFieldLiteGenerator( 93 const RepeatedImmutableEnumFieldLiteGenerator&) = delete; 94 RepeatedImmutableEnumFieldLiteGenerator& operator=( 95 const RepeatedImmutableEnumFieldLiteGenerator&) = delete; 96 ~RepeatedImmutableEnumFieldLiteGenerator() override; 97 98 // implements ImmutableFieldLiteGenerator ------------------------------------ 99 int GetNumBitsForMessage() const override; 100 void GenerateInterfaceMembers(io::Printer* printer) const override; 101 void GenerateMembers(io::Printer* printer) const override; 102 void GenerateBuilderMembers(io::Printer* printer) const override; 103 void GenerateInitializationCode(io::Printer* printer) const override; 104 void GenerateFieldInfo(io::Printer* printer, 105 std::vector<uint16_t>* output) const override; 106 void GenerateKotlinDslMembers(io::Printer* printer) const override; 107 108 std::string GetBoxedType() const override; 109 110 private: 111 const FieldDescriptor* descriptor_; 112 absl::flat_hash_map<absl::string_view, std::string> variables_; 113 Context* context_; 114 ClassNameResolver* name_resolver_; 115 }; 116 117 } // namespace java 118 } // namespace compiler 119 } // namespace protobuf 120 } // namespace google 121 122 #endif // GOOGLE_PROTOBUF_COMPILER_JAVA_ENUM_FIELD_LITE_H__ 123