35 #include <google/protobuf/compiler/java/java_field.h>
39 #include <google/protobuf/stubs/logging.h>
40 #include <google/protobuf/stubs/common.h>
41 #include <google/protobuf/compiler/java/java_context.h>
42 #include <google/protobuf/compiler/java/java_enum_field.h>
43 #include <google/protobuf/compiler/java/java_enum_field_lite.h>
44 #include <google/protobuf/compiler/java/java_helpers.h>
45 #include <google/protobuf/compiler/java/java_map_field.h>
46 #include <google/protobuf/compiler/java/java_map_field_lite.h>
47 #include <google/protobuf/compiler/java/java_message_field.h>
48 #include <google/protobuf/compiler/java/java_message_field_lite.h>
49 #include <google/protobuf/compiler/java/java_primitive_field.h>
50 #include <google/protobuf/compiler/java/java_primitive_field_lite.h>
51 #include <google/protobuf/compiler/java/java_string_field.h>
52 #include <google/protobuf/compiler/java/java_string_field_lite.h>
53 #include <google/protobuf/io/printer.h>
54 #include <google/protobuf/stubs/strutil.h>
55 #include <google/protobuf/stubs/substitute.h>
69 if (
field->is_repeated()) {
73 return new ImmutableMapFieldGenerator(
field, messageBitIndex,
76 return new RepeatedImmutableMessageFieldGenerator(
80 return new RepeatedImmutableEnumFieldGenerator(
83 return new RepeatedImmutableStringFieldGenerator(
86 return new RepeatedImmutablePrimitiveFieldGenerator(
93 return new ImmutableMessageOneofFieldGenerator(
96 return new ImmutableEnumOneofFieldGenerator(
field, messageBitIndex,
99 return new ImmutableStringOneofFieldGenerator(
102 return new ImmutablePrimitiveOneofFieldGenerator(
108 return new ImmutableMessageFieldGenerator(
field, messageBitIndex,
111 return new ImmutableEnumFieldGenerator(
field, messageBitIndex,
114 return new ImmutableStringFieldGenerator(
field, messageBitIndex,
117 return new ImmutablePrimitiveFieldGenerator(
field, messageBitIndex,
124 ImmutableFieldLiteGenerator* MakeImmutableLiteGenerator(
126 if (
field->is_repeated()) {
130 return new ImmutableMapFieldLiteGenerator(
field, messageBitIndex,
133 return new RepeatedImmutableMessageFieldLiteGenerator(
137 return new RepeatedImmutableEnumFieldLiteGenerator(
140 return new RepeatedImmutableStringFieldLiteGenerator(
143 return new RepeatedImmutablePrimitiveFieldLiteGenerator(
150 return new ImmutableMessageOneofFieldLiteGenerator(
153 return new ImmutableEnumOneofFieldLiteGenerator(
156 return new ImmutableStringOneofFieldLiteGenerator(
159 return new ImmutablePrimitiveOneofFieldLiteGenerator(
165 return new ImmutableMessageFieldLiteGenerator(
field, messageBitIndex,
168 return new ImmutableEnumFieldLiteGenerator(
field, messageBitIndex,
171 return new ImmutableStringFieldLiteGenerator(
field, messageBitIndex,
174 return new ImmutablePrimitiveFieldLiteGenerator(
182 static inline void ReportUnexpectedPackedFieldsCall(
io::Printer* printer) {
189 <<
"called on field generator that does not support packing.";
198 ReportUnexpectedPackedFieldsCall(printer);
211 int messageBitIndex = 0;
212 int builderBitIndex = 0;
216 field_generators_[
i].reset(generator);
231 int messageBitIndex = 0;
235 field_generators_[
i].reset(generator);
246 std::map<std::string, std::string>* variables) {
247 (*variables)[
"field_name"] =
descriptor->name();
248 (*variables)[
"name"] = info->
name;
249 (*variables)[
"classname"] =
descriptor->containing_type()->name();
254 (*variables)[
"kt_dsl_builder"] =
"_builder";
259 (*variables)[
"{"] =
"";
260 (*variables)[
"}"] =
"";
261 (*variables)[
"kt_name"] =
270 (*variables)[
"annotation_field_type"] =
273 (*variables)[
"annotation_field_type"] =
276 (*variables)[
"annotation_field_type"] =
277 (*variables)[
"annotation_field_type"] +
"_PACKED";
283 const OneofGeneratorInfo* info,
284 std::map<std::string, std::string>* variables) {
285 (*variables)[
"oneof_name"] = info->name;
286 (*variables)[
"oneof_capitalized_name"] = info->capitalized_name;
287 (*variables)[
"oneof_index"] =
290 (*variables)[
"set_oneof_case_message"] =
292 (*variables)[
"clear_oneof_case_message"] = info->name +
"Case_ = 0";
293 (*variables)[
"has_oneof_case_message"] =
299 const std::map<std::string, std::string>::const_iterator
it =
300 variables.find(
"disambiguated_reason");
301 if (
it != variables.end() && !
it->second.empty()) {
304 "// An alternative name is used for field \"$field_name$\" because:\n"
305 "// $disambiguated_reason$\n");