diff --git a/compiler/src/dotty/tools/dotc/typer/Typer.scala b/compiler/src/dotty/tools/dotc/typer/Typer.scala index a5380f73a2a5..c90de0ae19a1 100644 --- a/compiler/src/dotty/tools/dotc/typer/Typer.scala +++ b/compiler/src/dotty/tools/dotc/typer/Typer.scala @@ -2401,13 +2401,14 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer def typedContextBoundTypeTree(tree: untpd.ContextBoundTypeTree)(using Context): Tree = val tycon = typedType(tree.tycon) - val tyconSplice = untpd.TypedSplice(tycon) + def spliced(tree: Tree) = untpd.TypedSplice(tree) val tparam = untpd.Ident(tree.paramName).withSpan(tree.span) if tycon.tpe.typeParams.nonEmpty then - typed(untpd.AppliedTypeTree(tyconSplice, tparam :: Nil)) + val tycon0 = tycon.withType(tycon.tpe.etaCollapse) + typed(untpd.AppliedTypeTree(spliced(tycon0), tparam :: Nil)) else if Feature.enabled(modularity) && tycon.tpe.member(tpnme.Self).symbol.isAbstractOrParamType then val tparamSplice = untpd.TypedSplice(typedExpr(tparam)) - typed(untpd.RefinedTypeTree(tyconSplice, List(untpd.TypeDef(tpnme.Self, tparamSplice)))) + typed(untpd.RefinedTypeTree(spliced(tycon), List(untpd.TypeDef(tpnme.Self, tparamSplice)))) else def selfNote = if Feature.enabled(modularity) then diff --git a/tests/pos/i20901/Foo.scala b/tests/pos/i20901/Foo.scala new file mode 100644 index 000000000000..c1277781db38 --- /dev/null +++ b/tests/pos/i20901/Foo.scala @@ -0,0 +1,6 @@ +//> using options -Ytest-pickler-check + +import reflect.ClassTag + +class Foo: + def mkArray[T: ClassTag] = ??? diff --git a/tests/pos/i20901/Foo.tastycheck b/tests/pos/i20901/Foo.tastycheck new file mode 100644 index 000000000000..0201bfec2056 --- /dev/null +++ b/tests/pos/i20901/Foo.tastycheck @@ -0,0 +1,124 @@ +Header: + version: + tooling: + UUID: + +Names (276 bytes, starting from ): + 0: ASTs + 1: + 2: scala + 3: reflect + 4: scala[Qualified . reflect] + 5: ClassTag + 6: Foo + 7: + 8: java + 9: lang + 10: java[Qualified . lang] + 11: Object + 12: java[Qualified . lang][Qualified . Object] + 13: [Signed Signature(List(),java.lang.Object) @] + 14: Unit + 15: mkArray + 16: T + 17: Nothing + 18: Any + 19: evidence$ + 20: [Unique evidence$ 1] + 21: ??? + 22: Predef + 23: SourceFile + 24: annotation + 25: scala[Qualified . annotation] + 26: internal + 27: scala[Qualified . annotation][Qualified . internal] + 28: scala[Qualified . annotation][Qualified . internal][Qualified . SourceFile] + 29: String + 30: java[Qualified . lang][Qualified . String] + 31: [Signed Signature(List(java.lang.String),scala.annotation.internal.SourceFile) @] + 32: + 33: Positions + 34: Comments + 35: Attributes + +Trees (94 bytes, starting from ): + 0: PACKAGE(92) + 2: TERMREFpkg 1 [] + 4: IMPORT(4) + 6: TERMREFpkg 4 [scala[Qualified . reflect]] + 8: IMPORTED 5 [ClassTag] + 10: TYPEDEF(82) 6 [Foo] + 13: TEMPLATE(61) + 15: APPLY(10) + 17: SELECTin(8) 13 [[Signed Signature(List(),java.lang.Object) @]] + 20: NEW + 21: TYPEREF 11 [Object] + 23: TERMREFpkg 10 [java[Qualified . lang]] + 25: SHAREDtype 21 + 27: DEFDEF(7) 7 [] + 30: EMPTYCLAUSE + 31: TYPEREF 14 [Unit] + 33: TERMREFpkg 2 [scala] + 35: STABLE + 36: DEFDEF(38) 15 [mkArray] + 39: TYPEPARAM(11) 16 [T] + 42: TYPEBOUNDStpt(8) + 44: TYPEREF 17 [Nothing] + 46: SHAREDtype 33 + 48: TYPEREF 18 [Any] + 50: SHAREDtype 33 + 52: PARAM(14) 20 [[Unique evidence$ 1]] + 55: APPLIEDtpt(10) + 57: IDENTtpt 5 [ClassTag] + 59: TYPEREF 5 [ClassTag] + 61: SHAREDtype 6 + 63: IDENTtpt 16 [T] + 65: TYPEREFdirect 39 + 67: IMPLICIT + 68: SHAREDtype 44 + 70: TERMREF 21 [???] + 72: TERMREF 22 [Predef] + 74: SHAREDtype 33 + 76: ANNOTATION(16) + 78: TYPEREF 23 [SourceFile] + 80: TERMREFpkg 27 [scala[Qualified . annotation][Qualified . internal]] + 82: APPLY(10) + 84: SELECTin(6) 31 [[Signed Signature(List(java.lang.String),scala.annotation.internal.SourceFile) @]] + 87: NEW + 88: SHAREDtype 78 + 90: SHAREDtype 78 + 92: STRINGconst 32 [] + 94: + +Positions (72 bytes, starting from ): + lines: 7 + line sizes: + 38, 0, 23, 0, 10, 32, 0 + positions: + 0: 40 .. 108 + 4: 40 .. 63 + 6: 47 .. 54 + 8: 55 .. 63 + 10: 65 .. 108 + 13: 78 .. 108 + 21: 71 .. 71 + 27: 78 .. 78 + 31: 78 .. 78 + 36: 78 .. 108 + 39: 90 .. 101 + 44: 93 .. 93 + 48: 93 .. 93 + 52: 93 .. 101 + 57: 93 .. 101 + 63: 93 .. 101 + 68: 102 .. 102 + 70: 105 .. 108 + 82: 65 .. 108 + 88: 65 .. 65 + 92: 65 .. 65 + + source paths: + 0: 32 [] + +Attributes (2 bytes, starting from ): + SOURCEFILEattr 32 []