Skip to content

Commit

Permalink
allow literal true instead of Boolean as extractor type
Browse files Browse the repository at this point in the history
  • Loading branch information
martijnhoekstra committed Dec 1, 2020
1 parent 9016271 commit 69d44d3
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 7 deletions.
Expand Up @@ -127,7 +127,7 @@ trait PatternExpansion {
// rest is private
private val isUnapply = fun.symbol.name == nme.unapply
private val isUnapplySeq = fun.symbol.name == nme.unapplySeq
private def isBooleanUnapply = isUnapply && unapplyResultType() =:= BooleanTpe
private def isBooleanUnapply = isUnapply && unapplyResultType() <:< BooleanTpe
private def isRepeatedCaseClass = caseCtorParamTypes.exists(tpes => tpes.nonEmpty && isScalaRepeatedParamType(tpes.last))

private def caseCtorParamTypes: Option[List[Type]] =
Expand Down
12 changes: 6 additions & 6 deletions test/files/neg/t4425b.check
Expand Up @@ -22,22 +22,22 @@ t4425b.scala:10: error: object X is not a case class, nor does it have a valid u
Note: def unapply(x: String)(y: String): Nothing exists in object X, but it cannot be used as an extractor due to its second non-implicit parameter list
println((X: Any) match { case X(_, _) => "ok" ; case _ => "fail" })
^
t4425b.scala:18: error: The result type of an unapply method must contain a member `get` to be used as an extractor pattern, no such member exists in Nothing
t4425b.scala:18: error: too many patterns for object X offering Boolean: expected 0, found 2
println( "" match { case _ X _ => "ok" ; case _ => "fail" })
^
t4425b.scala:19: error: The result type of an unapply method must contain a member `get` to be used as an extractor pattern, no such member exists in Nothing
t4425b.scala:19: error: too many patterns for object X offering Boolean: expected 0, found 2
println((X: Any) match { case _ X _ => "ok" ; case _ => "fail" })
^
t4425b.scala:20: error: The result type of an unapply method must contain a member `get` to be used as an extractor pattern, no such member exists in Nothing
t4425b.scala:20: error: too many patterns for object X offering Boolean: expected 0, found 1
println( "" match { case X(_) => "ok" ; case _ => "fail" })
^
t4425b.scala:21: error: The result type of an unapply method must contain a member `get` to be used as an extractor pattern, no such member exists in Nothing
t4425b.scala:21: error: too many patterns for object X offering Boolean: expected 0, found 1
println((X: Any) match { case X(_) => "ok" ; case _ => "fail" })
^
t4425b.scala:22: error: The result type of an unapply method must contain a member `get` to be used as an extractor pattern, no such member exists in Nothing
t4425b.scala:22: error: too many patterns for object X offering Boolean: expected 0, found 2
println( "" match { case X(_, _) => "ok" ; case _ => "fail" })
^
t4425b.scala:23: error: The result type of an unapply method must contain a member `get` to be used as an extractor pattern, no such member exists in Nothing
t4425b.scala:23: error: too many patterns for object X offering Boolean: expected 0, found 2
println((X: Any) match { case X(_, _) => "ok" ; case _ => "fail" })
^
t4425b.scala:31: error: too many patterns for object X offering Nothing: expected 1, found 2
Expand Down
12 changes: 12 additions & 0 deletions test/files/pos/t12232_.scala
@@ -0,0 +1,12 @@
object Test {
sealed trait Foo
final class Bar extends Foo

object Bar {
def unapply(o: Bar): true = true
}

def f(foo: Foo) = foo match {
case Bar() => println("Bar")
}
}

0 comments on commit 69d44d3

Please sign in to comment.