Skip to content

Commit ba9efc3

Browse files
committed
emit uses of setters instead of the getter
1 parent 3f9f82f commit ba9efc3

File tree

4 files changed

+19
-12
lines changed

4 files changed

+19
-12
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,13 @@ class ExtractSemanticDB extends Phase {
382382
if selfSpan.exists && selfSpan.start != selfSpan.end then
383383
traverse(tree.self)
384384
tree.body.foreach(traverse)
385+
case tree: Assign =>
386+
traverseChildren(tree.lhs)
387+
if !excludeUseStrict(tree.lhs.symbol, tree.lhs.span)
388+
val name = tree.lhs.symbol.name
389+
val setter = tree.lhs.symbol.owner.info.decls.find(s => s.name.startsWith(name.show) && s.name.isSetterName)
390+
registerUse(setter.orElse(tree.lhs.symbol), tree.lhs.span)
391+
traverse(tree.rhs)
385392
case tree: Ident =>
386393
if tree.name != nme.WILDCARD && !excludeUseStrict(tree.symbol, tree.span) then
387394
registerUse(tree.symbol, tree.span)

tests/semanticdb/expect/Vals.expect.scala

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ abstract class Vals/*<-example::Vals#*/(p/*<-example::Vals#p.*/: Int/*->scala::I
3838

3939
object ValUsages/*<-example::ValUsages.*/ {
4040
val v/*<-example::ValUsages.v.*/: Vals/*->example::Vals#*/ = ???/*->scala::Predef.`???`().*/
41-
v/*->example::ValUsages.v.*/.yp/*->example::Vals#yp().*/ = v/*->example::ValUsages.v.*/.xp/*->example::Vals#xp.*/ +/*->scala::Int#`+`(+4).*/ v/*->example::ValUsages.v.*/.yp/*->example::Vals#yp().*/
42-
v/*->example::ValUsages.v.*/.ym/*->example::Vals#ym().*/ = v/*->example::ValUsages.v.*/.xm/*->example::Vals#xm.*/ +/*->scala::Int#`+`(+4).*/ v/*->example::ValUsages.v.*/.ym/*->example::Vals#ym().*/
43-
v/*->example::ValUsages.v.*/.yam/*->example::Vals#yam().*/ = v/*->example::ValUsages.v.*/.xam/*->example::Vals#xam.*/ +/*->scala::Int#`+`(+4).*/ v/*->example::ValUsages.v.*/.yam/*->example::Vals#yam().*/
41+
v/*->example::ValUsages.v.*/.yp/*->example::Vals#`yp_=`().*/ = v/*->example::ValUsages.v.*/.xp/*->example::Vals#xp.*/ +/*->scala::Int#`+`(+4).*/ v/*->example::ValUsages.v.*/.yp/*->example::Vals#yp().*/
42+
v/*->example::ValUsages.v.*/.ym/*->example::Vals#`ym_=`().*/ = v/*->example::ValUsages.v.*/.xm/*->example::Vals#xm.*/ +/*->scala::Int#`+`(+4).*/ v/*->example::ValUsages.v.*/.ym/*->example::Vals#ym().*/
43+
v/*->example::ValUsages.v.*/.yam/*->example::Vals#`yam_=`().*/ = v/*->example::ValUsages.v.*/.xam/*->example::Vals#xam.*/ +/*->scala::Int#`+`(+4).*/ v/*->example::ValUsages.v.*/.yam/*->example::Vals#yam().*/
4444
println/*->scala::Predef.println(+1).*/(v/*->example::ValUsages.v.*/.xzm/*->example::Vals#xzm.*/)
45-
v/*->example::ValUsages.v.*/.yfm/*->example::Vals#yfm().*/ = v/*->example::ValUsages.v.*/.xfm/*->example::Vals#xfm.*/ +/*->scala::Int#`+`(+4).*/ v/*->example::ValUsages.v.*/.yfm/*->example::Vals#yfm().*/
46-
v/*->example::ValUsages.v.*/.yim/*->example::Vals#yim().*/ = v/*->example::ValUsages.v.*/.xim/*->example::Vals#xim.*/ +/*->scala::Int#`+`(+4).*/ v/*->example::ValUsages.v.*/.yim/*->example::Vals#yim().*/
45+
v/*->example::ValUsages.v.*/.yfm/*->example::Vals#`yfm_=`().*/ = v/*->example::ValUsages.v.*/.xfm/*->example::Vals#xfm.*/ +/*->scala::Int#`+`(+4).*/ v/*->example::ValUsages.v.*/.yfm/*->example::Vals#yfm().*/
46+
v/*->example::ValUsages.v.*/.yim/*->example::Vals#`yim_=`().*/ = v/*->example::ValUsages.v.*/.xim/*->example::Vals#xim.*/ +/*->scala::Int#`+`(+4).*/ v/*->example::ValUsages.v.*/.yim/*->example::Vals#yim().*/
4747
}

tests/semanticdb/metac.expect

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2990,21 +2990,21 @@ Occurrences:
29902990
[39:9..39:13) => example/Vals#
29912991
[39:16..39:19) => scala/Predef.`???`().
29922992
[40:2..40:3) => example/ValUsages.v.
2993-
[40:4..40:6) => example/Vals#yp().
2993+
[40:2..40:6) => example/Vals#`yp_=`().
29942994
[40:9..40:10) => example/ValUsages.v.
29952995
[40:11..40:13) => example/Vals#xp.
29962996
[40:14..40:15) => scala/Int#`+`(+4).
29972997
[40:16..40:17) => example/ValUsages.v.
29982998
[40:18..40:20) => example/Vals#yp().
29992999
[41:2..41:3) => example/ValUsages.v.
3000-
[41:4..41:6) => example/Vals#ym().
3000+
[41:2..41:6) => example/Vals#`ym_=`().
30013001
[41:9..41:10) => example/ValUsages.v.
30023002
[41:11..41:13) => example/Vals#xm.
30033003
[41:14..41:15) => scala/Int#`+`(+4).
30043004
[41:16..41:17) => example/ValUsages.v.
30053005
[41:18..41:20) => example/Vals#ym().
30063006
[42:2..42:3) => example/ValUsages.v.
3007-
[42:4..42:7) => example/Vals#yam().
3007+
[42:2..42:7) => example/Vals#`yam_=`().
30083008
[42:10..42:11) => example/ValUsages.v.
30093009
[42:12..42:15) => example/Vals#xam.
30103010
[42:16..42:17) => scala/Int#`+`(+4).
@@ -3014,14 +3014,14 @@ Occurrences:
30143014
[43:10..43:11) => example/ValUsages.v.
30153015
[43:12..43:15) => example/Vals#xzm.
30163016
[44:2..44:3) => example/ValUsages.v.
3017-
[44:4..44:7) => example/Vals#yfm().
3017+
[44:2..44:7) => example/Vals#`yfm_=`().
30183018
[44:10..44:11) => example/ValUsages.v.
30193019
[44:12..44:15) => example/Vals#xfm.
30203020
[44:16..44:17) => scala/Int#`+`(+4).
30213021
[44:18..44:19) => example/ValUsages.v.
30223022
[44:20..44:23) => example/Vals#yfm().
30233023
[45:2..45:3) => example/ValUsages.v.
3024-
[45:4..45:7) => example/Vals#yim().
3024+
[45:2..45:7) => example/Vals#`yim_=`().
30253025
[45:10..45:11) => example/ValUsages.v.
30263026
[45:12..45:15) => example/Vals#xim.
30273027
[45:16..45:17) => scala/Int#`+`(+4).

tests/semanticdb/todo.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
This todolist is based upon blackbox observation of testcases at this repository: https://github.com/scalameta/scalameta/tree/master/tests/jvm/src/test/resources/example
33

44
- [ ] Hide unapply, unapplySeq?
5-
- [ ] Hide constructor of template
65
- [ ] Hide local vars in pattern def?
76
- [ ] Hide desugaring of for comprehension
87
- [ ] Hide calls to implicit conversions and their arguments
98
- [ ] Hide Tuple contructors
109
- [ ] Hide implicitly applied arguments
11-
- [ ] Assignments to vars should emit setter symbol
10+
- [x] Assignments to vars should emit uses of the setter method and not the getter
11+
- [x] Hide constructor of module template // expect tests hide primary ctors
1212
- [x] unescape unicode in names.
1313
- [x] Only traverse prefix of a Select if it is not a package
1414
- [x] Ensure only methods are counted in overloads

0 commit comments

Comments
 (0)