Skip to content

Commit 91f243c

Browse files
committed
Fix the order of traverse tree
1 parent 5a108df commit 91f243c

File tree

3 files changed

+76
-71
lines changed

3 files changed

+76
-71
lines changed

compiler/src/dotty/tools/dotc/semanticdb/ExtractSemanticDB.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -178,10 +178,6 @@ class ExtractSemanticDB extends Phase:
178178
registerSymbol(tree.symbol, symbolKinds(tree))
179179
case tree: Template =>
180180
val ctorSym = tree.constr.symbol
181-
if !excludeDef(ctorSym) then
182-
traverseAnnotsOfDefinition(ctorSym)
183-
registerDefinition(ctorSym, tree.constr.nameSpan.startPos, Set.empty, tree.source)
184-
ctorParams(tree.constr.termParamss, tree.constr.leadingTypeParams, tree.body)
185181
for parent <- tree.parentsOrDerived if parent.span.hasLength do
186182
traverse(parent)
187183
val selfSpan = tree.self.span
@@ -191,6 +187,10 @@ class ExtractSemanticDB extends Phase:
191187
tree.body.foreachUntilImport(traverse).foreach(traverse) // the first import statement
192188
else
193189
tree.body.foreach(traverse)
190+
if !excludeDef(ctorSym) then
191+
traverseAnnotsOfDefinition(ctorSym)
192+
registerDefinition(ctorSym, tree.constr.nameSpan.startPos, Set.empty, tree.source)
193+
ctorParams(tree.constr.termParamss, tree.constr.leadingTypeParams, tree.body)
194194
case tree: Apply =>
195195
@tu lazy val genParamSymbol: Name => String = tree.fun.symbol.funParamSymbol
196196
traverse(tree.fun)
Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,34 @@
11
package example
22

3-
def m1/*<-example::RecOrRefined$package.m1().*/(a/*<-example::RecOrRefined$package.m1().(a)*/: Int/*->scala::Int#*/ { val x/*<-local3*/: Int/*->scala::Int#*/ }) = ???/*->scala::Predef.`???`().*/
4-
def m2/*<-example::RecOrRefined$package.m2().*/(x/*<-example::RecOrRefined$package.m2().(x)*/: { val x/*<-local4*/: Int/*->scala::Int#*/; def y/*<-local5*/: Int/*->scala::Int#*/ }) = ???/*->scala::Predef.`???`().*/
5-
def m3/*<-example::RecOrRefined$package.m3().*/(x/*<-example::RecOrRefined$package.m3().(x)*/: { val x/*<-local6*/: Int/*->scala::Int#*/; def y/*<-local7*/: Int/*->scala::Int#*/; type z/*<-local8*/ }) = ???/*->scala::Predef.`???`().*/
3+
def m1/*<-example::RecOrRefined$package.m1().*/(a/*<-example::RecOrRefined$package.m1().(a)*/: Int/*->scala::Int#*/ { val x/*<-local4*/: Int/*->scala::Int#*/ }) = ???/*->scala::Predef.`???`().*/
4+
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.`???`().*/
5+
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.`???`().*/
66
trait PolyHolder/*<-example::PolyHolder#*/ {
77
def foo/*<-example::PolyHolder#foo().*/[T/*<-example::PolyHolder#foo().[T]*/](t/*<-example::PolyHolder#foo().(t)*/: T/*->example::PolyHolder#foo().[T]*/): Any/*->scala::Any#*/
88
}
99

10-
def m4/*<-example::RecOrRefined$package.m4().*/(x/*<-example::RecOrRefined$package.m4().(x)*/: PolyHolder/*->example::PolyHolder#*/ { def foo/*<-local11*/[T/*<-local9*/](t/*<-local10*/: T/*->local9*/): T/*->local9*/ }) = ???/*->scala::Predef.`???`().*/
11-
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/*<-local14*/[T/*<-local12*/](t/*<-local13*/: T/*->local12*/): T/*->local12*/ } = ???/*->scala::Predef.`???`().*/
10+
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.`???`().*/
11+
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.`???`().*/
1212

