From 486997919ab4d288663978ac537b0e19d755ad76 Mon Sep 17 00:00:00 2001 From: Mark Probst Date: Mon, 7 Sep 2026 07:06:21 -0700 Subject: [PATCH 1/3] fix(java): reserve Jackson converter types --- .../src/language/Java/JavaJacksonRenderer.ts | 4 +++ test/inputs/json/priority/keywords.json | 20 +++++++------ test/inputs/schema/keyword-enum.schema | 4 +++ test/inputs/schema/keyword-unions.schema | 28 +++++++++++++++++++ test/keywords.txt | 4 +++ 5 files changed, 52 insertions(+), 8 deletions(-) diff --git a/packages/quicktype-core/src/language/Java/JavaJacksonRenderer.ts b/packages/quicktype-core/src/language/Java/JavaJacksonRenderer.ts index f6af97f157..5f159b5fb8 100644 --- a/packages/quicktype-core/src/language/Java/JavaJacksonRenderer.ts +++ b/packages/quicktype-core/src/language/Java/JavaJacksonRenderer.ts @@ -32,6 +32,10 @@ export class JacksonRenderer extends JavaRenderer { "JsonParser", "JsonProcessingException", "ObjectMapper", + "ObjectReader", + "ObjectWriter", + "DeserializationFeature", + "SerializationFeature", "DeserializationContext", "SerializerProvider", "None", diff --git a/test/inputs/json/priority/keywords.json b/test/inputs/json/priority/keywords.json index fce8e35bba..c498f94b84 100644 --- a/test/inputs/json/priority/keywords.json +++ b/test/inputs/json/priority/keywords.json @@ -76,6 +76,7 @@ "debugger": { "debugger": 123 }, "decimal": { "decimal": 123 }, "declare": { "declare": 123 }, + "DeserializationFeature": { "DeserializationFeature": 123 }, "decltype": { "decltype": 123 }, "decode_string": { "decode_string": 123 }, "Decoder": { "Decoder": 123 }, @@ -130,10 +131,10 @@ "function": { "function": 123 }, "get": { "get": 123 }, "global": { "global": 123 }, - "go": { "go": 123 }, "dummy": 123 }, "obj3": { + "go": { "go": 123 }, "goto": { "goto": 123 }, "guard": { "guard": 123 }, "Hashable": { "Hashable": 123 }, @@ -197,10 +198,10 @@ "new": { "new": 123 }, "newtonsoft": { "newtonsoft": 123 }, "nil": { "nil": 123 }, - "NO": { "NO": 123 }, "dummy": 123 }, "obj4": { + "NO": { "NO": 123 }, "noexcept": { "noexcept": 123 }, "nonatomic": { "nonatomic": 123 }, "none": { "none": 123 }, @@ -219,6 +220,8 @@ "number": { "number": 123 }, "object": { "object": 123 }, "ObjectMapper": { "ObjectMapper": 123 }, + "ObjectReader": { "ObjectReader": 123 }, + "ObjectWriter": { "ObjectWriter": 123 }, "of": { "of": 123 }, "oneway": { "oneway": 123 }, "open": { "open": 123 }, @@ -262,18 +265,19 @@ "right": { "right": 123 }, "runtimeType": { "runtimeType": 123 }, "s": { "s": 123 }, - "sbyte": { "sbyte": 123 }, - "sealed": { "sealed": 123 }, - "SEL": { "SEL": 123 }, "dummy": 123 }, "obj5": { + "sbyte": { "sbyte": 123 }, + "sealed": { "sealed": 123 }, + "SEL": { "SEL": 123 }, "select": { "select": 123 }, "Self": { "Self": 123 }, "Serializable": { "Serializable": 123 }, "self": { "self": 123 }, "Sendable": { "Sendable": 123 }, "serialize": { "serialize": 123 }, + "SerializationFeature": { "SerializationFeature": 123 }, "SerialName": { "SerialName": 123 }, "KSerializer": { "KSerializer": 123 }, "PrimitiveKind": { "PrimitiveKind": 123 }, @@ -328,13 +332,13 @@ "ulong": { "ulong": 123 }, "unchecked": { "unchecked": 123 }, "undefined": { "undefined": 123 }, + "dummy": 123 + }, + "obj6": { "union": { "union": 123 }, "UseSerializers": { "UseSerializers": 123 }, "unowned": { "unowned": 123 }, "unsafe": { "unsafe": 123 }, - "dummy": 123 - }, - "obj6": { "unsigned": { "unsigned": 123 }, "ushort": { "ushort": 123 }, "using": { "using": 123 }, diff --git a/test/inputs/schema/keyword-enum.schema b/test/inputs/schema/keyword-enum.schema index 5a24b92a0f..2c720a48f3 100644 --- a/test/inputs/schema/keyword-enum.schema +++ b/test/inputs/schema/keyword-enum.schema @@ -77,6 +77,7 @@ "debugger", "decimal", "declare", + "DeserializationFeature", "decltype", "decode_string", "Decoder", @@ -214,6 +215,8 @@ "number", "object", "ObjectMapper", + "ObjectReader", + "ObjectWriter", "of", "oneway", "open", @@ -266,6 +269,7 @@ "self", "Sendable", "serialize", + "SerializationFeature", "SerialName", "KSerializer", "PrimitiveKind", diff --git a/test/inputs/schema/keyword-unions.schema b/test/inputs/schema/keyword-unions.schema index c4ff0945be..e38ef419d3 100644 --- a/test/inputs/schema/keyword-unions.schema +++ b/test/inputs/schema/keyword-unions.schema @@ -512,6 +512,13 @@ ], "title": "union_declare" }, + "DeserializationFeature": { + "oneOf": [ + { "type": "number" }, + { "type": "object", "additionalProperties": false, "title": "DeserializationFeature" } + ], + "title": "union_DeserializationFeature" + }, "decltype": { "oneOf": [ { "type": "number" }, @@ -1471,6 +1478,20 @@ ], "title": "union_ObjectMapper" }, + "ObjectReader": { + "oneOf": [ + { "type": "number" }, + { "type": "object", "additionalProperties": false, "title": "ObjectReader" } + ], + "title": "union_ObjectReader" + }, + "ObjectWriter": { + "oneOf": [ + { "type": "number" }, + { "type": "object", "additionalProperties": false, "title": "ObjectWriter" } + ], + "title": "union_ObjectWriter" + }, "of": { "oneOf": [ { "type": "number" }, @@ -1835,6 +1856,13 @@ ], "title": "union_serialize" }, + "SerializationFeature": { + "oneOf": [ + { "type": "number" }, + { "type": "object", "additionalProperties": false, "title": "SerializationFeature" } + ], + "title": "union_SerializationFeature" + }, "SerialName": { "oneOf": [ { "type": "number" }, diff --git a/test/keywords.txt b/test/keywords.txt index 2859a322a6..5c02224294 100644 --- a/test/keywords.txt +++ b/test/keywords.txt @@ -71,6 +71,7 @@ DateTimeStyles debugger decimal declare +DeserializationFeature decltype decode_string Decoder @@ -208,6 +209,8 @@ nullptr number object ObjectMapper +ObjectReader +ObjectWriter of oneway open @@ -260,6 +263,7 @@ Serializable self Sendable serialize +SerializationFeature SerialName KSerializer PrimitiveKind From aff61c6bdcd5fb0775a2a751805a4997960a68e5 Mon Sep 17 00:00:00 2001 From: Mark Probst Date: Mon, 7 Sep 2026 06:53:56 -0700 Subject: [PATCH 2/3] fix(kotlin): reserve Jackson node names --- .../src/language/Kotlin/KotlinJacksonRenderer.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/quicktype-core/src/language/Kotlin/KotlinJacksonRenderer.ts b/packages/quicktype-core/src/language/Kotlin/KotlinJacksonRenderer.ts index dfcf5d01d1..9e424b57f4 100644 --- a/packages/quicktype-core/src/language/Kotlin/KotlinJacksonRenderer.ts +++ b/packages/quicktype-core/src/language/Kotlin/KotlinJacksonRenderer.ts @@ -32,6 +32,14 @@ export class KotlinJacksonRenderer extends KotlinRenderer { "JsonGenerator", "JsonNode", "JsonParser", + "ArrayNode", + "BooleanNode", + "DoubleNode", + "IntNode", + "LongNode", + "NullNode", + "ObjectNode", + "TextNode", "ObjectMapper", "SerializerProvider", "SimpleModule", From c7e4769c8e0028a732682d5e1a2e1949c97bf3f6 Mon Sep 17 00:00:00 2001 From: Mark Probst Date: Mon, 7 Sep 2026 06:56:59 -0700 Subject: [PATCH 3/3] test: cover Jackson node names --- .../language/Kotlin/KotlinJacksonRenderer.ts | 2 + test/inputs/json/priority/keywords.json | 38 ++++++---- test/inputs/schema/direct-union.1.json | 10 ++- test/inputs/schema/direct-union.schema | 20 +++++- test/inputs/schema/keyword-enum.schema | 10 ++- test/inputs/schema/keyword-unions.schema | 70 +++++++++++++++++-- test/keywords.txt | 10 ++- 7 files changed, 133 insertions(+), 27 deletions(-) diff --git a/packages/quicktype-core/src/language/Kotlin/KotlinJacksonRenderer.ts b/packages/quicktype-core/src/language/Kotlin/KotlinJacksonRenderer.ts index 9e424b57f4..408525bea9 100644 --- a/packages/quicktype-core/src/language/Kotlin/KotlinJacksonRenderer.ts +++ b/packages/quicktype-core/src/language/Kotlin/KotlinJacksonRenderer.ts @@ -34,6 +34,7 @@ export class KotlinJacksonRenderer extends KotlinRenderer { "JsonParser", "ArrayNode", "BooleanNode", + "DeserializationFeature", "DoubleNode", "IntNode", "LongNode", @@ -42,6 +43,7 @@ export class KotlinJacksonRenderer extends KotlinRenderer { "TextNode", "ObjectMapper", "SerializerProvider", + "SerializationFeature", "SimpleModule", "StdDeserializer", "StdSerializer", diff --git a/test/inputs/json/priority/keywords.json b/test/inputs/json/priority/keywords.json index c498f94b84..ea1d081135 100644 --- a/test/inputs/json/priority/keywords.json +++ b/test/inputs/json/priority/keywords.json @@ -11,6 +11,7 @@ "and_eq": { "and_eq": 123 }, "any": { "any": 123 }, "Any": { "Any": 123 }, + "ArrayNode": { "ArrayNode": 123 }, "array": { "array": 123 }, "as": { "as": 123 }, "asm": { "asm": 123 }, @@ -30,6 +31,7 @@ "BOOL": { "BOOL": 123 }, "bool": { "bool": 123 }, "boolean": { "boolean": 123 }, + "BooleanNode": { "BooleanNode": 123 }, "break": { "break": 123 }, "bycopy": { "bycopy": 123 }, "byref": { "byref": 123 }, @@ -62,11 +64,11 @@ "convenience": { "convenience": 123 }, "convert": { "convert": 123 }, "converter": { "converter": 123 }, - "CultureInfo": { "CultureInfo": 123 }, - "date": { "date": 123 }, "dummy": 123 }, "obj2": { + "CultureInfo": { "CultureInfo": 123 }, + "date": { "date": 123 }, "date_parse_handling": { "date_parse_handling": 123 }, "DateFormatter": { "DateFormatter": 123 }, "DateOnly": { "DateOnly": 123 }, @@ -93,6 +95,7 @@ "didSet": { "didSet": 123 }, "do": { "do": 123 }, "double": { "double": 123 }, + "DoubleNode": { "DoubleNode": 123 }, "dynamic": { "dynamic": 123 }, "dynamic_cast": { "dynamic_cast": 123 }, "elif": { "elif": 123 }, @@ -128,12 +131,12 @@ "from_dict": { "from_dict": 123 }, "from_json": { "from_json": 123 }, "func": { "func": 123 }, - "function": { "function": 123 }, - "get": { "get": 123 }, - "global": { "global": 123 }, "dummy": 123 }, "obj3": { + "function": { "function": 123 }, + "get": { "get": 123 }, + "global": { "global": 123 }, "go": { "go": 123 }, "goto": { "goto": 123 }, "guard": { "guard": 123 }, @@ -155,6 +158,7 @@ "inout": { "inout": 123 }, "instanceof": { "instanceof": 123 }, "int": { "int": 123 }, + "IntNode": { "IntNode": 123 }, "interface": { "interface": 123 }, "internal": { "internal": 123 }, "IsoDateTimeOffsetConverter": { "IsoDateTimeOffsetConverter": 123 }, @@ -184,6 +188,7 @@ "left": { "left": 123 }, "let": { "let": 123 }, "list": { "list": 123 }, + "LongNode": { "LongNode": 123 }, "Locale": { "Locale": 123 }, "lock": { "lock": 123 }, "long": { "long": 123 }, @@ -193,14 +198,15 @@ "module": { "module": 123 }, "mutable": { "mutable": 123 }, "mutating": { "mutating": 123 }, + "dummy": 123 + }, + "obj4": { "namespace": { "namespace": 123 }, "native": { "native": 123 }, "new": { "new": 123 }, "newtonsoft": { "newtonsoft": 123 }, "nil": { "nil": 123 }, - "dummy": 123 - }, - "obj4": { + "NullNode": { "NullNode": 123 }, "NO": { "NO": 123 }, "noexcept": { "noexcept": 123 }, "nonatomic": { "nonatomic": 123 }, @@ -219,6 +225,7 @@ "nullptr": { "nullptr": 123 }, "number": { "number": 123 }, "object": { "object": 123 }, + "ObjectNode": { "ObjectNode": 123 }, "ObjectMapper": { "ObjectMapper": 123 }, "ObjectReader": { "ObjectReader": 123 }, "ObjectWriter": { "ObjectWriter": 123 }, @@ -258,6 +265,9 @@ "require": { "require": 123 }, "required": { "required": 123 }, "requires": { "requires": 123 }, + "dummy": 123 + }, + "obj5": { "restrict": { "restrict": 123 }, "retain": { "retain": 123 }, "rethrows": { "rethrows": 123 }, @@ -265,9 +275,6 @@ "right": { "right": 123 }, "runtimeType": { "runtimeType": 123 }, "s": { "s": 123 }, - "dummy": 123 - }, - "obj5": { "sbyte": { "sbyte": 123 }, "sealed": { "sealed": 123 }, "SEL": { "SEL": 123 }, @@ -277,11 +284,11 @@ "self": { "self": 123 }, "Sendable": { "Sendable": 123 }, "serialize": { "serialize": 123 }, - "SerializationFeature": { "SerializationFeature": 123 }, "SerialName": { "SerialName": 123 }, "KSerializer": { "KSerializer": 123 }, "PrimitiveKind": { "PrimitiveKind": 123 }, "SerialDescriptor": { "SerialDescriptor": 123 }, + "SerializationFeature": { "SerializationFeature": 123 }, "SerializerProvider": { "SerializerProvider": 123 }, "set": { "set": 123 }, "short": { "short": 123 }, @@ -307,6 +314,7 @@ "template": { "template": 123 }, "then": { "then": 123 }, "this": { "this": 123 }, + "TextNode": { "TextNode": 123 }, "thread_local": { "thread_local": 123 }, "throw": { "throw": 123 }, "throws": { "throws": 123 }, @@ -324,6 +332,9 @@ "Type": { "Type": 123 }, "type": { "type": 123 }, "typealias": { "typealias": 123 }, + "dummy": 123 + }, + "obj6": { "typedef": { "typedef": 123 }, "typeid": { "typeid": 123 }, "typename": { "typename": 123 }, @@ -332,9 +343,6 @@ "ulong": { "ulong": 123 }, "unchecked": { "unchecked": 123 }, "undefined": { "undefined": 123 }, - "dummy": 123 - }, - "obj6": { "union": { "union": 123 }, "UseSerializers": { "UseSerializers": 123 }, "unowned": { "unowned": 123 }, diff --git a/test/inputs/schema/direct-union.1.json b/test/inputs/schema/direct-union.1.json index 5227ae2d95..2c6a419c72 100644 --- a/test/inputs/schema/direct-union.1.json +++ b/test/inputs/schema/direct-union.1.json @@ -1,4 +1,12 @@ { + "arrayNode": {}, + "booleanNode": {}, + "doubleNode": {}, + "intNode": {}, + "longNode": {}, + "nullNode": {}, + "objectNode": {}, + "textNode": {}, "stuff": { "one": { "required": null @@ -18,4 +26,4 @@ ] } } -} \ No newline at end of file +} diff --git a/test/inputs/schema/direct-union.schema b/test/inputs/schema/direct-union.schema index 0ecf1a486a..93bdcb4ec5 100644 --- a/test/inputs/schema/direct-union.schema +++ b/test/inputs/schema/direct-union.schema @@ -7,12 +7,28 @@ "additionalProperties": { "$ref": "#/definitions/thing" } - } + }, + "arrayNode": { "$ref": "#/definitions/ArrayNode" }, + "booleanNode": { "$ref": "#/definitions/BooleanNode" }, + "doubleNode": { "$ref": "#/definitions/DoubleNode" }, + "intNode": { "$ref": "#/definitions/IntNode" }, + "longNode": { "$ref": "#/definitions/LongNode" }, + "nullNode": { "$ref": "#/definitions/NullNode" }, + "objectNode": { "$ref": "#/definitions/ObjectNode" }, + "textNode": { "$ref": "#/definitions/TextNode" } }, "required": [ "stuff" ], "definitions": { + "ArrayNode": { "type": "object", "additionalProperties": false }, + "BooleanNode": { "type": "object", "additionalProperties": false }, + "DoubleNode": { "type": "object", "additionalProperties": false }, + "IntNode": { "type": "object", "additionalProperties": false }, + "LongNode": { "type": "object", "additionalProperties": false }, + "NullNode": { "type": "object", "additionalProperties": false }, + "ObjectNode": { "type": "object", "additionalProperties": false }, + "TextNode": { "type": "object", "additionalProperties": false }, "thing": { "type": "object", "additionalProperties": false, @@ -40,4 +56,4 @@ ] } } -} \ No newline at end of file +} diff --git a/test/inputs/schema/keyword-enum.schema b/test/inputs/schema/keyword-enum.schema index 2c720a48f3..c3075f0ff4 100644 --- a/test/inputs/schema/keyword-enum.schema +++ b/test/inputs/schema/keyword-enum.schema @@ -15,6 +15,7 @@ "and_eq", "any", "Any", + "ArrayNode", "array", "as", "asm", @@ -34,6 +35,7 @@ "BOOL", "bool", "boolean", + "BooleanNode", "break", "bycopy", "byref", @@ -94,6 +96,7 @@ "didSet", "do", "double", + "DoubleNode", "dynamic", "dynamic_cast", "elif", @@ -153,6 +156,7 @@ "inout", "instanceof", "int", + "IntNode", "interface", "internal", "IsoDateTimeOffsetConverter", @@ -182,6 +186,7 @@ "left", "let", "list", + "LongNode", "Locale", "lock", "long", @@ -196,6 +201,7 @@ "new", "newtonsoft", "nil", + "NullNode", "NO", "noexcept", "nonatomic", @@ -214,6 +220,7 @@ "nullptr", "number", "object", + "ObjectNode", "ObjectMapper", "ObjectReader", "ObjectWriter", @@ -269,11 +276,11 @@ "self", "Sendable", "serialize", - "SerializationFeature", "SerialName", "KSerializer", "PrimitiveKind", "SerialDescriptor", + "SerializationFeature", "SerializerProvider", "set", "short", @@ -299,6 +306,7 @@ "template", "then", "this", + "TextNode", "thread_local", "throw", "throws", diff --git a/test/inputs/schema/keyword-unions.schema b/test/inputs/schema/keyword-unions.schema index e38ef419d3..d4f03d4932 100644 --- a/test/inputs/schema/keyword-unions.schema +++ b/test/inputs/schema/keyword-unions.schema @@ -78,6 +78,13 @@ ], "title": "union_Any" }, + "ArrayNode": { + "oneOf": [ + { "type": "number" }, + { "type": "object", "additionalProperties": false, "title": "ArrayNode" } + ], + "title": "union_ArrayNode" + }, "array": { "oneOf": [ { "type": "number" }, @@ -211,6 +218,13 @@ ], "title": "union_boolean" }, + "BooleanNode": { + "oneOf": [ + { "type": "number" }, + { "type": "object", "additionalProperties": false, "title": "BooleanNode" } + ], + "title": "union_BooleanNode" + }, "break": { "oneOf": [ { "type": "number" }, @@ -631,6 +645,13 @@ ], "title": "union_double" }, + "DoubleNode": { + "oneOf": [ + { "type": "number" }, + { "type": "object", "additionalProperties": false, "title": "DoubleNode" } + ], + "title": "union_DoubleNode" + }, "dynamic": { "oneOf": [ { "type": "number" }, @@ -1044,6 +1065,13 @@ ], "title": "union_int" }, + "IntNode": { + "oneOf": [ + { "type": "number" }, + { "type": "object", "additionalProperties": false, "title": "IntNode" } + ], + "title": "union_IntNode" + }, "interface": { "oneOf": [ { "type": "number" }, @@ -1247,6 +1275,13 @@ ], "title": "union_list" }, + "LongNode": { + "oneOf": [ + { "type": "number" }, + { "type": "object", "additionalProperties": false, "title": "LongNode" } + ], + "title": "union_LongNode" + }, "Locale": { "oneOf": [ { "type": "number" }, @@ -1345,6 +1380,13 @@ ], "title": "union_nil" }, + "NullNode": { + "oneOf": [ + { "type": "number" }, + { "type": "object", "additionalProperties": false, "title": "NullNode" } + ], + "title": "union_NullNode" + }, "NO": { "oneOf": [ { "type": "number" }, @@ -1471,6 +1513,13 @@ ], "title": "union_object" }, + "ObjectNode": { + "oneOf": [ + { "type": "number" }, + { "type": "object", "additionalProperties": false, "title": "ObjectNode" } + ], + "title": "union_ObjectNode" + }, "ObjectMapper": { "oneOf": [ { "type": "number" }, @@ -1856,13 +1905,6 @@ ], "title": "union_serialize" }, - "SerializationFeature": { - "oneOf": [ - { "type": "number" }, - { "type": "object", "additionalProperties": false, "title": "SerializationFeature" } - ], - "title": "union_SerializationFeature" - }, "SerialName": { "oneOf": [ { "type": "number" }, @@ -1891,6 +1933,13 @@ ], "title": "union_SerialDescriptor" }, + "SerializationFeature": { + "oneOf": [ + { "type": "number" }, + { "type": "object", "additionalProperties": false, "title": "SerializationFeature" } + ], + "title": "union_SerializationFeature" + }, "SerializerProvider": { "oneOf": [ { "type": "number" }, @@ -2066,6 +2115,13 @@ ], "title": "union_this" }, + "TextNode": { + "oneOf": [ + { "type": "number" }, + { "type": "object", "additionalProperties": false, "title": "TextNode" } + ], + "title": "union_TextNode" + }, "thread_local": { "oneOf": [ { "type": "number" }, diff --git a/test/keywords.txt b/test/keywords.txt index 5c02224294..e46b59de71 100644 --- a/test/keywords.txt +++ b/test/keywords.txt @@ -9,6 +9,7 @@ and and_eq any Any +ArrayNode array as asm @@ -28,6 +29,7 @@ bitor BOOL bool boolean +BooleanNode break bycopy byref @@ -88,6 +90,7 @@ dictionary didSet do double +DoubleNode dynamic dynamic_cast elif @@ -147,6 +150,7 @@ inline inout instanceof int +IntNode interface internal IsoDateTimeOffsetConverter @@ -176,6 +180,7 @@ lazy left let list +LongNode Locale lock long @@ -190,6 +195,7 @@ native new newtonsoft nil +NullNode NO noexcept nonatomic @@ -208,6 +214,7 @@ null nullptr number object +ObjectNode ObjectMapper ObjectReader ObjectWriter @@ -263,11 +270,11 @@ Serializable self Sendable serialize -SerializationFeature SerialName KSerializer PrimitiveKind SerialDescriptor +SerializationFeature SerializerProvider set short @@ -293,6 +300,7 @@ system template then this +TextNode thread_local throw throws