Skip to content

Commit 93108c9

Browse files
tsp, json-merge-patch, fix issue on patch for discriminator property (#2704)
* fix kind property is not serialized issue * regen * add test case * re-generate test code * modify according to comments * bump version * update lock file * add changelog * update release date --------- Co-authored-by: actions-user <[email protected]>
1 parent 21ad54a commit 93108c9

File tree

10 files changed

+22
-10
lines changed

10 files changed

+22
-10
lines changed

javagen/src/main/java/com/azure/autorest/template/ModelTemplate.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -821,6 +821,9 @@ private void addModelConstructor(ClientModel model, JavaVisibility constructorVi
821821
if (modelDefinesProperty(model, polymorphicProperty)) {
822822
constructor.line("this." + polymorphicProperty.getName() + " = " + discriminatorValue + ";");
823823
}
824+
if (ClientModelUtil.isJsonMergePatchModel(model)) {
825+
constructor.line("this.updatedProperties.add(\"" + polymorphicProperty.getName() + "\");");
826+
}
824827
// else {
825828
// constructor.line(polymorphicProperty.getSetterName() + "(" + discriminatorValue + ");");
826829
// }

javagen/src/main/java/com/azure/autorest/template/StreamSerializationModelTemplate.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,7 @@ private static void serializeJsonProperty(JavaBlock methodBlock, ClientModelProp
383383
propertyValueGetter);
384384
if (fieldSerializationMethod != null) {
385385
if (isJsonMergePatch && wireType instanceof ClassType && ((ClassType) wireType).isSwaggerType()) {
386-
methodBlock.line(String.format("JsonMergePatchHelper.get%1$sAccessor().prepareModelForJsonMergePatch(%2$s, true);", clientType.toString(), propertyValueGetter));
386+
methodBlock.line("JsonMergePatchHelper.get" + clientType.toString() + "Accessor().prepareModelForJsonMergePatch(" + propertyValueGetter + ", true);");
387387
}
388388
if (fromSuperType && clientType != wireType && clientType.isNullable()) {
389389
// If the property is from a super type and the client type is different from the wire type then a null
@@ -394,7 +394,7 @@ private static void serializeJsonProperty(JavaBlock methodBlock, ClientModelProp
394394
methodBlock.line(fieldSerializationMethod + ";");
395395
}
396396
if (isJsonMergePatch && wireType instanceof ClassType && ((ClassType) wireType).isSwaggerType()) {
397-
methodBlock.line(String.format("JsonMergePatchHelper.get%1$sAccessor().prepareModelForJsonMergePatch(%2$s, false);", clientType.toString(), propertyValueGetter));
397+
methodBlock.line("JsonMergePatchHelper.get" + clientType.toString() + "Accessor().prepareModelForJsonMergePatch(" + propertyValueGetter + ", false);");
398398
}
399399
} else if (wireType == ClassType.OBJECT) {
400400
methodBlock.line("jsonWriter.writeUntypedField(\"" + serializedName + "\", " + propertyValueGetter + ");");
@@ -482,11 +482,11 @@ private static void serializeJsonContainerProperty(JavaBlock methodBlock, String
482482
methodBlock.block("", codeBlock -> {
483483
codeBlock.ifBlock(elementName + "!=null", ifBlock -> {
484484
if (elementType instanceof ClassType && ((ClassType) elementType).isSwaggerType()) {
485-
methodBlock.line(String.format("JsonMergePatchHelper.get%1$sAccessor().prepareModelForJsonMergePatch(%2$s, true);", ((ClassType) elementType).getName(), elementName));
485+
methodBlock.line("JsonMergePatchHelper.get" + ((ClassType) elementType).getName() + "Accessor().prepareModelForJsonMergePatch(" + elementName + ", true);");
486486
}
487487
ifBlock.line(valueSerializationMethod + ";");
488488
if (elementType instanceof ClassType && ((ClassType) elementType).isSwaggerType()) {
489-
methodBlock.line(String.format("JsonMergePatchHelper.get%1$sAccessor().prepareModelForJsonMergePatch(%2$s, false);", ((ClassType) elementType).getName(), elementName));
489+
methodBlock.line("JsonMergePatchHelper.get" + ((ClassType) elementType).getName() + "Accessor().prepareModelForJsonMergePatch(" + elementName + ", false);");
490490
}
491491
}).elseBlock(elseBlock -> elseBlock.line(lambdaWriterName + ".writeNull();"));
492492
});

typespec-extension/changelog.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Release History
22

3+
## 0.15.12 (2024-04-19)
4+
5+
Compatible with compiler 0.55.
6+
7+
- Bug fix on supporting `application/merge-patch+json`.
8+
39
## 0.15.10 (2024-04-17)
410

511
Compatible with compiler 0.55.

typespec-extension/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

typespec-extension/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@azure-tools/typespec-java",
3-
"version": "0.15.10",
3+
"version": "0.15.11",
44
"description": "TypeSpec library for emitting Java client from the TypeSpec REST protocol binding",
55
"keywords": [
66
"TypeSpec"

typespec-tests/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
},
1111
"dependencies": {
1212
"@azure-tools/cadl-ranch-specs": "0.31.8",
13-
"@azure-tools/typespec-java": "file:/../typespec-extension/azure-tools-typespec-java-0.15.10.tgz"
13+
"@azure-tools/typespec-java": "file:/../typespec-extension/azure-tools-typespec-java-0.15.11.tgz"
1414
},
1515
"devDependencies": {
1616
"@typespec/prettier-plugin-typespec": "~0.55.0",

typespec-tests/src/main/java/com/cadl/patch/models/Fish.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ void serializeAsJsonMergePatch(boolean jsonMergePatch) {
7777
@Generated
7878
public Fish() {
7979
this.kind = "Fish";
80+
this.updatedProperties.add("kind");
8081
}
8182

8283
/**

typespec-tests/src/main/java/com/cadl/patch/models/Salmon.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ void serializeAsJsonMergePatch(boolean jsonMergePatch) {
7272
*/
7373
@Generated
7474
public Salmon() {
75+
this.updatedProperties.add("kind");
7576
}
7677

7778
/**

typespec-tests/src/main/java/com/cadl/patch/models/Shark.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ void serializeAsJsonMergePatch(boolean jsonMergePatch) {
5151
*/
5252
@Generated
5353
public Shark() {
54+
this.updatedProperties.add("kind");
5455
}
5556

5657
/**

typespec-tests/src/test/java/com/cadl/patch/PatchClientTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,8 @@ public void testSerializationForHierarchicalProperty() throws JsonProcessingExce
132132
String json = BinaryData.fromObject(resource).toString();
133133
JsonNode node = OBJECT_MAPPER.readTree(json);
134134
Assertions.assertEquals(JsonNodeType.NULL, node.get("fish").get("color").getNodeType());
135-
// TODO: once supported, we should uncomment this validation.
136-
// Assertions.assertEquals("shark", node.get("fish").get("kind"));
135+
Assertions.assertEquals("shark", node.get("fish").get("kind").asText());
136+
Assertions.assertEquals(2, node.get("fish").get("age").asInt());
137137
}
138138

139139
@Test

0 commit comments

Comments
 (0)