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 #ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_MAP_FIELD_H__ 9 #define GOOGLE_PROTOBUF_COMPILER_JAVA_MAP_FIELD_H__ 10 11 #include "google/protobuf/compiler/java/context.h" 12 #include "google/protobuf/compiler/java/full/field_generator.h" 13 #include "google/protobuf/descriptor.h" 14 #include "google/protobuf/io/printer.h" 15 16 namespace google { 17 namespace protobuf { 18 namespace compiler { 19 namespace java { 20 21 class ImmutableMapFieldGenerator : public ImmutableFieldGenerator { 22 public: 23 explicit ImmutableMapFieldGenerator(const FieldDescriptor* descriptor, 24 int messageBitIndex, int builderBitIndex, 25 Context* context); 26 ~ImmutableMapFieldGenerator() override = default; 27 28 // implements ImmutableFieldGenerator --------------------------------------- 29 int GetMessageBitIndex() const override; 30 int GetBuilderBitIndex() const override; 31 int GetNumBitsForMessage() const override; 32 int GetNumBitsForBuilder() const override; 33 void GenerateInterfaceMembers(io::Printer* printer) const override; 34 void GenerateMembers(io::Printer* printer) const override; 35 void GenerateBuilderMembers(io::Printer* printer) const override; 36 void GenerateInitializationCode(io::Printer* printer) const override; 37 void GenerateBuilderClearCode(io::Printer* printer) const override; 38 void GenerateMergingCode(io::Printer* printer) const override; 39 void GenerateBuildingCode(io::Printer* printer) const override; 40 void GenerateBuilderParsingCode(io::Printer* printer) const override; 41 void GenerateSerializationCode(io::Printer* printer) const override; 42 void GenerateSerializedSizeCode(io::Printer* printer) const override; 43 void GenerateFieldBuilderInitializationCode( 44 io::Printer* printer) const override; 45 void GenerateEqualsCode(io::Printer* printer) const override; 46 void GenerateHashCode(io::Printer* printer) const override; 47 void GenerateKotlinDslMembers(io::Printer* printer) const override; 48 49 std::string GetBoxedType() const override; 50 51 private: 52 const FieldDescriptor* descriptor_; 53 int message_bit_index_; 54 int builder_bit_index_; 55 absl::flat_hash_map<absl::string_view, std::string> variables_; 56 ClassNameResolver* name_resolver_; 57 Context* context_; 58 void SetMessageVariables(const FieldGeneratorInfo* info); 59 void GenerateMapGetters(io::Printer* printer) const; 60 void GenerateMessageMapBuilderMembers(io::Printer* printer) const; 61 void GenerateMessageMapGetters(io::Printer* printer) const; 62 }; 63 64 } // namespace java 65 } // namespace compiler 66 } // namespace protobuf 67 } // namespace google 68 69 #endif // GOOGLE_PROTOBUF_COMPILER_JAVA_MAP_FIELD_H__ 70