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_H__ 14 #define GOOGLE_PROTOBUF_COMPILER_JAVA_STRING_FIELD_H__ 15 16 #include <string> 17 18 #include "google/protobuf/compiler/java/full/field_generator.h" 19 #include "google/protobuf/descriptor.h" 20 21 namespace google { 22 namespace protobuf { 23 namespace compiler { 24 namespace java { 25 class Context; // context.h 26 class ClassNameResolver; // name_resolver.h 27 } // namespace java 28 } // namespace compiler 29 } // namespace protobuf 30 } // namespace google 31 32 namespace google { 33 namespace protobuf { 34 namespace compiler { 35 namespace java { 36 37 class ImmutableStringFieldGenerator : public ImmutableFieldGenerator { 38 public: 39 explicit ImmutableStringFieldGenerator(const FieldDescriptor* descriptor, 40 int messageBitIndex, 41 int builderBitIndex, Context* context); 42 ImmutableStringFieldGenerator(const ImmutableStringFieldGenerator&) = delete; 43 ImmutableStringFieldGenerator& operator=( 44 const ImmutableStringFieldGenerator&) = delete; 45 ~ImmutableStringFieldGenerator() override; 46 47 // implements ImmutableFieldGenerator 48 // --------------------------------------- 49 int GetMessageBitIndex() const override; 50 int GetBuilderBitIndex() const override; 51 int GetNumBitsForMessage() const override; 52 int GetNumBitsForBuilder() const override; 53 void GenerateInterfaceMembers(io::Printer* printer) const override; 54 void GenerateMembers(io::Printer* printer) const override; 55 void GenerateBuilderMembers(io::Printer* printer) const override; 56 void GenerateInitializationCode(io::Printer* printer) const override; 57 void GenerateBuilderClearCode(io::Printer* printer) const override; 58 void GenerateMergingCode(io::Printer* printer) const override; 59 void GenerateBuildingCode(io::Printer* printer) const override; 60 void GenerateBuilderParsingCode(io::Printer* printer) const override; 61 void GenerateSerializationCode(io::Printer* printer) const override; 62 void GenerateSerializedSizeCode(io::Printer* printer) const override; 63 void GenerateFieldBuilderInitializationCode( 64 io::Printer* printer) const override; 65 void GenerateEqualsCode(io::Printer* printer) const override; 66 void GenerateHashCode(io::Printer* printer) const override; 67 void GenerateKotlinDslMembers(io::Printer* printer) const override; 68 69 std::string GetBoxedType() const override; 70 71 protected: 72 const FieldDescriptor* descriptor_; 73 int message_bit_index_; 74 int builder_bit_index_; 75 absl::flat_hash_map<absl::string_view, std::string> variables_; 76 Context* context_; 77 ClassNameResolver* name_resolver_; 78 }; 79 80 class ImmutableStringOneofFieldGenerator 81 : public ImmutableStringFieldGenerator { 82 public: 83 ImmutableStringOneofFieldGenerator(const FieldDescriptor* descriptor, 84 int messageBitIndex, int builderBitIndex, 85 Context* context); 86 ImmutableStringOneofFieldGenerator( 87 const ImmutableStringOneofFieldGenerator&) = delete; 88 ImmutableStringOneofFieldGenerator& operator=( 89 const ImmutableStringOneofFieldGenerator&) = delete; 90 ~ImmutableStringOneofFieldGenerator() override; 91 92 private: 93 void GenerateMembers(io::Printer* printer) const override; 94 void GenerateBuilderMembers(io::Printer* printer) const override; 95 void GenerateBuilderClearCode(io::Printer* printer) const override; 96 void GenerateMergingCode(io::Printer* printer) const override; 97 void GenerateBuildingCode(io::Printer* printer) const override; 98 void GenerateBuilderParsingCode(io::Printer* printer) const override; 99 void GenerateSerializationCode(io::Printer* printer) const override; 100 void GenerateSerializedSizeCode(io::Printer* printer) const override; 101 }; 102 103 class RepeatedImmutableStringFieldGenerator 104 : public ImmutableStringFieldGenerator { 105 public: 106 explicit RepeatedImmutableStringFieldGenerator( 107 const FieldDescriptor* descriptor, int messageBitIndex, 108 int builderBitIndex, Context* context); 109 RepeatedImmutableStringFieldGenerator( 110 const RepeatedImmutableStringFieldGenerator&) = delete; 111 RepeatedImmutableStringFieldGenerator& operator=( 112 const RepeatedImmutableStringFieldGenerator&) = delete; 113 ~RepeatedImmutableStringFieldGenerator() override; 114 115 // implements ImmutableFieldGenerator --------------------------------------- 116 int GetNumBitsForMessage() const override; 117 int GetNumBitsForBuilder() const override; 118 void GenerateInterfaceMembers(io::Printer* printer) const override; 119 void GenerateMembers(io::Printer* printer) const override; 120 void GenerateBuilderMembers(io::Printer* printer) const override; 121 void GenerateInitializationCode(io::Printer* printer) const override; 122 void GenerateBuilderClearCode(io::Printer* printer) const override; 123 void GenerateMergingCode(io::Printer* printer) const override; 124 void GenerateBuildingCode(io::Printer* printer) const override; 125 void GenerateBuilderParsingCode(io::Printer* printer) const override; 126 void GenerateSerializationCode(io::Printer* printer) const override; 127 void GenerateSerializedSizeCode(io::Printer* printer) const override; 128 void GenerateFieldBuilderInitializationCode( 129 io::Printer* printer) const override; 130 void GenerateEqualsCode(io::Printer* printer) const override; 131 void GenerateHashCode(io::Printer* printer) const override; 132 void GenerateKotlinDslMembers(io::Printer* printer) const override; 133 134 std::string GetBoxedType() const override; 135 }; 136 137 } // namespace java 138 } // namespace compiler 139 } // namespace protobuf 140 } // namespace google 141 142 #endif // GOOGLE_PROTOBUF_COMPILER_JAVA_STRING_FIELD_H__ 143