Skip to content

Commit e135fce

Browse files
committed
Protect against double definition. Update semanticdb
1 parent 732bacc commit e135fce

File tree

2 files changed

+25
-18
lines changed

2 files changed

+25
-18
lines changed

compiler/src/dotty/tools/dotc/ast/DesugarEnums.scala

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,10 @@ object DesugarEnums {
171171
constraints.enumCases.map((i, enumValue) => CaseDef(Literal(Constant(i)), EmptyTree, enumValue))
172172
:+ default(ordinal)))
173173

174-
scaffolding ::: valueCtor ::: fromOrdinal :: Nil
174+
if !enumClass.exists then
175+
Nil
176+
else
177+
scaffolding ::: valueCtor ::: fromOrdinal :: Nil
175178
end enumLookupMethods
176179

177180
/** A creation method for a value of enum type `E`, which is defined as follows:
@@ -290,8 +293,8 @@ object DesugarEnums {
290293
DefDef(nme.enumLabel, Nil, Nil, TypeTree(defn.StringType), body).withAddedFlags(Synthetic)
291294

292295
def fromOrdinalMeth(body: Tree => Tree)(using Context): DefDef =
293-
DefDef(nme.fromOrdinal, Nil, List(param(nme.ordinalDollar_, defn.IntType) :: Nil),
294-
rawRef(enumClass.typeRef), body(Ident(nme.ordinalDollar_))).withFlags(Synthetic)
296+
DefDef(nme.fromOrdinal, Nil, (param(nme.ordinal, defn.IntType) :: Nil) :: Nil,
297+
rawRef(enumClass.typeRef), body(Ident(nme.ordinal))).withFlags(Synthetic)
295298

296299
def ordinalMethLit(ord: Int)(using Context): DefDef =
297300
ordinalMeth(Literal(Constant(ord)))

tests/semanticdb/metac.expect

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -641,7 +641,7 @@ Schema => SemanticDB v4
641641
Uri => Enums.scala
642642
Text => empty
643643
Language => Scala
644-
Symbols => 183 entries
644+
Symbols => 187 entries
645645
Occurrences => 203 entries
646646

647647
Symbols:
@@ -651,37 +651,35 @@ _empty_/Enums.Coin#`<init>`(). => primary ctor <init>
651651
_empty_/Enums.Coin#`<init>`().(value) => param value
652652
_empty_/Enums.Coin#value. => val method value
653653
_empty_/Enums.Coin. => final object Coin
654-
_empty_/Enums.Coin.$fromOrdinal(). => method $fromOrdinal
655-
_empty_/Enums.Coin.$fromOrdinal().(_$ordinal) => param _$ordinal
656654
_empty_/Enums.Coin.$values. => val method $values
657655
_empty_/Enums.Coin.Dime. => case val static enum method Dime
658656
_empty_/Enums.Coin.Dollar. => case val static enum method Dollar
659657
_empty_/Enums.Coin.Nickel. => case val static enum method Nickel
660658
_empty_/Enums.Coin.Penny. => case val static enum method Penny
661659
_empty_/Enums.Coin.Quarter. => case val static enum method Quarter
660+
_empty_/Enums.Coin.fromOrdinal(). => method fromOrdinal
661+
_empty_/Enums.Coin.fromOrdinal().(ordinal) => param ordinal
662662
_empty_/Enums.Coin.valueOf(). => method valueOf
663663
_empty_/Enums.Coin.valueOf().($name) => param $name
664664
_empty_/Enums.Coin.values(). => method values
665665
_empty_/Enums.Colour# => abstract sealed enum class Colour
666666
_empty_/Enums.Colour#`<init>`(). => primary ctor <init>
667667
_empty_/Enums.Colour. => final object Colour
668-
_empty_/Enums.Colour.$fromOrdinal(). => method $fromOrdinal
669-
_empty_/Enums.Colour.$fromOrdinal().(_$ordinal) => param _$ordinal
670668
_empty_/Enums.Colour.$new(). => method $new
671669
_empty_/Enums.Colour.$new().($name) => param $name
672670
_empty_/Enums.Colour.$new().(_$ordinal) => param _$ordinal
673671
_empty_/Enums.Colour.$values. => val method $values
674672
_empty_/Enums.Colour.Blue. => case val static enum method Blue
675673
_empty_/Enums.Colour.Green. => case val static enum method Green
676674
_empty_/Enums.Colour.Red. => case val static enum method Red
675+
_empty_/Enums.Colour.fromOrdinal(). => method fromOrdinal
676+
_empty_/Enums.Colour.fromOrdinal().(ordinal) => param ordinal
677677
_empty_/Enums.Colour.valueOf(). => method valueOf
678678
_empty_/Enums.Colour.valueOf().($name) => param $name
679679
_empty_/Enums.Colour.values(). => method values
680680
_empty_/Enums.Directions# => abstract sealed enum class Directions
681681
_empty_/Enums.Directions#`<init>`(). => primary ctor <init>
682682
_empty_/Enums.Directions. => final object Directions
683-
_empty_/Enums.Directions.$fromOrdinal(). => method $fromOrdinal
684-
_empty_/Enums.Directions.$fromOrdinal().(_$ordinal) => param _$ordinal
685683
_empty_/Enums.Directions.$new(). => method $new
686684
_empty_/Enums.Directions.$new().($name) => param $name
687685
_empty_/Enums.Directions.$new().(_$ordinal) => param _$ordinal
@@ -690,15 +688,15 @@ _empty_/Enums.Directions.East. => case val static enum method East
690688
_empty_/Enums.Directions.North. => case val static enum method North
691689
_empty_/Enums.Directions.South. => case val static enum method South
692690
_empty_/Enums.Directions.West. => case val static enum method West
691+
_empty_/Enums.Directions.fromOrdinal(). => method fromOrdinal
692+
_empty_/Enums.Directions.fromOrdinal().(ordinal) => param ordinal
693693
_empty_/Enums.Directions.valueOf(). => method valueOf
694694
_empty_/Enums.Directions.valueOf().($name) => param $name
695695
_empty_/Enums.Directions.values(). => method values
696696
_empty_/Enums.Maybe# => abstract sealed enum class Maybe
697697
_empty_/Enums.Maybe#[A] => covariant typeparam A
698698
_empty_/Enums.Maybe#`<init>`(). => primary ctor <init>
699699
_empty_/Enums.Maybe. => final object Maybe
700-
_empty_/Enums.Maybe.$fromOrdinal(). => method $fromOrdinal
701-
_empty_/Enums.Maybe.$fromOrdinal().(_$ordinal) => param _$ordinal
702700
_empty_/Enums.Maybe.$values. => val method $values
703701
_empty_/Enums.Maybe.Just# => final case enum class Just
704702
_empty_/Enums.Maybe.Just#[A] => covariant typeparam A
@@ -722,6 +720,8 @@ _empty_/Enums.Maybe.Just.unapply(). => method unapply
722720
_empty_/Enums.Maybe.Just.unapply().(x$1) => param x$1
723721
_empty_/Enums.Maybe.Just.unapply().[A] => typeparam A
724722
_empty_/Enums.Maybe.None. => case val static enum method None
723+
_empty_/Enums.Maybe.fromOrdinal(). => method fromOrdinal
724+
_empty_/Enums.Maybe.fromOrdinal().(ordinal) => param ordinal
725725
_empty_/Enums.Maybe.valueOf(). => method valueOf
726726
_empty_/Enums.Maybe.valueOf().($name) => param $name
727727
_empty_/Enums.Maybe.values(). => method values
@@ -745,14 +745,14 @@ _empty_/Enums.Planet.Neptune. => case val static enum method Neptune
745745
_empty_/Enums.Planet.Saturn. => case val static enum method Saturn
746746
_empty_/Enums.Planet.Uranus. => case val static enum method Uranus
747747
_empty_/Enums.Planet.Venus. => case val static enum method Venus
748+
_empty_/Enums.Planet.fromOrdinal(). => method fromOrdinal
749+
_empty_/Enums.Planet.fromOrdinal().(ordinal) => param ordinal
748750
_empty_/Enums.Planet.valueOf(). => method valueOf
749751
_empty_/Enums.Planet.valueOf().($name) => param $name
750752
_empty_/Enums.Planet.values(). => method values
751753
_empty_/Enums.Suits# => abstract sealed enum class Suits
752754
_empty_/Enums.Suits#`<init>`(). => primary ctor <init>
753755
_empty_/Enums.Suits. => final object Suits
754-
_empty_/Enums.Suits.$fromOrdinal(). => method $fromOrdinal
755-
_empty_/Enums.Suits.$fromOrdinal().(_$ordinal) => param _$ordinal
756756
_empty_/Enums.Suits.$new(). => method $new
757757
_empty_/Enums.Suits.$new().($name) => param $name
758758
_empty_/Enums.Suits.$new().(_$ordinal) => param _$ordinal
@@ -766,26 +766,26 @@ _empty_/Enums.Suits.extension_isBlack(). => method extension_isBlack
766766
_empty_/Enums.Suits.extension_isBlack().(suit) => param suit
767767
_empty_/Enums.Suits.extension_isRed(). => method extension_isRed
768768
_empty_/Enums.Suits.extension_isRed().(suit) => param suit
769+
_empty_/Enums.Suits.fromOrdinal(). => method fromOrdinal
770+
_empty_/Enums.Suits.fromOrdinal().(ordinal) => param ordinal
769771
_empty_/Enums.Suits.valueOf(). => method valueOf
770772
_empty_/Enums.Suits.valueOf().($name) => param $name
771773
_empty_/Enums.Suits.values(). => method values
772774
_empty_/Enums.Tag# => abstract sealed enum class Tag
773775
_empty_/Enums.Tag#[A] => typeparam A
774776
_empty_/Enums.Tag#`<init>`(). => primary ctor <init>
775777
_empty_/Enums.Tag. => final object Tag
776-
_empty_/Enums.Tag.$fromOrdinal(). => method $fromOrdinal
777-
_empty_/Enums.Tag.$fromOrdinal().(_$ordinal) => param _$ordinal
778778
_empty_/Enums.Tag.$values. => val method $values
779779
_empty_/Enums.Tag.BooleanTag. => case val static enum method BooleanTag
780780
_empty_/Enums.Tag.IntTag. => case val static enum method IntTag
781+
_empty_/Enums.Tag.fromOrdinal(). => method fromOrdinal
782+
_empty_/Enums.Tag.fromOrdinal().(ordinal) => param ordinal
781783
_empty_/Enums.Tag.valueOf(). => method valueOf
782784
_empty_/Enums.Tag.valueOf().($name) => param $name
783785
_empty_/Enums.Tag.values(). => method values
784786
_empty_/Enums.WeekDays# => abstract sealed enum class WeekDays
785787
_empty_/Enums.WeekDays#`<init>`(). => primary ctor <init>
786788
_empty_/Enums.WeekDays. => final object WeekDays
787-
_empty_/Enums.WeekDays.$fromOrdinal(). => method $fromOrdinal
788-
_empty_/Enums.WeekDays.$fromOrdinal().(_$ordinal) => param _$ordinal
789789
_empty_/Enums.WeekDays.$new(). => method $new
790790
_empty_/Enums.WeekDays.$new().($name) => param $name
791791
_empty_/Enums.WeekDays.$new().(_$ordinal) => param _$ordinal
@@ -797,6 +797,8 @@ _empty_/Enums.WeekDays.Sunday. => case val static enum method Sunday
797797
_empty_/Enums.WeekDays.Thursday. => case val static enum method Thursday
798798
_empty_/Enums.WeekDays.Tuesday. => case val static enum method Tuesday
799799
_empty_/Enums.WeekDays.Wednesday. => case val static enum method Wednesday
800+
_empty_/Enums.WeekDays.fromOrdinal(). => method fromOrdinal
801+
_empty_/Enums.WeekDays.fromOrdinal().(ordinal) => param ordinal
800802
_empty_/Enums.WeekDays.valueOf(). => method valueOf
801803
_empty_/Enums.WeekDays.valueOf().($name) => param $name
802804
_empty_/Enums.WeekDays.values(). => method values
@@ -819,6 +821,8 @@ _empty_/Enums.`<:<`.Refl.toString(). => method toString
819821
_empty_/Enums.`<:<`.Refl.unapply(). => method unapply
820822
_empty_/Enums.`<:<`.Refl.unapply().(x$1) => param x$1
821823
_empty_/Enums.`<:<`.Refl.unapply().[C] => typeparam C
824+
_empty_/Enums.`<:<`.fromOrdinal(). => method fromOrdinal
825+
_empty_/Enums.`<:<`.fromOrdinal().(ordinal) => param ordinal
822826
_empty_/Enums.`<:<`.given_T(). => final implicit method given_T
823827
_empty_/Enums.`<:<`.given_T().[T] => typeparam T
824828
_empty_/Enums.extension_unwrap(). => method extension_unwrap

0 commit comments

Comments
 (0)