Skip to content

Commit 0c4321a

Browse files
authored
Merge pull request #11807 from Kordyjan/semdb-fixes-enums
Skip EnumValue as supertype of enum values in semanticdb
2 parents 7580ee9 + fb8158b commit 0c4321a

File tree

5 files changed

+92
-35
lines changed

5 files changed

+92
-35
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ class ExtractSemanticDB extends Phase:
154154
if tree.symbol.isAllOf(EnumValue) =>
155155
tree.rhs match
156156
case Block(TypeDef(_, template: Template) :: _, _) => // simple case with specialised extends clause
157-
template.parents.foreach(traverse)
157+
template.parents.filter(!_.span.isZeroExtent).foreach(traverse)
158158
case _ => // calls $new
159159
case tree: ValDef
160160
if tree.symbol.isSelfSym =>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package enumVal
2+
3+
import scala.runtime.EnumValue/*->scala::runtime::EnumValue.*/
4+
5+
6+
trait A/*<-enumVal::A#*/
7+
8+
enum Color/*<-enumVal::Color#*/(val rgb/*<-enumVal::Color#rgb.*/: Int/*->scala::Int#*/):
9+
case Red/*<-enumVal::Color.Red.*/ extends Color/*->enumVal::Color#*/(0xFF0000) with EnumValue/*->scala::runtime::EnumValue#*/
10+
case Green/*<-enumVal::Color.Green.*/ extends Color/*->enumVal::Color#*/(0x00FF00) with A/*->enumVal::A#*/
11+
case Blue/*<-enumVal::Color.Blue.*/ extends Color/*->enumVal::Color#*/(0x0000FF)

tests/semanticdb/expect/EnumVal.scala

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package enumVal
2+
3+
import scala.runtime.EnumValue
4+
5+
6+
trait A
7+
8+
enum Color(val rgb: Int):
9+
case Red extends Color(0xFF0000) with EnumValue
10+
case Green extends Color(0x00FF00) with A
11+
case Blue extends Color(0x0000FF)

tests/semanticdb/expect/Enums.expect.scala

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,19 @@ object Enums/*<-_empty_::Enums.*/:
2929
case Sunday/*<-_empty_::Enums.WeekDays.Sunday.*/
3030

3131
enum Coin/*<-_empty_::Enums.Coin#*/(value/*<-_empty_::Enums.Coin#value.*/: Int/*->scala::Int#*/):
32-
case Penny/*<-_empty_::Enums.Coin.Penny.*/ extends Coin/*->_empty_::Enums.Coin#*/(1)/*->scala::runtime::EnumValue#*/
33-
case Nickel/*<-_empty_::Enums.Coin.Nickel.*/ extends Coin/*->_empty_::Enums.Coin#*/(5)/*->scala::runtime::EnumValue#*/
34-
case Dime/*<-_empty_::Enums.Coin.Dime.*/ extends Coin/*->_empty_::Enums.Coin#*/(10)/*->scala::runtime::EnumValue#*/
35-
case Quarter/*<-_empty_::Enums.Coin.Quarter.*/ extends Coin/*->_empty_::Enums.Coin#*/(25)/*->scala::runtime::EnumValue#*/
36-
case Dollar/*<-_empty_::Enums.Coin.Dollar.*/ extends Coin/*->_empty_::Enums.Coin#*/(100)/*->scala::runtime::EnumValue#*/
32+
case Penny/*<-_empty_::Enums.Coin.Penny.*/ extends Coin/*->_empty_::Enums.Coin#*/(1)
33+
case Nickel/*<-_empty_::Enums.Coin.Nickel.*/ extends Coin/*->_empty_::Enums.Coin#*/(5)
34+
case Dime/*<-_empty_::Enums.Coin.Dime.*/ extends Coin/*->_empty_::Enums.Coin#*/(10)
35+
case Quarter/*<-_empty_::Enums.Coin.Quarter.*/ extends Coin/*->_empty_::Enums.Coin#*/(25)
36+
case Dollar/*<-_empty_::Enums.Coin.Dollar.*/ extends Coin/*->_empty_::Enums.Coin#*/(100)
3737

