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