13-
type m6/*<-example::RecOrRefined$package.m6#*/ = [X/*<-example::RecOrRefined$package.m6#[X]*/] =>> PolyHolder/*->example::PolyHolder#*/ { def foo/*<-local17*/[T/*<-local15*/](t/*<-local16*/: T/*->local15*/): T/*->local15*/ }
13+
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*/ }
1414

1515
class Record/*<-example::Record#*/(elems/*<-example::Record#elems.*/: (String/*->scala::Predef.String#*/, Any/*->scala::Any#*/)*) extends Selectable/*->scala::Selectable#*/:
1616
private val fields/*<-example::Record#fields.*/ = elems/*->example::Record#elems.*/.toMap/*->scala::collection::IterableOnceOps#toMap().*/
1717
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)*/)
1818

1919
type Person/*<-example::RecOrRefined$package.Person#*/ = Record/*->example::Record#*/ {
20-
val name/*<-local18*/: String/*->scala::Predef.String#*/
21-
val age/*<-local19*/: Int/*->scala::Int#*/
20+
val name/*<-local19*/: String/*->scala::Predef.String#*/
21+
val age/*<-local20*/: Int/*->scala::Int#*/
2222
}
2323

2424
// RecType
2525
class C/*<-example::C#*/ { type T1/*<-example::C#T1#*/; type T2/*<-example::C#T2#*/ }
26-
type C2/*<-example::RecOrRefined$package.C2#*/ = C/*->example::C#*/ { type T1/*<-local20*/; type T2/*<-local21*/ = T1/*->local20*/ }
26+
type C2/*<-example::RecOrRefined$package.C2#*/ = C/*->example::C#*/ { type T1/*<-local21*/; type T2/*<-local22*/ = T1/*->local21*/ }
2727

2828
trait SpecialRefinement/*<-example::SpecialRefinement#*/ {
2929
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#*/]
3030
}
3131

32-
class PickOneRefinement_1/*<-example::PickOneRefinement_1#*/[S/*<-example::PickOneRefinement_1#[S]*/ <: SpecialRefinement/*->example::SpecialRefinement#*/ { def pickOne/*<-local2*/[T/*<-local0*/](as/*<-local1*/: T/*->local0*/*): Option/*->scala::Option#*/[String/*->scala::Predef.String#*/] }] {
32+
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#*/] }] {
3333
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)*/:_*)
3434
}

tests/semanticdb/metac.expect

Lines changed: 62 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ Schema => SemanticDB v4
4848
Uri => Advanced.scala
4949
Text => empty
5050
Language => Scala
51-
Symbols => 47 entries
51+
Symbols => 48 entries
5252
Occurrences => 105 entries
5353

5454
Symbols:
@@ -58,6 +58,7 @@ advanced/C#`<init>`(). => primary ctor <init> [typeparam T ](): C[T]
5858
advanced/C#t(). => method t => T
5959
advanced/HKClass# => class HKClass [typeparam F [typeparam T ] <: <?>] extends Object { self: HKClass[F] => +3 decls }
6060
advanced/HKClass#[F] => typeparam F [typeparam T ] <: <?>
61+
advanced/HKClass#[F][T] => typeparam T
6162
advanced/HKClass#`<init>`(). => primary ctor <init> [typeparam F [typeparam T ] <: <?>](): HKClass[F]
6263
advanced/HKClass#`<init>`().[F][T] => typeparam T
6364
advanced/HKClass#`<init>`().[F][U] => typeparam U
@@ -2675,17 +2676,19 @@ Schema => SemanticDB v4
26752676
Uri => RecOrRefined.scala
26762677
Text => empty
26772678
Language => Scala
2678-
Symbols => 66 entries
2679+
Symbols => 69 entries
26792680
Occurrences => 110 entries
26802681

