OLD | NEW |
1 // Protocol Buffers - Google's data interchange format | 1 // Protocol Buffers - Google's data interchange format |
2 // Copyright 2008 Google Inc. All rights reserved. | 2 // Copyright 2008 Google Inc. All rights reserved. |
3 // https://developers.google.com/protocol-buffers/ | 3 // https://developers.google.com/protocol-buffers/ |
4 // | 4 // |
5 // Redistribution and use in source and binary forms, with or without | 5 // Redistribution and use in source and binary forms, with or without |
6 // modification, are permitted provided that the following conditions are | 6 // modification, are permitted provided that the following conditions are |
7 // met: | 7 // met: |
8 // | 8 // |
9 // * Redistributions of source code must retain the above copyright | 9 // * Redistributions of source code must retain the above copyright |
10 // notice, this list of conditions and the following disclaimer. | 10 // notice, this list of conditions and the following disclaimer. |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 string WireType(const FieldDescriptor* field) { | 73 string WireType(const FieldDescriptor* field) { |
74 return "com.google.protobuf.WireFormat.FieldType." + | 74 return "com.google.protobuf.WireFormat.FieldType." + |
75 string(FieldTypeName(field->type())); | 75 string(FieldTypeName(field->type())); |
76 } | 76 } |
77 | 77 |
78 void SetMessageVariables(const FieldDescriptor* descriptor, | 78 void SetMessageVariables(const FieldDescriptor* descriptor, |
79 int messageBitIndex, | 79 int messageBitIndex, |
80 int builderBitIndex, | 80 int builderBitIndex, |
81 const FieldGeneratorInfo* info, | 81 const FieldGeneratorInfo* info, |
82 Context* context, | 82 Context* context, |
83 std::map<string, string>* variables) { | 83 map<string, string>* variables) { |
84 SetCommonFieldVariables(descriptor, info, variables); | 84 SetCommonFieldVariables(descriptor, info, variables); |
85 ClassNameResolver* name_resolver = context->GetNameResolver(); | 85 ClassNameResolver* name_resolver = context->GetNameResolver(); |
86 | 86 |
87 (*variables)["type"] = | 87 (*variables)["type"] = |
88 name_resolver->GetImmutableClassName(descriptor->message_type()); | 88 name_resolver->GetImmutableClassName(descriptor->message_type()); |
89 const FieldDescriptor* key = KeyField(descriptor); | 89 const FieldDescriptor* key = KeyField(descriptor); |
90 const FieldDescriptor* value = ValueField(descriptor); | 90 const FieldDescriptor* value = ValueField(descriptor); |
91 const JavaType keyJavaType = GetJavaType(key); | |
92 const JavaType valueJavaType = GetJavaType(value); | |
93 | |
94 (*variables)["key_type"] = TypeName(key, name_resolver, false); | 91 (*variables)["key_type"] = TypeName(key, name_resolver, false); |
95 string boxed_key_type = TypeName(key, name_resolver, true); | 92 (*variables)["boxed_key_type"] = TypeName(key, name_resolver, true); |
96 (*variables)["boxed_key_type"] = boxed_key_type; | |
97 // Used for calling the serialization function. | |
98 (*variables)["short_key_type"] = | |
99 boxed_key_type.substr(boxed_key_type.rfind('.') + 1); | |
100 (*variables)["key_wire_type"] = WireType(key); | 93 (*variables)["key_wire_type"] = WireType(key); |
101 (*variables)["key_default_value"] = DefaultValue(key, true, name_resolver); | 94 (*variables)["key_default_value"] = DefaultValue(key, true, name_resolver); |
102 (*variables)["key_null_check"] = IsReferenceType(keyJavaType) ? | 95 if (GetJavaType(value) == JAVATYPE_ENUM) { |
103 "if (key == null) { throw new java.lang.NullPointerException(); }" : ""; | |
104 (*variables)["value_null_check"] = IsReferenceType(valueJavaType) ? | |
105 "if (value == null) { throw new java.lang.NullPointerException(); }" : ""; | |
106 if (valueJavaType == JAVATYPE_ENUM) { | |
107 // We store enums as Integers internally. | 96 // We store enums as Integers internally. |
108 (*variables)["value_type"] = "int"; | 97 (*variables)["value_type"] = "int"; |
109 (*variables)["boxed_value_type"] = "java.lang.Integer"; | 98 (*variables)["boxed_value_type"] = "java.lang.Integer"; |
110 (*variables)["value_wire_type"] = WireType(value); | 99 (*variables)["value_wire_type"] = WireType(value); |
111 (*variables)["value_default_value"] = | 100 (*variables)["value_default_value"] = |
112 DefaultValue(value, true, name_resolver) + ".getNumber()"; | 101 DefaultValue(value, true, name_resolver) + ".getNumber()"; |
113 | 102 |
114 (*variables)["value_enum_type"] = TypeName(value, name_resolver, false); | 103 (*variables)["value_enum_type"] = TypeName(value, name_resolver, false); |
115 | 104 |
116 if (SupportUnknownEnumValue(descriptor->file())) { | 105 if (SupportUnknownEnumValue(descriptor->file())) { |
(...skipping 22 matching lines...) Expand all Loading... |
139 | 128 |
140 // For repeated fields, one bit is used for whether the array is immutable | 129 // For repeated fields, one bit is used for whether the array is immutable |
141 // in the parsing constructor. | 130 // in the parsing constructor. |
142 (*variables)["get_mutable_bit_parser"] = | 131 (*variables)["get_mutable_bit_parser"] = |
143 GenerateGetBitMutableLocal(builderBitIndex); | 132 GenerateGetBitMutableLocal(builderBitIndex); |
144 (*variables)["set_mutable_bit_parser"] = | 133 (*variables)["set_mutable_bit_parser"] = |
145 GenerateSetBitMutableLocal(builderBitIndex); | 134 GenerateSetBitMutableLocal(builderBitIndex); |
146 | 135 |
147 (*variables)["default_entry"] = (*variables)["capitalized_name"] + | 136 (*variables)["default_entry"] = (*variables)["capitalized_name"] + |
148 "DefaultEntryHolder.defaultEntry"; | 137 "DefaultEntryHolder.defaultEntry"; |
| 138 (*variables)["lite"] = ""; |
149 (*variables)["map_field_parameter"] = (*variables)["default_entry"]; | 139 (*variables)["map_field_parameter"] = (*variables)["default_entry"]; |
150 (*variables)["descriptor"] = | 140 (*variables)["descriptor"] = |
151 name_resolver->GetImmutableClassName(descriptor->file()) + | 141 name_resolver->GetImmutableClassName(descriptor->file()) + |
152 ".internal_" + UniqueFileScopeIdentifier(descriptor->message_type()) + | 142 ".internal_" + UniqueFileScopeIdentifier(descriptor->message_type()) + |
153 "_descriptor, "; | 143 "_descriptor, "; |
154 (*variables)["ver"] = GeneratedCodeVersionSuffix(); | |
155 } | 144 } |
156 | 145 |
157 } // namespace | 146 } // namespace |
158 | 147 |
159 ImmutableMapFieldGenerator:: | 148 ImmutableMapFieldGenerator:: |
160 ImmutableMapFieldGenerator(const FieldDescriptor* descriptor, | 149 ImmutableMapFieldGenerator(const FieldDescriptor* descriptor, |
161 int messageBitIndex, | 150 int messageBitIndex, |
162 int builderBitIndex, | 151 int builderBitIndex, |
163 Context* context) | 152 Context* context) |
164 : descriptor_(descriptor), name_resolver_(context->GetNameResolver()) { | 153 : descriptor_(descriptor), name_resolver_(context->GetNameResolver()) { |
165 SetMessageVariables(descriptor, messageBitIndex, builderBitIndex, | 154 SetMessageVariables(descriptor, messageBitIndex, builderBitIndex, |
166 context->GetFieldGeneratorInfo(descriptor), | 155 context->GetFieldGeneratorInfo(descriptor), |
167 context, &variables_); | 156 context, &variables_); |
168 } | 157 } |
169 | 158 |
170 ImmutableMapFieldGenerator:: | 159 ImmutableMapFieldGenerator:: |
171 ~ImmutableMapFieldGenerator() {} | 160 ~ImmutableMapFieldGenerator() {} |
172 | 161 |
173 int ImmutableMapFieldGenerator::GetNumBitsForMessage() const { | 162 int ImmutableMapFieldGenerator::GetNumBitsForMessage() const { |
174 return 0; | 163 return 0; |
175 } | 164 } |
176 | 165 |
177 int ImmutableMapFieldGenerator::GetNumBitsForBuilder() const { | 166 int ImmutableMapFieldGenerator::GetNumBitsForBuilder() const { |
178 return 1; | 167 return 1; |
179 } | 168 } |
180 | 169 |
181 void ImmutableMapFieldGenerator:: | 170 void ImmutableMapFieldGenerator:: |
182 GenerateInterfaceMembers(io::Printer* printer) const { | 171 GenerateInterfaceMembers(io::Printer* printer) const { |
183 WriteFieldDocComment(printer, descriptor_); | |
184 printer->Print( | |
185 variables_, | |
186 "$deprecation$int get$capitalized_name$Count();\n"); | |
187 WriteFieldDocComment(printer, descriptor_); | |
188 printer->Print( | |
189 variables_, | |
190 "$deprecation$boolean contains$capitalized_name$(\n" | |
191 " $key_type$ key);\n"); | |
192 if (GetJavaType(ValueField(descriptor_)) == JAVATYPE_ENUM) { | 172 if (GetJavaType(ValueField(descriptor_)) == JAVATYPE_ENUM) { |
193 printer->Print( | |
194 variables_, | |
195 "/**\n" | |
196 " * Use {@link #get$capitalized_name$Map()} instead.\n" | |
197 " */\n" | |
198 "@java.lang.Deprecated\n" | |
199 "java.util.Map<$boxed_key_type$, $value_enum_type$>\n" | |
200 "get$capitalized_name$();\n"); | |
201 WriteFieldDocComment(printer, descriptor_); | 173 WriteFieldDocComment(printer, descriptor_); |
202 printer->Print( | 174 printer->Print( |
203 variables_, | 175 variables_, |
204 "$deprecation$java.util.Map<$boxed_key_type$, $value_enum_type$>\n" | 176 "$deprecation$java.util.Map<$boxed_key_type$, $value_enum_type$>\n" |
205 "get$capitalized_name$Map();\n"); | 177 "get$capitalized_name$();\n"); |
206 WriteFieldDocComment(printer, descriptor_); | |
207 printer->Print( | |
208 variables_, | |
209 "$deprecation$$value_enum_type$ get$capitalized_name$OrDefault(\n" | |
210 " $key_type$ key,\n" | |
211 " $value_enum_type$ defaultValue);\n"); | |
212 WriteFieldDocComment(printer, descriptor_); | |
213 printer->Print( | |
214 variables_, | |
215 "$deprecation$$value_enum_type$ get$capitalized_name$OrThrow(\n" | |
216 " $key_type$ key);\n"); | |
217 if (SupportUnknownEnumValue(descriptor_->file())) { | 178 if (SupportUnknownEnumValue(descriptor_->file())) { |
218 printer->Print( | |
219 variables_, | |
220 "/**\n" | |
221 " * Use {@link #get$capitalized_name$ValueMap()} instead.\n" | |
222 " */\n" | |
223 "@java.lang.Deprecated\n" | |
224 "java.util.Map<$type_parameters$>\n" | |
225 "get$capitalized_name$Value();\n"); | |
226 WriteFieldDocComment(printer, descriptor_); | 179 WriteFieldDocComment(printer, descriptor_); |
227 printer->Print( | 180 printer->Print( |
228 variables_, | 181 variables_, |
229 "$deprecation$java.util.Map<$type_parameters$>\n" | 182 "$deprecation$java.util.Map<$type_parameters$>\n" |
230 "get$capitalized_name$ValueMap();\n"); | 183 "get$capitalized_name$Value();\n"); |
231 WriteFieldDocComment(printer, descriptor_); | |
232 printer->Print( | |
233 variables_, | |
234 "$deprecation$\n" | |
235 "$value_type$ get$capitalized_name$ValueOrDefault(\n" | |
236 " $key_type$ key,\n" | |
237 " $value_type$ defaultValue);\n"); | |
238 WriteFieldDocComment(printer, descriptor_); | |
239 printer->Print( | |
240 variables_, | |
241 "$deprecation$\n" | |
242 "$value_type$ get$capitalized_name$ValueOrThrow(\n" | |
243 " $key_type$ key);\n"); | |
244 } | 184 } |
245 } else { | 185 } else { |
246 printer->Print( | |
247 variables_, | |
248 "/**\n" | |
249 " * Use {@link #get$capitalized_name$Map()} instead.\n" | |
250 " */\n" | |
251 "@java.lang.Deprecated\n" | |
252 "java.util.Map<$type_parameters$>\n" | |
253 "get$capitalized_name$();\n"); | |
254 WriteFieldDocComment(printer, descriptor_); | 186 WriteFieldDocComment(printer, descriptor_); |
255 printer->Print( | 187 printer->Print( |
256 variables_, | 188 variables_, |
257 "$deprecation$java.util.Map<$type_parameters$>\n" | 189 "$deprecation$java.util.Map<$type_parameters$>\n" |
258 "get$capitalized_name$Map();\n"); | 190 "get$capitalized_name$();\n"); |
259 WriteFieldDocComment(printer, descriptor_); | |
260 printer->Print( | |
261 variables_, | |
262 "$deprecation$\n" | |
263 "$value_type$ get$capitalized_name$OrDefault(\n" | |
264 " $key_type$ key,\n" | |
265 " $value_type$ defaultValue);\n"); | |
266 WriteFieldDocComment(printer, descriptor_); | |
267 printer->Print( | |
268 variables_, | |
269 "$deprecation$\n" | |
270 "$value_type$ get$capitalized_name$OrThrow(\n" | |
271 " $key_type$ key);\n"); | |
272 } | 191 } |
273 } | 192 } |
274 | 193 |
275 void ImmutableMapFieldGenerator:: | 194 void ImmutableMapFieldGenerator:: |
276 GenerateMembers(io::Printer* printer) const { | 195 GenerateMembers(io::Printer* printer) const { |
277 printer->Print( | 196 printer->Print( |
278 variables_, | 197 variables_, |
279 "private static final class $capitalized_name$DefaultEntryHolder {\n" | 198 "private static final class $capitalized_name$DefaultEntryHolder {\n" |
280 " static final com.google.protobuf.MapEntry<\n" | 199 " static final com.google.protobuf.MapEntry$lite$<\n" |
281 " $type_parameters$> defaultEntry =\n" | 200 " $type_parameters$> defaultEntry =\n" |
282 " com.google.protobuf.MapEntry\n" | 201 " com.google.protobuf.MapEntry$lite$\n" |
283 " .<$type_parameters$>newDefaultInstance(\n" | 202 " .<$type_parameters$>newDefaultInstance(\n" |
284 " $descriptor$\n" | 203 " $descriptor$\n" |
285 " $key_wire_type$,\n" | 204 " $key_wire_type$,\n" |
286 " $key_default_value$,\n" | 205 " $key_default_value$,\n" |
287 " $value_wire_type$,\n" | 206 " $value_wire_type$,\n" |
288 " $value_default_value$);\n" | 207 " $value_default_value$);\n" |
289 "}\n"); | 208 "}\n"); |
290 printer->Print( | 209 printer->Print( |
291 variables_, | 210 variables_, |
292 "private com.google.protobuf.MapField<\n" | 211 "private com.google.protobuf.MapField$lite$<\n" |
293 " $type_parameters$> $name$_;\n" | 212 " $type_parameters$> $name$_;\n" |
294 "private com.google.protobuf.MapField<$type_parameters$>\n" | 213 "private com.google.protobuf.MapField$lite$<$type_parameters$>\n" |
295 "internalGet$capitalized_name$() {\n" | 214 "internalGet$capitalized_name$() {\n" |
296 " if ($name$_ == null) {\n" | 215 " if ($name$_ == null) {\n" |
297 " return com.google.protobuf.MapField.emptyMapField(\n" | 216 " return com.google.protobuf.MapField$lite$.emptyMapField(\n" |
298 " $map_field_parameter$);\n" | 217 " $map_field_parameter$);\n" |
299 " }\n" | 218 " }\n" |
300 " return $name$_;\n" | 219 " return $name$_;\n" |
301 "}\n"); | 220 "}\n"); |
302 if (GetJavaType(ValueField(descriptor_)) == JAVATYPE_ENUM) { | 221 if (GetJavaType(ValueField(descriptor_)) == JAVATYPE_ENUM) { |
303 printer->Print( | 222 printer->Print( |
304 variables_, | 223 variables_, |
305 "private static final\n" | 224 "private static final\n" |
306 "com.google.protobuf.Internal.MapAdapter.Converter<\n" | 225 "com.google.protobuf.Internal.MapAdapter.Converter<\n" |
307 " java.lang.Integer, $value_enum_type$> $name$ValueConverter =\n" | 226 " java.lang.Integer, $value_enum_type$> $name$ValueConverter =\n" |
308 " com.google.protobuf.Internal.MapAdapter.newEnumConverter(\n" | 227 " com.google.protobuf.Internal.MapAdapter.newEnumConverter(\n" |
309 " $value_enum_type$.internalGetValueMap(),\n" | 228 " $value_enum_type$.internalGetValueMap(),\n" |
310 " $unrecognized_value$);\n"); | 229 " $unrecognized_value$);\n"); |
| 230 if (SupportUnknownEnumValue(descriptor_->file())) { |
| 231 WriteFieldDocComment(printer, descriptor_); |
| 232 printer->Print( |
| 233 variables_, |
| 234 "$deprecation$\n" |
| 235 "public java.util.Map<$boxed_key_type$, $boxed_value_type$>\n" |
| 236 "get$capitalized_name$Value() {\n" |
| 237 " return internalGet$capitalized_name$().getMap();\n" |
| 238 "}\n"); |
| 239 } |
| 240 WriteFieldDocComment(printer, descriptor_); |
311 printer->Print( | 241 printer->Print( |
312 variables_, | 242 variables_, |
313 "private static final java.util.Map<$boxed_key_type$, " | 243 "$deprecation$\n" |
314 "$value_enum_type$>\n" | 244 "public java.util.Map<$boxed_key_type$, $value_enum_type$>\n" |
315 "internalGetAdapted$capitalized_name$Map(\n" | 245 "get$capitalized_name$() {\n" |
316 " java.util.Map<$boxed_key_type$, $boxed_value_type$> map) {\n" | |
317 " return new com.google.protobuf.Internal.MapAdapter<\n" | 246 " return new com.google.protobuf.Internal.MapAdapter<\n" |
318 " $boxed_key_type$, $value_enum_type$, java.lang.Integer>(\n" | 247 " $boxed_key_type$, $value_enum_type$, java.lang.Integer>(\n" |
319 " map, $name$ValueConverter);\n" | 248 " internalGet$capitalized_name$().getMap(),\n" |
| 249 " $name$ValueConverter);\n" |
| 250 "}\n"); |
| 251 } else { |
| 252 WriteFieldDocComment(printer, descriptor_); |
| 253 printer->Print( |
| 254 variables_, |
| 255 "$deprecation$\n" |
| 256 "public java.util.Map<$type_parameters$> get$capitalized_name$() {\n" |
| 257 " return internalGet$capitalized_name$().getMap();\n" |
320 "}\n"); | 258 "}\n"); |
321 } | 259 } |
322 GenerateMapGetters(printer); | |
323 } | 260 } |
324 | 261 |
325 void ImmutableMapFieldGenerator:: | 262 void ImmutableMapFieldGenerator:: |
326 GenerateBuilderMembers(io::Printer* printer) const { | 263 GenerateBuilderMembers(io::Printer* printer) const { |
327 printer->Print( | 264 printer->Print( |
328 variables_, | 265 variables_, |
329 "private com.google.protobuf.MapField<\n" | 266 "private com.google.protobuf.MapField$lite$<\n" |
330 " $type_parameters$> $name$_;\n" | 267 " $type_parameters$> $name$_;\n" |
331 "private com.google.protobuf.MapField<$type_parameters$>\n" | 268 "private com.google.protobuf.MapField$lite$<$type_parameters$>\n" |
332 "internalGet$capitalized_name$() {\n" | 269 "internalGet$capitalized_name$() {\n" |
333 " if ($name$_ == null) {\n" | 270 " if ($name$_ == null) {\n" |
334 " return com.google.protobuf.MapField.emptyMapField(\n" | 271 " return com.google.protobuf.MapField$lite$.emptyMapField(\n" |
335 " $map_field_parameter$);\n" | 272 " $map_field_parameter$);\n" |
336 " }\n" | 273 " }\n" |
337 " return $name$_;\n" | 274 " return $name$_;\n" |
338 "}\n" | 275 "}\n" |
339 "private com.google.protobuf.MapField<$type_parameters$>\n" | 276 "private com.google.protobuf.MapField$lite$<$type_parameters$>\n" |
340 "internalGetMutable$capitalized_name$() {\n" | 277 "internalGetMutable$capitalized_name$() {\n" |
341 " $on_changed$;\n" | 278 " $on_changed$;\n" |
342 " if ($name$_ == null) {\n" | 279 " if ($name$_ == null) {\n" |
343 " $name$_ = com.google.protobuf.MapField.newMapField(\n" | 280 " $name$_ = com.google.protobuf.MapField$lite$.newMapField(\n" |
344 " $map_field_parameter$);\n" | 281 " $map_field_parameter$);\n" |
345 " }\n" | 282 " }\n" |
346 " if (!$name$_.isMutable()) {\n" | 283 " if (!$name$_.isMutable()) {\n" |
347 " $name$_ = $name$_.copy();\n" | 284 " $name$_ = $name$_.copy();\n" |
348 " }\n" | 285 " }\n" |
349 " return $name$_;\n" | 286 " return $name$_;\n" |
350 "}\n"); | 287 "}\n"); |
351 GenerateMapGetters(printer); | |
352 printer->Print(variables_, | |
353 "$deprecation$\n" | |
354 "public Builder clear$capitalized_name$() {\n" | |
355 " internalGetMutable$capitalized_name$().getMutableMap()\n" | |
356 " .clear();\n" | |
357 " return this;\n" | |
358 "}\n"); | |
359 WriteFieldDocComment(printer, descriptor_); | |
360 printer->Print(variables_, | |
361 "$deprecation$\n" | |
362 "public Builder remove$capitalized_name$(\n" | |
363 " $key_type$ key) {\n" | |
364 " $key_null_check$\n" | |
365 " internalGetMutable$capitalized_name$().getMutableMap()\n" | |
366 " .remove(key);\n" | |
367 " return this;\n" | |
368 "}\n"); | |
369 if (GetJavaType(ValueField(descriptor_)) == JAVATYPE_ENUM) { | 288 if (GetJavaType(ValueField(descriptor_)) == JAVATYPE_ENUM) { |
| 289 WriteFieldDocComment(printer, descriptor_); |
370 printer->Print( | 290 printer->Print( |
371 variables_, | 291 variables_, |
372 "/**\n" | 292 "$deprecation$\n" |
373 " * Use alternate mutation accessors instead.\n" | 293 "public java.util.Map<$boxed_key_type$, $value_enum_type$>\n" |
374 " */\n" | 294 "get$capitalized_name$() {\n" |
375 "@java.lang.Deprecated\n" | 295 " return new com.google.protobuf.Internal.MapAdapter<\n" |
| 296 " $boxed_key_type$, $value_enum_type$, java.lang.Integer>(\n" |
| 297 " internalGet$capitalized_name$().getMap(),\n" |
| 298 " $name$ValueConverter);\n" |
| 299 "}\n"); |
| 300 WriteFieldDocComment(printer, descriptor_); |
| 301 printer->Print( |
| 302 variables_, |
| 303 "$deprecation$\n" |
376 "public java.util.Map<$boxed_key_type$, $value_enum_type$>\n" | 304 "public java.util.Map<$boxed_key_type$, $value_enum_type$>\n" |
377 "getMutable$capitalized_name$() {\n" | 305 "getMutable$capitalized_name$() {\n" |
378 " return internalGetAdapted$capitalized_name$Map(\n" | 306 " return new com.google.protobuf.Internal.MapAdapter<\n" |
379 " internalGetMutable$capitalized_name$().getMutableMap());\n" | 307 " $boxed_key_type$, $value_enum_type$, java.lang.Integer>(\n" |
| 308 " internalGetMutable$capitalized_name$().getMutableMap(),\n" |
| 309 " $name$ValueConverter);\n" |
380 "}\n"); | 310 "}\n"); |
381 WriteFieldDocComment(printer, descriptor_); | 311 WriteFieldDocComment(printer, descriptor_); |
382 printer->Print(variables_, | |
383 "$deprecation$public Builder put$capitalized_name$(\n" | |
384 " $key_type$ key,\n" | |
385 " $value_enum_type$ value) {\n" | |
386 " $key_null_check$\n" | |
387 " $value_null_check$\n" | |
388 " internalGetMutable$capitalized_name$().getMutableMap()\n" | |
389 " .put(key, $name$ValueConverter.doBackward(value));\n" | |
390 " return this;\n" | |
391 "}\n"); | |
392 WriteFieldDocComment(printer, descriptor_); | |
393 printer->Print( | 312 printer->Print( |
394 variables_, | 313 variables_, |
395 "$deprecation$public Builder putAll$capitalized_name$(\n" | 314 "$deprecation$public Builder putAll$capitalized_name$(\n" |
396 " java.util.Map<$boxed_key_type$, $value_enum_type$> values) {\n" | 315 " java.util.Map<$boxed_key_type$, $value_enum_type$> values) {\n" |
397 " internalGetAdapted$capitalized_name$Map(\n" | 316 " getMutable$capitalized_name$().putAll(values);\n" |
398 " internalGetMutable$capitalized_name$().getMutableMap())\n" | |
399 " .putAll(values);\n" | |
400 " return this;\n" | 317 " return this;\n" |
401 "}\n"); | 318 "}\n"); |
402 if (SupportUnknownEnumValue(descriptor_->file())) { | 319 if (SupportUnknownEnumValue(descriptor_->file())) { |
| 320 WriteFieldDocComment(printer, descriptor_); |
403 printer->Print( | 321 printer->Print( |
404 variables_, | 322 variables_, |
405 "/**\n" | 323 "$deprecation$\n" |
406 " * Use alternate mutation accessors instead.\n" | 324 "public java.util.Map<$boxed_key_type$, $boxed_value_type$>\n" |
407 " */\n" | 325 "get$capitalized_name$Value() {\n" |
408 "@java.lang.Deprecated\n" | 326 " return internalGet$capitalized_name$().getMap();\n" |
| 327 "}\n"); |
| 328 WriteFieldDocComment(printer, descriptor_); |
| 329 printer->Print( |
| 330 variables_, |
| 331 "$deprecation$\n" |
409 "public java.util.Map<$boxed_key_type$, $boxed_value_type$>\n" | 332 "public java.util.Map<$boxed_key_type$, $boxed_value_type$>\n" |
410 "getMutable$capitalized_name$Value() {\n" | 333 "getMutable$capitalized_name$Value() {\n" |
411 " return internalGetMutable$capitalized_name$().getMutableMap();\n" | 334 " return internalGetMutable$capitalized_name$().getMutableMap();\n" |
412 "}\n"); | 335 "}\n"); |
413 WriteFieldDocComment(printer, descriptor_); | 336 WriteFieldDocComment(printer, descriptor_); |
414 printer->Print( | 337 printer->Print( |
415 variables_, | 338 variables_, |
416 "$deprecation$public Builder put$capitalized_name$Value(\n" | |
417 " $key_type$ key,\n" | |
418 " $value_type$ value) {\n" | |
419 " $key_null_check$\n" | |
420 " if ($value_enum_type$.forNumber(value) == null) {\n" | |
421 " throw new java.lang.IllegalArgumentException();\n" | |
422 " }\n" | |
423 " internalGetMutable$capitalized_name$().getMutableMap()\n" | |
424 " .put(key, value);\n" | |
425 " return this;\n" | |
426 "}\n"); | |
427 WriteFieldDocComment(printer, descriptor_); | |
428 printer->Print( | |
429 variables_, | |
430 "$deprecation$public Builder putAll$capitalized_name$Value(\n" | 339 "$deprecation$public Builder putAll$capitalized_name$Value(\n" |
431 " java.util.Map<$boxed_key_type$, $boxed_value_type$> values) {\n" | 340 " java.util.Map<$boxed_key_type$, $boxed_value_type$> values) {\n" |
432 " internalGetMutable$capitalized_name$().getMutableMap()\n" | 341 " getMutable$capitalized_name$Value().putAll(values);\n" |
433 " .putAll(values);\n" | |
434 " return this;\n" | 342 " return this;\n" |
435 "}\n"); | 343 "}\n"); |
436 } | 344 } |
437 } else { | 345 } else { |
| 346 WriteFieldDocComment(printer, descriptor_); |
438 printer->Print( | 347 printer->Print( |
439 variables_, | 348 variables_, |
440 "/**\n" | 349 "public java.util.Map<$type_parameters$> get$capitalized_name$() {\n" |
441 " * Use alternate mutation accessors instead.\n" | 350 " return internalGet$capitalized_name$().getMap();\n" |
442 " */\n" | 351 "}\n"); |
443 "@java.lang.Deprecated\n" | 352 WriteFieldDocComment(printer, descriptor_); |
| 353 printer->Print( |
| 354 variables_, |
444 "public java.util.Map<$type_parameters$>\n" | 355 "public java.util.Map<$type_parameters$>\n" |
445 "getMutable$capitalized_name$() {\n" | 356 "getMutable$capitalized_name$() {\n" |
446 " return internalGetMutable$capitalized_name$().getMutableMap();\n" | 357 " return internalGetMutable$capitalized_name$().getMutableMap();\n" |
447 "}\n"); | 358 "}\n"); |
448 WriteFieldDocComment(printer, descriptor_); | 359 WriteFieldDocComment(printer, descriptor_); |
449 printer->Print(variables_, | |
450 "$deprecation$" | |
451 "public Builder put$capitalized_name$(\n" | |
452 " $key_type$ key,\n" | |
453 " $value_type$ value) {\n" | |
454 " $key_null_check$\n" | |
455 " $value_null_check$\n" | |
456 " internalGetMutable$capitalized_name$().getMutableMap()\n" | |
457 " .put(key, value);\n" | |
458 " return this;\n" | |
459 "}\n"); | |
460 WriteFieldDocComment(printer, descriptor_); | |
461 printer->Print(variables_, | |
462 "$deprecation$\n" | |
463 "public Builder putAll$capitalized_name$(\n" | |
464 " java.util.Map<$type_parameters$> values) {\n" | |
465 " internalGetMutable$capitalized_name$().getMutableMap()\n" | |
466 " .putAll(values);\n" | |
467 " return this;\n" | |
468 "}\n"); | |
469 } | |
470 } | |
471 | |
472 void ImmutableMapFieldGenerator:: | |
473 GenerateMapGetters(io::Printer* printer) const { | |
474 printer->Print( | |
475 variables_, | |
476 "$deprecation$\n" | |
477 "public int get$capitalized_name$Count() {\n" | |
478 " return internalGet$capitalized_name$().getMap().size();\n" | |
479 "}\n"); | |
480 WriteFieldDocComment(printer, descriptor_); | |
481 printer->Print( | |
482 variables_, | |
483 "$deprecation$\n" | |
484 "public boolean contains$capitalized_name$(\n" | |
485 " $key_type$ key) {\n" | |
486 " $key_null_check$\n" | |
487 " return internalGet$capitalized_name$().getMap().containsKey(key);\n" | |
488 "}\n"); | |
489 if (GetJavaType(ValueField(descriptor_)) == JAVATYPE_ENUM) { | |
490 printer->Print( | 360 printer->Print( |
491 variables_, | 361 variables_, |
492 "/**\n" | 362 "$deprecation$public Builder putAll$capitalized_name$(\n" |
493 " * Use {@link #get$capitalized_name$Map()} instead.\n" | 363 " java.util.Map<$type_parameters$> values) {\n" |
494 " */\n" | 364 " getMutable$capitalized_name$().putAll(values);\n" |
495 "@java.lang.Deprecated\n" | 365 " return this;\n" |
496 "public java.util.Map<$boxed_key_type$, $value_enum_type$>\n" | |
497 "get$capitalized_name$() {\n" | |
498 " return get$capitalized_name$Map();\n" | |
499 "}\n"); | |
500 WriteFieldDocComment(printer, descriptor_); | |
501 printer->Print(variables_, | |
502 "$deprecation$\n" | |
503 "public java.util.Map<$boxed_key_type$, $value_enum_type$>\n" | |
504 "get$capitalized_name$Map() {\n" | |
505 " return internalGetAdapted$capitalized_name$Map(\n" | |
506 " internalGet$capitalized_name$().getMap());" | |
507 "}\n"); | |
508 WriteFieldDocComment(printer, descriptor_); | |
509 printer->Print( | |
510 variables_, | |
511 "$deprecation$\n" | |
512 "public $value_enum_type$ get$capitalized_name$OrDefault(\n" | |
513 " $key_type$ key,\n" | |
514 " $value_enum_type$ defaultValue) {\n" | |
515 " $key_null_check$\n" | |
516 " java.util.Map<$boxed_key_type$, $boxed_value_type$> map =\n" | |
517 " internalGet$capitalized_name$().getMap();\n" | |
518 " return map.containsKey(key)\n" | |
519 " ? $name$ValueConverter.doForward(map.get(key))\n" | |
520 " : defaultValue;\n" | |
521 "}\n"); | |
522 WriteFieldDocComment(printer, descriptor_); | |
523 printer->Print( | |
524 variables_, | |
525 "$deprecation$\n" | |
526 "public $value_enum_type$ get$capitalized_name$OrThrow(\n" | |
527 " $key_type$ key) {\n" | |
528 " $key_null_check$\n" | |
529 " java.util.Map<$boxed_key_type$, $boxed_value_type$> map =\n" | |
530 " internalGet$capitalized_name$().getMap();\n" | |
531 " if (!map.containsKey(key)) {\n" | |
532 " throw new java.lang.IllegalArgumentException();\n" | |
533 " }\n" | |
534 " return $name$ValueConverter.doForward(map.get(key));\n" | |
535 "}\n"); | |
536 if (SupportUnknownEnumValue(descriptor_->file())) { | |
537 printer->Print( | |
538 variables_, | |
539 "/**\n" | |
540 " * Use {@link #get$capitalized_name$ValueMap()} instead.\n" | |
541 " */\n" | |
542 "@java.lang.Deprecated\n" | |
543 "public java.util.Map<$boxed_key_type$, $boxed_value_type$>\n" | |
544 "get$capitalized_name$Value() {\n" | |
545 " return get$capitalized_name$ValueMap();\n" | |
546 "}\n"); | |
547 WriteFieldDocComment(printer, descriptor_); | |
548 printer->Print( | |
549 variables_, | |
550 "$deprecation$\n" | |
551 "public java.util.Map<$boxed_key_type$, $boxed_value_type$>\n" | |
552 "get$capitalized_name$ValueMap() {\n" | |
553 " return internalGet$capitalized_name$().getMap();\n" | |
554 "}\n"); | |
555 WriteFieldDocComment(printer, descriptor_); | |
556 printer->Print( | |
557 variables_, | |
558 "$deprecation$\n" | |
559 "public $value_type$ get$capitalized_name$ValueOrDefault(\n" | |
560 " $key_type$ key,\n" | |
561 " $value_type$ defaultValue) {\n" | |
562 " $key_null_check$\n" | |
563 " java.util.Map<$boxed_key_type$, $boxed_value_type$> map =\n" | |
564 " internalGet$capitalized_name$().getMap();\n" | |
565 " return map.containsKey(key) ? map.get(key) : defaultValue;\n" | |
566 "}\n"); | |
567 WriteFieldDocComment(printer, descriptor_); | |
568 printer->Print( | |
569 variables_, | |
570 "$deprecation$\n" | |
571 "public $value_type$ get$capitalized_name$ValueOrThrow(\n" | |
572 " $key_type$ key) {\n" | |
573 " $key_null_check$\n" | |
574 " java.util.Map<$boxed_key_type$, $boxed_value_type$> map =\n" | |
575 " internalGet$capitalized_name$().getMap();\n" | |
576 " if (!map.containsKey(key)) {\n" | |
577 " throw new java.lang.IllegalArgumentException();\n" | |
578 " }\n" | |
579 " return map.get(key);\n" | |
580 "}\n"); | |
581 } | |
582 } else { | |
583 printer->Print( | |
584 variables_, | |
585 "/**\n" | |
586 " * Use {@link #get$capitalized_name$Map()} instead.\n" | |
587 " */\n" | |
588 "@java.lang.Deprecated\n" | |
589 "public java.util.Map<$type_parameters$> get$capitalized_name$() {\n" | |
590 " return get$capitalized_name$Map();\n" | |
591 "}\n"); | |
592 WriteFieldDocComment(printer, descriptor_); | |
593 printer->Print( | |
594 variables_, | |
595 "$deprecation$\n" | |
596 "public java.util.Map<$type_parameters$> get$capitalized_name$Map() {\n" | |
597 " return internalGet$capitalized_name$().getMap();\n" | |
598 "}\n"); | |
599 WriteFieldDocComment(printer, descriptor_); | |
600 printer->Print( | |
601 variables_, | |
602 "$deprecation$\n" | |
603 "public $value_type$ get$capitalized_name$OrDefault(\n" | |
604 " $key_type$ key,\n" | |
605 " $value_type$ defaultValue) {\n" | |
606 " $key_null_check$\n" | |
607 " java.util.Map<$type_parameters$> map =\n" | |
608 " internalGet$capitalized_name$().getMap();\n" | |
609 " return map.containsKey(key) ? map.get(key) : defaultValue;\n" | |
610 "}\n"); | |
611 WriteFieldDocComment(printer, descriptor_); | |
612 printer->Print( | |
613 variables_, | |
614 "$deprecation$\n" | |
615 "public $value_type$ get$capitalized_name$OrThrow(\n" | |
616 " $key_type$ key) {\n" | |
617 " $key_null_check$\n" | |
618 " java.util.Map<$type_parameters$> map =\n" | |
619 " internalGet$capitalized_name$().getMap();\n" | |
620 " if (!map.containsKey(key)) {\n" | |
621 " throw new java.lang.IllegalArgumentException();\n" | |
622 " }\n" | |
623 " return map.get(key);\n" | |
624 "}\n"); | 366 "}\n"); |
625 } | 367 } |
626 } | 368 } |
627 | 369 |
628 void ImmutableMapFieldGenerator:: | 370 void ImmutableMapFieldGenerator:: |
629 GenerateFieldBuilderInitializationCode(io::Printer* printer) const { | 371 GenerateFieldBuilderInitializationCode(io::Printer* printer) const { |
630 // Nothing to initialize. | 372 // Nothing to initialize. |
631 } | 373 } |
632 | 374 |
633 void ImmutableMapFieldGenerator:: | 375 void ImmutableMapFieldGenerator:: |
(...skipping 22 matching lines...) Expand all Loading... |
656 variables_, | 398 variables_, |
657 "result.$name$_ = internalGet$capitalized_name$();\n" | 399 "result.$name$_ = internalGet$capitalized_name$();\n" |
658 "result.$name$_.makeImmutable();\n"); | 400 "result.$name$_.makeImmutable();\n"); |
659 } | 401 } |
660 | 402 |
661 void ImmutableMapFieldGenerator:: | 403 void ImmutableMapFieldGenerator:: |
662 GenerateParsingCode(io::Printer* printer) const { | 404 GenerateParsingCode(io::Printer* printer) const { |
663 printer->Print( | 405 printer->Print( |
664 variables_, | 406 variables_, |
665 "if (!$get_mutable_bit_parser$) {\n" | 407 "if (!$get_mutable_bit_parser$) {\n" |
666 " $name$_ = com.google.protobuf.MapField.newMapField(\n" | 408 " $name$_ = com.google.protobuf.MapField$lite$.newMapField(\n" |
667 " $map_field_parameter$);\n" | 409 " $map_field_parameter$);\n" |
668 " $set_mutable_bit_parser$;\n" | 410 " $set_mutable_bit_parser$;\n" |
669 "}\n"); | 411 "}\n"); |
670 if (!SupportUnknownEnumValue(descriptor_->file()) && | 412 if (!SupportUnknownEnumValue(descriptor_->file()) && |
671 GetJavaType(ValueField(descriptor_)) == JAVATYPE_ENUM) { | 413 GetJavaType(ValueField(descriptor_)) == JAVATYPE_ENUM) { |
672 printer->Print( | 414 printer->Print( |
673 variables_, | 415 variables_, |
674 "com.google.protobuf.ByteString bytes = input.readBytes();\n" | 416 "com.google.protobuf.ByteString bytes = input.readBytes();\n" |
675 "com.google.protobuf.MapEntry<$type_parameters$>\n" | 417 "com.google.protobuf.MapEntry$lite$<$type_parameters$>\n" |
676 "$name$__ = $default_entry$.getParserForType().parseFrom(bytes);\n"); | 418 "$name$ = $default_entry$.getParserForType().parseFrom(bytes);\n"); |
677 printer->Print( | 419 printer->Print( |
678 variables_, | 420 variables_, |
679 "if ($value_enum_type$.forNumber($name$__.getValue()) == null) {\n" | 421 "if ($value_enum_type$.forNumber($name$.getValue()) == null) {\n" |
680 " unknownFields.mergeLengthDelimitedField($number$, bytes);\n" | 422 " unknownFields.mergeLengthDelimitedField($number$, bytes);\n" |
681 "} else {\n" | 423 "} else {\n" |
682 " $name$_.getMutableMap().put(\n" | 424 " $name$_.getMutableMap().put($name$.getKey(), $name$.getValue());\n" |
683 " $name$__.getKey(), $name$__.getValue());\n" | |
684 "}\n"); | 425 "}\n"); |
685 } else { | 426 } else { |
686 printer->Print( | 427 printer->Print( |
687 variables_, | 428 variables_, |
688 "com.google.protobuf.MapEntry<$type_parameters$>\n" | 429 "com.google.protobuf.MapEntry$lite$<$type_parameters$>\n" |
689 "$name$__ = input.readMessage(\n" | 430 "$name$ = input.readMessage(\n" |
690 " $default_entry$.getParserForType(), extensionRegistry);\n" | 431 " $default_entry$.getParserForType(), extensionRegistry);\n" |
691 "$name$_.getMutableMap().put(\n" | 432 "$name$_.getMutableMap().put($name$.getKey(), $name$.getValue());\n"); |
692 " $name$__.getKey(), $name$__.getValue());\n"); | |
693 } | 433 } |
694 } | 434 } |
695 | 435 |
696 void ImmutableMapFieldGenerator:: | 436 void ImmutableMapFieldGenerator:: |
697 GenerateParsingDoneCode(io::Printer* printer) const { | 437 GenerateParsingDoneCode(io::Printer* printer) const { |
698 // Nothing to do here. | 438 // Nothing to do here. |
699 } | 439 } |
700 | 440 |
701 void ImmutableMapFieldGenerator:: | 441 void ImmutableMapFieldGenerator:: |
702 GenerateSerializationCode(io::Printer* printer) const { | 442 GenerateSerializationCode(io::Printer* printer) const { |
703 printer->Print( | 443 printer->Print( |
704 variables_, | 444 variables_, |
705 "com.google.protobuf.GeneratedMessage$ver$\n" | 445 "for (java.util.Map.Entry<$type_parameters$> entry\n" |
706 " .serialize$short_key_type$MapTo(\n" | 446 " : internalGet$capitalized_name$().getMap().entrySet()) {\n" |
707 " output,\n" | 447 " com.google.protobuf.MapEntry$lite$<$type_parameters$>\n" |
708 " internalGet$capitalized_name$(),\n" | 448 " $name$ = $default_entry$.newBuilderForType()\n" |
709 " $default_entry$,\n" | 449 " .setKey(entry.getKey())\n" |
710 " $number$);\n"); | 450 " .setValue(entry.getValue())\n" |
| 451 " .build();\n" |
| 452 " output.writeMessage($number$, $name$);\n" |
| 453 "}\n"); |
711 } | 454 } |
712 | 455 |
713 void ImmutableMapFieldGenerator:: | 456 void ImmutableMapFieldGenerator:: |
714 GenerateSerializedSizeCode(io::Printer* printer) const { | 457 GenerateSerializedSizeCode(io::Printer* printer) const { |
715 printer->Print( | 458 printer->Print( |
716 variables_, | 459 variables_, |
717 "for (java.util.Map.Entry<$type_parameters$> entry\n" | 460 "for (java.util.Map.Entry<$type_parameters$> entry\n" |
718 " : internalGet$capitalized_name$().getMap().entrySet()) {\n" | 461 " : internalGet$capitalized_name$().getMap().entrySet()) {\n" |
719 " com.google.protobuf.MapEntry<$type_parameters$>\n" | 462 " com.google.protobuf.MapEntry$lite$<$type_parameters$>\n" |
720 " $name$__ = $default_entry$.newBuilderForType()\n" | 463 " $name$ = $default_entry$.newBuilderForType()\n" |
721 " .setKey(entry.getKey())\n" | 464 " .setKey(entry.getKey())\n" |
722 " .setValue(entry.getValue())\n" | 465 " .setValue(entry.getValue())\n" |
723 " .build();\n" | 466 " .build();\n" |
724 " size += com.google.protobuf.CodedOutputStream\n" | 467 " size += com.google.protobuf.CodedOutputStream\n" |
725 " .computeMessageSize($number$, $name$__);\n" | 468 " .computeMessageSize($number$, $name$);\n" |
726 "}\n"); | 469 "}\n"); |
727 } | 470 } |
728 | 471 |
729 void ImmutableMapFieldGenerator:: | 472 void ImmutableMapFieldGenerator:: |
730 GenerateEqualsCode(io::Printer* printer) const { | 473 GenerateEqualsCode(io::Printer* printer) const { |
731 printer->Print( | 474 printer->Print( |
732 variables_, | 475 variables_, |
733 "result = result && internalGet$capitalized_name$().equals(\n" | 476 "result = result && internalGet$capitalized_name$().equals(\n" |
734 " other.internalGet$capitalized_name$());\n"); | 477 " other.internalGet$capitalized_name$());\n"); |
735 } | 478 } |
736 | 479 |
737 void ImmutableMapFieldGenerator:: | 480 void ImmutableMapFieldGenerator:: |
738 GenerateHashCode(io::Printer* printer) const { | 481 GenerateHashCode(io::Printer* printer) const { |
739 printer->Print( | 482 printer->Print( |
740 variables_, | 483 variables_, |
741 "if (!internalGet$capitalized_name$().getMap().isEmpty()) {\n" | 484 "if (!internalGet$capitalized_name$().getMap().isEmpty()) {\n" |
742 " hash = (37 * hash) + $constant_name$;\n" | 485 " hash = (37 * hash) + $constant_name$;\n" |
743 " hash = (53 * hash) + internalGet$capitalized_name$().hashCode();\n" | 486 " hash = (53 * hash) + internalGet$capitalized_name$().hashCode();\n" |
744 "}\n"); | 487 "}\n"); |
745 } | 488 } |
746 | 489 |
747 string ImmutableMapFieldGenerator::GetBoxedType() const { | 490 string ImmutableMapFieldGenerator::GetBoxedType() const { |
748 return name_resolver_->GetImmutableClassName(descriptor_->message_type()); | 491 return name_resolver_->GetImmutableClassName(descriptor_->message_type()); |
749 } | 492 } |
750 | 493 |
751 } // namespace java | 494 } // namespace java |
752 } // namespace compiler | 495 } // namespace compiler |
753 } // namespace protobuf | 496 } // namespace protobuf |
754 } // namespace google | 497 } // namespace google |
OLD | NEW |