• 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 // 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