26812682
Symbols:
26822683
example/C# => class C extends Object { self: C => +3 decls }
26832684
example/C#T1# => type T1
26842685
example/C#T2# => type T2
26852686
example/C#`<init>`(). => primary ctor <init> (): C
2686-
example/PickOneRefinement_1# => class PickOneRefinement_1 [typeparam S <: SpecialRefinement { abstract method pickOne [typeparam T ](param as: T*): Option[String] <: example/SpecialRefinement#pickOne(). }] extends Object { self: PickOneRefinement_1[S] => +3 decls }
2687-
example/PickOneRefinement_1#[S] => typeparam S <: SpecialRefinement { abstract method pickOne [typeparam T ](param as: T*): Option[String] <: example/SpecialRefinement#pickOne(). }
2688-
example/PickOneRefinement_1#`<init>`(). => primary ctor <init> [typeparam S <: SpecialRefinement { abstract method pickOne [typeparam T ](param as: T*): Option[String] <: example/SpecialRefinement#pickOne(). }](): PickOneRefinement_1[S]
2687+
example/PickOneRefinement_1# => class PickOneRefinement_1 [typeparam S <: SpecialRefinement { abstract method pickOne [typeparam T ](param as: T*): Option[String] }] extends Object { self: PickOneRefinement_1[S] => +3 decls }
2688+
example/PickOneRefinement_1#[S] => typeparam S <: SpecialRefinement { abstract method pickOne [typeparam T ](param as: T*): Option[String] }
2689+
example/PickOneRefinement_1#[S](as) => param as: T*
2690+
example/PickOneRefinement_1#[S][T] => typeparam T
2691+
example/PickOneRefinement_1#`<init>`(). => primary ctor <init> [typeparam S <: SpecialRefinement { abstract method pickOne [typeparam T ](param as: T*): Option[String] }](): PickOneRefinement_1[S]
26892692
example/PickOneRefinement_1#run(). => method run (param s: S, param as: String*): Option[String]
26902693
example/PickOneRefinement_1#run().(as) => param as: String*
26912694
example/PickOneRefinement_1#run().(s) => param s: S
@@ -2723,51 +2726,52 @@ example/SpecialRefinement#`<init>`(). => primary ctor <init> (): SpecialRefineme
27232726
example/SpecialRefinement#pickOne(). => abstract method pickOne [typeparam T ](param as: T*): Option[Any]
27242727
example/SpecialRefinement#pickOne().(as) => param as: T*
27252728
example/SpecialRefinement#pickOne().[T] => typeparam T
2726-
local0 => typeparam T
2727-
local1 => param as: T*
2728-
local2 => abstract method pickOne [typeparam T ](param as: T*): Option[String] <: example/SpecialRefinement#pickOne().
2729-
local3 => abstract val method x Int
2729+
local0 => abstract method pickOne [typeparam T ](param as: T*): Option[String]
2730+
local1 => typeparam T
2731+
local2 => param as: T*
2732+
local3 => abstract method pickOne [typeparam T ](param as: T*): Option[String] <: example/SpecialRefinement#pickOne().
27302733
local4 => abstract val method x Int
2731-
local5 => abstract method y => Int
2732-
local6 => abstract val method x Int
2733-
local7 => abstract method y => Int
2734-
local8 => type z
2735-
local9 => typeparam T
2736-
local10 => param t: T
2737-
local11 => abstract method foo [typeparam T ](param t: T): T <: example/PolyHolder#foo().
2738-
local12 => typeparam T
2739-
local13 => param t: T
2740-
local14 => abstract method foo [typeparam T ](param t: T): T <: example/PolyHolder#foo().
2741-
local15 => typeparam T
2742-
local16 => param t: T
2743-
local17 => abstract method foo [typeparam T ](param t: T): T <: example/PolyHolder#foo().
2744-
local18 => abstract val method name String
2745-
local19 => abstract val method age Int
2746-
local20 => type T1 <: example/C#T1#
2747-
local21 => type T2 = T1 <: example/C#T2#
2734+
local5 => abstract val method x Int
2735+
local6 => abstract method y => Int
2736+
local7 => abstract val method x Int
2737+
local8 => abstract method y => Int
2738+
local9 => type z
2739+
local10 => typeparam T
2740+
local11 => param t: T
2741+
local12 => abstract method foo [typeparam T ](param t: T): T <: example/PolyHolder#foo().
2742+
local13 => typeparam T
2743+
local14 => param t: T
2744+
local15 => abstract method foo [typeparam T ](param t: T): T <: example/PolyHolder#foo().
2745+
local16 => typeparam T
2746+
local17 => param t: T
2747+
local18 => abstract method foo [typeparam T ](param t: T): T <: example/PolyHolder#foo().
2748+
local19 => abstract val method name String
2749+
local20 => abstract val method age Int
2750+
local21 => type T1 <: example/C#T1#
2751+
local22 => type T2 = T1 <: example/C#T2#
27482752

