• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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