Skip to content

Commit 373f0e7

Browse files
committed
bugfix: in semanticdb make synthetic apply disambiguator consistent with Scala 2 implementation
1 parent 824295e commit 373f0e7

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.sortBy(_.is(Synthetic))
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
@@ -464,6 +464,59 @@ Occurrences:
464464
[4:4..4:7): bar <- angiven/AnonymousGiven$package.bar().
465465
[4:14..4:17): Foo -> angiven/Foo#
466466

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

0 commit comments

Comments
 (0)