diff --git a/compiler/src/dotty/tools/dotc/semanticdb/ExtractSemanticDB.scala b/compiler/src/dotty/tools/dotc/semanticdb/ExtractSemanticDB.scala index 3925ab2d4132..e3d6711af97f 100644 --- a/compiler/src/dotty/tools/dotc/semanticdb/ExtractSemanticDB.scala +++ b/compiler/src/dotty/tools/dotc/semanticdb/ExtractSemanticDB.scala @@ -163,6 +163,8 @@ class ExtractSemanticDB extends Phase: case PatternValDef(pat, rhs) => traverse(rhs) PatternValDef.collectPats(pat).foreach(traverse) + case tree: TypeDef => + traverseChildren(tree) case tree => if !excludeChildren(tree.symbol) then traverseChildren(tree) @@ -187,7 +189,7 @@ class ExtractSemanticDB extends Phase: tree.body.foreach(traverse) if !excludeDef(ctorSym) then traverseAnnotsOfDefinition(ctorSym) - ctorParams(tree.constr.termParamss, tree.body) + ctorParams(tree.constr.termParamss, tree.constr.leadingTypeParams, tree.body) registerDefinition(ctorSym, tree.constr.nameSpan.startPos, Set.empty, tree.source) case tree: Apply => @tu lazy val genParamSymbol: Name => String = tree.fun.symbol.funParamSymbol @@ -231,6 +233,16 @@ class ExtractSemanticDB extends Phase: registerUseGuarded(None, alt.symbol.companionClass, sel.imported.span, tree.source) case tree: Inlined => traverse(tree.call) + case tree: TypeTree => + tree.typeOpt match + // Any types could be appear inside of `TypeTree`, but + // types that precent in source other than TypeRef are traversable and contain Ident tree nodes + // (e.g. TypeBoundsTree, AppliedTypeTree) + case Types.TypeRef(_, sym: Symbol) if namePresentInSource(sym, tree.span, tree.source) => + registerUseGuarded(None, sym, tree.span, tree.source) + case _ => () + + case _ => traverseChildren(tree) @@ -426,7 +438,7 @@ class ExtractSemanticDB extends Phase: symkinds.toSet private def ctorParams( - vparamss: List[List[ValDef]], body: List[Tree])(using Context): Unit = + vparamss: List[List[ValDef]], tparams: List[TypeDef], body: List[Tree])(using Context): Unit = @tu lazy val getters = findGetters(vparamss.flatMap(_.map(_.name)).toSet, body) for vparams <- vparamss @@ -439,6 +451,9 @@ class ExtractSemanticDB extends Phase: getters.get(vparam.name).fold(SymbolKind.emptySet)(getter => if getter.mods.is(Mutable) then SymbolKind.VarSet else SymbolKind.ValSet) registerSymbol(vparam.symbol, symkinds) + traverse(vparam.tpt) + tparams.foreach(tp => traverse(tp.rhs)) + object ExtractSemanticDB: import java.nio.file.Path diff --git a/tests/semanticdb/expect/Advanced.expect.scala b/tests/semanticdb/expect/Advanced.expect.scala index a7c85be0e550..0764c11c4dd2 100644 --- a/tests/semanticdb/expect/Advanced.expect.scala +++ b/tests/semanticdb/expect/Advanced.expect.scala @@ -45,6 +45,6 @@ object Test/*<-advanced::Test.*/ { // Curried Type Application -class HKClass/*<-advanced::HKClass#*/[F/*<-advanced::HKClass#[F]*/ <: [T] =>> [U] =>> (U, T)] { +class HKClass/*<-advanced::HKClass#*/[F/*<-advanced::HKClass#[F]*/ <: [T/*<-advanced::HKClass#``().[F][T]*/] =>> [U/*<-advanced::HKClass#``().[F][U]*/] =>> (U/*->advanced::HKClass#``().[F][U]*/, T/*->advanced::HKClass#``().[F][T]*/)] { def foo/*<-advanced::HKClass#foo().*/[T/*<-advanced::HKClass#foo().[T]*/,U/*<-advanced::HKClass#foo().[U]*/](x/*<-advanced::HKClass#foo().(x)*/: F/*->advanced::HKClass#[F]*/[T/*->advanced::HKClass#foo().[T]*/][U/*->advanced::HKClass#foo().[U]*/]): String/*->scala::Predef.String#*/ = x/*->advanced::HKClass#foo().(x)*/.toString/*->scala::Tuple2#toString().*/() } diff --git a/tests/semanticdb/expect/Prefixes.expect.scala b/tests/semanticdb/expect/Prefixes.expect.scala index 185e2d3530d8..857dcb28b600 100644 --- a/tests/semanticdb/expect/Prefixes.expect.scala +++ b/tests/semanticdb/expect/Prefixes.expect.scala @@ -24,7 +24,7 @@ object Test/*<-prefixes::Test.*/ { def m2/*<-prefixes::Test.m2().*/: c/*->prefixes::Test.c.*/.T/*->prefixes::C#T#*/ = ???/*->scala::Predef.`???`().*/ def k2/*<-prefixes::Test.k2().*/: c/*->prefixes::Test.c.*/.N/*->prefixes::C#N.*/.U/*->prefixes::C#N.U#*/ = ???/*->scala::Predef.`???`().*/ import c/*->prefixes::Test.c.*/.N/*->prefixes::C#N.*/.* - def k3/*<-prefixes::Test.k3().*/: U = ???/*->scala::Predef.`???`().*/ + def k3/*<-prefixes::Test.k3().*/: U/*->prefixes::C#N.U#*/ = ???/*->scala::Predef.`???`().*/ def n2/*<-prefixes::Test.n2().*/: M/*->prefixes::M.*/.T/*->prefixes::M.T#*/ = ???/*->scala::Predef.`???`().*/ diff --git a/tests/semanticdb/expect/RecOrRefined.expect.scala b/tests/semanticdb/expect/RecOrRefined.expect.scala index 12c2bd884bb8..3c32d22506ef 100644 --- a/tests/semanticdb/expect/RecOrRefined.expect.scala +++ b/tests/semanticdb/expect/RecOrRefined.expect.scala @@ -1,34 +1,34 @@ package example -def m1/*<-example::RecOrRefined$package.m1().*/(a/*<-example::RecOrRefined$package.m1().(a)*/: Int/*->scala::Int#*/ { val x/*<-local1*/: Int/*->scala::Int#*/ }) = ???/*->scala::Predef.`???`().*/ -def m2/*<-example::RecOrRefined$package.m2().*/(x/*<-example::RecOrRefined$package.m2().(x)*/: { val x/*<-local2*/: Int/*->scala::Int#*/; def y/*<-local3*/: Int/*->scala::Int#*/ }) = ???/*->scala::Predef.`???`().*/ -def m3/*<-example::RecOrRefined$package.m3().*/(x/*<-example::RecOrRefined$package.m3().(x)*/: { val x/*<-local4*/: Int/*->scala::Int#*/; def y/*<-local5*/: Int/*->scala::Int#*/; type z/*<-local6*/ }) = ???/*->scala::Predef.`???`().*/ +def m1/*<-example::RecOrRefined$package.m1().*/(a/*<-example::RecOrRefined$package.m1().(a)*/: Int/*->scala::Int#*/ { val x/*<-local4*/: Int/*->scala::Int#*/ }) = ???/*->scala::Predef.`???`().*/ +def m2/*<-example::RecOrRefined$package.m2().*/(x/*<-example::RecOrRefined$package.m2().(x)*/: { val x/*<-local5*/: Int/*->scala::Int#*/; def y/*<-local6*/: Int/*->scala::Int#*/ }) = ???/*->scala::Predef.`???`().*/ +def m3/*<-example::RecOrRefined$package.m3().*/(x/*<-example::RecOrRefined$package.m3().(x)*/: { val x/*<-local7*/: Int/*->scala::Int#*/; def y/*<-local8*/: Int/*->scala::Int#*/; type z/*<-local9*/ }) = ???/*->scala::Predef.`???`().*/ trait PolyHolder/*<-example::PolyHolder#*/ { def foo/*<-example::PolyHolder#foo().*/[T/*<-example::PolyHolder#foo().[T]*/](t/*<-example::PolyHolder#foo().(t)*/: T/*->example::PolyHolder#foo().[T]*/): Any/*->scala::Any#*/ } -def m4/*<-example::RecOrRefined$package.m4().*/(x/*<-example::RecOrRefined$package.m4().(x)*/: PolyHolder/*->example::PolyHolder#*/ { def foo/*<-local9*/[T/*<-local7*/](t/*<-local8*/: T/*->local7*/): T/*->local7*/ }) = ???/*->scala::Predef.`???`().*/ -def m5/*<-example::RecOrRefined$package.m5().*/[Z/*<-example::RecOrRefined$package.m5().[Z]*/](x/*<-example::RecOrRefined$package.m5().(x)*/: Int/*->scala::Int#*/): PolyHolder/*->example::PolyHolder#*/ { def foo/*<-local12*/[T/*<-local10*/](t/*<-local11*/: T/*->local10*/): T/*->local10*/ } = ???/*->scala::Predef.`???`().*/ +def m4/*<-example::RecOrRefined$package.m4().*/(x/*<-example::RecOrRefined$package.m4().(x)*/: PolyHolder/*->example::PolyHolder#*/ { def foo/*<-local12*/[T/*<-local10*/](t/*<-local11*/: T/*->local10*/): T/*->local10*/ }) = ???/*->scala::Predef.`???`().*/ +def m5/*<-example::RecOrRefined$package.m5().*/[Z/*<-example::RecOrRefined$package.m5().[Z]*/](x/*<-example::RecOrRefined$package.m5().(x)*/: Int/*->scala::Int#*/): PolyHolder/*->example::PolyHolder#*/ { def foo/*<-local15*/[T/*<-local13*/](t/*<-local14*/: T/*->local13*/): T/*->local13*/ } = ???/*->scala::Predef.`???`().*/ -type m6/*<-example::RecOrRefined$package.m6#*/ = [X/*<-example::RecOrRefined$package.m6#[X]*/] =>> PolyHolder/*->example::PolyHolder#*/ { def foo/*<-local15*/[T/*<-local13*/](t/*<-local14*/: T/*->local13*/): T/*->local13*/ } +type m6/*<-example::RecOrRefined$package.m6#*/ = [X/*<-example::RecOrRefined$package.m6#[X]*/] =>> PolyHolder/*->example::PolyHolder#*/ { def foo/*<-local18*/[T/*<-local16*/](t/*<-local17*/: T/*->local16*/): T/*->local16*/ } class Record/*<-example::Record#*/(elems/*<-example::Record#elems.*/: (String/*->scala::Predef.String#*/, Any/*->scala::Any#*/)*) extends Selectable/*->scala::Selectable#*/: private val fields/*<-example::Record#fields.*/ = elems/*->example::Record#elems.*/.toMap/*->scala::collection::IterableOnceOps#toMap().*/ def selectDynamic/*<-example::Record#selectDynamic().*/(name/*<-example::Record#selectDynamic().(name)*/: String/*->scala::Predef.String#*/): Any/*->scala::Any#*/ = fields/*->example::Record#fields.*/(name/*->example::Record#selectDynamic().(name)*/) type Person/*<-example::RecOrRefined$package.Person#*/ = Record/*->example::Record#*/ { - val name/*<-local16*/: String/*->scala::Predef.String#*/ - val age/*<-local17*/: Int/*->scala::Int#*/ + val name/*<-local19*/: String/*->scala::Predef.String#*/ + val age/*<-local20*/: Int/*->scala::Int#*/ } // RecType class C/*<-example::C#*/ { type T1/*<-example::C#T1#*/; type T2/*<-example::C#T2#*/ } -type C2/*<-example::RecOrRefined$package.C2#*/ = C/*->example::C#*/ { type T1/*<-local18*/; type T2/*<-local19*/ = T1/*->local18*/ } +type C2/*<-example::RecOrRefined$package.C2#*/ = C/*->example::C#*/ { type T1/*<-local21*/; type T2/*<-local22*/ = T1/*->local21*/ } trait SpecialRefinement/*<-example::SpecialRefinement#*/ { def pickOne/*<-example::SpecialRefinement#pickOne().*/[T/*<-example::SpecialRefinement#pickOne().[T]*/](as/*<-example::SpecialRefinement#pickOne().(as)*/: T/*->example::SpecialRefinement#pickOne().[T]*/*): Option/*->scala::Option#*/[Any/*->scala::Any#*/] } -class PickOneRefinement_1/*<-example::PickOneRefinement_1#*/[S/*<-example::PickOneRefinement_1#[S]*/ <: SpecialRefinement { def pickOne[T](as: T*): Option[String] }] { +class PickOneRefinement_1/*<-example::PickOneRefinement_1#*/[S/*<-example::PickOneRefinement_1#[S]*/ <: SpecialRefinement/*->example::SpecialRefinement#*/ { def pickOne/*<-local3*/[T/*<-local1*/](as/*<-local2*/: T/*->local1*/*): Option/*->scala::Option#*/[String/*->scala::Predef.String#*/] }] { def run/*<-example::PickOneRefinement_1#run().*/(s/*<-example::PickOneRefinement_1#run().(s)*/: S/*->example::PickOneRefinement_1#[S]*/, as/*<-example::PickOneRefinement_1#run().(as)*/: String/*->scala::Predef.String#*/*): Option/*->scala::Option#*/[String/*->scala::Predef.String#*/] = s/*->example::PickOneRefinement_1#run().(s)*/.pickOne/*->example::SpecialRefinement#pickOne().*/(as/*->example::PickOneRefinement_1#run().(as)*/:_*) } diff --git a/tests/semanticdb/expect/i9782.expect.scala b/tests/semanticdb/expect/i9782.expect.scala index 49165ca0ff8e..2b10a2f37d7f 100644 --- a/tests/semanticdb/expect/i9782.expect.scala +++ b/tests/semanticdb/expect/i9782.expect.scala @@ -1,14 +1,14 @@ // LazyRef -trait Txn/*<-_empty_::Txn#*/[T/*<-_empty_::Txn#[T]*/ <: Txn[T]] +trait Txn/*<-_empty_::Txn#*/[T/*<-_empty_::Txn#[T]*/ <: Txn/*->_empty_::Txn#*/[T/*->_empty_::Txn#[T]*/]] -trait Elem/*<-_empty_::Elem#*/[T/*<-_empty_::Elem#[T]*/ <: Txn[T]] +trait Elem/*<-_empty_::Elem#*/[T/*<-_empty_::Elem#[T]*/ <: Txn/*->_empty_::Txn#*/[T/*->_empty_::Elem#[T]*/]] -trait Obj/*<-_empty_::Obj#*/[T/*<-_empty_::Obj#[T]*/ <: Txn[T]] extends Elem/*->_empty_::Elem#*/[T/*->_empty_::Obj#[T]*/] +trait Obj/*<-_empty_::Obj#*/[T/*<-_empty_::Obj#[T]*/ <: Txn/*->_empty_::Txn#*/[T/*->_empty_::Obj#[T]*/]] extends Elem/*->_empty_::Elem#*/[T/*->_empty_::Obj#[T]*/] -trait Copy/*<-_empty_::Copy#*/[In/*<-_empty_::Copy#[In]*/ <: Txn[In], Out/*<-_empty_::Copy#[Out]*/ <: Txn[Out]] { - def copyImpl/*<-_empty_::Copy#copyImpl().*/[Repr/*<-_empty_::Copy#copyImpl().[Repr]*/[~ <: Txn[~]] <: Elem[~]](in/*<-_empty_::Copy#copyImpl().(in)*/: Repr/*->_empty_::Copy#copyImpl().[Repr]*/[In/*->_empty_::Copy#[In]*/]): Repr/*->_empty_::Copy#copyImpl().[Repr]*/[Out/*->_empty_::Copy#[Out]*/] +trait Copy/*<-_empty_::Copy#*/[In/*<-_empty_::Copy#[In]*/ <: Txn/*->_empty_::Txn#*/[In/*->_empty_::Copy#[In]*/], Out/*<-_empty_::Copy#[Out]*/ <: Txn/*->_empty_::Txn#*/[Out/*->_empty_::Copy#[Out]*/]] { + def copyImpl/*<-_empty_::Copy#copyImpl().*/[Repr/*<-_empty_::Copy#copyImpl().[Repr]*/[~/*<-_empty_::Copy#copyImpl().[Repr][`~`]*/ <: Txn/*->_empty_::Txn#*/[~/*->_empty_::Copy#copyImpl().[Repr][`~`]*/]] <: Elem/*->_empty_::Elem#*/[~/*->_empty_::Copy#copyImpl().[Repr][`~`]*/]](in/*<-_empty_::Copy#copyImpl().(in)*/: Repr/*->_empty_::Copy#copyImpl().[Repr]*/[In/*->_empty_::Copy#[In]*/]): Repr/*->_empty_::Copy#copyImpl().[Repr]*/[Out/*->_empty_::Copy#[Out]*/] - def apply/*<-_empty_::Copy#apply().*/[Repr/*<-_empty_::Copy#apply().[Repr]*/[~ <: Txn[~]] <: Elem[~]](in/*<-_empty_::Copy#apply().(in)*/: Repr/*->_empty_::Copy#apply().[Repr]*/[In/*->_empty_::Copy#[In]*/]): Repr/*->_empty_::Copy#apply().[Repr]*/[Out/*->_empty_::Copy#[Out]*/] = { + def apply/*<-_empty_::Copy#apply().*/[Repr/*<-_empty_::Copy#apply().[Repr]*/[~/*<-_empty_::Copy#apply().[Repr][`~`]*/ <: Txn/*->_empty_::Txn#*/[~/*->_empty_::Copy#apply().[Repr][`~`]*/]] <: Elem/*->_empty_::Elem#*/[~/*->_empty_::Copy#apply().[Repr][`~`]*/]](in/*<-_empty_::Copy#apply().(in)*/: Repr/*->_empty_::Copy#apply().[Repr]*/[In/*->_empty_::Copy#[In]*/]): Repr/*->_empty_::Copy#apply().[Repr]*/[Out/*->_empty_::Copy#[Out]*/] = { val out/*<-local0*/ = copyImpl/*->_empty_::Copy#copyImpl().*/[Repr/*->_empty_::Copy#apply().[Repr]*/](in/*->_empty_::Copy#apply().(in)*/) (in/*->_empty_::Copy#apply().(in)*/, out/*->local0*/) match { case (inObj/*<-local1*/: Obj/*->_empty_::Obj#*/[In/*->_empty_::Copy#[In]*/], outObj/*<-local2*/: Obj/*->_empty_::Obj#*/[Out/*->_empty_::Copy#[Out]*/]) => // problem here diff --git a/tests/semanticdb/expect/nullary.expect.scala b/tests/semanticdb/expect/nullary.expect.scala index fe791ae2f1f7..3f0fdb1af7b0 100644 --- a/tests/semanticdb/expect/nullary.expect.scala +++ b/tests/semanticdb/expect/nullary.expect.scala @@ -1,4 +1,4 @@ -abstract class NullaryTest/*<-_empty_::NullaryTest#*/[T/*<-_empty_::NullaryTest#[T]*/, m/*<-_empty_::NullaryTest#[m]*/[s]] { +abstract class NullaryTest/*<-_empty_::NullaryTest#*/[T/*<-_empty_::NullaryTest#[T]*/, m/*<-_empty_::NullaryTest#[m]*/[s/*<-_empty_::NullaryTest#``().[m][s]*/]] { def nullary/*<-_empty_::NullaryTest#nullary().*/: String/*->scala::Predef.String#*/ = "a" val x/*<-_empty_::NullaryTest#x.*/ = nullary/*->_empty_::NullaryTest#nullary().*/ diff --git a/tests/semanticdb/expect/recursion.expect.scala b/tests/semanticdb/expect/recursion.expect.scala index 84ca66787350..0454bd54eecc 100644 --- a/tests/semanticdb/expect/recursion.expect.scala +++ b/tests/semanticdb/expect/recursion.expect.scala @@ -13,7 +13,7 @@ object Nats/*<-recursion::Nats.*/ { } case object Zero/*<-recursion::Nats.Zero.*/ extends Nat/*->recursion::Nats.Nat#*/ - case class Succ/*<-recursion::Nats.Succ#*/[N/*<-recursion::Nats.Succ#[N]*/ <: Nat](p/*<-recursion::Nats.Succ#p.*/: N/*->recursion::Nats.Succ#[N]*/) extends Nat/*->recursion::Nats.Nat#*/ + case class Succ/*<-recursion::Nats.Succ#*/[N/*<-recursion::Nats.Succ#[N]*/ <: Nat/*->recursion::Nats.Nat#*/](p/*<-recursion::Nats.Succ#p.*/: N/*->recursion::Nats.Succ#[N]*/) extends Nat/*->recursion::Nats.Nat#*/ transparent inline def toIntg/*<-recursion::Nats.toIntg().*/(inline n/*<-recursion::Nats.toIntg().(n)*/: Nat/*->recursion::Nats.Nat#*/): Int/*->scala::Int#*/ = inline n/*->recursion::Nats.toIntg().(n)*/ match { diff --git a/tests/semanticdb/metac.expect b/tests/semanticdb/metac.expect index dd95b3f4670e..c367bf48e8d4 100644 --- a/tests/semanticdb/metac.expect +++ b/tests/semanticdb/metac.expect @@ -48,8 +48,8 @@ Schema => SemanticDB v4 Uri => Advanced.scala Text => empty Language => Scala -Symbols => 46 entries -Occurrences => 101 entries +Symbols => 48 entries +Occurrences => 105 entries Symbols: advanced/C# => class C [typeparam T ] extends Object { self: C[T] => +3 decls } @@ -60,6 +60,8 @@ advanced/HKClass# => class HKClass [typeparam F [typeparam T ] <: ] extends O advanced/HKClass#[F] => typeparam F [typeparam T ] <: advanced/HKClass#[F][T] => typeparam T advanced/HKClass#``(). => primary ctor [typeparam F [typeparam T ] <: ](): HKClass[F] +advanced/HKClass#``().[F][T] => typeparam T +advanced/HKClass#``().[F][U] => typeparam U advanced/HKClass#foo(). => method foo [typeparam T , typeparam U ](param x: F[T, U]): String advanced/HKClass#foo().(x) => param x: F[T, U] advanced/HKClass#foo().[T] => typeparam T @@ -191,6 +193,10 @@ Occurrences: [39:21..39:25): head -> scala/collection/IterableOps#head(). [47:6..47:13): HKClass <- advanced/HKClass# [47:14..47:15): F <- advanced/HKClass#[F] +[47:20..47:21): T <- advanced/HKClass#``().[F][T] +[47:28..47:29): U <- advanced/HKClass#``().[F][U] +[47:36..47:37): U -> advanced/HKClass#``().[F][U] +[47:39..47:40): T -> advanced/HKClass#``().[F][T] [48:6..48:9): foo <- advanced/HKClass#foo(). [48:10..48:11): T <- advanced/HKClass#foo().[T] [48:12..48:13): U <- advanced/HKClass#foo().[U] @@ -2565,7 +2571,7 @@ Uri => Prefixes.scala Text => empty Language => Scala Symbols => 19 entries -Occurrences => 47 entries +Occurrences => 48 entries Symbols: prefixes/C# => class C extends Object { self: C => +6 decls } @@ -2627,6 +2633,7 @@ Occurrences: [25:9..25:10): c -> prefixes/Test.c. [25:11..25:12): N -> prefixes/C#N. [26:6..26:8): k3 <- prefixes/Test.k3(). +[26:10..26:11): U -> prefixes/C#N.U# [26:14..26:17): ??? -> scala/Predef.`???`(). [28:6..28:8): n2 <- prefixes/Test.n2(). [28:10..28:11): M -> prefixes/M. @@ -2645,8 +2652,8 @@ Schema => SemanticDB v4 Uri => RecOrRefined.scala Text => empty Language => Scala -Symbols => 65 entries -Occurrences => 103 entries +Symbols => 68 entries +Occurrences => 110 entries Symbols: example/C# => class C extends Object { self: C => +3 decls } @@ -2695,48 +2702,51 @@ example/SpecialRefinement#pickOne(). => abstract method pickOne [typeparam T ](p example/SpecialRefinement#pickOne().(as) => param as: T* example/SpecialRefinement#pickOne().[T] => typeparam T local0 => abstract method pickOne [typeparam T ](param as: T*): Option[String] -local1 => abstract val method x Int -local2 => abstract val method x Int -local3 => abstract method y => Int +local1 => typeparam T +local2 => param as: T* +local3 => abstract method pickOne [typeparam T ](param as: T*): Option[String] <: example/SpecialRefinement#pickOne(). local4 => abstract val method x Int -local5 => abstract method y => Int -local6 => type z -local7 => typeparam T -local8 => param t: T -local9 => abstract method foo [typeparam T ](param t: T): T <: example/PolyHolder#foo(). +local5 => abstract val method x Int +local6 => abstract method y => Int +local7 => abstract val method x Int +local8 => abstract method y => Int +local9 => type z local10 => typeparam T local11 => param t: T local12 => abstract method foo [typeparam T ](param t: T): T <: example/PolyHolder#foo(). local13 => typeparam T local14 => param t: T local15 => abstract method foo [typeparam T ](param t: T): T <: example/PolyHolder#foo(). -local16 => abstract val method name String -local17 => abstract val method age Int -local18 => type T1 <: example/C#T1# -local19 => type T2 = T1 <: example/C#T2# +local16 => typeparam T +local17 => param t: T +local18 => abstract method foo [typeparam T ](param t: T): T <: example/PolyHolder#foo(). +local19 => abstract val method name String +local20 => abstract val method age Int +local21 => type T1 <: example/C#T1# +local22 => type T2 = T1 <: example/C#T2# Occurrences: [0:8..0:15): example <- example/ [2:4..2:6): m1 <- example/RecOrRefined$package.m1(). [2:7..2:8): a <- example/RecOrRefined$package.m1().(a) [2:10..2:13): Int -> scala/Int# -[2:20..2:21): x <- local1 +[2:20..2:21): x <- local4 [2:23..2:26): Int -> scala/Int# [2:32..2:35): ??? -> scala/Predef.`???`(). [3:4..3:6): m2 <- example/RecOrRefined$package.m2(). [3:7..3:8): x <- example/RecOrRefined$package.m2().(x) -[3:16..3:17): x <- local2 +[3:16..3:17): x <- local5 [3:19..3:22): Int -> scala/Int# -[3:28..3:29): y <- local3 +[3:28..3:29): y <- local6 [3:31..3:34): Int -> scala/Int# [3:40..3:43): ??? -> scala/Predef.`???`(). [4:4..4:6): m3 <- example/RecOrRefined$package.m3(). [4:7..4:8): x <- example/RecOrRefined$package.m3().(x) -[4:16..4:17): x <- local4 +[4:16..4:17): x <- local7 [4:19..4:22): Int -> scala/Int# -[4:28..4:29): y <- local5 +[4:28..4:29): y <- local8 [4:31..4:34): Int -> scala/Int# -[4:41..4:42): z <- local6 +[4:41..4:42): z <- local9 [4:48..4:51): ??? -> scala/Predef.`???`(). [5:6..5:16): PolyHolder <- example/PolyHolder# [6:6..6:9): foo <- example/PolyHolder#foo(). @@ -2747,31 +2757,31 @@ Occurrences: [9:4..9:6): m4 <- example/RecOrRefined$package.m4(). [9:7..9:8): x <- example/RecOrRefined$package.m4().(x) [9:10..9:20): PolyHolder -> example/PolyHolder# -[9:27..9:30): foo <- local9 -[9:31..9:32): T <- local7 -[9:34..9:35): t <- local8 -[9:37..9:38): T -> local7 -[9:41..9:42): T -> local7 +[9:27..9:30): foo <- local12 +[9:31..9:32): T <- local10 +[9:34..9:35): t <- local11 +[9:37..9:38): T -> local10 +[9:41..9:42): T -> local10 [9:48..9:51): ??? -> scala/Predef.`???`(). [10:4..10:6): m5 <- example/RecOrRefined$package.m5(). [10:7..10:8): Z <- example/RecOrRefined$package.m5().[Z] [10:10..10:11): x <- example/RecOrRefined$package.m5().(x) [10:13..10:16): Int -> scala/Int# [10:19..10:29): PolyHolder -> example/PolyHolder# -[10:36..10:39): foo <- local12 -[10:40..10:41): T <- local10 -[10:43..10:44): t <- local11 -[10:46..10:47): T -> local10 -[10:50..10:51): T -> local10 +[10:36..10:39): foo <- local15 +[10:40..10:41): T <- local13 +[10:43..10:44): t <- local14 +[10:46..10:47): T -> local13 +[10:50..10:51): T -> local13 [10:56..10:59): ??? -> scala/Predef.`???`(). [12:5..12:7): m6 <- example/RecOrRefined$package.m6# [12:11..12:12): X <- example/RecOrRefined$package.m6#[X] [12:18..12:28): PolyHolder -> example/PolyHolder# -[12:35..12:38): foo <- local15 -[12:39..12:40): T <- local13 -[12:42..12:43): t <- local14 -[12:45..12:46): T -> local13 -[12:49..12:50): T -> local13 +[12:35..12:38): foo <- local18 +[12:39..12:40): T <- local16 +[12:42..12:43): t <- local17 +[12:45..12:46): T -> local16 +[12:49..12:50): T -> local16 [14:6..14:12): Record <- example/Record# [14:13..14:18): elems <- example/Record#elems. [14:21..14:27): String -> scala/Predef.String# @@ -2788,18 +2798,18 @@ Occurrences: [16:48..16:52): name -> example/Record#selectDynamic().(name) [18:5..18:11): Person <- example/RecOrRefined$package.Person# [18:14..18:20): Record -> example/Record# -[19:6..19:10): name <- local16 +[19:6..19:10): name <- local19 [19:12..19:18): String -> scala/Predef.String# -[20:6..20:9): age <- local17 +[20:6..20:9): age <- local20 [20:11..20:14): Int -> scala/Int# [24:6..24:7): C <- example/C# [24:15..24:17): T1 <- example/C#T1# [24:24..24:26): T2 <- example/C#T2# [25:5..25:7): C2 <- example/RecOrRefined$package.C2# [25:10..25:11): C -> example/C# -[25:19..25:21): T1 <- local18 -[25:28..25:30): T2 <- local19 -[25:33..25:35): T1 -> local18 +[25:19..25:21): T1 <- local21 +[25:28..25:30): T2 <- local22 +[25:33..25:35): T1 -> local21 [27:6..27:23): SpecialRefinement <- example/SpecialRefinement# [28:6..28:13): pickOne <- example/SpecialRefinement#pickOne(). [28:14..28:15): T <- example/SpecialRefinement#pickOne().[T] @@ -2809,6 +2819,13 @@ Occurrences: [28:33..28:36): Any -> scala/Any# [31:6..31:25): PickOneRefinement_1 <- example/PickOneRefinement_1# [31:26..31:27): S <- example/PickOneRefinement_1#[S] +[31:31..31:48): SpecialRefinement -> example/SpecialRefinement# +[31:55..31:62): pickOne <- local3 +[31:63..31:64): T <- local1 +[31:66..31:68): as <- local2 +[31:70..31:71): T -> local1 +[31:75..31:81): Option -> scala/Option# +[31:82..31:88): String -> scala/Predef.String# [32:6..32:9): run <- example/PickOneRefinement_1#run(). [32:10..32:11): s <- example/PickOneRefinement_1#run().(s) [32:13..32:14): S -> example/PickOneRefinement_1#[S] @@ -3553,7 +3570,7 @@ Uri => i9782.scala Text => empty Language => Scala Symbols => 24 entries -Occurrences => 39 entries +Occurrences => 59 entries Symbols: _empty_/Copy# => trait Copy [typeparam In <: Txn[In], typeparam Out <: Txn[Out]] extends Object { self: Copy[In, Out] => +5 decls } @@ -3584,17 +3601,32 @@ local2 => val local outObj: Repr[Out] & Obj[Out] Occurrences: [1:6..1:9): Txn <- _empty_/Txn# [1:10..1:11): T <- _empty_/Txn#[T] +[1:15..1:18): Txn -> _empty_/Txn# +[1:19..1:20): T -> _empty_/Txn#[T] [3:6..3:10): Elem <- _empty_/Elem# [3:11..3:12): T <- _empty_/Elem#[T] +[3:16..3:19): Txn -> _empty_/Txn# +[3:20..3:21): T -> _empty_/Elem#[T] [5:6..5:9): Obj <- _empty_/Obj# [5:10..5:11): T <- _empty_/Obj#[T] +[5:15..5:18): Txn -> _empty_/Txn# +[5:19..5:20): T -> _empty_/Obj#[T] [5:31..5:35): Elem -> _empty_/Elem# [5:36..5:37): T -> _empty_/Obj#[T] [7:6..7:10): Copy <- _empty_/Copy# [7:11..7:13): In <- _empty_/Copy#[In] +[7:17..7:20): Txn -> _empty_/Txn# +[7:21..7:23): In -> _empty_/Copy#[In] [7:26..7:29): Out <- _empty_/Copy#[Out] +[7:33..7:36): Txn -> _empty_/Txn# +[7:37..7:40): Out -> _empty_/Copy#[Out] [8:6..8:14): copyImpl <- _empty_/Copy#copyImpl(). [8:15..8:19): Repr <- _empty_/Copy#copyImpl().[Repr] +[8:20..8:21): ~ <- _empty_/Copy#copyImpl().[Repr][`~`] +[8:25..8:28): Txn -> _empty_/Txn# +[8:29..8:30): ~ -> _empty_/Copy#copyImpl().[Repr][`~`] +[8:36..8:40): Elem -> _empty_/Elem# +[8:41..8:42): ~ -> _empty_/Copy#copyImpl().[Repr][`~`] [8:45..8:47): in <- _empty_/Copy#copyImpl().(in) [8:49..8:53): Repr -> _empty_/Copy#copyImpl().[Repr] [8:54..8:56): In -> _empty_/Copy#[In] @@ -3602,6 +3634,11 @@ Occurrences: [8:65..8:68): Out -> _empty_/Copy#[Out] [10:6..10:11): apply <- _empty_/Copy#apply(). [10:12..10:16): Repr <- _empty_/Copy#apply().[Repr] +[10:17..10:18): ~ <- _empty_/Copy#apply().[Repr][`~`] +[10:22..10:25): Txn -> _empty_/Txn# +[10:26..10:27): ~ -> _empty_/Copy#apply().[Repr][`~`] +[10:33..10:37): Elem -> _empty_/Elem# +[10:38..10:39): ~ -> _empty_/Copy#apply().[Repr][`~`] [10:42..10:44): in <- _empty_/Copy#apply().(in) [10:46..10:50): Repr -> _empty_/Copy#apply().[Repr] [10:51..10:53): In -> _empty_/Copy#[In] @@ -3708,8 +3745,8 @@ Schema => SemanticDB v4 Uri => nullary.scala Text => empty Language => Scala -Symbols => 16 entries -Occurrences => 28 entries +Symbols => 17 entries +Occurrences => 29 entries Symbols: _empty_/Concrete# => class Concrete extends NullaryTest[Int, List] { self: Concrete => +3 decls } @@ -3721,6 +3758,7 @@ _empty_/NullaryTest#[T] => typeparam T _empty_/NullaryTest#[m] => typeparam m [typeparam s ] _empty_/NullaryTest#[m][s] => typeparam s _empty_/NullaryTest#``(). => primary ctor [typeparam T , typeparam m [typeparam s ]](): NullaryTest[T, m] +_empty_/NullaryTest#``().[m][s] => typeparam s _empty_/NullaryTest#nullary(). => method nullary => String _empty_/NullaryTest#nullary2(). => abstract method nullary2 => T _empty_/NullaryTest#nullary3(). => abstract method nullary3 => m[T] @@ -3733,6 +3771,7 @@ Occurrences: [0:15..0:26): NullaryTest <- _empty_/NullaryTest# [0:27..0:28): T <- _empty_/NullaryTest#[T] [0:30..0:31): m <- _empty_/NullaryTest#[m] +[0:32..0:33): s <- _empty_/NullaryTest#``().[m][s] [1:6..1:13): nullary <- _empty_/NullaryTest#nullary(). [1:15..1:21): String -> scala/Predef.String# [2:6..2:7): x <- _empty_/NullaryTest#x. @@ -3768,7 +3807,7 @@ Uri => recursion.scala Text => empty Language => Scala Symbols => 36 entries -Occurrences => 45 entries +Occurrences => 46 entries Symbols: local0 => case val method N$1 <: Nat @@ -3831,6 +3870,7 @@ Occurrences: [14:27..14:30): Nat -> recursion/Nats.Nat# [15:13..15:17): Succ <- recursion/Nats.Succ# [15:18..15:19): N <- recursion/Nats.Succ#[N] +[15:23..15:26): Nat -> recursion/Nats.Nat# [15:28..15:29): p <- recursion/Nats.Succ#p. [15:31..15:32): N -> recursion/Nats.Succ#[N] [15:42..15:45): Nat -> recursion/Nats.Nat#