3838
enum Maybe/*<-_empty_::Enums.Maybe#*/[+A/*<-_empty_::Enums.Maybe#[A]*/]:
3939
case Just/*<-_empty_::Enums.Maybe.Just#*/(value/*<-_empty_::Enums.Maybe.Just#value.*/: A/*->_empty_::Enums.Maybe.Just#[A]*/)
40-
case None/*<-_empty_::Enums.Maybe.None.*//*->scala::runtime::EnumValue#*/
40+
case None/*<-_empty_::Enums.Maybe.None.*/
4141

4242
enum Tag/*<-_empty_::Enums.Tag#*/[A/*<-_empty_::Enums.Tag#[A]*/]:
43-
case IntTag/*<-_empty_::Enums.Tag.IntTag.*/ extends Tag/*->_empty_::Enums.Tag#*/[Int/*->scala::Int#*/]/*->scala::runtime::EnumValue#*/
44-
case BooleanTag/*<-_empty_::Enums.Tag.BooleanTag.*/ extends Tag/*->_empty_::Enums.Tag#*/[Boolean/*->scala::Boolean#*/]/*->scala::runtime::EnumValue#*/
43+
case IntTag/*<-_empty_::Enums.Tag.IntTag.*/ extends Tag/*->_empty_::Enums.Tag#*/[Int/*->scala::Int#*/]
44+
case BooleanTag/*<-_empty_::Enums.Tag.BooleanTag.*/ extends Tag/*->_empty_::Enums.Tag#*/[Boolean/*->scala::Boolean#*/]
4545

4646
enum <:</*<-_empty_::Enums.`<:<`#*/[-A/*<-_empty_::Enums.`<:<`#[A]*/, B/*<-_empty_::Enums.`<:<`#[B]*/]:
4747
case Refl/*<-_empty_::Enums.`<:<`.Refl#*/[C/*<-_empty_::Enums.`<:<`.Refl#[C]*/]() extends (C/*->_empty_::Enums.`<:<`.Refl#[C]*/ <:</*->_empty_::Enums.`<:<`#*/ C/*->_empty_::Enums.`<:<`.Refl#[C]*/)
@@ -59,11 +59,11 @@ object Enums/*<-_empty_::Enums.*/:
5959
def surfaceGravity/*<-_empty_::Enums.Planet#surfaceGravity().*/ = G/*->_empty_::Enums.Planet#G.*/ */*->scala::Double#`*`(+6).*/ mass/*->_empty_::Enums.Planet#mass.*/ //*->scala::Double#`::`(+6).*/ (radius/*->_empty_::Enums.Planet#radius.*/ */*->scala::Double#`*`(+6).*/ radius/*->_empty_::Enums.Planet#radius.*/)
6060
def surfaceWeight/*<-_empty_::Enums.Planet#surfaceWeight().*/(otherMass/*<-_empty_::Enums.Planet#surfaceWeight().(otherMass)*/: Double/*->scala::Double#*/) = otherMass/*->_empty_::Enums.Planet#surfaceWeight().(otherMass)*/ */*->scala::Double#`*`(+6).*/ surfaceGravity/*->_empty_::Enums.Planet#surfaceGravity().*/
6161

