Skip to content

Commit b1ac51a

Browse files
authored
Merge pull request #13295 from tanishiking/overridden-symbols
[SemanticDB] Support overridden_symbols
2 parents 86c9a7e + 9cd35cb commit b1ac51a

File tree

3 files changed

+41
-34
lines changed

3 files changed

+41
-34
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ class SymbolInfomationPrinter (symtab: PrinterSymtab):
7373
case INTERFACE => sb.append("interface ")
7474
case UNKNOWN_KIND | Unrecognized(_) => sb.append("unknown ")
7575
sb.append(s"${info.displayName}${info.prefixBeforeTpe}${pprint(info.signature)}")
76+
info.overriddenSymbols match
77+
case Nil => ()
78+
case all => sb.append(s" <: ${all.mkString(", ")}")
7679
sb.toString
7780

7881
private def pprintDef(info: SymbolInformation) =

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ object Scala3:
7575
displayName = Symbols.displaySymbol(s),
7676
signature = signature,
7777
access = s.symbolAccess(kind),
78+
overriddenSymbols = s.overriddenSymbols,
7879
)
7980
case s: WildcardTypeSymbol =>
8081
SymbolInformation(
@@ -324,6 +325,9 @@ object Scala3:
324325
val ssym = sym.privateWithin.symbolName
325326
if (sym.is(Protected)) ProtectedWithinAccess(ssym)
326327
else PrivateWithinAccess(ssym)
328+
329+
def overriddenSymbols(using Context, SemanticSymbolBuilder): List[String] =
330+
sym.allOverriddenSymbols.map(_.symbolName).toList
327331
end SymbolOps
328332

329333
object LocalSymbol:

tests/semanticdb/metac.expect

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ classes/C3#x. => val method x Int
403403
classes/C3. => final object C3 extends Object { self: C3.type => +4 decls }
404404
classes/C3.apply(). => method apply (param x: Int): C3
405405
classes/C3.apply().(x) => param x: Int
406-
classes/C3.toString(). => method toString => String
406+
classes/C3.toString(). => method toString => String <: scala/Any#toString().
407407
classes/C3.unapply(). => method unapply (param x$1: C3): C3
408408
classes/C3.unapply().(x$1) => param x$1: C3
409409
classes/C4# => case class C4 extends Object with Product with Serializable { self: C4 => +5 decls }
@@ -417,7 +417,7 @@ classes/C4#x. => val method x Int
417417
classes/C4. => final object C4 extends Object { self: C4.type => +4 decls }
418418
classes/C4.apply(). => method apply (param x: Int): C4
419419
classes/C4.apply().(x) => param x: Int
420-
classes/C4.toString(). => method toString => String
420+
classes/C4.toString(). => method toString => String <: scala/Any#toString().
421421
classes/C4.unapply(). => method unapply (param x$1: C4): C4
422422
classes/C4.unapply().(x$1) => param x$1: C4
423423
classes/C6# => case class C6 extends Object with Product with Serializable { self: C6 => +5 decls }
@@ -431,7 +431,7 @@ classes/C6#x. => private val method x Int
431431
classes/C6. => final object C6 extends Object { self: C6.type => +4 decls }
432432
classes/C6.apply(). => method apply (param x: Int): C6
433433
classes/C6.apply().(x) => param x: Int
434-
classes/C6.toString(). => method toString => String
434+
classes/C6.toString(). => method toString => String <: scala/Any#toString().
435435
classes/C6.unapply(). => method unapply (param x$1: C6): C6
436436
classes/C6.unapply().(x$1) => param x$1: C6
437437
classes/C7# => class C7 extends Object { self: C7 => +2 decls }
@@ -873,13 +873,13 @@ _empty_/Enums.Maybe.Just#copy$default$1().[A] => typeparam A
873873
_empty_/Enums.Maybe.Just#copy(). => method copy [covariant typeparam A ](param value: A): Just[A]
874874
_empty_/Enums.Maybe.Just#copy().(value) => param value: A
875875
_empty_/Enums.Maybe.Just#copy().[A] => typeparam A
876-
_empty_/Enums.Maybe.Just#ordinal(). => method ordinal => Int
876+
_empty_/Enums.Maybe.Just#ordinal(). => method ordinal => Int <: scala/reflect/Enum#ordinal().
877877
_empty_/Enums.Maybe.Just#value. => val method value A
878878
_empty_/Enums.Maybe.Just. => final object Just extends Object { self: Just.type => +4 decls }
879879
_empty_/Enums.Maybe.Just.apply(). => method apply [typeparam A ](param value: A): Just[A]
880880
_empty_/Enums.Maybe.Just.apply().(value) => param value: A
881881
_empty_/Enums.Maybe.Just.apply().[A] => typeparam A
882-
_empty_/Enums.Maybe.Just.toString(). => method toString => String
882+
_empty_/Enums.Maybe.Just.toString(). => method toString => String <: scala/Any#toString().
883883
_empty_/Enums.Maybe.Just.unapply(). => method unapply [typeparam A ](param x$1: Just[A]): Just[A]
884884
_empty_/Enums.Maybe.Just.unapply().(x$1) => param x$1: Just[A]
885885
_empty_/Enums.Maybe.Just.unapply().[A] => typeparam A
@@ -973,11 +973,11 @@ _empty_/Enums.`<:<`.Refl#[C] => typeparam C
973973
_empty_/Enums.`<:<`.Refl#`<init>`(). => primary ctor <init> [typeparam C ](): Refl[C]
974974
_empty_/Enums.`<:<`.Refl#copy(). => method copy [typeparam C ](): Refl[C]
975975
_empty_/Enums.`<:<`.Refl#copy().[C] => typeparam C
976-
_empty_/Enums.`<:<`.Refl#ordinal(). => method ordinal => Int
976+
_empty_/Enums.`<:<`.Refl#ordinal(). => method ordinal => Int <: scala/reflect/Enum#ordinal().
977977
_empty_/Enums.`<:<`.Refl. => final object Refl extends Object { self: Refl.type => +4 decls }
978978
_empty_/Enums.`<:<`.Refl.apply(). => method apply [typeparam C ](): Refl[C]
979979
_empty_/Enums.`<:<`.Refl.apply().[C] => typeparam C
980-
_empty_/Enums.`<:<`.Refl.toString(). => method toString => String
980+
_empty_/Enums.`<:<`.Refl.toString(). => method toString => String <: scala/Any#toString().
981981
_empty_/Enums.`<:<`.Refl.unapply(). => method unapply [typeparam C ](param x$1: Refl[C]): true
982982
_empty_/Enums.`<:<`.Refl.unapply().(x$1) => param x$1: Refl[C]
983983
_empty_/Enums.`<:<`.Refl.unapply().[C] => typeparam C
@@ -1407,10 +1407,10 @@ a/b/Givens.foo(). => method foo [typeparam A ](implicit given param A: Monoid[A]
14071407
a/b/Givens.foo().(A) => implicit given param A: Monoid[A]
14081408
a/b/Givens.foo().[A] => typeparam A
14091409
a/b/Givens.given_Monoid_String. => final implicit given object given_Monoid_String extends Object with Monoid[String] { self: given_Monoid_String.type => +3 decls }
1410-
a/b/Givens.given_Monoid_String.combine(). => method combine (param x: String)(param y: String): String
1410+
a/b/Givens.given_Monoid_String.combine(). => method combine (param x: String)(param y: String): String <: a/b/Givens.Monoid#combine().
14111411
a/b/Givens.given_Monoid_String.combine().(x) => param x: String
14121412
a/b/Givens.given_Monoid_String.combine().(y) => param y: String
1413-
a/b/Givens.given_Monoid_String.empty(). => method empty => String
1413+
a/b/Givens.given_Monoid_String.empty(). => method empty => String <: a/b/Givens.Monoid#empty().
14141414
a/b/Givens.goodbye1. => val method goodbye1 String
14151415
a/b/Givens.hello1. => val method hello1 String
14161416
a/b/Givens.int2String(). => final implicit given inline macro int2String => Conversion[Int, String]
@@ -1698,18 +1698,18 @@ givens/InventedNames$package.given_List_T(). => final implicit given method give
16981698
givens/InventedNames$package.given_List_T().[T] => typeparam T
16991699
givens/InventedNames$package.given_String. => final implicit lazy val given method given_String String
17001700
givens/InventedNames$package.given_X. => final implicit given object given_X extends Object with X { self: given_X.type => +2 decls }
1701-
givens/InventedNames$package.given_X.doX(). => method doX => Int
1701+
givens/InventedNames$package.given_X.doX(). => method doX => Int <: givens/X#doX().
17021702
givens/InventedNames$package.given_Y# => class given_Y extends Object with Y { self: given_Y => +3 decls }
17031703
givens/InventedNames$package.given_Y#`<init>`(). => primary ctor <init> ()(implicit val given param x$1: X): given_Y
17041704
givens/InventedNames$package.given_Y#`<init>`().(x$1) => implicit val given param x$1: X
1705-
givens/InventedNames$package.given_Y#doY(). => method doY => String
1705+
givens/InventedNames$package.given_Y#doY(). => method doY => String <: givens/Y#doY().
17061706
givens/InventedNames$package.given_Y#x$1. => protected implicit val given method x$1 X
17071707
givens/InventedNames$package.given_Y(). => final implicit given method given_Y (implicit given param x$1: X): given_Y
17081708
givens/InventedNames$package.given_Y().(x$1) => implicit given param x$1: X
17091709
givens/InventedNames$package.given_Z_T# => class given_Z_T [typeparam T ] extends Object with Z[T] { self: given_Z_T[T] => +3 decls }
17101710
givens/InventedNames$package.given_Z_T#[T] => typeparam T
17111711
givens/InventedNames$package.given_Z_T#`<init>`(). => primary ctor <init> [typeparam T ](): given_Z_T[T]
1712-
givens/InventedNames$package.given_Z_T#doZ(). => method doZ => List[T]
1712+
givens/InventedNames$package.given_Z_T#doZ(). => method doZ => List[T] <: givens/Z#doZ().
17131713
givens/InventedNames$package.given_Z_T(). => final implicit given method given_Z_T [typeparam T ]: given_Z_T[T]
17141714
givens/InventedNames$package.given_Z_T().[T] => typeparam T
17151715
givens/InventedNames$package.intValue. => final implicit lazy val given method intValue Int
@@ -2361,7 +2361,7 @@ example/NamedApplyBlockCaseClassConstruction.Msg.apply(). => method apply (param
23612361
example/NamedApplyBlockCaseClassConstruction.Msg.apply().(body) => param body: String
23622362
example/NamedApplyBlockCaseClassConstruction.Msg.apply().(head) => param head: String
23632363
example/NamedApplyBlockCaseClassConstruction.Msg.apply().(tail) => param tail: String
2364-
example/NamedApplyBlockCaseClassConstruction.Msg.toString(). => method toString => String
2364+
example/NamedApplyBlockCaseClassConstruction.Msg.toString(). => method toString => String <: scala/Any#toString().
23652365
example/NamedApplyBlockCaseClassConstruction.Msg.unapply(). => method unapply (param x$1: Msg): Msg
23662366
example/NamedApplyBlockCaseClassConstruction.Msg.unapply().(x$1) => param x$1: Msg
23672367
example/NamedApplyBlockCaseClassConstruction.bodyText. => val method bodyText String
@@ -2446,7 +2446,7 @@ example/NamedArguments#User#name. => val method name String
24462446
example/NamedArguments#User. => final object User extends Object { self: User.type => +4 decls }
24472447
example/NamedArguments#User.apply(). => method apply (param name: String): User
24482448
example/NamedArguments#User.apply().(name) => param name: String
2449-
example/NamedArguments#User.toString(). => method toString => String
2449+
example/NamedArguments#User.toString(). => method toString => String <: scala/Any#toString().
24502450
example/NamedArguments#User.unapply(). => method unapply (param x$1: User): User
24512451
example/NamedArguments#User.unapply().(x$1) => param x$1: User
24522452
example/NamedArguments#`<init>`(). => primary ctor <init> (): NamedArguments
@@ -2544,7 +2544,7 @@ example/A#`<init>`(). => primary ctor <init> (): A
25442544
example/A#foo(). => abstract method foo => Int
25452545
example/B# => class B extends Object with A { self: B => +2 decls }
25462546
example/B#`<init>`(). => primary ctor <init> (): B
2547-
example/B#foo(). => method foo => Int
2547+
example/B#foo(). => method foo => Int <: example/A#foo().
25482548

25492549
Occurrences:
25502550
[0:8..0:15): example <- example/
@@ -2667,20 +2667,20 @@ example/PolyHolder#foo(). => abstract method foo [typeparam T ](param t: T): Any
26672667
example/PolyHolder#foo().(t) => param t: T
26682668
example/PolyHolder#foo().[T] => typeparam T
26692669
example/RecOrRefined$package. => final package object example extends Object { self: example.type => +9 decls }
2670-
example/RecOrRefined$package.C2# => type C2 = C { type T2 = T1; type T1 }
2670+
example/RecOrRefined$package.C2# => type C2 = C { type T2 = T1 <: example/C#T2#; type T1 <: example/C#T1# }
26712671
example/RecOrRefined$package.Person# => type Person = Record { abstract val method age Int; abstract val method name String }
26722672
example/RecOrRefined$package.m1(). => method m1 (param a: Int { abstract val method x Int }): Nothing
26732673
example/RecOrRefined$package.m1().(a) => param a: Int { abstract val method x Int }
26742674
example/RecOrRefined$package.m2(). => method m2 (param x: Object { abstract method y => Int; abstract val method x Int }): Nothing
26752675
example/RecOrRefined$package.m2().(x) => param x: Object { abstract method y => Int; abstract val method x Int }
26762676
example/RecOrRefined$package.m3(). => method m3 (param x: Object { type z ; abstract method y => Int; abstract val method x Int }): Nothing
26772677
example/RecOrRefined$package.m3().(x) => param x: Object { type z ; abstract method y => Int; abstract val method x Int }
2678-
example/RecOrRefined$package.m4(). => method m4 (param x: PolyHolder { abstract method foo [typeparam T ](param t: T): T }): Nothing
2679-
example/RecOrRefined$package.m4().(x) => param x: PolyHolder { abstract method foo [typeparam T ](param t: T): T }
2680-
example/RecOrRefined$package.m5(). => method m5 [typeparam Z ](param x: Int): PolyHolder { abstract method foo [typeparam T ](param t: T): T }
2678+
example/RecOrRefined$package.m4(). => method m4 (param x: PolyHolder { abstract method foo [typeparam T ](param t: T): T <: example/PolyHolder#foo(). }): Nothing
2679+
example/RecOrRefined$package.m4().(x) => param x: PolyHolder { abstract method foo [typeparam T ](param t: T): T <: example/PolyHolder#foo(). }
2680+
example/RecOrRefined$package.m5(). => method m5 [typeparam Z ](param x: Int): PolyHolder { abstract method foo [typeparam T ](param t: T): T <: example/PolyHolder#foo(). }
26812681
example/RecOrRefined$package.m5().(x) => param x: Int
26822682
example/RecOrRefined$package.m5().[Z] => typeparam Z
2683-
example/RecOrRefined$package.m6# => type m6 [typeparam X ] = PolyHolder { abstract method foo [typeparam T ](param t: T): T }
2683+
example/RecOrRefined$package.m6# => type m6 [typeparam X ] = PolyHolder { abstract method foo [typeparam T ](param t: T): T <: example/PolyHolder#foo(). }
26842684
example/RecOrRefined$package.m6#[X] => typeparam X
26852685
example/Record# => class Record extends Object with Selectable { self: Record => +4 decls }
26862686
example/Record#`<init>`(). => primary ctor <init> (param elems: Tuple2[String, Any]*): Record
@@ -2703,17 +2703,17 @@ local5 => abstract method y => Int
27032703
local6 => type z
27042704
local7 => typeparam T
27052705
local8 => param t: T
2706-
local9 => abstract method foo [typeparam T ](param t: T): T
2706+
local9 => abstract method foo [typeparam T ](param t: T): T <: example/PolyHolder#foo().
27072707
local10 => typeparam T
27082708
local11 => param t: T
2709-
local12 => abstract method foo [typeparam T ](param t: T): T
2709+
local12 => abstract method foo [typeparam T ](param t: T): T <: example/PolyHolder#foo().
27102710
local13 => typeparam T
27112711
local14 => param t: T
2712-
local15 => abstract method foo [typeparam T ](param t: T): T
2712+
local15 => abstract method foo [typeparam T ](param t: T): T <: example/PolyHolder#foo().
27132713
local16 => abstract val method name String
27142714
local17 => abstract val method age Int
2715-
local18 => type T1
2716-
local19 => type T2 = T1
2715+
local18 => type T1 <: example/C#T1#
2716+
local19 => type T2 = T1 <: example/C#T2#
27172717

27182718
Occurrences:
27192719
[0:8..0:15): example <- example/
@@ -2933,7 +2933,7 @@ example/Synthetic#s.Bar#`<init>`(). => primary ctor <init> (): Bar
29332933
example/Synthetic#s.Bar#copy(). => method copy (): Bar
29342934
example/Synthetic#s.Bar. => final object Bar extends Object { self: Bar.type => +4 decls }
29352935
example/Synthetic#s.Bar.apply(). => method apply (): Bar
2936-
example/Synthetic#s.Bar.toString(). => method toString => String
2936+
example/Synthetic#s.Bar.toString(). => method toString => String <: scala/Any#toString().
29372937
example/Synthetic#s.Bar.unapply(). => method unapply (param x$1: Bar): true
29382938
example/Synthetic#s.Bar.unapply().(x$1) => param x$1: Bar
29392939
example/Synthetic#s.apply(). => method apply (): Int
@@ -3419,10 +3419,10 @@ exports/example/Codec#[T] => typeparam T
34193419
exports/example/Codec#`<init>`(). => primary ctor <init> [typeparam T ](param decode: Decoder[T], param encode: Encoder[T]): Codec[T]
34203420
exports/example/Codec#`<init>`().(decode) => param decode: Decoder[T]
34213421
exports/example/Codec#`<init>`().(encode) => param encode: Encoder[T]
3422-
exports/example/Codec#decode(). => final method decode (param a: Array[Byte]): T
3422+
exports/example/Codec#decode(). => final method decode (param a: Array[Byte]): T <: exports/example/Decoder#decode().
34233423
exports/example/Codec#decode().(a) => param a: Array[Byte]
34243424
exports/example/Codec#decode. => private[this] val method decode Decoder[T]
3425-
exports/example/Codec#encode(). => final method encode (param t: T): Array[Byte]
3425+
exports/example/Codec#encode(). => final method encode (param t: T): Array[Byte] <: exports/example/Encoder#encode().
34263426
exports/example/Codec#encode().(t) => param t: T
34273427
exports/example/Codec#encode. => private[this] val method encode Encoder[T]
34283428
exports/example/Decoder# => trait Decoder [covariant typeparam T ] extends Object { self: Decoder[T] => +3 decls }
@@ -3714,8 +3714,8 @@ Occurrences => 28 entries
37143714
Symbols:
37153715
_empty_/Concrete# => class Concrete extends NullaryTest[Int, List] { self: Concrete => +3 decls }
37163716
_empty_/Concrete#`<init>`(). => primary ctor <init> (): Concrete
3717-
_empty_/Concrete#nullary2(). => method nullary2 => Int
3718-
_empty_/Concrete#nullary3(). => method nullary3 => List[Int]
3717+
_empty_/Concrete#nullary2(). => method nullary2 => Int <: _empty_/NullaryTest#nullary2().
3718+
_empty_/Concrete#nullary3(). => method nullary3 => List[Int] <: _empty_/NullaryTest#nullary3().
37193719
_empty_/NullaryTest# => abstract class NullaryTest [typeparam T , typeparam m [typeparam s ]] extends Object { self: NullaryTest[T, m] => +9 decls }
37203720
_empty_/NullaryTest#[T] => typeparam T
37213721
_empty_/NullaryTest#[m] => typeparam m [typeparam s ]
@@ -3799,7 +3799,7 @@ recursion/Nats.Succ. => final object Succ extends Object { self: Succ.type => +4
37993799
recursion/Nats.Succ.apply(). => method apply [typeparam N <: Nat](param p: N): Succ[N]
38003800
recursion/Nats.Succ.apply().(p) => param p: N
38013801
recursion/Nats.Succ.apply().[N] => typeparam N <: Nat
3802-
recursion/Nats.Succ.toString(). => method toString => String
3802+
recursion/Nats.Succ.toString(). => method toString => String <: scala/Any#toString().
38033803
recursion/Nats.Succ.unapply(). => method unapply [typeparam N <: Nat](param x$1: Succ[N]): Succ[N]
38043804
recursion/Nats.Succ.unapply().(x$1) => param x$1: Succ[N]
38053805
recursion/Nats.Succ.unapply().[N] => typeparam N <: Nat
@@ -4061,7 +4061,7 @@ types/Foo#s. => val method s "abc"
40614061
types/Foo. => final object Foo extends Object { self: Foo.type => +6 decls }
40624062
types/Foo.apply(). => method apply (param s: "abc"): Foo
40634063
types/Foo.apply().(s) => param s: "abc"
4064-
types/Foo.toString(). => method toString => String
4064+
types/Foo.toString(). => method toString => String <: scala/Any#toString().
40654065
types/Foo.unapply(). => method unapply (param x$1: Foo): Foo
40664066
types/Foo.unapply().(x$1) => param x$1: Foo
40674067
types/Foo.x. => val method x "abc" @deprecated
@@ -4113,7 +4113,7 @@ types/Test.C#RepeatedType#s. => val method s String*
41134113
types/Test.C#RepeatedType. => final object RepeatedType extends Object { self: RepeatedType.type => +4 decls }
41144114
types/Test.C#RepeatedType.apply(). => method apply (param s: String*): RepeatedType
41154115
types/Test.C#RepeatedType.apply().(s) => param s: String*
4116-
types/Test.C#RepeatedType.toString(). => method toString => String
4116+
types/Test.C#RepeatedType.toString(). => method toString => String <: scala/Any#toString().
41174117
types/Test.C#RepeatedType.unapplySeq(). => method unapplySeq (param x$1: RepeatedType): RepeatedType
41184118
types/Test.C#RepeatedType.unapplySeq().(x$1) => param x$1: RepeatedType
41194119
types/Test.C#TypeType. => final object TypeType extends Object { self: TypeType.type => +6 decls }
@@ -4433,7 +4433,7 @@ _empty_/AnObject.Foo#x. => val method x Int
44334433
_empty_/AnObject.Foo. => final object Foo extends Object { self: Foo.type => +4 decls }
44344434
_empty_/AnObject.Foo.apply(). => method apply (param x: Int): Foo
44354435
_empty_/AnObject.Foo.apply().(x) => param x: Int
4436-
_empty_/AnObject.Foo.toString(). => method toString => String
4436+
_empty_/AnObject.Foo.toString(). => method toString => String <: scala/Any#toString().
44374437
_empty_/AnObject.Foo.unapply(). => method unapply (param x$1: Foo): Foo
44384438
_empty_/AnObject.Foo.unapply().(x$1) => param x$1: Foo
44394439
_empty_/AnObject.foo(). => method foo (param x: Int): Unit

0 commit comments

Comments
 (0)