Closed
Description
The code is from discussion in Scala 3.5.0 unreachable case which was working with 3.4.2.
Compiler version
Since 3.5 (after the flexible type was introduced)
Minimized example
-Yexplicit-nulls
def f(s: String) =
val s2 = s.trim()
s2 match
case s3: String => println(1)
case _ => println(2)
Output Error/Warning message
-- [E030] Match case Unreachable Warning: Stest.scala:1026:7 -------------------
1026 | case _ => println(2)
| ^
| Unreachable case
1 warning found
Why this Error/Warning was not helpful
Should produce a better warning similar to without explicit nulls:
-- [E121] Pattern Match Warning: Stest.scala:1026:7 ----------------------------
1026 | case _ => println(2)
| ^
|Unreachable case except for null (if this is intentional, consider writing case null => instead).
1 warning found
Metadata
Metadata
Assignees
Labels
Type
Projects
Relationships
Development
No branches or pull requests
Activity
ajits089 commentedon Sep 14, 2024
As per my preliminary investigation what i found is this warning was introduced since 3.0.2. So if we look at the Scala compiler 3.0.0, 3.0.1 and 3.0.2 we receive following response from compiler after defining method f with the given signature and body.
//3.0.2
def f(s: String): Unit -- Warning: 5 | case _ => println(2) | ^ |Unreachable case except for null (if this is intentional, consider writing case null => instead).
// 3.0.1
def f(s: String): Unit 5 | case _ => println(2) | ^ |Unreachable case except for null (if this is intentional, consider writing case null => instead).
//3.0.0
def f(s: String): Unit 5 | case _ => println(2) | ^ | Only null is matched. Consider using case null => instead.
Also, If we consider this case:
def f(s: String | Null) = | val s2 = s.nn.trim() | s2 match | case s3: String => println(1) | case _ => println(2) |
we get warning too where there could be any type involved as the wild card pattern not just null.
1 warning found
def f(s: String | Null): Unit
-- [E121] Pattern Match Warning: -----------------------------------------------
5 | case _ => println(2)
| ^
|Unreachable case except for null (if this is intentional, consider writing case null => instead).
Improve warning for wildcard matching non-nullable types (scala#21577)
Improve warning for wildcard matching non-nullable types (scala#21577)
Improve warning for wildcard matching only null under explicit nulls …
Improve warning for wildcard matching only null under explicit nulls …
Improve warning for wildcard matching only null under the explicit nu…
Improve warning for wildcard matching only null under explicit nulls …
Improve warning for wildcard matching only null under explicit nulls …