62-
case Mercury/*<-_empty_::Enums.Planet.Mercury.*/ extends Planet/*->_empty_::Enums.Planet#*/(3.303e+23, 2.4397e6)/*->scala::runtime::EnumValue#*/
63-
case Venus/*<-_empty_::Enums.Planet.Venus.*/ extends Planet/*->_empty_::Enums.Planet#*/(4.869e+24, 6.0518e6)/*->scala::runtime::EnumValue#*/
64-
case Earth/*<-_empty_::Enums.Planet.Earth.*/ extends Planet/*->_empty_::Enums.Planet#*/(5.976e+24, 6.37814e6)/*->scala::runtime::EnumValue#*/
65-
case Mars/*<-_empty_::Enums.Planet.Mars.*/ extends Planet/*->_empty_::Enums.Planet#*/(6.421e+23, 3.3972e6)/*->scala::runtime::EnumValue#*/
66-
case Jupiter/*<-_empty_::Enums.Planet.Jupiter.*/ extends Planet/*->_empty_::Enums.Planet#*/(1.9e+27, 7.1492e7)/*->scala::runtime::EnumValue#*/
67-
case Saturn/*<-_empty_::Enums.Planet.Saturn.*/ extends Planet/*->_empty_::Enums.Planet#*/(5.688e+26, 6.0268e7)/*->scala::runtime::EnumValue#*/
68-
case Uranus/*<-_empty_::Enums.Planet.Uranus.*/ extends Planet/*->_empty_::Enums.Planet#*/(8.686e+25, 2.5559e7)/*->scala::runtime::EnumValue#*/
69-
case Neptune/*<-_empty_::Enums.Planet.Neptune.*/ extends Planet/*->_empty_::Enums.Planet#*/(1.024e+26, 2.4746e7)/*->scala::runtime::EnumValue#*/
62+
case Mercury/*<-_empty_::Enums.Planet.Mercury.*/ extends Planet/*->_empty_::Enums.Planet#*/(3.303e+23, 2.4397e6)
63+
case Venus/*<-_empty_::Enums.Planet.Venus.*/ extends Planet/*->_empty_::Enums.Planet#*/(4.869e+24, 6.0518e6)
64+
case Earth/*<-_empty_::Enums.Planet.Earth.*/ extends Planet/*->_empty_::Enums.Planet#*/(5.976e+24, 6.37814e6)
65+
case Mars/*<-_empty_::Enums.Planet.Mars.*/ extends Planet/*->_empty_::Enums.Planet#*/(6.421e+23, 3.3972e6)
66+
case Jupiter/*<-_empty_::Enums.Planet.Jupiter.*/ extends Planet/*->_empty_::Enums.Planet#*/(1.9e+27, 7.1492e7)
67+
case Saturn/*<-_empty_::Enums.Planet.Saturn.*/ extends Planet/*->_empty_::Enums.Planet#*/(5.688e+26, 6.0268e7)
68+
case Uranus/*<-_empty_::Enums.Planet.Uranus.*/ extends Planet/*->_empty_::Enums.Planet#*/(8.686e+25, 2.5559e7)
69+
case Neptune/*<-_empty_::Enums.Planet.Neptune.*/ extends Planet/*->_empty_::Enums.Planet#*/(1.024e+26, 2.4746e7)

tests/semanticdb/metac.expect

Lines changed: 53 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -658,6 +658,58 @@ Occurrences:
658658
[0:8..0:15): example <- example/
659659
[2:7..2:18): EmptyObject <- example/EmptyObject.
660660

661+
expect/EnumVal.scala
662+
--------------------
663+
664+
Summary:
665+
Schema => SemanticDB v4
666+
Uri => EnumVal.scala
667+
Text => empty
668+
Language => Scala
669+
Symbols => 16 entries
670+
Occurrences => 21 entries
671+
672+
Symbols:
673+
enumVal/A# => trait A
674+
enumVal/A#`<init>`(). => primary ctor <init>
675+
enumVal/Color# => abstract sealed enum class Color
676+
enumVal/Color#`<init>`(). => primary ctor <init>
677+
enumVal/Color#`<init>`().(rgb) => val param rgb
678+
enumVal/Color#rgb. => val method rgb
679+
enumVal/Color. => final object Color
680+
enumVal/Color.$values. => val method $values
681+
enumVal/Color.Blue. => case val static enum method Blue
682+
enumVal/Color.Green. => case val static enum method Green
683+
enumVal/Color.Red. => case val static enum method Red
684+
enumVal/Color.fromOrdinal(). => method fromOrdinal
685+
enumVal/Color.fromOrdinal().(ordinal) => param ordinal
686+
enumVal/Color.valueOf(). => method valueOf
687+
enumVal/Color.valueOf().($name) => param $name
688+
enumVal/Color.values(). => method values
689+
690+
Occurrences:
691+
[0:8..0:15): enumVal <- enumVal/
692+
[2:7..2:12): scala -> scala/
693+
[2:13..2:20): runtime -> scala/runtime/
694+
[2:21..2:30): EnumValue -> scala/runtime/EnumValue.
695+
[5:0..5:0): <- enumVal/A#`<init>`().
696+
[5:6..5:7): A <- enumVal/A#
697+
[7:5..7:10): Color <- enumVal/Color#
698+
[7:10..7:10): <- enumVal/Color#`<init>`().
699+
[7:15..7:18): rgb <- enumVal/Color#rgb.
700+
[7:20..7:23): Int -> scala/Int#
701+
[8:7..8:10): Red <- enumVal/Color.Red.
702+
[8:21..8:26): Color -> enumVal/Color#
703+
[8:26..8:26): -> enumVal/Color#`<init>`().
704+
[8:42..8:51): EnumValue -> scala/runtime/EnumValue#
705+
[9:7..9:12): Green <- enumVal/Color.Green.
706+
[9:21..9:26): Color -> enumVal/Color#
707+
[9:26..9:26): -> enumVal/Color#`<init>`().
708+
[9:42..9:43): A -> enumVal/A#
709+
[10:7..10:11): Blue <- enumVal/Color.Blue.
710+
[10:21..10:26): Color -> enumVal/Color#
711+
[10:26..10:26): -> enumVal/Color#`<init>`().
712+
661713
expect/Enums.scala
662714
------------------
663715

