@@ -868,14 +868,9 @@ object JsonCodec {
868868 Lexer .char(trace_, rr, ':' )
869869 if (discriminatorFieldName == discriminatorName) {
870870 val discriminatorFieldValue = Lexer .string(trace, rr).toString
871- // Perform a second de-aliasing because the first one would resolve the discriminator key instead.
872- val innerSubtype = deAliasCaseName(discriminatorFieldValue, caseNameAliases)
873- (innerSubtype, JsonError .ObjectAccess (innerSubtype) :: trace_, {
874- if (index > 0 ) {
875- rr.rewind()
876- index
877- } else - 2
878- })
871+ rr.rewind()
872+ val subtype = deAliasCaseName(discriminatorFieldValue, caseNameAliases)
873+ (subtype, JsonError .ObjectAccess (subtype) :: trace_, index)
879874 } else {
880875 Lexer .skipValue(trace_, rr)
881876 if (Lexer .nextField(trace, rr)) findDiscriminator(index + 1 , rr)
@@ -885,15 +880,9 @@ object JsonCodec {
885880
886881 val rr = RecordingReader (in)
887882 val (subtype, trace_, discriminator) = findDiscriminator(0 , rr)
888-
889883 cases.find(_.id == subtype) match {
890884 case Some (c) =>
891- schemaDecoder(c.schema, discriminator)
892- .unsafeDecode(trace_, {
893- if (discriminator >= 0 ) rr
894- else in
895- })
896- .asInstanceOf [Z ]
885+ schemaDecoder(c.schema, discriminator).unsafeDecode(trace_, rr).asInstanceOf [Z ]
897886 case _ =>
898887 throw UnsafeJson (JsonError .Message (" unrecognized subtype" ) :: trace_)
899888 }
@@ -1104,12 +1093,8 @@ object JsonCodec {
11041093 private [codec] def caseClass0Decoder [Z ](discriminator : Int , schema : Schema .CaseClass0 [Z ]): ZJsonDecoder [Z ] = {
11051094 val rejectExtraFields = schema.annotations.exists(_.isInstanceOf [rejectExtraFields])
11061095 (trace : List [JsonError ], in : RetractReader ) => {
1107- var continue =
1108- if (discriminator == - 2 ) Lexer .nextField(trace, in)
1109- else {
1110- if (discriminator == - 1 ) Lexer .char(trace, in, '{' )
1111- Lexer .firstField(trace, in)
1112- }
1096+ if (discriminator == - 1 ) Lexer .char(trace, in, '{' )
1097+ var continue = Lexer .firstField(trace, in)
11131098 while (continue) {
11141099 if (rejectExtraFields) {
11151100 throw UnsafeJson (JsonError .Message (" extra field" ) :: trace)
@@ -1486,13 +1471,9 @@ object JsonCodec {
14861471 val len = fields.length
14871472 val buffer = new Array [Any ](len)
14881473 var reader = in
1489- var continue =
1490- if (discriminator == - 2 ) Lexer .nextField(trace, reader)
1491- else {
1492- if (discriminator == - 1 ) Lexer .char(trace, reader, '{' )
1493- else reader = RecordingReader (reader)
1494- Lexer .firstField(trace, reader)
1495- }
1474+ if (discriminator == - 1 ) Lexer .char(trace, reader, '{' )
1475+ else reader = RecordingReader (reader)
1476+ var continue = Lexer .firstField(trace, reader)
14961477 var pos = 0
14971478 while (continue) {
14981479 val idx = Lexer .field(trace, reader, stringMatrix)
0 commit comments