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