27492753
Occurrences:
27502754
[0:8..0:15): example <- example/
27512755
[2:4..2:6): m1 <- example/RecOrRefined$package.m1().
27522756
[2:7..2:8): a <- example/RecOrRefined$package.m1().(a)
27532757
[2:10..2:13): Int -> scala/Int#
2754-
[2:20..2:21): x <- local3
2758+
[2:20..2:21): x <- local4
27552759
[2:23..2:26): Int -> scala/Int#
27562760
[2:32..2:35): ??? -> scala/Predef.`???`().
27572761
[3:4..3:6): m2 <- example/RecOrRefined$package.m2().
27582762
[3:7..3:8): x <- example/RecOrRefined$package.m2().(x)
2759-
[3:16..3:17): x <- local4
2763+
[3:16..3:17): x <- local5
27602764
[3:19..3:22): Int -> scala/Int#
2761-
[3:28..3:29): y <- local5
2765+
[3:28..3:29): y <- local6
27622766
[3:31..3:34): Int -> scala/Int#
27632767
[3:40..3:43): ??? -> scala/Predef.`???`().
27642768
[4:4..4:6): m3 <- example/RecOrRefined$package.m3().
27652769
[4:7..4:8): x <- example/RecOrRefined$package.m3().(x)
2766-
[4:16..4:17): x <- local6
2770+
[4:16..4:17): x <- local7
27672771
[4:19..4:22): Int -> scala/Int#
2768-
[4:28..4:29): y <- local7
2772+
[4:28..4:29): y <- local8
27692773
[4:31..4:34): Int -> scala/Int#
2770-
[4:41..4:42): z <- local8
2774+
[4:41..4:42): z <- local9
27712775
[4:48..4:51): ??? -> scala/Predef.`???`().
27722776
[5:6..5:16): PolyHolder <- example/PolyHolder#
27732777
[6:6..6:9): foo <- example/PolyHolder#foo().
@@ -2778,31 +2782,31 @@ Occurrences:
27782782
[9:4..9:6): m4 <- example/RecOrRefined$package.m4().
27792783
[9:7..9:8): x <- example/RecOrRefined$package.m4().(x)
27802784
[9:10..9:20): PolyHolder -> example/PolyHolder#
2781-
[9:27..9:30): foo <- local11
2782-
[9:31..9:32): T <- local9
2783-
[9:34..9:35): t <- local10
2784-
[9:37..9:38): T -> local9
2785-
[9:41..9:42): T -> local9
2785+
[9:27..9:30): foo <- local12
2786+
[9:31..9:32): T <- local10
2787+
[9:34..9:35): t <- local11
2788+
[9:37..9:38): T -> local10
2789+
[9:41..9:42): T -> local10
27862790
[9:48..9:51): ??? -> scala/Predef.`???`().
27872791
[10:4..10:6): m5 <- example/RecOrRefined$package.m5().
27882792
[10:7..10:8): Z <- example/RecOrRefined$package.m5().[Z]
27892793
[10:10..10:11): x <- example/RecOrRefined$package.m5().(x)
27902794
[10:13..10:16): Int -> scala/Int#
27912795
[10:19..10:29): PolyHolder -> example/PolyHolder#
2792-
[10:36..10:39): foo <- local14
2793-
[10:40..10:41): T <- local12
2794-
[10:43..10:44): t <- local13
2795-
[10:46..10:47): T -> local12
2796-
[10:50..10:51): T -> local12
2796+
[10:36..10:39): foo <- local15
2797+
[10:40..10:41): T <- local13
2798+
[10:43..10:44): t <- local14
2799+
[10:46..10:47): T -> local13
2800+
[10:50..10:51): T -> local13
27972801
[10:56..10:59): ??? -> scala/Predef.`???`().
27982802
[12:5..12:7): m6 <- example/RecOrRefined$package.m6#
27992803
[12:11..12:12): X <- example/RecOrRefined$package.m6#[X]
28002804
[12:18..12:28): PolyHolder -> example/PolyHolder#
2801-
[12:35..12:38): foo <- local17
2802-
[12:39..12:40): T <- local15
2803-
[12:42..12:43): t <- local16
2804-
[12:45..12:46): T -> local15
2805-
[12:49..12:50): T -> local15
2805+
[12:35..12:38): foo <- local18
2806+
[12:39..12:40): T <- local16
2807+
[12:42..12:43): t <- local17
2808+
[12:45..12:46): T -> local16
2809+
[12:49..12:50): T -> local16
28062810
[14:6..14:12): Record <- example/Record#
28072811
[14:13..14:18): elems <- example/Record#elems.
28082812
[14:21..14:27): String -> scala/Predef.String#
@@ -2819,18 +2823,18 @@ Occurrences:
28192823
[16:48..16:52): name -> example/Record#selectDynamic().(name)
28202824
[18:5..18:11): Person <- example/RecOrRefined$package.Person#
28212825
[18:14..18:20): Record -> example/Record#
2822-
[19:6..19:10): name <- local18
2826+
[19:6..19:10): name <- local19
28232827
[19:12..19:18): String -> scala/Predef.String#
2824-
[20:6..20:9): age <- local19
2828+
[20:6..20:9): age <- local20
28252829
[20:11..20:14): Int -> scala/Int#
28262830
[24:6..24:7): C <- example/C#
28272831
[24:15..24:17): T1 <- example/C#T1#
28282832
[24:24..24:26): T2 <- example/C#T2#
28292833
[25:5..25:7): C2 <- example/RecOrRefined$package.C2#
28302834
[25:10..25:11): C -> example/C#
2831-
[25:19..25:21): T1 <- local20
2832-
[25:28..25:30): T2 <- local21
2833-
[25:33..25:35): T1 -> local20
2835+
[25:19..25:21): T1 <- local21
2836+
[25:28..25:30): T2 <- local22
2837+
[25:33..25:35): T1 -> local21
28342838
[27:6..27:23): SpecialRefinement <- example/SpecialRefinement#
28352839
[28:6..28:13): pickOne <- example/SpecialRefinement#pickOne().
28362840
[28:14..28:15): T <- example/SpecialRefinement#pickOne().[T]
@@ -2841,10 +2845,10 @@ Occurrences:
28412845
[31:6..31:25): PickOneRefinement_1 <- example/PickOneRefinement_1#
28422846
[31:26..31:27): S <- example/PickOneRefinement_1#[S]
28432847
[31:31..31:48): SpecialRefinement -> example/SpecialRefinement#
2844-
[31:55..31:62): pickOne <- local2
2845-
[31:63..31:64): T <- local0
2846-
[31:66..31:68): as <- local1
2847-
[31:70..31:71): T -> local0
2848+
[31:55..31:62): pickOne <- local3
2849+
[31:63..31:64): T <- local1
2850+
[31:66..31:68): as <- local2
2851+
[31:70..31:71): T -> local1
28482852
[31:75..31:81): Option -> scala/Option#
28492853
[31:82..31:88): String -> scala/Predef.String#
28502854
[32:6..32:9): run <- example/PickOneRefinement_1#run().
@@ -3773,7 +3777,7 @@ Schema => SemanticDB v4
37733777
Uri => nullary.scala
37743778
Text => empty
37753779
Language => Scala
3776-
Symbols => 16 entries
3780+
Symbols => 17 entries
37773781
Occurrences => 29 entries
37783782

37793783
Symbols:
@@ -3784,6 +3788,7 @@ _empty_/Concrete#nullary3(). => method nullary3 => List[Int] <: _empty_/NullaryT
37843788
_empty_/NullaryTest# => abstract class NullaryTest [typeparam T , typeparam m [typeparam s ]] extends Object { self: NullaryTest[T, m] => +9 decls }
37853789
_empty_/NullaryTest#[T] => typeparam T
37863790
_empty_/NullaryTest#[m] => typeparam m [typeparam s ]
3791+
_empty_/NullaryTest#[m][s] => typeparam s
37873792
_empty_/NullaryTest#`<init>`(). => primary ctor <init> [typeparam T , typeparam m [typeparam s ]](): NullaryTest[T, m]
37883793
_empty_/NullaryTest#`<init>`().[m][s] => typeparam s
37893794
_empty_/NullaryTest#nullary(). => method nullary => String

0 commit comments

Comments
 (0)