Skip to content

Commit c3548a1

Browse files
committed
Add occurrences of secondary constructors
1 parent 0e3c8ad commit c3548a1

File tree

5 files changed

+22
-10
lines changed

5 files changed

+22
-10
lines changed

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -326,8 +326,15 @@ class ExtractSemanticDB extends Phase:
326326
if content.lift(span.end - 1).map(_ == '`').getOrElse(false) then
327327
(span.start + 1, span.end - 1)
328328
else (span.start, span.end)
329-
val target = if sym.isPackageObject then sym.owner else sym
330-
content.slice(start, end).mkString == target.name.stripModuleClassSuffix.lastPart.toString
329+
val nameInSource = content.slice(start, end).mkString
330+
// for secondary constructors `this`
331+
if sym.isConstructor && nameInSource == nme.THISkw.toString then
332+
true
333+
else
334+
val target =
335+
if sym.isPackageObject then sym.owner
336+
else sym
337+
nameInSource == target.name.stripModuleClassSuffix.lastPart.toString
331338

332339
private def spanOfSymbol(sym: Symbol, span: Span, treeSource: SourceFile)(using Context): Span =
333340
val contents = if treeSource.exists then treeSource.content() else Array.empty[Char]

tests/semanticdb/expect/Annotations.expect.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class Annotations/*<-annot::Annotations#*/[@TypeParameterAnnotation/*->com::java
2121

2222
class B/*<-annot::B#*/ @ConstructorAnnotation/*->com::javacp::annot::ConstructorAnnotation#*/()(x/*<-annot::B#x.*/: Int/*->scala::Int#*/) {
2323
@ConstructorAnnotation/*->com::javacp::annot::ConstructorAnnotation#*/
24-
def this() = this(42)
24+
def this/*<-annot::B#`<init>`(+1).*/() = this(42)
2525
}
2626

2727
@ObjectAnnotation/*->com::javacp::annot::ObjectAnnotation#*/

tests/semanticdb/expect/EndMarkers.expect.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package endmarkers:
22

33
class MultiCtor/*<-endmarkers::MultiCtor#*/(val i/*<-endmarkers::MultiCtor#i.*/: Int/*->scala::Int#*/):
4-
def this() =
4+
def this/*<-endmarkers::MultiCtor#`<init>`(+1).*/() =
55
this(23)
6-
end this
6+
end this/*->endmarkers::MultiCtor#`<init>`(+1).*/
77
end MultiCtor/*->endmarkers::MultiCtor#*/
88

99
def topLevelMethod/*<-endmarkers::EndMarkers$package.topLevelMethod().*/: String/*->scala::Predef.String#*/ =

tests/semanticdb/expect/semanticdb-Flags.expect.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ package object p/*<-flags::p::package.*/ {
88
def z/*<-flags::p::package.z().*/(pp/*<-flags::p::package.z().(pp)*/: Int/*->scala::Int#*/) = 3
99
def m/*<-flags::p::package.m().*/[TT/*<-flags::p::package.m().[TT]*/]: Int/*->scala::Int#*/ = macro ???/*->scala::Predef.`???`().*/
1010
abstract class C/*<-flags::p::package.C#*/[+T/*<-flags::p::package.C#[T]*/, -U/*<-flags::p::package.C#[U]*/, V/*<-flags::p::package.C#[V]*/](x/*<-flags::p::package.C#x.*/: T/*->flags::p::package.C#[T]*/, y/*<-flags::p::package.C#y.*/: U/*->flags::p::package.C#[U]*/, z/*<-flags::p::package.C#z.*/: V/*->flags::p::package.C#[V]*/) {
11-
def this() = this(???/*->scala::Predef.`???`().*/, ???/*->scala::Predef.`???`().*/, ???/*->scala::Predef.`???`().*/)
12-
def this(t/*<-flags::p::package.C#`<init>`(+2).(t)*/: T/*->flags::p::package.C#[T]*/) = this(t/*->flags::p::package.C#`<init>`(+2).(t)*/, ???/*->scala::Predef.`???`().*/, ???/*->scala::Predef.`???`().*/)
11+
def this/*<-flags::p::package.C#`<init>`(+1).*/() = this(???/*->scala::Predef.`???`().*/, ???/*->scala::Predef.`???`().*/, ???/*->scala::Predef.`???`().*/)
12+
def this/*<-flags::p::package.C#`<init>`(+2).*/(t/*<-flags::p::package.C#`<init>`(+2).(t)*/: T/*->flags::p::package.C#[T]*/) = this(t/*->flags::p::package.C#`<init>`(+2).(t)*/, ???/*->scala::Predef.`???`().*/, ???/*->scala::Predef.`???`().*/)
1313
def w/*<-flags::p::package.C#w().*/: Int/*->scala::Int#*/
1414
}
1515
type T1/*<-flags::p::package.T1#*/ = Int/*->scala::Int#*/

tests/semanticdb/metac.expect

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ Uri => Annotations.scala
210210
Text => empty
211211
Language => Scala
212212
Symbols => 22 entries
213-
Occurrences => 47 entries
213+
Occurrences => 48 entries
214214

215215
Symbols:
216216
annot/Alias. => final object Alias extends Object { self: Alias.type => +2 decls }
@@ -271,6 +271,7 @@ Occurrences:
271271
[21:33..21:34): x <- annot/B#x.
272272
[21:36..21:39): Int -> scala/Int#
273273
[22:3..22:24): ConstructorAnnotation -> com/javacp/annot/ConstructorAnnotation#
274+
[23:6..23:10): <- annot/B#`<init>`(+1).
274275
[26:1..26:17): ObjectAnnotation -> com/javacp/annot/ObjectAnnotation#
275276
[27:7..27:8): M <- annot/M.
276277
[28:3..28:18): MacroAnnotation -> com/javacp/annot/MacroAnnotation#
@@ -660,7 +661,7 @@ Uri => EndMarkers.scala
660661
Text => empty
661662
Language => Scala
662663
Symbols => 24 entries
663-
Occurrences => 35 entries
664+
Occurrences => 37 entries
664665

665666
Symbols:
666667
endmarkers/Container# => class Container extends Object { self: Container => +5 decls }
@@ -693,6 +694,8 @@ Occurrences:
693694
[2:8..2:17): MultiCtor <- endmarkers/MultiCtor#
694695
[2:22..2:23): i <- endmarkers/MultiCtor#i.
695696
[2:25..2:28): Int -> scala/Int#
697+
[3:8..3:12): <- endmarkers/MultiCtor#`<init>`(+1).
698+
[5:8..5:12): this -> endmarkers/MultiCtor#`<init>`(+1).
696699
[6:6..6:15): MultiCtor -> endmarkers/MultiCtor#
697700
[8:6..8:20): topLevelMethod <- endmarkers/EndMarkers$package.topLevelMethod().
698701
[8:22..8:28): String -> scala/Predef.String#
@@ -3881,7 +3884,7 @@ Uri => semanticdb-Flags.scala
38813884
Text => empty
38823885
Language => Scala
38833886
Symbols => 50 entries
3884-
Occurrences => 71 entries
3887+
Occurrences => 73 entries
38853888

38863889
Symbols:
38873890
flags/p/package. => final package object p extends Object { self: p.type => +23 decls }
@@ -3963,9 +3966,11 @@ Occurrences:
39633966
[9:39..9:40): U -> flags/p/package.C#[U]
39643967
[9:42..9:43): z <- flags/p/package.C#z.
39653968
[9:45..9:46): V -> flags/p/package.C#[V]
3969+
[10:8..10:12): <- flags/p/package.C#`<init>`(+1).
39663970
[10:22..10:25): ??? -> scala/Predef.`???`().
39673971
[10:27..10:30): ??? -> scala/Predef.`???`().
39683972
[10:32..10:35): ??? -> scala/Predef.`???`().
3973+
[11:8..11:12): <- flags/p/package.C#`<init>`(+2).
39693974
[11:13..11:14): t <- flags/p/package.C#`<init>`(+2).(t)
39703975
[11:16..11:17): T -> flags/p/package.C#[T]
39713976
[11:26..11:27): t -> flags/p/package.C#`<init>`(+2).(t)

0 commit comments

Comments
 (0)