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 // Author: jonp@google.com (Jon Perlow) 10 // Based on original Protocol Buffers design by 11 // Sanjay Ghemawat, Jeff Dean, and others. 12 13 #ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_STRING_FIELD_LITE_H__ 14 #define GOOGLE_PROTOBUF_COMPILER_JAVA_STRING_FIELD_LITE_H__ 15 16 #include <cstdint> 17 #include <string> 18 #include <vector> 19 20 #include "absl/container/flat_hash_map.h" 21 #include "absl/strings/string_view.h" 22 #include "google/protobuf/compiler/java/lite/field_generator.h" 23 #include "google/protobuf/descriptor.h" 24 25 namespace google { 26 namespace protobuf { 27 namespace compiler { 28 namespace java { 29 class Context; // context.h 30 class ClassNameResolver; // name_resolver.h 31 } // namespace java 32 } // namespace compiler 33 } // namespace protobuf 34 } // namespace google 35 36 namespace google { 37 namespace protobuf { 38 namespace compiler { 39 namespace java { 40 41 class ImmutableStringFieldLiteGenerator : public ImmutableFieldLiteGenerator { 42 public: 43 explicit ImmutableStringFieldLiteGenerator(const FieldDescriptor* descriptor, 44 int messageBitIndex, 45 Context* context); 46 ImmutableStringFieldLiteGenerator(const ImmutableStringFieldLiteGenerator&) = 47 delete; 48 ImmutableStringFieldLiteGenerator& operator=( 49 const ImmutableStringFieldLiteGenerator&) = delete; 50 ~ImmutableStringFieldLiteGenerator() override; 51 52 // implements ImmutableFieldLiteGenerator 53 // ------------------------------------ 54 int GetNumBitsForMessage() const override; 55 void GenerateInterfaceMembers(io::Printer* printer) const override; 56 void GenerateMembers(io::Printer* printer) const override; 57 void GenerateBuilderMembers(io::Printer* printer) const override; 58 void GenerateInitializationCode(io::Printer* printer) const override; 59 void GenerateFieldInfo(io::Printer* printer, 60 std::vector<uint16_t>* output) const override; 61 void GenerateKotlinDslMembers(io::Printer* printer) const override; 62 63 std::string GetBoxedType() const override; 64 65 protected: 66 const FieldDescriptor* descriptor_; 67 absl::flat_hash_map<absl::string_view, std::string> variables_; 68 const int messageBitIndex_; 69 ClassNameResolver* name_resolver_; 70 Context* context_; 71 }; 72 73 class ImmutableStringOneofFieldLiteGenerator 74 : public ImmutableStringFieldLiteGenerator { 75 public: 76 ImmutableStringOneofFieldLiteGenerator(const FieldDescriptor* descriptor, 77 int messageBitIndex, Context* context); 78 ImmutableStringOneofFieldLiteGenerator( 79 const ImmutableStringOneofFieldLiteGenerator&) = delete; 80 ImmutableStringOneofFieldLiteGenerator& operator=( 81 const ImmutableStringOneofFieldLiteGenerator&) = delete; 82 ~ImmutableStringOneofFieldLiteGenerator() override; 83 84 private: 85 void GenerateMembers(io::Printer* printer) const override; 86 void GenerateBuilderMembers(io::Printer* printer) const override; 87 void GenerateFieldInfo(io::Printer* printer, 88 std::vector<uint16_t>* output) const override; 89 }; 90 91 class RepeatedImmutableStringFieldLiteGenerator 92 : public ImmutableFieldLiteGenerator { 93 public: 94 explicit RepeatedImmutableStringFieldLiteGenerator( 95 const FieldDescriptor* descriptor, int messageBitIndex, Context* context); 96 RepeatedImmutableStringFieldLiteGenerator( 97 const RepeatedImmutableStringFieldLiteGenerator&) = delete; 98 RepeatedImmutableStringFieldLiteGenerator& operator=( 99 const RepeatedImmutableStringFieldLiteGenerator&) = delete; 100 ~RepeatedImmutableStringFieldLiteGenerator() override; 101 102 // implements ImmutableFieldLiteGenerator ------------------------------------ 103 int GetNumBitsForMessage() const override; 104 void GenerateInterfaceMembers(io::Printer* printer) const override; 105 void GenerateMembers(io::Printer* printer) const override; 106 void GenerateBuilderMembers(io::Printer* printer) const override; 107 void GenerateInitializationCode(io::Printer* printer) const override; 108 void GenerateFieldInfo(io::Printer* printer, 109 std::vector<uint16_t>* output) const override; 110 void GenerateKotlinDslMembers(io::Printer* printer) const override; 111 112 std::string GetBoxedType() const override; 113 114 private: 115 const FieldDescriptor* descriptor_; 116 absl::flat_hash_map<absl::string_view, std::string> variables_; 117 Context* context_; 118 ClassNameResolver* name_resolver_; 119 }; 120 121 } // namespace java 122 } // namespace compiler 123 } // namespace protobuf 124 } // namespace google 125 126 #endif // GOOGLE_PROTOBUF_COMPILER_JAVA_STRING_FIELD_LITE_H__ 127