Skip to content

Commit 2b7920b

Browse files
committed
in dotty, getters of fields are not in a list of memberMethods.
1 parent 7cedbe4 commit 2b7920b

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

jsoniter-scala-macros/shared/src/main/scala-3/JsonCodeMaker.scala

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1285,7 +1285,7 @@ object JsonCodecMaker {
12851285
}
12861286
}
12871287

1288-
case class FieldInfo(symbol: Symbol, mappedName: String, getter: Symbol,
1288+
case class FieldInfo(symbol: Symbol, mappedName: String, field: Symbol,
12891289
defaultValue: Option[Term], resolvedTpe: TypeRepr, isStringified: Boolean)
12901290

12911291
case class ClassInfo(tpe: TypeRepr, fields: Seq[FieldInfo])
@@ -1314,7 +1314,13 @@ object JsonCodecMaker {
13141314
val tpeClassSym = tpe.classSymbol.getOrElse(fail(s"expected that ${tpe.show} has classSymbol"))
13151315

13161316
//lazy val module = companion(tpe).asModule // don't lookup for the companion when there are no default values for constructor params
1317-
val getters = tpeClassSym.methodMembers.collect{ case m: Symbol if m.flags.is(Flags.FieldAccessor) && m.paramSymss.isEmpty => m }
1317+
//val getters = tpeClassSym.methodMembers.collect{ case m: Symbol if m.flags.is(Flags.FieldAccessor) && m.paramSymss.isEmpty => m }
1318+
val fields = tpeClassSym.fieldMembers
1319+
if (tpeClassSym.name == "Nested") {
1320+
println("!!tpeClassSym.name==Nested")
1321+
println(s"members = ${tpeClassSym.methodMembers}")
1322+
println(s"fields = ${fields}")
1323+
}
13181324
val annotations = tpeClassSym.fieldMembers.collect {
13191325
case m: Symbol if hasSupportedAnnotation(m) =>
13201326
val name = decodeName(m).trim // FIXME: Why is there a space at the end of field name?!
@@ -1345,8 +1351,12 @@ object JsonCodecMaker {
13451351
case Left((message, expr)) => fail("Can't interpret fieldNameMapper:"+message)
13461352
case Right(optValue) => optValue.getOrElse(name)
13471353
}(_.partiallyMappedName)
1348-
val getter = getters.find(_.name == symbol.name).getOrElse {
1349-
fail(s"'$name' parameter of '$tpe' should be defined as 'val' or 'var' in the primary constructor.")
1354+
//val getter = getters.find(_.name == symbol.name).getOrElse {
1355+
// println(s"!!!fail (name - parameters: ):getters = $getters, name=${symbol.name}")
1356+
// fail(s"'$name' parameter of '$tpe' should be defined as 'val' or 'var' in the primary constructor.")
1357+
//}
1358+
val field = fields.find(_.name == symbol.name).getOrElse{
1359+
fail(s"'$name' parameter of '$tpe' should be defined as 'val' or 'var' in the primary constructor.")
13501360
}
13511361
//???
13521362
//val paramType = tpe.memberType(sym)
@@ -1358,7 +1368,7 @@ object JsonCodecMaker {
13581368
//else None
13591369
val isStringified = annotationOption.exists(_.stringified)
13601370
val fieldType = tpe.memberType(symbol) // paramType(tpe, symbol) -- ???
1361-
Some(FieldInfo(symbol, mappedName, getter, defaultValue, fieldType, isStringified))
1371+
Some(FieldInfo(symbol, mappedName, field, defaultValue, fieldType, isStringified))
13621372
}
13631373
}
13641374
case _ => fail(s"'$tpe' has a primary constructor with multiple parameter lists. " +
@@ -2512,7 +2522,7 @@ object JsonCodecMaker {
25122522
fDefault match {
25132523
case Some(d) =>
25142524
if (f.resolvedTpe <:< TypeRepr.of[Iterable[?]] && cfg.transientEmpty) {
2515-
'{ val v = ${ Select(x.asTerm, f.getter).asExprOf[Iterable[?]] }
2525+
'{ val v = ${ Select(x.asTerm, f.field).asExprOf[Iterable[?]] }
25162526
if (!v.isEmpty && v != ${d.asExprOf[ft]}) {
25172527
${genWriteConstantKey(f.mappedName, out)}
25182528
${genWriteVal('v, f.resolvedTpe :: types, f.isStringified, None, out)}
@@ -2522,7 +2532,7 @@ object JsonCodecMaker {
25222532
typeArg1(f.resolvedTpe).asType match
25232533
case '[t1] =>
25242534
'{
2525-
val v = ${ Select(x.asTerm, f.getter).asExprOf[Option[t1]] }
2535+
val v = ${ Select(x.asTerm, f.field).asExprOf[Option[t1]] }
25262536
if ((v ne None) && v != ${d.asExprOf[ft]}) {
25272537
${genWriteConstantKey(f.mappedName, out)}
25282538
//val vg = v.get
@@ -2539,15 +2549,15 @@ object JsonCodecMaker {
25392549
} else
25402550
'{ !${withEqualsFor(f.resolvedTpe, v, da)( (x1, x2) => genArrayEquals(f.resolvedTpe, x1, x2))} }
25412551
'{
2542-
val v = ${ Select(x.asTerm, f.getter).asExprOf[ft & Array[?]] }
2552+
val v = ${ Select(x.asTerm, f.field).asExprOf[ft & Array[?]] }
25432553
if (${cond('v)}) {
25442554
${genWriteConstantKey(f.mappedName, out)}
25452555
${genWriteVal( 'v, f.resolvedTpe :: types, f.isStringified, None, out)}
25462556
}
25472557
}
25482558
} else {
25492559
'{
2550-
val v = ${ Select(x.asTerm, f.getter).asExprOf[ft] }
2560+
val v = ${ Select(x.asTerm, f.field).asExprOf[ft] }
25512561
if (v != ${d.asExprOf[ft]}) {
25522562
${genWriteConstantKey(f.mappedName, out)}
25532563
${genWriteVal('v, f.resolvedTpe :: types, f.isStringified, None, out)}
@@ -2557,7 +2567,7 @@ object JsonCodecMaker {
25572567
case None =>
25582568
if (f.resolvedTpe <:< TypeRepr.of[Iterable[_]] && cfg.transientEmpty) {
25592569
'{
2560-
val v = ${ Select(x.asTerm, f.getter).asExprOf[ft & Iterable[?]] }
2570+
val v = ${ Select(x.asTerm, f.field).asExprOf[ft & Iterable[?]] }
25612571
if (!v.isEmpty) {
25622572
${genWriteConstantKey(f.mappedName, out)}
25632573
${genWriteVal('v, f.resolvedTpe :: types, f.isStringified, None, out)}
@@ -2567,7 +2577,7 @@ object JsonCodecMaker {
25672577
typeArg1(f.resolvedTpe).asType match
25682578
case '[tf] =>
25692579
'{
2570-
val v = ${ Select(x.asTerm, f.getter).asExprOf[Option[tf]] }
2580+
val v = ${ Select(x.asTerm, f.field).asExprOf[Option[tf]] }
25712581
if (v ne None) {
25722582
${genWriteConstantKey(f.mappedName, out)}
25732583
${genWriteVal('{ v.get }, typeArg1(f.resolvedTpe) :: types, f.isStringified, None, out)}
@@ -2576,14 +2586,14 @@ object JsonCodecMaker {
25762586
case _ => fail(s"Can't resolve type of ${f.resolvedTpe.show}")
25772587
} else if (f.resolvedTpe <:< TypeRepr.of[Array[_]] && cfg.transientEmpty) {
25782588
'{
2579-
val v = ${ Select(x.asTerm, f.getter).asExprOf[ft & Array[?]] }
2589+
val v = ${ Select(x.asTerm, f.field).asExprOf[ft & Array[?]] }
25802590
if (v.length > 0) {
25812591
${genWriteConstantKey(f.mappedName, out)}
25822592
${genWriteVal('v, f.resolvedTpe :: types, f.isStringified, None, out)}
25832593
}
25842594
}
25852595
} else {
2586-
val v = Select(x.asTerm, f.getter).asExprOf[ft]
2596+
val v = Select(x.asTerm, f.field).asExprOf[ft]
25872597
'{
25882598
${genWriteConstantKey(f.mappedName, out)}
25892599
${genWriteVal( v , f.resolvedTpe :: types, f.isStringified, None, out)}

0 commit comments

Comments
 (0)