| 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 |