@@ -667,7 +719,7 @@ Uri => Enums.scala
667719
Text => empty
668720
Language => Scala
669721
Symbols => 181 entries
670-
Occurrences => 201 entries
722+
Occurrences => 184 entries
671723

672724
Symbols:
673725
_empty_/Enums. => final object Enums
@@ -910,46 +962,37 @@ Occurrences:
910962
[31:9..31:14): Penny <- _empty_/Enums.Coin.Penny.
911963
[31:26..31:30): Coin -> _empty_/Enums.Coin#
912964
[31:30..31:30): -> _empty_/Enums.Coin#`<init>`().
913-
[31:33..31:33): -> scala/runtime/EnumValue#
914965
[32:9..32:15): Nickel <- _empty_/Enums.Coin.Nickel.
915966
[32:26..32:30): Coin -> _empty_/Enums.Coin#
916967
[32:30..32:30): -> _empty_/Enums.Coin#`<init>`().
917-
[32:33..32:33): -> scala/runtime/EnumValue#
918968
[33:9..33:13): Dime <- _empty_/Enums.Coin.Dime.
919969
[33:26..33:30): Coin -> _empty_/Enums.Coin#
920970
[33:30..33:30): -> _empty_/Enums.Coin#`<init>`().
921-
[33:34..33:34): -> scala/runtime/EnumValue#
922971
[34:9..34:16): Quarter <- _empty_/Enums.Coin.Quarter.
923972
[34:26..34:30): Coin -> _empty_/Enums.Coin#
924973
[34:30..34:30): -> _empty_/Enums.Coin#`<init>`().
925-
[34:34..34:34): -> scala/runtime/EnumValue#
926974
[35:9..35:15): Dollar <- _empty_/Enums.Coin.Dollar.
927975
[35:26..35:30): Coin -> _empty_/Enums.Coin#
928976
[35:30..35:30): -> _empty_/Enums.Coin#`<init>`().
929-
[35:35..35:35): -> scala/runtime/EnumValue#
930977
[37:7..37:12): Maybe <- _empty_/Enums.Maybe#
931978
[37:12..37:12): <- _empty_/Enums.Maybe#`<init>`().
932979
[37:14..37:15): A <- _empty_/Enums.Maybe#[A]
933980
[38:9..38:13): Just <- _empty_/Enums.Maybe.Just#
934981
[38:13..38:13): <- _empty_/Enums.Maybe.Just#`<init>`().
935982
[38:14..38:19): value <- _empty_/Enums.Maybe.Just#value.
936983
[38:21..38:22): A -> _empty_/Enums.Maybe.Just#[A]
937-
[39:4..39:4): -> _empty_/Enums.Maybe#`<init>`().
938984
[39:9..39:13): None <- _empty_/Enums.Maybe.None.
939-
[39:13..39:13): -> scala/runtime/EnumValue#
940985
[41:7..41:10): Tag <- _empty_/Enums.Tag#
941986
[41:10..41:10): <- _empty_/Enums.Tag#`<init>`().
942987
[41:11..41:12): A <- _empty_/Enums.Tag#[A]
943988
[42:9..42:15): IntTag <- _empty_/Enums.Tag.IntTag.
944989
[42:24..42:27): Tag -> _empty_/Enums.Tag#
945990
[42:28..42:31): Int -> scala/Int#
946991
[42:32..42:32): -> _empty_/Enums.Tag#`<init>`().
947-
[42:32..42:32): -> scala/runtime/EnumValue#
948992
[43:9..43:19): BooleanTag <- _empty_/Enums.Tag.BooleanTag.
949993
[43:28..43:31): Tag -> _empty_/Enums.Tag#
950994
[43:32..43:39): Boolean -> scala/Boolean#
951995
[43:40..43:40): -> _empty_/Enums.Tag#`<init>`().
952-
[43:40..43:40): -> scala/runtime/EnumValue#
953996
[45:7..45:10): <:< <- _empty_/Enums.`<:<`#
954997
[45:10..45:10): <- _empty_/Enums.`<:<`#`<init>`().
955998
[45:12..45:13): A <- _empty_/Enums.`<:<`#[A]
@@ -1025,35 +1068,27 @@ Occurrences:
10251068
[61:9..61:16): Mercury <- _empty_/Enums.Planet.Mercury.
10261069
[61:25..61:31): Planet -> _empty_/Enums.Planet#
10271070
[61:31..61:31): -> _empty_/Enums.Planet#`<init>`().
1028-
[61:52..61:52): -> scala/runtime/EnumValue#
10291071
[62:9..62:14): Venus <- _empty_/Enums.Planet.Venus.
10301072
[62:25..62:31): Planet -> _empty_/Enums.Planet#
10311073
[62:31..62:31): -> _empty_/Enums.Planet#`<init>`().
1032-
[62:52..62:52): -> scala/runtime/EnumValue#
10331074
[63:9..63:14): Earth <- _empty_/Enums.Planet.Earth.
10341075
[63:25..63:31): Planet -> _empty_/Enums.Planet#
10351076
[63:31..63:31): -> _empty_/Enums.Planet#`<init>`().
1036-
[63:53..63:53): -> scala/runtime/EnumValue#
10371077
[64:9..64:13): Mars <- _empty_/Enums.Planet.Mars.
10381078
[64:25..64:31): Planet -> _empty_/Enums.Planet#
10391079
[64:31..64:31): -> _empty_/Enums.Planet#`<init>`().
1040-
[64:52..64:52): -> scala/runtime/EnumValue#
10411080
[65:9..65:16): Jupiter <- _empty_/Enums.Planet.Jupiter.
10421081
[65:25..65:31): Planet -> _empty_/Enums.Planet#
10431082
[65:31..65:31): -> _empty_/Enums.Planet#`<init>`().
1044-
[65:52..65:52): -> scala/runtime/EnumValue#
10451083
[66:9..66:15): Saturn <- _empty_/Enums.Planet.Saturn.
10461084
[66:25..66:31): Planet -> _empty_/Enums.Planet#
10471085
[66:31..66:31): -> _empty_/Enums.Planet#`<init>`().
1048-
[66:52..66:52): -> scala/runtime/EnumValue#
10491086
[67:9..67:15): Uranus <- _empty_/Enums.Planet.Uranus.
10501087
[67:25..67:31): Planet -> _empty_/Enums.Planet#
10511088
[67:31..67:31): -> _empty_/Enums.Planet#`<init>`().
1052-
[67:52..67:52): -> scala/runtime/EnumValue#
10531089
[68:9..68:16): Neptune <- _empty_/Enums.Planet.Neptune.
10541090
[68:25..68:31): Planet -> _empty_/Enums.Planet#
10551091
[68:31..68:31): -> _empty_/Enums.Planet#`<init>`().
1056-
[68:52..68:52): -> scala/runtime/EnumValue#
10571092

10581093
expect/EtaExpansion.scala
10591094
-------------------------

0 commit comments

Comments
 (0)