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
44namespace google {
45namespace protobuf {
46namespace compiler {
47namespace java {
48class Context; // context.h
49class ClassNameResolver; // name_resolver.h
50} // namespace java
51} // namespace compiler
52} // namespace protobuf
53} // namespace google
54
55namespace google {
56namespace protobuf {
57namespace compiler {
58namespace java {
59
60class ImmutableStringFieldGenerator : public ImmutableFieldGenerator {
61 public:
62 explicit ImmutableStringFieldGenerator(const FieldDescriptor* descriptor,
63 int messageBitIndex,
64 int builderBitIndex, Context* context);
65 ~ImmutableStringFieldGenerator() override;
66
67 // implements ImmutableFieldGenerator
68 // ---------------------------------------
69 int GetNumBitsForMessage() const override;
70 int GetNumBitsForBuilder() const override;
71 void GenerateInterfaceMembers(io::Printer* printer) const override;
72 void GenerateMembers(io::Printer* printer) const override;
73 void GenerateBuilderMembers(io::Printer* printer) const override;
74 void GenerateInitializationCode(io::Printer* printer) const override;
75 void GenerateBuilderClearCode(io::Printer* printer) const override;
76 void GenerateMergingCode(io::Printer* printer) const override;
77 void GenerateBuildingCode(io::Printer* printer) const override;
78 void GenerateParsingCode(io::Printer* printer) const override;
79 void GenerateParsingDoneCode(io::Printer* printer) const override;
80 void GenerateSerializationCode(io::Printer* printer) const override;
81 void GenerateSerializedSizeCode(io::Printer* printer) const override;
82 void GenerateFieldBuilderInitializationCode(
83 io::Printer* printer) const override;
84 void GenerateEqualsCode(io::Printer* printer) const override;
85 void GenerateHashCode(io::Printer* printer) const override;
86 void GenerateKotlinDslMembers(io::Printer* printer) const override;
87
88 std::string GetBoxedType() const override;
89
90 protected:
91 const FieldDescriptor* descriptor_;
92 std::map<std::string, std::string> variables_;
93 ClassNameResolver* name_resolver_;
94
95 private:
96 GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableStringFieldGenerator);
97};
98
99class ImmutableStringOneofFieldGenerator
100 : public ImmutableStringFieldGenerator {
101 public:
102 ImmutableStringOneofFieldGenerator(const FieldDescriptor* descriptor,
103 int messageBitIndex, int builderBitIndex,
104 Context* context);
105 ~ImmutableStringOneofFieldGenerator() override;
106
107 private:
108 void GenerateMembers(io::Printer* printer) const override;
109 void GenerateBuilderMembers(io::Printer* printer) const override;
110 void GenerateMergingCode(io::Printer* printer) const override;
111 void GenerateBuildingCode(io::Printer* printer) const override;
112 void GenerateParsingCode(io::Printer* printer) const override;
113 void GenerateSerializationCode(io::Printer* printer) const override;
114 void GenerateSerializedSizeCode(io::Printer* printer) const override;
115
116 GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ImmutableStringOneofFieldGenerator);
117};
118
119class RepeatedImmutableStringFieldGenerator : public ImmutableFieldGenerator {
120 public:
121 explicit RepeatedImmutableStringFieldGenerator(
122 const FieldDescriptor* descriptor, int messageBitIndex,
123 int builderBitIndex, Context* context);
124 ~RepeatedImmutableStringFieldGenerator() override;
125
126 // implements ImmutableFieldGenerator ---------------------------------------
127 int GetNumBitsForMessage() const override;
128 int GetNumBitsForBuilder() const override;
129 void GenerateInterfaceMembers(io::Printer* printer) const override;
130 void GenerateMembers(io::Printer* printer) const override;
131 void GenerateBuilderMembers(io::Printer* printer) const override;
132 void GenerateInitializationCode(io::Printer* printer) const override;
133 void GenerateBuilderClearCode(io::Printer* printer) const override;
134 void GenerateMergingCode(io::Printer* printer) const override;
135 void GenerateBuildingCode(io::Printer* printer) const override;
136 void GenerateParsingCode(io::Printer* printer) const override;
137 void GenerateParsingDoneCode(io::Printer* printer) const override;
138 void GenerateSerializationCode(io::Printer* printer) const override;
139 void GenerateSerializedSizeCode(io::Printer* printer) const override;
140 void GenerateFieldBuilderInitializationCode(
141 io::Printer* printer) const override;
142 void GenerateEqualsCode(io::Printer* printer) const override;
143 void GenerateHashCode(io::Printer* printer) const override;
144 void GenerateKotlinDslMembers(io::Printer* printer) const override;
145
146 std::string GetBoxedType() const override;
147
148 private:
149 const FieldDescriptor* descriptor_;
150 std::map<std::string, std::string> variables_;
151 ClassNameResolver* name_resolver_;
152
153 GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(RepeatedImmutableStringFieldGenerator);
154};
155
156} // namespace java
157} // namespace compiler
158} // namespace protobuf
159} // namespace google
160
161#endif // GOOGLE_PROTOBUF_COMPILER_JAVA_STRING_FIELD_H__
162