• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc.  All rights reserved.
3 // https://developers.google.com/protocol-buffers/
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are
7 // met:
8 //
9 //     * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 //     * Redistributions in binary form must reproduce the above
12 // copyright notice, this list of conditions and the following disclaimer
13 // in the documentation and/or other materials provided with the
14 // distribution.
15 //     * Neither the name of Google Inc. nor the names of its
16 // contributors may be used to endorse or promote products derived from
17 // this software without specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 
31 // Author: kenton@google.com (Kenton Varda)
32 // Author: jonp@google.com (Jon Perlow)
33 //  Based on original Protocol Buffers design by
34 //  Sanjay Ghemawat, Jeff Dean, and others.
35 
36 #ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_STRING_FIELD_H__
37 #define GOOGLE_PROTOBUF_COMPILER_JAVA_STRING_FIELD_H__
38 
39 #include <map>
40 #include <string>
41 
42 #include "google/protobuf/compiler/java/field.h"
43 
44 namespace google {
45 namespace protobuf {
46 namespace compiler {
47 namespace java {
48 class Context;            // context.h
49 class ClassNameResolver;  // name_resolver.h
50 }  // namespace java
51 }  // namespace compiler
52 }  // namespace protobuf
53 }  // namespace google
54 
55 namespace google {
56 namespace protobuf {
57 namespace compiler {
58 namespace java {
59 
60 class ImmutableStringFieldGenerator : public ImmutableFieldGenerator {
61  public:
62   explicit ImmutableStringFieldGenerator(const FieldDescriptor* descriptor,
63                                          int messageBitIndex,
64                                          int builderBitIndex, Context* context);
65   ImmutableStringFieldGenerator(const ImmutableStringFieldGenerator&) = delete;
66   ImmutableStringFieldGenerator& operator=(
67       const ImmutableStringFieldGenerator&) = delete;
68   ~ImmutableStringFieldGenerator() override;
69 
70   // implements ImmutableFieldGenerator
71   // ---------------------------------------
72   int GetMessageBitIndex() const override;
73   int GetBuilderBitIndex() const override;
74   int GetNumBitsForMessage() const override;
75   int GetNumBitsForBuilder() const override;
76   void GenerateInterfaceMembers(io::Printer* printer) const override;
77   void GenerateMembers(io::Printer* printer) const override;
78   void GenerateBuilderMembers(io::Printer* printer) const override;
79   void GenerateInitializationCode(io::Printer* printer) const override;
80   void GenerateBuilderClearCode(io::Printer* printer) const override;
81   void GenerateMergingCode(io::Printer* printer) const override;
82   void GenerateBuildingCode(io::Printer* printer) const override;
83   void GenerateBuilderParsingCode(io::Printer* printer) const override;
84   void GenerateSerializationCode(io::Printer* printer) const override;
85   void GenerateSerializedSizeCode(io::Printer* printer) const override;
86   void GenerateFieldBuilderInitializationCode(
87       io::Printer* printer) const override;
88   void GenerateEqualsCode(io::Printer* printer) const override;
89   void GenerateHashCode(io::Printer* printer) const override;
90   void GenerateKotlinDslMembers(io::Printer* printer) const override;
91 
92   std::string GetBoxedType() const override;
93 
94  protected:
95   const FieldDescriptor* descriptor_;
96   int message_bit_index_;
97   int builder_bit_index_;
98   std::map<std::string, std::string> variables_;
99   ClassNameResolver* name_resolver_;
100 };
101 
102 class ImmutableStringOneofFieldGenerator
103     : public ImmutableStringFieldGenerator {
104  public:
105   ImmutableStringOneofFieldGenerator(const FieldDescriptor* descriptor,
106                                      int messageBitIndex, int builderBitIndex,
107                                      Context* context);
108   ImmutableStringOneofFieldGenerator(
109       const ImmutableStringOneofFieldGenerator&) = delete;
110   ImmutableStringOneofFieldGenerator& operator=(
111       const ImmutableStringOneofFieldGenerator&) = delete;
112   ~ImmutableStringOneofFieldGenerator() override;
113 
114  private:
115   void GenerateMembers(io::Printer* printer) const override;
116   void GenerateBuilderMembers(io::Printer* printer) const override;
117   void GenerateBuilderClearCode(io::Printer* printer) const override;
118   void GenerateMergingCode(io::Printer* printer) const override;
119   void GenerateBuildingCode(io::Printer* printer) const override;
120   void GenerateBuilderParsingCode(io::Printer* printer) const override;
121   void GenerateSerializationCode(io::Printer* printer) const override;
122   void GenerateSerializedSizeCode(io::Printer* printer) const override;
123 };
124 
125 class RepeatedImmutableStringFieldGenerator
126     : public ImmutableStringFieldGenerator {
127  public:
128   explicit RepeatedImmutableStringFieldGenerator(
129       const FieldDescriptor* descriptor, int messageBitIndex,
130       int builderBitIndex, Context* context);
131   RepeatedImmutableStringFieldGenerator(
132       const RepeatedImmutableStringFieldGenerator&) = delete;
133   RepeatedImmutableStringFieldGenerator& operator=(
134       const RepeatedImmutableStringFieldGenerator&) = delete;
135   ~RepeatedImmutableStringFieldGenerator() override;
136 
137   // implements ImmutableFieldGenerator ---------------------------------------
138   int GetNumBitsForMessage() const override;
139   int GetNumBitsForBuilder() const override;
140   void GenerateInterfaceMembers(io::Printer* printer) const override;
141   void GenerateMembers(io::Printer* printer) const override;
142   void GenerateBuilderMembers(io::Printer* printer) const override;
143   void GenerateInitializationCode(io::Printer* printer) const override;
144   void GenerateBuilderClearCode(io::Printer* printer) const override;
145   void GenerateMergingCode(io::Printer* printer) const override;
146   void GenerateBuildingCode(io::Printer* printer) const override;
147   void GenerateBuilderParsingCode(io::Printer* printer) const override;
148   void GenerateSerializationCode(io::Printer* printer) const override;
149   void GenerateSerializedSizeCode(io::Printer* printer) const override;
150   void GenerateFieldBuilderInitializationCode(
151       io::Printer* printer) const override;
152   void GenerateEqualsCode(io::Printer* printer) const override;
153   void GenerateHashCode(io::Printer* printer) const override;
154   void GenerateKotlinDslMembers(io::Printer* printer) const override;
155 
156   std::string GetBoxedType() const override;
157 };
158 
159 }  // namespace java
160 }  // namespace compiler
161 }  // namespace protobuf
162 }  // namespace google
163 
164 #endif  // GOOGLE_PROTOBUF_COMPILER_JAVA_STRING_FIELD_H__
165