Skip to content

Commit ff8e9f7

Browse files
authored
Backport "Fix #16822" (#17267)
Backports #16927
2 parents 786035e + aa601a1 commit ff8e9f7

File tree

2 files changed

+27
-15
lines changed

2 files changed

+27
-15
lines changed

compiler/src/dotty/tools/dotc/transform/CheckUnused.scala

+10-9
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ class CheckUnused extends MiniPhase:
8181
ctx
8282

8383
override def prepareForIdent(tree: tpd.Ident)(using Context): Context =
84-
if tree.symbol.exists then
84+
if tree.symbol.exists then
8585
_key.unusedDataApply(_.registerUsed(tree.symbol, Some(tree.name)))
8686
else if tree.hasType then
8787
_key.unusedDataApply(_.registerUsed(tree.tpe.classSymbol, Some(tree.name)))
@@ -103,7 +103,7 @@ class CheckUnused extends MiniPhase:
103103
override def prepareForValDef(tree: tpd.ValDef)(using Context): Context =
104104
_key.unusedDataApply{ud =>
105105
// do not register the ValDef generated for `object`
106-
if !tree.symbol.is(Module) then
106+
if !tree.symbol.is(Module) then
107107
ud.registerDef(tree)
108108
ud.addIgnoredUsage(tree.symbol)
109109
}
@@ -335,7 +335,7 @@ object CheckUnused:
335335
* The optional name will be used to target the right import
336336
* as the same element can be imported with different renaming
337337
*/
338-
def registerUsed(sym: Symbol, name: Option[Name])(using Context): Unit =
338+
def registerUsed(sym: Symbol, name: Option[Name])(using Context): Unit =
339339
if !isConstructorOfSynth(sym) && !doNotRegister(sym) then
340340
if sym.isConstructor && sym.exists then
341341
registerUsed(sym.owner, None) // constructor are "implicitly" imported with the class
@@ -371,7 +371,7 @@ object CheckUnused:
371371
implicitParamInScope += memDef
372372
else
373373
explicitParamInScope += memDef
374-
else if currScopeType.top == ScopeType.Local then
374+
else if currScopeType.top == ScopeType.Local then
375375
localDefInScope += memDef
376376
else if memDef.shouldReportPrivateDef then
377377
privateDefInScope += memDef
@@ -578,10 +578,10 @@ object CheckUnused:
578578
else
579579
false
580580

581-
private def usedDefContains(using Context): Boolean =
581+
private def usedDefContains(using Context): Boolean =
582582
sym.everySymbol.exists(usedDef.apply)
583583

584-
private def everySymbol(using Context): List[Symbol] =
584+
private def everySymbol(using Context): List[Symbol] =
585585
List(sym, sym.companionClass, sym.companionModule, sym.moduleClass).filter(_.exists)
586586

587587
end extension
@@ -614,10 +614,11 @@ object CheckUnused:
614614
private def isValidParam(using Context): Boolean =
615615
val sym = memDef.symbol
616616
(sym.is(Param) || sym.isAllOf(PrivateParamAccessor | Local, butNot = CaseAccessor)) &&
617-
!isSyntheticMainParam(sym) &&
618-
!sym.shouldNotReportParamOwner
617+
!isSyntheticMainParam(sym) &&
618+
!sym.shouldNotReportParamOwner &&
619+
(!sym.exists || !sym.owner.isAllOf(Synthetic | PrivateLocal))
619620

620-
private def shouldReportPrivateDef(using Context): Boolean =
621+
private def shouldReportPrivateDef(using Context): Boolean =
621622
currScopeType.top == ScopeType.Template && !memDef.symbol.isConstructor && memDef.symbol.is(Private, butNot = SelfName | Synthetic | CaseAccessor)
622623

623624
extension (imp: tpd.Import)

tests/neg-custom-args/fatal-warnings/i15503i.scala

+17-6
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,13 @@ package foo.test.companionprivate:
7878
package foo.test.i16678:
7979
def foo(func: Int => String, value: Int): String = func(value) // OK
8080

81-
def run =
81+
def run =
8282
println(foo(number => number.toString, value = 5)) // OK
8383
println(foo(number => "<number>", value = 5)) // error
8484
println(foo(func = number => "<number>", value = 5)) // error
8585
println(foo(func = number => number.toString, value = 5)) // OK
8686
println(foo(func = _.toString, value = 5)) // OK
87-
87+
8888
package foo.test.possibleclasses:
8989
case class AllCaseClass(
9090
k: Int, // OK
@@ -93,7 +93,7 @@ package foo.test.possibleclasses:
9393
s: Int, // error /* But not these */
9494
val t: Int, // OK
9595
private val z: Int // error
96-
)
96+
)
9797

9898
case class AllCaseUsed(
9999
k: Int, // OK
@@ -113,7 +113,7 @@ package foo.test.possibleclasses:
113113
s: Int, // error
114114
val t: Int, // OK
115115
private val z: Int // error
116-
)
116+
)
117117

118118
class AllUsed(
119119
k: Int, // OK
@@ -124,10 +124,21 @@ package foo.test.possibleclasses:
124124
private val z: Int // OK
125125
) {
126126
def a = k + y + s + t + z
127-
}
127+
}
128128

129129
package foo.test.from.i16675:
130130
case class PositiveNumber private (i: Int) // OK
131131
object PositiveNumber:
132-
def make(i: Int): Option[PositiveNumber] = //OK
132+
def make(i: Int): Option[PositiveNumber] = //OK
133133
Option.when(i >= 0)(PositiveNumber(i)) // OK
134+
135+
package foo.test.i16822:
136+
enum ExampleEnum {
137+
case Build(context: String) // OK
138+
case List // OK
139+
}
140+
141+
def demo = {
142+
val x = ExampleEnum.List // OK
143+
println(x) // OK
144+
}

0 commit comments

Comments
 (0)