70 if (
field->is_repeated()) {
74 return new ImmutableMapFieldGenerator(
field, messageBitIndex,
75 builderBitIndex, context);
77 return new RepeatedImmutableMessageFieldGenerator(
78 field, messageBitIndex, builderBitIndex, context);
81 return new RepeatedImmutableEnumFieldGenerator(
82 field, messageBitIndex, builderBitIndex, context);
84 return new RepeatedImmutableStringFieldGenerator(
85 field, messageBitIndex, builderBitIndex, context);
87 return new RepeatedImmutablePrimitiveFieldGenerator(
88 field, messageBitIndex, builderBitIndex, context);
91 if (
field->containing_oneof()) {
94 return new ImmutableMessageOneofFieldGenerator(
95 field, messageBitIndex, builderBitIndex, context);
97 return new ImmutableEnumOneofFieldGenerator(
field, messageBitIndex,
98 builderBitIndex, context);
100 return new ImmutableStringOneofFieldGenerator(
101 field, messageBitIndex, builderBitIndex, context);
103 return new ImmutablePrimitiveOneofFieldGenerator(
104 field, messageBitIndex, builderBitIndex, context);
109 return new ImmutableMessageFieldGenerator(
field, messageBitIndex,
110 builderBitIndex, context);
112 return new ImmutableEnumFieldGenerator(
field, messageBitIndex,
113 builderBitIndex, context);
115 return new ImmutableStringFieldGenerator(
field, messageBitIndex,
116 builderBitIndex, context);
118 return new ImmutablePrimitiveFieldGenerator(
field, messageBitIndex,
119 builderBitIndex, context);
125 ImmutableFieldLiteGenerator* MakeImmutableLiteGenerator(
127 if (
field->is_repeated()) {
131 return new ImmutableMapFieldLiteGenerator(
field, messageBitIndex,
134 return new RepeatedImmutableMessageFieldLiteGenerator(
135 field, messageBitIndex, context);
138 return new RepeatedImmutableEnumFieldLiteGenerator(
139 field, messageBitIndex, context);
141 return new RepeatedImmutableStringFieldLiteGenerator(
142 field, messageBitIndex, context);
144 return new RepeatedImmutablePrimitiveFieldLiteGenerator(
145 field, messageBitIndex, context);
148 if (
field->containing_oneof()) {
151 return new ImmutableMessageOneofFieldLiteGenerator(
152 field, messageBitIndex, context);
154 return new ImmutableEnumOneofFieldLiteGenerator(
155 field, messageBitIndex, context);
157 return new ImmutableStringOneofFieldLiteGenerator(
158 field, messageBitIndex, context);
160 return new ImmutablePrimitiveOneofFieldLiteGenerator(
161 field, messageBitIndex, context);
166 return new ImmutableMessageFieldLiteGenerator(
field, messageBitIndex,
169 return new ImmutableEnumFieldLiteGenerator(
field, messageBitIndex,
172 return new ImmutableStringFieldLiteGenerator(
field, messageBitIndex,
175 return new ImmutablePrimitiveFieldLiteGenerator(
176 field, messageBitIndex, context);
183 static inline void ReportUnexpectedPackedFieldsCall(io::Printer* printer) {
190 <<
"called on field generator that does not support packing.";
199 ReportUnexpectedPackedFieldsCall(printer);
212 int messageBitIndex = 0;
213 int builderBitIndex = 0;
216 descriptor->field(
i), messageBitIndex, builderBitIndex, context);
217 field_generators_[
i].reset(generator);
232 int messageBitIndex = 0;
236 field_generators_[
i].reset(generator);
247 std::map<std::string, std::string>* variables) {
248 (*variables)[
"field_name"] =
descriptor->name();
249 (*variables)[
"name"] = info->
name;
250 (*variables)[
"classname"] =
descriptor->containing_type()->name();
259 (*variables)[
"{"] =
"";
260 (*variables)[
"}"] =
"";
265 std::map<std::string, std::string>* variables) {
266 (*variables)[
"oneof_name"] = info->
name;
268 (*variables)[
"oneof_index"] =
271 (*variables)[
"set_oneof_case_message"] =
273 (*variables)[
"clear_oneof_case_message"] = info->
name +
"Case_ = 0";
274 (*variables)[
"has_oneof_case_message"] =
280 const std::map<std::string, std::string>::const_iterator
it =
281 variables.find(
"disambiguated_reason");
282 if (
it != variables.end() && !
it->second.empty()) {
285 "// An alternative name is used for field \"$field_name$\" because:\n"
286 "// $disambiguated_reason$\n");