Extract generated Java method printing in map_field.cc into dedicated private generator functions on ImmutableMapFieldGenerator.

PiperOrigin-RevId: 961479429
This commit is contained in:
Protobuf Team Bot 2026-08-08 12:12:15 -07:00 committed by Copybara-Service
parent 7d7d6ab836
commit eed5007774
2 changed files with 346 additions and 216 deletions

View file

@ -171,18 +171,25 @@ void ImmutableMapFieldGenerator::SetMessageVariables(
absl::StrCat(GenerateClearBit(bit_index_), ";"); absl::StrCat(GenerateClearBit(bit_index_), ";");
} }
void ImmutableMapFieldGenerator::GenerateInterfaceMembers( void ImmutableMapFieldGenerator::GenerateInterfaceGetCountMethod(
io::Printer* printer) const { io::Printer* printer) const {
WriteFieldDocComment(printer, descriptor_, context_->options()); WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(variables_, printer->Print(variables_,
"$deprecation$int ${$get$capitalized_name$Count$}$();\n"); "$deprecation$int ${$get$capitalized_name$Count$}$();\n");
printer->Annotate("{", "}", descriptor_); printer->Annotate("{", "}", descriptor_);
}
void ImmutableMapFieldGenerator::GenerateInterfaceContainsMethod(
io::Printer* printer) const {
WriteFieldDocComment(printer, descriptor_, context_->options()); WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(variables_, printer->Print(variables_,
"$deprecation$boolean ${$contains$capitalized_name$$}$(\n" "$deprecation$boolean ${$contains$capitalized_name$$}$(\n"
" $key_type$ key);\n"); " $key_type$ key);\n");
printer->Annotate("{", "}", descriptor_); printer->Annotate("{", "}", descriptor_);
}
void ImmutableMapFieldGenerator::GenerateInterfaceGetMapMethod(
io::Printer* printer) const {
const FieldDescriptor* value = MapValueField(descriptor_); const FieldDescriptor* value = MapValueField(descriptor_);
if (GetJavaType(value) == JAVATYPE_ENUM) { if (GetJavaType(value) == JAVATYPE_ENUM) {
if (google::protobuf::internal::IsOss()) { if (google::protobuf::internal::IsOss()) {
@ -201,49 +208,6 @@ void ImmutableMapFieldGenerator::GenerateInterfaceMembers(
"$deprecation$java.util.Map<$boxed_key_type$, $value_enum_type$>\n" "$deprecation$java.util.Map<$boxed_key_type$, $value_enum_type$>\n"
"${$get$capitalized_name$Map$}$();\n"); "${$get$capitalized_name$Map$}$();\n");
printer->Annotate("{", "}", descriptor_); printer->Annotate("{", "}", descriptor_);
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(variables_,
"$deprecation$$value_enum_type_pass_through_nullness$ "
"${$get$capitalized_name$OrDefault$}$(\n"
" $key_type$ key,\n"
" $value_enum_type_pass_through_nullness$ "
" defaultValue);\n");
printer->Annotate("{", "}", descriptor_);
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(
variables_,
"$deprecation$$value_enum_type$ ${$get$capitalized_name$OrThrow$}$(\n"
" $key_type$ key);\n");
printer->Annotate("{", "}", descriptor_);
if (SupportUnknownEnumValue(value)) {
printer->Print(
variables_,
"/**\n"
" * Use {@link #get$capitalized_name$ValueMap()} instead.\n"
" */\n"
"@java.lang.Deprecated\n"
"java.util.Map<$type_parameters$>\n"
"${$get$capitalized_name$Value$}$();\n");
printer->Annotate("{", "}", descriptor_);
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(variables_,
"$deprecation$java.util.Map<$type_parameters$>\n"
"${$get$capitalized_name$ValueMap$}$();\n");
printer->Annotate("{", "}", descriptor_);
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(variables_,
"$deprecation$$value_type_pass_through_nullness$ "
"${$get$capitalized_name$ValueOrDefault$}$(\n"
" $key_type$ key,\n"
" $value_type_pass_through_nullness$ defaultValue);\n");
printer->Annotate("{", "}", descriptor_);
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(
variables_,
"$deprecation$$value_type$ ${$get$capitalized_name$ValueOrThrow$}$(\n"
" $key_type$ key);\n");
printer->Annotate("{", "}", descriptor_);
}
} else { } else {
if (google::protobuf::internal::IsOss()) { if (google::protobuf::internal::IsOss()) {
printer->Print(variables_, printer->Print(variables_,
@ -260,6 +224,22 @@ void ImmutableMapFieldGenerator::GenerateInterfaceMembers(
"$deprecation$java.util.Map<$type_parameters$>\n" "$deprecation$java.util.Map<$type_parameters$>\n"
"${$get$capitalized_name$Map$}$();\n"); "${$get$capitalized_name$Map$}$();\n");
printer->Annotate("{", "}", descriptor_); printer->Annotate("{", "}", descriptor_);
}
}
void ImmutableMapFieldGenerator::GenerateInterfaceGetOrDefaultMethod(
io::Printer* printer) const {
const FieldDescriptor* value = MapValueField(descriptor_);
if (GetJavaType(value) == JAVATYPE_ENUM) {
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(variables_,
"$deprecation$$value_enum_type_pass_through_nullness$ "
"${$get$capitalized_name$OrDefault$}$(\n"
" $key_type$ key,\n"
" $value_enum_type_pass_through_nullness$ "
" defaultValue);\n");
printer->Annotate("{", "}", descriptor_);
} else {
WriteFieldDocComment(printer, descriptor_, context_->options()); WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(variables_, printer->Print(variables_,
"$deprecation$$value_type_pass_through_nullness$ " "$deprecation$$value_type_pass_through_nullness$ "
@ -267,6 +247,20 @@ void ImmutableMapFieldGenerator::GenerateInterfaceMembers(
" $key_type$ key,\n" " $key_type$ key,\n"
" $value_type_pass_through_nullness$ defaultValue);\n"); " $value_type_pass_through_nullness$ defaultValue);\n");
printer->Annotate("{", "}", descriptor_); printer->Annotate("{", "}", descriptor_);
}
}
void ImmutableMapFieldGenerator::GenerateInterfaceGetOrThrowMethod(
io::Printer* printer) const {
const FieldDescriptor* value = MapValueField(descriptor_);
if (GetJavaType(value) == JAVATYPE_ENUM) {
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(
variables_,
"$deprecation$$value_enum_type$ ${$get$capitalized_name$OrThrow$}$(\n"
" $key_type$ key);\n");
printer->Annotate("{", "}", descriptor_);
} else {
WriteFieldDocComment(printer, descriptor_, context_->options()); WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print( printer->Print(
variables_, variables_,
@ -276,6 +270,65 @@ void ImmutableMapFieldGenerator::GenerateInterfaceMembers(
} }
} }
void ImmutableMapFieldGenerator::GenerateInterfaceGetValueMapMethod(
io::Printer* printer) const {
const FieldDescriptor* value = MapValueField(descriptor_);
if (GetJavaType(value) == JAVATYPE_ENUM && SupportUnknownEnumValue(value)) {
printer->Print(variables_,
"/**\n"
" * Use {@link #get$capitalized_name$ValueMap()} instead.\n"
" */\n"
"@java.lang.Deprecated\n"
"java.util.Map<$type_parameters$>\n"
"${$get$capitalized_name$Value$}$();\n");
printer->Annotate("{", "}", descriptor_);
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(variables_,
"$deprecation$java.util.Map<$type_parameters$>\n"
"${$get$capitalized_name$ValueMap$}$();\n");
printer->Annotate("{", "}", descriptor_);
}
}
void ImmutableMapFieldGenerator::GenerateInterfaceGetValueOrDefaultMethod(
io::Printer* printer) const {
const FieldDescriptor* value = MapValueField(descriptor_);
if (GetJavaType(value) == JAVATYPE_ENUM && SupportUnknownEnumValue(value)) {
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(variables_,
"$deprecation$$value_type_pass_through_nullness$ "
"${$get$capitalized_name$ValueOrDefault$}$(\n"
" $key_type$ key,\n"
" $value_type_pass_through_nullness$ defaultValue);\n");
printer->Annotate("{", "}", descriptor_);
}
}
void ImmutableMapFieldGenerator::GenerateInterfaceGetValueOrThrowMethod(
io::Printer* printer) const {
const FieldDescriptor* value = MapValueField(descriptor_);
if (GetJavaType(value) == JAVATYPE_ENUM && SupportUnknownEnumValue(value)) {
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(
variables_,
"$deprecation$$value_type$ ${$get$capitalized_name$ValueOrThrow$}$(\n"
" $key_type$ key);\n");
printer->Annotate("{", "}", descriptor_);
}
}
void ImmutableMapFieldGenerator::GenerateInterfaceMembers(
io::Printer* printer) const {
GenerateInterfaceGetCountMethod(printer);
GenerateInterfaceContainsMethod(printer);
GenerateInterfaceGetMapMethod(printer);
GenerateInterfaceGetOrDefaultMethod(printer);
GenerateInterfaceGetOrThrowMethod(printer);
GenerateInterfaceGetValueMapMethod(printer);
GenerateInterfaceGetValueOrDefaultMethod(printer);
GenerateInterfaceGetValueOrThrowMethod(printer);
}
void ImmutableMapFieldGenerator::GenerateMembers(io::Printer* printer) const { void ImmutableMapFieldGenerator::GenerateMembers(io::Printer* printer) const {
printer->Print( printer->Print(
variables_, variables_,
@ -325,37 +378,8 @@ void ImmutableMapFieldGenerator::GenerateMembers(io::Printer* printer) const {
GenerateMapGetters(printer); GenerateMapGetters(printer);
} }
void ImmutableMapFieldGenerator::GenerateBuilderMembers( void ImmutableMapFieldGenerator::GenerateBuilderClearMethod(
io::Printer* printer) const { io::Printer* printer) const {
if (GetJavaType(MapValueField(descriptor_)) == JAVATYPE_MESSAGE) {
return GenerateMessageMapBuilderMembers(printer);
}
printer->Print(
variables_,
"private com.google.protobuf.MapField<\n"
" $type_parameters$> $name$_;\n"
"$deprecation$private com.google.protobuf.MapField<$type_parameters$>\n"
" internalGet$capitalized_name$() {\n"
" if ($name$_ == null) {\n"
" return com.google.protobuf.MapField.emptyMapField(\n"
" $map_field_parameter$);\n"
" }\n"
" return $name$_;\n"
"}\n"
"$deprecation$private com.google.protobuf.MapField<$type_parameters$>\n"
" internalGetMutable$capitalized_name$() {\n"
" if ($name$_ == null) {\n"
" $name$_ = com.google.protobuf.MapField.newMapField(\n"
" $map_field_parameter$);\n"
" }\n"
" if (!$name$_.isMutable()) {\n"
" $name$_ = $name$_.copy();\n"
" }\n"
" $set_has_field_bit$\n"
" $on_changed$\n"
" return $name$_;\n"
"}\n");
GenerateMapGetters(printer);
printer->Print( printer->Print(
variables_, variables_,
"$deprecation$public Builder ${$clear$capitalized_name$$}$() {\n" "$deprecation$public Builder ${$clear$capitalized_name$$}$() {\n"
@ -365,7 +389,10 @@ void ImmutableMapFieldGenerator::GenerateBuilderMembers(
" return this;\n" " return this;\n"
"}\n"); "}\n");
printer->Annotate("{", "}", descriptor_, Semantic::kSet); printer->Annotate("{", "}", descriptor_, Semantic::kSet);
}
void ImmutableMapFieldGenerator::GenerateBuilderRemoveMethod(
io::Printer* printer) const {
WriteFieldDocComment(printer, descriptor_, context_->options()); WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(variables_, printer->Print(variables_,
"$deprecation$public Builder ${$remove$capitalized_name$$}$(\n" "$deprecation$public Builder ${$remove$capitalized_name$$}$(\n"
@ -376,7 +403,10 @@ void ImmutableMapFieldGenerator::GenerateBuilderMembers(
" return this;\n" " return this;\n"
"}\n"); "}\n");
printer->Annotate("{", "}", descriptor_, Semantic::kSet); printer->Annotate("{", "}", descriptor_, Semantic::kSet);
}
void ImmutableMapFieldGenerator::GenerateBuilderPutMethod(
io::Printer* printer) const {
const FieldDescriptor* value = MapValueField(descriptor_); const FieldDescriptor* value = MapValueField(descriptor_);
if (GetJavaType(value) == JAVATYPE_ENUM) { if (GetJavaType(value) == JAVATYPE_ENUM) {
if (google::protobuf::internal::IsOss()) { if (google::protobuf::internal::IsOss()) {
@ -408,63 +438,6 @@ void ImmutableMapFieldGenerator::GenerateBuilderMembers(
" return this;\n" " return this;\n"
"}\n"); "}\n");
printer->Annotate("{", "}", descriptor_, Semantic::kSet); printer->Annotate("{", "}", descriptor_, Semantic::kSet);
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(
variables_,
"$deprecation$public Builder ${$putAll$capitalized_name$$}$(\n"
" java.util.Map<$boxed_key_type$, $value_enum_type$> values) {\n"
" internalGetAdapted$capitalized_name$Map(\n"
" internalGetMutable$capitalized_name$().getMutableMap())\n"
" .putAll(values);\n"
" $set_has_field_bit$\n"
" return this;\n"
"}\n");
printer->Annotate("{", "}", descriptor_, Semantic::kSet);
if (SupportUnknownEnumValue(value)) {
if (google::protobuf::internal::IsOss()) {
printer->Print(
variables_,
"/**\n"
" * Use alternate mutation accessors instead.\n"
" */\n"
"@java.lang.Deprecated\n"
"public java.util.Map<$boxed_key_type$, $boxed_value_type$>\n"
"${$getMutable$capitalized_name$Value$}$() {\n"
" $set_has_field_bit$\n"
" return internalGetMutable$capitalized_name$().getMutableMap();\n"
"}\n");
printer->Annotate("{", "}", descriptor_);
}
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(
variables_,
"$deprecation$public Builder ${$put$capitalized_name$Value$}$(\n"
" $key_type$ key,\n"
" $value_type$ value) {\n"
" $key_null_check$\n"
" $value_null_check$\n"
" internalGetMutable$capitalized_name$().getMutableMap()\n"
" .put(key, value);\n"
" $set_has_field_bit$\n"
" return this;\n"
"}\n");
printer->Annotate("{", "}", descriptor_, Semantic::kSet);
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(
variables_,
"$deprecation$public Builder ${$putAll$capitalized_name$Value$}$(\n"
" java.util.Map<$boxed_key_type$, $boxed_value_type$> values) {\n"
" internalGetMutable$capitalized_name$().getMutableMap()\n"
" .putAll(values);\n"
" $set_has_field_bit$\n"
" return this;\n"
"}\n");
printer->Annotate("{", "}", descriptor_, Semantic::kSet);
}
} else { } else {
if (google::protobuf::internal::IsOss()) { if (google::protobuf::internal::IsOss()) {
printer->Print( printer->Print(
@ -494,7 +467,26 @@ void ImmutableMapFieldGenerator::GenerateBuilderMembers(
" return this;\n" " return this;\n"
"}\n"); "}\n");
printer->Annotate("{", "}", descriptor_, Semantic::kSet); printer->Annotate("{", "}", descriptor_, Semantic::kSet);
}
}
void ImmutableMapFieldGenerator::GenerateBuilderPutAllMethod(
io::Printer* printer) const {
const FieldDescriptor* value = MapValueField(descriptor_);
if (GetJavaType(value) == JAVATYPE_ENUM) {
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(
variables_,
"$deprecation$public Builder ${$putAll$capitalized_name$$}$(\n"
" java.util.Map<$boxed_key_type$, $value_enum_type$> values) {\n"
" internalGetAdapted$capitalized_name$Map(\n"
" internalGetMutable$capitalized_name$().getMutableMap())\n"
" .putAll(values);\n"
" $set_has_field_bit$\n"
" return this;\n"
"}\n");
printer->Annotate("{", "}", descriptor_, Semantic::kSet);
} else {
WriteFieldDocComment(printer, descriptor_, context_->options()); WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print( printer->Print(
variables_, variables_,
@ -509,6 +501,99 @@ void ImmutableMapFieldGenerator::GenerateBuilderMembers(
} }
} }
void ImmutableMapFieldGenerator::GenerateBuilderPutValueMethod(
io::Printer* printer) const {
const FieldDescriptor* value = MapValueField(descriptor_);
if (GetJavaType(value) == JAVATYPE_ENUM && SupportUnknownEnumValue(value)) {
if (google::protobuf::internal::IsOss()) {
printer->Print(
variables_,
"/**\n"
" * Use alternate mutation accessors instead.\n"
" */\n"
"@java.lang.Deprecated\n"
"public java.util.Map<$boxed_key_type$, $boxed_value_type$>\n"
"${$getMutable$capitalized_name$Value$}$() {\n"
" $set_has_field_bit$\n"
" return internalGetMutable$capitalized_name$().getMutableMap();\n"
"}\n");
printer->Annotate("{", "}", descriptor_);
}
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(
variables_,
"$deprecation$public Builder ${$put$capitalized_name$Value$}$(\n"
" $key_type$ key,\n"
" $value_type$ value) {\n"
" $key_null_check$\n"
" $value_null_check$\n"
" internalGetMutable$capitalized_name$().getMutableMap()\n"
" .put(key, value);\n"
" $set_has_field_bit$\n"
" return this;\n"
"}\n");
printer->Annotate("{", "}", descriptor_, Semantic::kSet);
}
}
void ImmutableMapFieldGenerator::GenerateBuilderPutAllValueMethod(
io::Printer* printer) const {
const FieldDescriptor* value = MapValueField(descriptor_);
if (GetJavaType(value) == JAVATYPE_ENUM && SupportUnknownEnumValue(value)) {
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(
variables_,
"$deprecation$public Builder ${$putAll$capitalized_name$Value$}$(\n"
" java.util.Map<$boxed_key_type$, $boxed_value_type$> values) {\n"
" internalGetMutable$capitalized_name$().getMutableMap()\n"
" .putAll(values);\n"
" $set_has_field_bit$\n"
" return this;\n"
"}\n");
printer->Annotate("{", "}", descriptor_, Semantic::kSet);
}
}
void ImmutableMapFieldGenerator::GenerateBuilderMembers(
io::Printer* printer) const {
if (GetJavaType(MapValueField(descriptor_)) == JAVATYPE_MESSAGE) {
return GenerateMessageMapBuilderMembers(printer);
}
printer->Print(
variables_,
"private com.google.protobuf.MapField<\n"
" $type_parameters$> $name$_;\n"
"$deprecation$private com.google.protobuf.MapField<$type_parameters$>\n"
" internalGet$capitalized_name$() {\n"
" if ($name$_ == null) {\n"
" return com.google.protobuf.MapField.emptyMapField(\n"
" $map_field_parameter$);\n"
" }\n"
" return $name$_;\n"
"}\n"
"$deprecation$private com.google.protobuf.MapField<$type_parameters$>\n"
" internalGetMutable$capitalized_name$() {\n"
" if ($name$_ == null) {\n"
" $name$_ = com.google.protobuf.MapField.newMapField(\n"
" $map_field_parameter$);\n"
" }\n"
" if (!$name$_.isMutable()) {\n"
" $name$_ = $name$_.copy();\n"
" }\n"
" $set_has_field_bit$\n"
" $on_changed$\n"
" return $name$_;\n"
"}\n");
GenerateMapGetters(printer);
GenerateBuilderClearMethod(printer);
GenerateBuilderRemoveMethod(printer);
GenerateBuilderPutMethod(printer);
GenerateBuilderPutAllMethod(printer);
GenerateBuilderPutValueMethod(printer);
GenerateBuilderPutAllValueMethod(printer);
}
void ImmutableMapFieldGenerator::GenerateMapGetters( void ImmutableMapFieldGenerator::GenerateMapGetters(
io::Printer* printer) const { io::Printer* printer) const {
printer->Print( printer->Print(
@ -698,6 +783,108 @@ void ImmutableMapFieldGenerator::GenerateMapGetters(
} }
} }
void ImmutableMapFieldGenerator::GenerateMessageMapBuilderClearMethod(
io::Printer* printer) const {
printer->Print(
variables_,
"$deprecation$public Builder ${$clear$capitalized_name$$}$() {\n"
" $clear_has_field_bit$\n"
" internalGetMutable$capitalized_name$().clear();\n"
" return this;\n"
"}\n");
printer->Annotate("{", "}", descriptor_, Semantic::kSet);
}
void ImmutableMapFieldGenerator::GenerateMessageMapBuilderRemoveMethod(
io::Printer* printer) const {
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(variables_,
"$deprecation$public Builder ${$remove$capitalized_name$$}$(\n"
" $key_type$ key) {\n"
" $key_null_check$\n"
" internalGetMutable$capitalized_name$().ensureBuilderMap()\n"
" .remove(key);\n"
" return this;\n"
"}\n");
printer->Annotate("{", "}", descriptor_, Semantic::kSet);
}
void ImmutableMapFieldGenerator::GenerateMessageMapBuilderPutMethod(
io::Printer* printer) const {
if (google::protobuf::internal::IsOss()) {
printer->Print(
variables_,
"/**\n"
" * Use alternate mutation accessors instead.\n"
" */\n"
"@java.lang.Deprecated\n"
"public java.util.Map<$type_parameters$>\n"
" ${$getMutable$capitalized_name$$}$() {\n"
" $set_has_field_bit$\n"
" return internalGetMutable$capitalized_name$().ensureMessageMap();\n"
"}\n");
printer->Annotate("{", "}", descriptor_);
}
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(variables_,
"$deprecation$public Builder ${$put$capitalized_name$$}$(\n"
" $key_type$ key,\n"
" $value_type$ value) {\n"
" $key_null_check$\n"
" $value_null_check$\n"
" internalGetMutable$capitalized_name$().ensureBuilderMap()\n"
" .put(key, value);\n"
" $set_has_field_bit$\n"
" return this;\n"
"}\n");
printer->Annotate("{", "}", descriptor_, Semantic::kSet);
}
void ImmutableMapFieldGenerator::GenerateMessageMapBuilderPutAllMethod(
io::Printer* printer) const {
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(
variables_,
"$deprecation$public Builder ${$putAll$capitalized_name$$}$(\n"
" java.util.Map<$type_parameters$> values) {\n"
" for (java.util.Map.Entry<$type_parameters$> e : values.entrySet()) {\n"
" java.util.Objects.requireNonNull(e.getKey());\n"
" java.util.Objects.requireNonNull(e.getValue());\n"
" }\n"
" internalGetMutable$capitalized_name$().ensureBuilderMap()\n"
" .putAll(values);\n"
" $set_has_field_bit$\n"
" return this;\n"
"}\n");
printer->Annotate("{", "}", descriptor_, Semantic::kSet);
}
void ImmutableMapFieldGenerator::
GenerateMessageMapBuilderPutBuilderIfAbsentMethod(
io::Printer* printer) const {
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(
variables_,
"$deprecation$public $value_builder_type$ "
"${$put$capitalized_name$BuilderIfAbsent$}$(\n"
" $key_type$ key) {\n"
" java.util.Map<$boxed_key_type$, $value_interface_type$> builderMap = "
"internalGetMutable$capitalized_name$().ensureBuilderMap();\n"
" $value_interface_type$ entry = builderMap.get(key);\n"
" if (entry == null) {\n"
" entry = $value_type$.newBuilder();\n"
" builderMap.put(key, entry);\n"
" }\n"
" if (entry instanceof $value_type$) {\n"
" entry = (($value_type$) entry).toBuilder();\n"
" builderMap.put(key, entry);\n"
" }\n"
" return ($value_builder_type$) entry;\n"
"}\n");
printer->Annotate("{", "}", descriptor_, Semantic::kSet);
}
void ImmutableMapFieldGenerator::GenerateMessageMapBuilderMembers( void ImmutableMapFieldGenerator::GenerateMessageMapBuilderMembers(
io::Printer* printer) const { io::Printer* printer) const {
printer->Print( printer->Print(
@ -763,91 +950,11 @@ void ImmutableMapFieldGenerator::GenerateMessageMapBuilderMembers(
" return $name$_;\n" " return $name$_;\n"
"}\n"); "}\n");
GenerateMessageMapGetters(printer); GenerateMessageMapGetters(printer);
printer->Print( GenerateMessageMapBuilderClearMethod(printer);
variables_, GenerateMessageMapBuilderRemoveMethod(printer);
"$deprecation$public Builder ${$clear$capitalized_name$$}$() {\n" GenerateMessageMapBuilderPutMethod(printer);
" $clear_has_field_bit$\n" GenerateMessageMapBuilderPutAllMethod(printer);
" internalGetMutable$capitalized_name$().clear();\n" GenerateMessageMapBuilderPutBuilderIfAbsentMethod(printer);
" return this;\n"
"}\n");
printer->Annotate("{", "}", descriptor_, Semantic::kSet);
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(variables_,
"$deprecation$public Builder ${$remove$capitalized_name$$}$(\n"
" $key_type$ key) {\n"
" $key_null_check$\n"
" internalGetMutable$capitalized_name$().ensureBuilderMap()\n"
" .remove(key);\n"
" return this;\n"
"}\n");
printer->Annotate("{", "}", descriptor_, Semantic::kSet);
if (google::protobuf::internal::IsOss()) {
printer->Print(
variables_,
"/**\n"
" * Use alternate mutation accessors instead.\n"
" */\n"
"@java.lang.Deprecated\n"
"public java.util.Map<$type_parameters$>\n"
" ${$getMutable$capitalized_name$$}$() {\n"
" $set_has_field_bit$\n"
" return internalGetMutable$capitalized_name$().ensureMessageMap();\n"
"}\n");
printer->Annotate("{", "}", descriptor_);
}
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(variables_,
"$deprecation$public Builder ${$put$capitalized_name$$}$(\n"
" $key_type$ key,\n"
" $value_type$ value) {\n"
" $key_null_check$\n"
" $value_null_check$\n"
" internalGetMutable$capitalized_name$().ensureBuilderMap()\n"
" .put(key, value);\n"
" $set_has_field_bit$\n"
" return this;\n"
"}\n");
printer->Annotate("{", "}", descriptor_, Semantic::kSet);
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(
variables_,
"$deprecation$public Builder ${$putAll$capitalized_name$$}$(\n"
" java.util.Map<$type_parameters$> values) {\n"
" for (java.util.Map.Entry<$type_parameters$> e : values.entrySet()) {\n"
" java.util.Objects.requireNonNull(e.getKey());\n"
" java.util.Objects.requireNonNull(e.getValue());\n"
" }\n"
" internalGetMutable$capitalized_name$().ensureBuilderMap()\n"
" .putAll(values);\n"
" $set_has_field_bit$\n"
" return this;\n"
"}\n");
printer->Annotate("{", "}", descriptor_, Semantic::kSet);
WriteFieldDocComment(printer, descriptor_, context_->options());
printer->Print(
variables_,
"$deprecation$public $value_builder_type$ "
"${$put$capitalized_name$BuilderIfAbsent$}$(\n"
" $key_type$ key) {\n"
" java.util.Map<$boxed_key_type$, $value_interface_type$> builderMap = "
"internalGetMutable$capitalized_name$().ensureBuilderMap();\n"
" $value_interface_type$ entry = builderMap.get(key);\n"
" if (entry == null) {\n"
" entry = $value_type$.newBuilder();\n"
" builderMap.put(key, entry);\n"
" }\n"
" if (entry instanceof $value_type$) {\n"
" entry = (($value_type$) entry).toBuilder();\n"
" builderMap.put(key, entry);\n"
" }\n"
" return ($value_builder_type$) entry;\n"
"}\n");
printer->Annotate("{", "}", descriptor_, Semantic::kSet);
} }
void ImmutableMapFieldGenerator::GenerateMessageMapGetters( void ImmutableMapFieldGenerator::GenerateMessageMapGetters(

View file

@ -48,6 +48,29 @@ class ImmutableMapFieldGenerator : public ImmutableFieldGenerator {
void GenerateMapGetters(io::Printer* printer) const; void GenerateMapGetters(io::Printer* printer) const;
void GenerateMessageMapBuilderMembers(io::Printer* printer) const; void GenerateMessageMapBuilderMembers(io::Printer* printer) const;
void GenerateMessageMapGetters(io::Printer* printer) const; void GenerateMessageMapGetters(io::Printer* printer) const;
void GenerateInterfaceGetCountMethod(io::Printer* printer) const;
void GenerateInterfaceContainsMethod(io::Printer* printer) const;
void GenerateInterfaceGetMapMethod(io::Printer* printer) const;
void GenerateInterfaceGetOrDefaultMethod(io::Printer* printer) const;
void GenerateInterfaceGetOrThrowMethod(io::Printer* printer) const;
void GenerateInterfaceGetValueMapMethod(io::Printer* printer) const;
void GenerateInterfaceGetValueOrDefaultMethod(io::Printer* printer) const;
void GenerateInterfaceGetValueOrThrowMethod(io::Printer* printer) const;
void GenerateBuilderClearMethod(io::Printer* printer) const;
void GenerateBuilderRemoveMethod(io::Printer* printer) const;
void GenerateBuilderPutMethod(io::Printer* printer) const;
void GenerateBuilderPutAllMethod(io::Printer* printer) const;
void GenerateBuilderPutValueMethod(io::Printer* printer) const;
void GenerateBuilderPutAllValueMethod(io::Printer* printer) const;
void GenerateMessageMapBuilderClearMethod(io::Printer* printer) const;
void GenerateMessageMapBuilderRemoveMethod(io::Printer* printer) const;
void GenerateMessageMapBuilderPutMethod(io::Printer* printer) const;
void GenerateMessageMapBuilderPutAllMethod(io::Printer* printer) const;
void GenerateMessageMapBuilderPutBuilderIfAbsentMethod(
io::Printer* printer) const;
}; };
} // namespace java } // namespace java