Skip to content

Commit 9ca7156

Browse files
committed
Code clean up
1 parent 1411f12 commit 9ca7156

File tree

2 files changed

+25
-43
lines changed

2 files changed

+25
-43
lines changed

jsoniter-scala-macros/shared/src/main/scala-3/com/github/plokhotnyuk/jsoniter_scala/macros/JsonCodecMaker.scala

Lines changed: 25 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -879,7 +879,7 @@ object JsonCodecMaker {
879879
case '[t] =>
880880
val sym = symbol("ct" + classTags.size, TypeRepr.of[ClassTag[t]])
881881
val ct = Expr.summon[ClassTag[t]].fold(fail(s"Can't summon ClassTag[${tpe.show}]"))(_.asTerm)
882-
ValDef(sym, Some(ct.changeOwner(sym)))
882+
ValDef(sym, Some(ct))
883883
}).symbol)
884884

885885
def inferImplicitValue[T: Type](typeToSearch: TypeRepr): Option[Expr[T]] = Implicits.search(typeToSearch) match
@@ -928,15 +928,15 @@ object JsonCodecMaker {
928928
else if (precision == MathContext.UNLIMITED.getPrecision) '{ (MathContext.UNLIMITED: java.math.MathContext) }
929929
else Ref(mathContexts.getOrElseUpdate(precision, {
930930
val sym = symbol("mc" + mathContexts.size, TypeRepr.of[MathContext])
931-
ValDef(sym, Some('{ new MathContext(${Expr(cfg.bigDecimalPrecision)}, java.math.RoundingMode.HALF_EVEN) }.asTerm.changeOwner(sym)))
931+
ValDef(sym, Some('{ new MathContext(${Expr(cfg.bigDecimalPrecision)}, java.math.RoundingMode.HALF_EVEN) }.asTerm))
932932
}).symbol).asExprOf[MathContext]
933933

934934
val scalaEnumCaches = new mutable.LinkedHashMap[TypeRepr, ValDef]
935935

936936
def withScalaEnumCacheFor[K: Type, T: Type](tpe: TypeRepr)(using Quotes): Expr[ConcurrentHashMap[K, T]] =
937937
Ref(scalaEnumCaches.getOrElseUpdate(tpe, {
938938
val sym = symbol("ec" + scalaEnumCaches.size, TypeRepr.of[ConcurrentHashMap[K, T]])
939-
ValDef(sym, Some('{ new ConcurrentHashMap[K, T] }.asTerm.changeOwner(sym)))
939+
ValDef(sym, Some('{ new ConcurrentHashMap[K, T] }.asTerm))
940940
}).symbol).asExprOf[ConcurrentHashMap[K, T]]
941941

942942
case class JavaEnumValueInfo(value: Symbol, name: String, transformed: Boolean)
@@ -996,7 +996,10 @@ object JsonCodecMaker {
996996
def genNew(argss: List[List[Term]]): Term = {
997997
val args = argss.flatten
998998
if (isGeneric) Expr.ofTupleFromSeq(args.map(_.asExpr)).asTerm
999-
else Apply(TypeApply(Select.unique(New(Inferred(tupleTpe)), "<init>"), typeArgs.map(x => Inferred(x))), args)
999+
else {
1000+
val constructorNoTypes = Select(New(Inferred(tupleTpe)), tupleTpe.typeSymbol.primaryConstructor)
1001+
Apply(TypeApply(constructorNoTypes, typeArgs.map(Inferred(_))), args)
1002+
}
10001003
}
10011004
}
10021005

@@ -1644,10 +1647,7 @@ object JsonCodecMaker {
16441647
val nullValues = new mutable.LinkedHashMap[TypeRepr, ValDef]
16451648

16461649
def withNullValueFor[T: Type](tpe: TypeRepr)(f: => Expr[T]): Expr[T] =
1647-
Ref(nullValues.getOrElseUpdate(tpe, {
1648-
val sym = symbol("c" + nullValues.size, tpe)
1649-
ValDef(sym, Some(f.asTerm.changeOwner(sym)))
1650-
}).symbol).asExprOf[T]
1650+
Ref(nullValues.getOrElseUpdate(tpe, ValDef(symbol("c" + nullValues.size, tpe), Some(f.asTerm))).symbol).asExprOf[T]
16511651

16521652
val fieldIndexAccessors = new mutable.LinkedHashMap[TypeRepr, DefDef]
16531653

@@ -1663,7 +1663,7 @@ object JsonCodecMaker {
16631663
i += 1
16641664
CaseDef(Literal(IntConstant(i)), None, Literal(StringConstant(n)))
16651665
}
1666-
Some(Match(param.asExprOf[Int].asTerm, cases).changeOwner(sym))
1666+
Some(Match(param.asExprOf[Int].asTerm, cases))
16671667
})
16681668
}).symbol)
16691669

@@ -1898,10 +1898,7 @@ object JsonCodecMaker {
18981898
def genReadLeafClass[T: Type](subTpe: TypeRepr)(using Quotes): Expr[T] =
18991899
val useDiscriminator = cfg.discriminatorFieldName.isDefined
19001900
if (subTpe =:= tpe) {
1901-
val typeInfo =
1902-
if (isNamedTuple(tpe)) getNamedTupleInfo(tpe)
1903-
else getClassInfo(tpe)
1904-
genReadNonAbstractScalaClass(typeInfo, types, useDiscriminator, in, genNullValue[T](types))
1901+
genReadNonAbstractScalaClass(getClassInfo(tpe), types, useDiscriminator, in, genNullValue[T](types))
19051902
} else genReadVal(subTpe :: types, genNullValue[T](subTpe :: types), isStringified, useDiscriminator, in)
19061903

19071904
def genReadCollisions[T: Type](subTpes: collection.Seq[TypeRepr], l: Expr[Int])(using Quotes): Expr[T] =
@@ -2122,7 +2119,7 @@ object JsonCodecMaker {
21222119
cfg.discriminatorFieldName.map { fieldName =>
21232120
if (cfg.checkFieldDuplication) {
21242121
val sym = symbol("pd", TypeRepr.of[Boolean], Flags.Mutable)
2125-
ReadDiscriminator(Some(ValDef(sym, Some(Literal(BooleanConstant(true)).changeOwner(sym)))))
2122+
ReadDiscriminator(Some(ValDef(sym, Some(Literal(BooleanConstant(true))))))
21262123
} else ReadDiscriminator(None)
21272124
}
21282125
} else None
@@ -2142,7 +2139,6 @@ object JsonCodecMaker {
21422139

21432140
def blockWithVars(next: Term): Term =
21442141
Block(readVars ++ paramVars.toList ++ optDiscriminatorVar.toList, next.changeOwner(Symbol.spliceOwner))
2145-
.changeOwner(Symbol.spliceOwner) // All owners should be from top Symbol.spliceOwner because vals are created with this owner
21462142

21472143
val readNonEmpty = blockWithVars('{
21482144
if (!$in.isNextToken('}')) {
@@ -2154,10 +2150,10 @@ object JsonCodecMaker {
21542150
}
21552151
if (!$in.isCurrentToken('}')) $in.objectEndOrCommaError()
21562152
}
2157-
${Block(checkReqVars, construct).changeOwner(Symbol.spliceOwner).asExprOf[T]}
2153+
${Block(checkReqVars, construct).asExprOf[T]}
21582154
}.asTerm)
2159-
If('{ $in.isNextToken('{') }.asTerm.changeOwner(Symbol.spliceOwner), readNonEmpty,
2160-
'{ $in.readNullOrTokenError($default, '{') }.asTerm.changeOwner(Symbol.spliceOwner)).asExprOf[T]
2155+
If('{ $in.isNextToken('{') }.asTerm, readNonEmpty,
2156+
'{ $in.readNullOrTokenError($default, '{') }.asTerm).asExprOf[T]
21612157
}
21622158

21632159
def genReadConstType[T: Type](tpe: TypeRepr, isStringified: Boolean, in: Expr[JsonReader])(using Quotes): Expr[T] = tpe match
@@ -2694,7 +2690,6 @@ object JsonCodecMaker {
26942690
i += 1
26952691
te.asType match
26962692
case '[t] =>
2697-
val sym = symbol("_r" + i, te)
26982693
val nullVal = genNullValue[t](te :: types)
26992694
val rhs =
27002695
if (i == 1) genReadVal(te :: types, nullVal, isStringified, false, in)
@@ -2703,19 +2698,19 @@ object JsonCodecMaker {
27032698
${genReadVal(te :: types, nullVal, isStringified, false, in)}
27042699
} else $in.commaError()
27052700
}
2706-
ValDef(sym, Some(rhs.asTerm.changeOwner(sym)))
2701+
ValDef(symbol("_r" + i, te), Some(rhs.asTerm))
27072702
}
27082703
val readCreateBlock = Block(valDefs, '{
27092704
if ($in.isNextToken(']')) ${
27102705
val size = indexedTypes.size
27112706
if (size == 0) Expr(EmptyTuple)
27122707
else if (size > 22) Expr.ofTupleFromSeq(valDefs.map(x => Ref(x.symbol).asExprOf[Any]))
27132708
else {
2714-
Apply(TypeApply(Select.unique(New(Inferred(tTpe)), "<init>"),
2715-
indexedTypes.map(x => Inferred(x))), valDefs.map(x => Ref(x.symbol))).asExpr
2709+
val constructorNoTypes = Select(New(Inferred(tTpe)), tTpe.typeSymbol.primaryConstructor)
2710+
Apply(TypeApply(constructorNoTypes, indexedTypes.map(Inferred(_))), valDefs.map(x => Ref(x.symbol))).asExpr
27162711
}
27172712
} else $in.arrayEndError()
2718-
}.asTerm)
2713+
}.asTerm.changeOwner(Symbol.spliceOwner))
27192714
'{
27202715
if ($in.isNextToken('[')) ${readCreateBlock.asExprOf[T]}
27212716
else $in.readNullOrTokenError($default, '[')
@@ -2900,8 +2895,8 @@ object JsonCodecMaker {
29002895
}
29012896
val allWriteFields = optDiscriminator.fold(writeFields)(_.write(out) :: writeFields)
29022897
Block(valDefs,
2903-
Block('{ $out.writeObjectStart() }.asTerm :: allWriteFields.map(_.asTerm.changeOwner(Symbol.spliceOwner)),
2904-
'{ $out.writeObjectEnd() }.asTerm)
2898+
Block('{ $out.writeObjectStart() }.asTerm :: allWriteFields.map(_.asTerm),
2899+
'{ $out.writeObjectEnd() }.asTerm).changeOwner(Symbol.spliceOwner)
29052900
).asExprOf[Unit]
29062901

29072902
def getWriteConstType(tpe: TypeRepr, isStringified: Boolean, out: Expr[JsonWriter])(using Quotes): Expr[Unit] =
@@ -3203,12 +3198,12 @@ object JsonCodecMaker {
32033198
i += 1
32043199
te.asType match
32053200
case '[t] =>
3206-
val select =
3201+
val getter =
32073202
if (size > 22) {
3208-
val getter = Select.unique(xTerm, "productElement").appliedTo(Literal(IntConstant(i - 1))).asExprOf[Any]
3209-
'{ $getter.asInstanceOf[t] }.asExprOf[t]
3203+
val select = Select.unique(xTerm, "productElement").appliedTo(Literal(IntConstant(i - 1))).asExprOf[Any]
3204+
'{ $select.asInstanceOf[t] }.asExprOf[t]
32103205
} else Select.unique(xTerm, "_" + i).asExprOf[t]
3211-
genWriteVal(select, te :: types, isStringified, None, out).asTerm
3206+
genWriteVal(getter, te :: types, isStringified, None, out).asTerm
32123207
}
32133208
Block('{ $out.writeArrayStart() }.asTerm :: writeFields, '{ $out.writeArrayEnd() }.asTerm).asExprOf[Unit]
32143209
} else if (isEnumOrModuleValue(tpe) && !(cfg.alwaysEmitDiscriminator && hasSealedParent(tpe))) withEncoderFor(methodKey, m, out) { (out, x) =>
@@ -3222,10 +3217,7 @@ object JsonCodecMaker {
32223217
subTpe.asType match
32233218
case '[st] =>
32243219
if (subTpe =:= tpe) {
3225-
val typeInfo =
3226-
if (isNamedTuple(tpe)) getNamedTupleInfo(tpe)
3227-
else getClassInfo(tpe)
3228-
genWriteNonAbstractScalaClass(vx.asExprOf[st], typeInfo, types, discriminator, out)
3220+
genWriteNonAbstractScalaClass(vx.asExprOf[st], getClassInfo(tpe), types, discriminator, out)
32293221
} else genWriteVal(vx.asExprOf[st], subTpe :: types, isStringified, discriminator, out)
32303222

32313223
val leafClasses = adtLeafClasses(tpe)

jsoniter-scala-macros/shared/src/test/scala-3/com/github/plokhotnyuk/jsoniter_scala/macros/JsonCodecMakerGenericTuplesSpec.scala

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,7 @@
11
package com.github.plokhotnyuk.jsoniter_scala.macros
22

3-
import java.nio.charset.StandardCharsets.UTF_8
4-
import java.time._
5-
import java.util.{LinkedHashMap, Objects, UUID}
63
import com.github.plokhotnyuk.jsoniter_scala.core._
74
import com.github.plokhotnyuk.jsoniter_scala.macros.JsonCodecMaker._
8-
import org.scalatest.exceptions.TestFailedException
9-
import scala.annotation.switch
10-
import scala.collection.mutable
11-
import scala.compiletime.{error, requireConst}
12-
import scala.jdk.CollectionConverters._
13-
import scala.language.implicitConversions
14-
import scala.util.hashing.MurmurHash3
155

166
class JsonCodecMakerGenericTuplesSpec extends VerifyingSpec {
177
"JsonCodecMaker.make generate codecs which" should {

0 commit comments

Comments
 (0)