Skip to content

Commit 170a99a

Browse files
kasiaMarekWojciechMazur
authored andcommitted
bugfix: in semanticdb make synthetic apply disambiguator consistent with Scala 2 implementation
[Cherry-picked 7a44b59]
1 parent 027e675 commit 170a99a

File tree

4 files changed

+68
-1
lines changed

4 files changed

+68
-1
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ class SemanticSymbolBuilder:
8484
else
8585
decls0
8686
end decls
87-
val alts = decls.filter(_.isOneOf(Method | Mutable)).toList.reverse
87+
val alts = decls.filter(_.isOneOf(Method | Mutable)).toList.reverse.partition(!_.is(Synthetic)).toList.flatten
8888
def find(filter: Symbol => Boolean) = alts match
8989
case notSym :: rest if !filter(notSym) =>
9090
val idx = rest.indexWhere(filter).ensuring(_ >= 0)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package caseclass
2+
3+
case class CaseClass/*<-caseclass::CaseClass#*/(int1/*<-caseclass::CaseClass#int1.*/: Int/*->scala::Int#*/, int2/*<-caseclass::CaseClass#int2.*/: Int/*->scala::Int#*/)
4+
5+
object CaseClass/*<-caseclass::CaseClass.*/:
6+
def apply/*<-caseclass::CaseClass.apply().*/(int/*<-caseclass::CaseClass.apply().(int)*/: Int/*->scala::Int#*/): CaseClass/*->caseclass::CaseClass#*/ = CaseClass/*->caseclass::CaseClass.*/(int/*->caseclass::CaseClass.apply().(int)*/, 0)
7+
def apply/*<-caseclass::CaseClass.apply(+1).*/(): CaseClass/*->caseclass::CaseClass#*/ = CaseClass/*->caseclass::CaseClass.*/(0, 0)
+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package caseclass
2+
3+
case class CaseClass(int1: Int, int2: Int)
4+
5+
object CaseClass:
6+
def apply(int: Int): CaseClass = CaseClass(int, 0)
7+
def apply(): CaseClass = CaseClass(0, 0)

tests/semanticdb/metac.expect

+53
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,59 @@ Occurrences:
477477
[4:4..4:7): bar <- angiven/AnonymousGiven$package.bar().
478478
[4:14..4:17): Foo -> angiven/Foo#
479479

480+
expect/CaseClass.scala
481+
----------------------
482+
483+
Summary:
484+
Schema => SemanticDB v4
485+
Uri => CaseClass.scala
486+
Text => empty
487+
Language => Scala
488+
Symbols => 22 entries
489+
Occurrences => 16 entries
490+
491+
Symbols:
492+
caseclass/CaseClass# => case class CaseClass extends Object with Product with Serializable { self: CaseClass => +8 decls }
493+
caseclass/CaseClass#_1(). => method _1 => Int
494+
caseclass/CaseClass#_2(). => method _2 => Int
495+
caseclass/CaseClass#`<init>`(). => primary ctor <init> (val param int1: Int, val param int2: Int): CaseClass
496+
caseclass/CaseClass#`<init>`().(int1) => val param int1: Int
497+
caseclass/CaseClass#`<init>`().(int2) => val param int2: Int
498+
caseclass/CaseClass#copy$default$1(). => method copy$default$1 => Int @uncheckedVariance
499+
caseclass/CaseClass#copy$default$2(). => method copy$default$2 => Int @uncheckedVariance
500+
caseclass/CaseClass#copy(). => method copy (param int1: Int, param int2: Int): CaseClass
501+
caseclass/CaseClass#copy().(int1) => param int1: Int
502+
caseclass/CaseClass#copy().(int2) => param int2: Int
503+
caseclass/CaseClass#int1. => val method int1 Int
504+
caseclass/CaseClass#int2. => val method int2 Int
505+
caseclass/CaseClass. => final object CaseClass extends Object { self: CaseClass.type => +5 decls }
506+
caseclass/CaseClass.apply(). => method apply (param int: Int): CaseClass
507+
caseclass/CaseClass.apply().(int) => param int: Int
508+
caseclass/CaseClass.apply(+1). => method apply (): CaseClass
509+
caseclass/CaseClass.apply(+2). => method apply (param int1: Int, param int2: Int): CaseClass
510+
caseclass/CaseClass.apply(+2).(int1) => param int1: Int
511+
caseclass/CaseClass.apply(+2).(int2) => param int2: Int
512+
caseclass/CaseClass.unapply(). => method unapply (param x$1: CaseClass): CaseClass
513+
caseclass/CaseClass.unapply().(x$1) => param x$1: CaseClass
514+
515+
Occurrences:
516+
[0:8..0:17): caseclass <- caseclass/
517+
[2:11..2:20): CaseClass <- caseclass/CaseClass#
518+
[2:21..2:25): int1 <- caseclass/CaseClass#int1.
519+
[2:27..2:30): Int -> scala/Int#
520+
[2:32..2:36): int2 <- caseclass/CaseClass#int2.
521+
[2:38..2:41): Int -> scala/Int#
522+
[4:7..4:16): CaseClass <- caseclass/CaseClass.
523+
[5:6..5:11): apply <- caseclass/CaseClass.apply().
524+
[5:12..5:15): int <- caseclass/CaseClass.apply().(int)
525+
[5:17..5:20): Int -> scala/Int#
526+
[5:23..5:32): CaseClass -> caseclass/CaseClass#
527+
[5:35..5:44): CaseClass -> caseclass/CaseClass.
528+
[5:45..5:48): int -> caseclass/CaseClass.apply().(int)
529+
[6:6..6:11): apply <- caseclass/CaseClass.apply(+1).
530+
[6:15..6:24): CaseClass -> caseclass/CaseClass#
531+
[6:27..6:36): CaseClass -> caseclass/CaseClass.
532+
480533
expect/Classes.scala
481534
--------------------
482535

0 commit comments

Comments
 (0)