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