• 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_PRIMITIVE_FIELD_LITE_H__
13 #define GOOGLE_PROTOBUF_COMPILER_JAVA_PRIMITIVE_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 ImmutablePrimitiveFieldLiteGenerator
41     : public ImmutableFieldLiteGenerator {
42  public:
43   explicit ImmutablePrimitiveFieldLiteGenerator(
44       const FieldDescriptor* descriptor, int messageBitIndex, Context* context);
45   ImmutablePrimitiveFieldLiteGenerator(
46       const ImmutablePrimitiveFieldLiteGenerator&) = delete;
47   ImmutablePrimitiveFieldLiteGenerator& operator=(
48       const ImmutablePrimitiveFieldLiteGenerator&) = delete;
49   ~ImmutablePrimitiveFieldLiteGenerator() 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   Context* context_;
69   ClassNameResolver* name_resolver_;
70 };
71 
72 class ImmutablePrimitiveOneofFieldLiteGenerator
73     : public ImmutablePrimitiveFieldLiteGenerator {
74  public:
75   ImmutablePrimitiveOneofFieldLiteGenerator(const FieldDescriptor* descriptor,
76                                             int messageBitIndex,
77                                             Context* context);
78   ImmutablePrimitiveOneofFieldLiteGenerator(
79       const ImmutablePrimitiveOneofFieldLiteGenerator&) = delete;
80   ImmutablePrimitiveOneofFieldLiteGenerator& operator=(
81       const ImmutablePrimitiveOneofFieldLiteGenerator&) = delete;
82   ~ImmutablePrimitiveOneofFieldLiteGenerator() override;
83 
84   void GenerateMembers(io::Printer* printer) const override;
85   void GenerateBuilderMembers(io::Printer* printer) const override;
86 
87   void GenerateFieldInfo(io::Printer* printer,
88                          std::vector<uint16_t>* output) const override;
89 };
90 
91 class RepeatedImmutablePrimitiveFieldLiteGenerator
92     : public ImmutableFieldLiteGenerator {
93  public:
94   explicit RepeatedImmutablePrimitiveFieldLiteGenerator(
95       const FieldDescriptor* descriptor, int messageBitIndex, Context* context);
96   RepeatedImmutablePrimitiveFieldLiteGenerator(
97       const RepeatedImmutablePrimitiveFieldLiteGenerator&) = delete;
98   RepeatedImmutablePrimitiveFieldLiteGenerator& operator=(
99       const RepeatedImmutablePrimitiveFieldLiteGenerator&) = delete;
100   ~RepeatedImmutablePrimitiveFieldLiteGenerator() 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_PRIMITIVE_FIELD_LITE_H__
127