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 map<string, string>* variables) { | 83 std::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( | 311 printer->Print( |
242 variables_, | 312 variables_, |
243 "$deprecation$\n" | 313 "private static final java.util.Map<$boxed_key_type$, " |
244 "public java.util.Map<$boxed_key_type$, $value_enum_type$>\n" | 314 "$value_enum_type$>\n" |
245 "get$capitalized_name$() {\n" | 315 "internalGetAdapted$capitalized_name$Map(\n" |
| 316 " java.util.Map<$boxed_key_type$, $boxed_value_type$> map) {\n" |
246 " return new com.google.protobuf.Internal.MapAdapter<\n" | 317 " return new com.google.protobuf.Internal.MapAdapter<\n" |
247 " $boxed_key_type$, $value_enum_type$, java.lang.Integer>(\n" | 318 " $boxed_key_type$, $value_enum_type$, java.lang.Integer>(\n" |
248 " internalGet$capitalized_name$().getMap(),\n" | 319 " map, $name$ValueConverter);\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"); | 320 "}\n"); |
259 } | 321 } |
| 322 GenerateMapGetters(printer); |
260 } | 323 } |
261 | 324 |
262 void ImmutableMapFieldGenerator:: | 325 void ImmutableMapFieldGenerator:: |
263 GenerateBuilderMembers(io::Printer* printer) const { | 326 GenerateBuilderMembers(io::Printer* printer) const { |
264 printer->Print( | 327 printer->Print( |
265 variables_, | 328 variables_, |
266 "private com.google.protobuf.MapField$lite$<\n" | 329 "private com.google.protobuf.MapField<\n" |
267 " $type_parameters$> $name$_;\n" | 330 " $type_parameters$> $name$_;\n" |
268 "private com.google.protobuf.MapField$lite$<$type_parameters$>\n" | 331 "private com.google.protobuf.MapField<$type_parameters$>\n" |
269 "internalGet$capitalized_name$() {\n" | 332 "internalGet$capitalized_name$() {\n" |
270 " if ($name$_ == null) {\n" | 333 " if ($name$_ == null) {\n" |
271 " return com.google.protobuf.MapField$lite$.emptyMapField(\n" | 334 " return com.google.protobuf.MapField.emptyMapField(\n" |
272 " $map_field_parameter$);\n" | 335 " $map_field_parameter$);\n" |
273 " }\n" | 336 " }\n" |
274 " return $name$_;\n" | 337 " return $name$_;\n" |
275 "}\n" | 338 "}\n" |
276 "private com.google.protobuf.MapField$lite$<$type_parameters$>\n" | 339 "private com.google.protobuf.MapField<$type_parameters$>\n" |
277 "internalGetMutable$capitalized_name$() {\n" | 340 "internalGetMutable$capitalized_name$() {\n" |
278 " $on_changed$;\n" | 341 " $on_changed$;\n" |
279 " if ($name$_ == null) {\n" | 342 " if ($name$_ == null) {\n" |
280 " $name$_ = com.google.protobuf.MapField$lite$.newMapField(\n" | 343 " $name$_ = com.google.protobuf.MapField.newMapField(\n" |
281 " $map_field_parameter$);\n" | 344 " $map_field_parameter$);\n" |
282 " }\n" | 345 " }\n" |
283 " if (!$name$_.isMutable()) {\n" | 346 " if (!$name$_.isMutable()) {\n" |
284 " $name$_ = $name$_.copy();\n" | 347 " $name$_ = $name$_.copy();\n" |
285 " }\n" | 348 " }\n" |
286 " return $name$_;\n" | 349 " return $name$_;\n" |
287 "}\n"); | 350 "}\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"); |
288 if (GetJavaType(ValueField(descriptor_)) == JAVATYPE_ENUM) { | 369 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" | |
304 "public java.util.Map<$boxed_key_type$, $value_enum_type$>\n" | 376 "public java.util.Map<$boxed_key_type$, $value_enum_type$>\n" |
305 "getMutable$capitalized_name$() {\n" | 377 "getMutable$capitalized_name$() {\n" |
306 " return new com.google.protobuf.Internal.MapAdapter<\n" | 378 " return internalGetAdapted$capitalized_name$Map(\n" |
307 " $boxed_key_type$, $value_enum_type$, java.lang.Integer>(\n" | 379 " internalGetMutable$capitalized_name$().getMutableMap());\n" |
308 " internalGetMutable$capitalized_name$().getMutableMap(),\n" | 380 "}\n"); |
309 " $name$ValueConverter);\n" | 381 WriteFieldDocComment(printer, descriptor_); |
310 "}\n"); | 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"); |
311 WriteFieldDocComment(printer, descriptor_); | 392 WriteFieldDocComment(printer, descriptor_); |
312 printer->Print( | 393 printer->Print( |
313 variables_, | 394 variables_, |
314 "$deprecation$public Builder putAll$capitalized_name$(\n" | 395 "$deprecation$public Builder putAll$capitalized_name$(\n" |
315 " java.util.Map<$boxed_key_type$, $value_enum_type$> values) {\n" | 396 " java.util.Map<$boxed_key_type$, $value_enum_type$> values) {\n" |
316 " getMutable$capitalized_name$().putAll(values);\n" | 397 " internalGetAdapted$capitalized_name$Map(\n" |
| 398 " internalGetMutable$capitalized_name$().getMutableMap())\n" |
| 399 " .putAll(values);\n" |
317 " return this;\n" | 400 " return this;\n" |
318 "}\n"); | 401 "}\n"); |
319 if (SupportUnknownEnumValue(descriptor_->file())) { | 402 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" | |
332 "public java.util.Map<$boxed_key_type$, $boxed_value_type$>\n" | 409 "public java.util.Map<$boxed_key_type$, $boxed_value_type$>\n" |
333 "getMutable$capitalized_name$Value() {\n" | 410 "getMutable$capitalized_name$Value() {\n" |
334 " return internalGetMutable$capitalized_name$().getMutableMap();\n" | 411 " return internalGetMutable$capitalized_name$().getMutableMap();\n" |
335 "}\n"); | 412 "}\n"); |
336 WriteFieldDocComment(printer, descriptor_); | 413 WriteFieldDocComment(printer, descriptor_); |
337 printer->Print( | 414 printer->Print( |
338 variables_, | 415 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_, |
339 "$deprecation$public Builder putAll$capitalized_name$Value(\n" | 430 "$deprecation$public Builder putAll$capitalized_name$Value(\n" |
340 " java.util.Map<$boxed_key_type$, $boxed_value_type$> values) {\n" | 431 " java.util.Map<$boxed_key_type$, $boxed_value_type$> values) {\n" |
341 " getMutable$capitalized_name$Value().putAll(values);\n" | 432 " internalGetMutable$capitalized_name$().getMutableMap()\n" |
| 433 " .putAll(values);\n" |
342 " return this;\n" | 434 " return this;\n" |
343 "}\n"); | 435 "}\n"); |
344 } | 436 } |
345 } else { | 437 } 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_, | |
355 "public java.util.Map<$type_parameters$>\n" | 444 "public java.util.Map<$type_parameters$>\n" |
356 "getMutable$capitalized_name$() {\n" | 445 "getMutable$capitalized_name$() {\n" |
357 " return internalGetMutable$capitalized_name$().getMutableMap();\n" | 446 " return internalGetMutable$capitalized_name$().getMutableMap();\n" |
358 "}\n"); | 447 "}\n"); |
359 WriteFieldDocComment(printer, descriptor_); | 448 WriteFieldDocComment(printer, descriptor_); |
360 printer->Print( | 449 printer->Print(variables_, |
361 variables_, | 450 "$deprecation$" |
362 "$deprecation$public Builder putAll$capitalized_name$(\n" | 451 "public Builder put$capitalized_name$(\n" |
363 " java.util.Map<$type_parameters$> values) {\n" | 452 " $key_type$ key,\n" |
364 " getMutable$capitalized_name$().putAll(values);\n" | 453 " $value_type$ value) {\n" |
365 " return this;\n" | 454 " $key_null_check$\n" |
366 "}\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"); |
367 } | 469 } |
368 } | 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( |
| 491 variables_, |
| 492 "/**\n" |
| 493 " * Use {@link #get$capitalized_name$Map()} instead.\n" |
| 494 " */\n" |
| 495 "@java.lang.Deprecated\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"); |
| 625 } |
| 626 } |
369 | 627 |
370 void ImmutableMapFieldGenerator:: | 628 void ImmutableMapFieldGenerator:: |
371 GenerateFieldBuilderInitializationCode(io::Printer* printer) const { | 629 GenerateFieldBuilderInitializationCode(io::Printer* printer) const { |
372 // Nothing to initialize. | 630 // Nothing to initialize. |
373 } | 631 } |
374 | 632 |
375 void ImmutableMapFieldGenerator:: | 633 void ImmutableMapFieldGenerator:: |
376 GenerateInitializationCode(io::Printer* printer) const { | 634 GenerateInitializationCode(io::Printer* printer) const { |
377 // Nothing to initialize. | 635 // Nothing to initialize. |
378 } | 636 } |
(...skipping 19 matching lines...) Expand all Loading... |
398 variables_, | 656 variables_, |
399 "result.$name$_ = internalGet$capitalized_name$();\n" | 657 "result.$name$_ = internalGet$capitalized_name$();\n" |
400 "result.$name$_.makeImmutable();\n"); | 658 "result.$name$_.makeImmutable();\n"); |
401 } | 659 } |
402 | 660 |
403 void ImmutableMapFieldGenerator:: | 661 void ImmutableMapFieldGenerator:: |
404 GenerateParsingCode(io::Printer* printer) const { | 662 GenerateParsingCode(io::Printer* printer) const { |
405 printer->Print( | 663 printer->Print( |
406 variables_, | 664 variables_, |
407 "if (!$get_mutable_bit_parser$) {\n" | 665 "if (!$get_mutable_bit_parser$) {\n" |
408 " $name$_ = com.google.protobuf.MapField$lite$.newMapField(\n" | 666 " $name$_ = com.google.protobuf.MapField.newMapField(\n" |
409 " $map_field_parameter$);\n" | 667 " $map_field_parameter$);\n" |
410 " $set_mutable_bit_parser$;\n" | 668 " $set_mutable_bit_parser$;\n" |
411 "}\n"); | 669 "}\n"); |
412 if (!SupportUnknownEnumValue(descriptor_->file()) && | 670 if (!SupportUnknownEnumValue(descriptor_->file()) && |
413 GetJavaType(ValueField(descriptor_)) == JAVATYPE_ENUM) { | 671 GetJavaType(ValueField(descriptor_)) == JAVATYPE_ENUM) { |
414 printer->Print( | 672 printer->Print( |
415 variables_, | 673 variables_, |
416 "com.google.protobuf.ByteString bytes = input.readBytes();\n" | 674 "com.google.protobuf.ByteString bytes = input.readBytes();\n" |
417 "com.google.protobuf.MapEntry$lite$<$type_parameters$>\n" | 675 "com.google.protobuf.MapEntry<$type_parameters$>\n" |
418 "$name$ = $default_entry$.getParserForType().parseFrom(bytes);\n"); | 676 "$name$__ = $default_entry$.getParserForType().parseFrom(bytes);\n"); |
419 printer->Print( | 677 printer->Print( |
420 variables_, | 678 variables_, |
421 "if ($value_enum_type$.forNumber($name$.getValue()) == null) {\n" | 679 "if ($value_enum_type$.forNumber($name$__.getValue()) == null) {\n" |
422 " unknownFields.mergeLengthDelimitedField($number$, bytes);\n" | 680 " unknownFields.mergeLengthDelimitedField($number$, bytes);\n" |
423 "} else {\n" | 681 "} else {\n" |
424 " $name$_.getMutableMap().put($name$.getKey(), $name$.getValue());\n" | 682 " $name$_.getMutableMap().put(\n" |
| 683 " $name$__.getKey(), $name$__.getValue());\n" |
425 "}\n"); | 684 "}\n"); |
426 } else { | 685 } else { |
427 printer->Print( | 686 printer->Print( |
428 variables_, | 687 variables_, |
429 "com.google.protobuf.MapEntry$lite$<$type_parameters$>\n" | 688 "com.google.protobuf.MapEntry<$type_parameters$>\n" |
430 "$name$ = input.readMessage(\n" | 689 "$name$__ = input.readMessage(\n" |
431 " $default_entry$.getParserForType(), extensionRegistry);\n" | 690 " $default_entry$.getParserForType(), extensionRegistry);\n" |
432 "$name$_.getMutableMap().put($name$.getKey(), $name$.getValue());\n"); | 691 "$name$_.getMutableMap().put(\n" |
| 692 " $name$__.getKey(), $name$__.getValue());\n"); |
433 } | 693 } |
434 } | 694 } |
435 | 695 |
436 void ImmutableMapFieldGenerator:: | 696 void ImmutableMapFieldGenerator:: |
437 GenerateParsingDoneCode(io::Printer* printer) const { | 697 GenerateParsingDoneCode(io::Printer* printer) const { |
438 // Nothing to do here. | 698 // Nothing to do here. |
439 } | 699 } |
440 | 700 |
441 void ImmutableMapFieldGenerator:: | 701 void ImmutableMapFieldGenerator:: |
442 GenerateSerializationCode(io::Printer* printer) const { | 702 GenerateSerializationCode(io::Printer* printer) const { |
443 printer->Print( | 703 printer->Print( |
444 variables_, | 704 variables_, |
445 "for (java.util.Map.Entry<$type_parameters$> entry\n" | 705 "com.google.protobuf.GeneratedMessage$ver$\n" |
446 " : internalGet$capitalized_name$().getMap().entrySet()) {\n" | 706 " .serialize$short_key_type$MapTo(\n" |
447 " com.google.protobuf.MapEntry$lite$<$type_parameters$>\n" | 707 " output,\n" |
448 " $name$ = $default_entry$.newBuilderForType()\n" | 708 " internalGet$capitalized_name$(),\n" |
449 " .setKey(entry.getKey())\n" | 709 " $default_entry$,\n" |
450 " .setValue(entry.getValue())\n" | 710 " $number$);\n"); |
451 " .build();\n" | |
452 " output.writeMessage($number$, $name$);\n" | |
453 "}\n"); | |
454 } | 711 } |
455 | 712 |
456 void ImmutableMapFieldGenerator:: | 713 void ImmutableMapFieldGenerator:: |
457 GenerateSerializedSizeCode(io::Printer* printer) const { | 714 GenerateSerializedSizeCode(io::Printer* printer) const { |
458 printer->Print( | 715 printer->Print( |
459 variables_, | 716 variables_, |
460 "for (java.util.Map.Entry<$type_parameters$> entry\n" | 717 "for (java.util.Map.Entry<$type_parameters$> entry\n" |
461 " : internalGet$capitalized_name$().getMap().entrySet()) {\n" | 718 " : internalGet$capitalized_name$().getMap().entrySet()) {\n" |
462 " com.google.protobuf.MapEntry$lite$<$type_parameters$>\n" | 719 " com.google.protobuf.MapEntry<$type_parameters$>\n" |
463 " $name$ = $default_entry$.newBuilderForType()\n" | 720 " $name$__ = $default_entry$.newBuilderForType()\n" |
464 " .setKey(entry.getKey())\n" | 721 " .setKey(entry.getKey())\n" |
465 " .setValue(entry.getValue())\n" | 722 " .setValue(entry.getValue())\n" |
466 " .build();\n" | 723 " .build();\n" |
467 " size += com.google.protobuf.CodedOutputStream\n" | 724 " size += com.google.protobuf.CodedOutputStream\n" |
468 " .computeMessageSize($number$, $name$);\n" | 725 " .computeMessageSize($number$, $name$__);\n" |
469 "}\n"); | 726 "}\n"); |
470 } | 727 } |
471 | 728 |
472 void ImmutableMapFieldGenerator:: | 729 void ImmutableMapFieldGenerator:: |
473 GenerateEqualsCode(io::Printer* printer) const { | 730 GenerateEqualsCode(io::Printer* printer) const { |
474 printer->Print( | 731 printer->Print( |
475 variables_, | 732 variables_, |
476 "result = result && internalGet$capitalized_name$().equals(\n" | 733 "result = result && internalGet$capitalized_name$().equals(\n" |
477 " other.internalGet$capitalized_name$());\n"); | 734 " other.internalGet$capitalized_name$());\n"); |
478 } | 735 } |
479 | 736 |
480 void ImmutableMapFieldGenerator:: | 737 void ImmutableMapFieldGenerator:: |
481 GenerateHashCode(io::Printer* printer) const { | 738 GenerateHashCode(io::Printer* printer) const { |
482 printer->Print( | 739 printer->Print( |
483 variables_, | 740 variables_, |
484 "if (!internalGet$capitalized_name$().getMap().isEmpty()) {\n" | 741 "if (!internalGet$capitalized_name$().getMap().isEmpty()) {\n" |
485 " hash = (37 * hash) + $constant_name$;\n" | 742 " hash = (37 * hash) + $constant_name$;\n" |
486 " hash = (53 * hash) + internalGet$capitalized_name$().hashCode();\n" | 743 " hash = (53 * hash) + internalGet$capitalized_name$().hashCode();\n" |
487 "}\n"); | 744 "}\n"); |
488 } | 745 } |
489 | 746 |
490 string ImmutableMapFieldGenerator::GetBoxedType() const { | 747 string ImmutableMapFieldGenerator::GetBoxedType() const { |
491 return name_resolver_->GetImmutableClassName(descriptor_->message_type()); | 748 return name_resolver_->GetImmutableClassName(descriptor_->message_type()); |
492 } | 749 } |
493 | 750 |
494 } // namespace java | 751 } // namespace java |
495 } // namespace compiler | 752 } // namespace compiler |
496 } // namespace protobuf | 753 } // namespace protobuf |
497 } // namespace google | 754 } // namespace google |
OLD | NEW |