Skip to content

Commit d1a0eac

Browse files
committed
Support implicit conversion for Synthetics
1 parent 753b3c4 commit d1a0eac

File tree

2 files changed

+49
-3
lines changed

2 files changed

+49
-3
lines changed

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,18 @@ class SyntheticsExtractor:
3333
)
3434
).toOpt
3535

36+
case tree: Apply if tree.fun.symbol.is(Implicit) =>
37+
val pos = range(tree.span, tree.source)
38+
s.Synthetic(
39+
pos,
40+
s.ApplyTree(
41+
tree.fun.toSemanticTree,
42+
arguments = List(
43+
s.OriginalTree(pos)
44+
)
45+
)
46+
).toOpt
47+
3648
// Anonymous context parameter
3749
case tree: ValDef if tree.symbol.is(Given) =>
3850
s.Synthetic(

tests/semanticdb/metac.expect

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ Text => empty
5050
Language => Scala
5151
Symbols => 46 entries
5252
Occurrences => 101 entries
53+
Synthetics => 3 entries
5354

5455
Symbols:
5556
advanced/C# => class C [typeparam T ] extends Object { self: C[T] => +3 decls }
@@ -202,6 +203,11 @@ Occurrences:
202203
[48:37..48:38): x -> advanced/HKClass#foo().(x)
203204
[48:39..48:47): toString -> scala/Tuple2#toString().
204205

206+
Synthetics:
207+
[26:12..26:16):s.s1 => reflectiveSelectable(*)
208+
[28:12..28:16):s.s2 => reflectiveSelectable(*)
209+
[30:12..30:16):s.s3 => reflectiveSelectable(*)
210+
205211
expect/Annotations.scala
206212
------------------------
207213

@@ -1508,6 +1514,7 @@ Text => empty
15081514
Language => Scala
15091515
Symbols => 23 entries
15101516
Occurrences => 48 entries
1517+
Synthetics => 6 entries
15111518

15121519
Symbols:
15131520
example/ImplicitConversion# => class ImplicitConversion extends Object { self: ImplicitConversion => +9 decls }
@@ -1584,6 +1591,16 @@ Occurrences:
15841591
[34:56..34:57): + -> java/lang/String#`+`().
15851592
[34:58..34:63): other -> example/ImplicitConversion.newAny2stringadd#`+`().(other)
15861593

1594+
Synthetics:
1595+
[15:2..15:9):message => augmentString(*)
1596+
[17:2..17:7):tuple => newAny2stringadd[Tuple2[Int, Int]](*)
1597+
[20:15..20:22):message => string2Number(*)
1598+
[24:2..26:16):s"""Hello
1599+
|$message
1600+
|$number""" => augmentString(*)
1601+
[28:15..28:19):char => char2int(*)
1602+
[29:16..29:20):char => char2long(*)
1603+
15871604
expect/Imports.scala
15881605
--------------------
15891606

@@ -1819,7 +1836,7 @@ Text => empty
18191836
Language => Scala
18201837
Symbols => 7 entries
18211838
Occurrences => 22 entries
1822-
Synthetics => 2 entries
1839+
Synthetics => 3 entries
18231840

18241841
Symbols:
18251842
example/Issue1749# => class Issue1749 extends Object { self: Issue1749 => +3 decls }
@@ -1855,6 +1872,7 @@ Occurrences:
18551872
[14:2..14:5): map -> example/Issue1854#map.
18561873

18571874
Synthetics:
1875+
[8:2..8:10):(x1, x1) => orderingToOrdered[Tuple2[Int, Int]](*)
18581876
[8:2..8:10):(x1, x1) => *(Tuple2(Int, Int))
18591877
[8:10..8:10): => *(Int, Int)
18601878

@@ -2939,7 +2957,7 @@ Text => empty
29392957
Language => Scala
29402958
Symbols => 52 entries
29412959
Occurrences => 133 entries
2942-
Synthetics => 9 entries
2960+
Synthetics => 24 entries
29432961

29442962
Symbols:
29452963
example/Synthetic# => class Synthetic extends Object { self: Synthetic => +23 decls }
@@ -3131,7 +3149,22 @@ Occurrences:
31313149
[58:6..58:9): foo -> example/Synthetic#Contexts.foo().
31323150

31333151
Synthetics:
3152+
[6:2..6:18):Array.empty[Int] => intArrayOps(*)
3153+
[7:2..7:8):"fooo" => augmentString(*)
3154+
[10:13..10:24):"name:(.*)" => augmentString(*)
3155+
[13:8..13:28):2 #:: LazyList.empty => toDeferrer[Int](*)
3156+
[13:14..13:28):LazyList.empty => toDeferrer[Nothing](*)
3157+
[17:18..17:38):2 #:: LazyList.empty => toDeferrer[Int](*)
3158+
[17:24..17:38):LazyList.empty => toDeferrer[Nothing](*)
3159+
[19:12..19:13):1 => intWrapper(*)
3160+
[19:26..19:27):0 => intWrapper(*)
3161+
[19:46..19:47):x => ArrowAssoc[Int](*)
3162+
[20:12..20:13):1 => intWrapper(*)
3163+
[20:26..20:27):0 => intWrapper(*)
3164+
[21:12..21:13):1 => intWrapper(*)
3165+
[21:26..21:27):0 => intWrapper(*)
31343166
[32:35..32:49):Array.empty[T] => *(evidence$1)
3167+
[36:22..36:27):new F => orderingToOrdered[F](*)
31353168
[36:22..36:27):new F => *(ordering)
31363169
[50:26..50:29):Int => x$2
31373170
[51:17..51:20):Int => x$1
@@ -4549,7 +4582,7 @@ Text => empty
45494582
Language => Scala
45504583
Symbols => 19 entries
45514584
Occurrences => 34 entries
4552-
Synthetics => 1 entries
4585+
Synthetics => 2 entries
45534586

45544587
Symbols:
45554588
_empty_/MyProgram# => final class MyProgram extends Object { self: MyProgram => +2 decls }
@@ -4610,4 +4643,5 @@ Occurrences:
46104643

46114644
Synthetics:
46124645
[5:0..5:0): => *(given_FromString_Int)
4646+
[5:41..5:42):1 => intWrapper(*)
46134647

0 commit comments

Comments
 (0)