opensas
opensas

Reputation: 63415

scala: Cannot check match for unreachability

I'm migrating an app from play 2.0.4 to play 2.1

But the following code raises this warning:

def toConditionOperator(value: String): ConditionOperator.Value = {
  if (value==null) {
    ConditionOperator.Unknown
  } else {
    value.toLowerCase match {
      case "equal" | "=" | ":"             => ConditionOperator.Equal
      case "notequal" | "!=" | "!:" | "<>" => ConditionOperator.NotEqual
      case "greaterorequal" | ">="         => ConditionOperator.GreaterOrEqual
      case "greater" | ">"                 => ConditionOperator.Greater
      case "lessorequal" | "<="            => ConditionOperator.LessOrEqual
      case "less" | "<"                    => ConditionOperator.Less
      case "between"                       => ConditionOperator.Between
      case "in"                            => ConditionOperator.In
      case "startswith"                    => ConditionOperator.StartsWith
      case "endswith"                      => ConditionOperator.EndsWith
      case "contains" | "$"                => ConditionOperator.Contains
      case "missing" | ""                  => ConditionOperator.Missing
      case "unknown" | _                   => ConditionOperator.Unknown
    }
  }
}


[info] Compiling 98 Scala sources and 2 Java sources to /home/sas/tmp/ideas-ba/webservice/target/scala-2.10/classes...
[warn] /home/sas/tmp/ideas-ba/webservice/app/utils/query/ConditionParser.scala:203: Cannot check match for unreachability.
[warn] (The analysis required more space than allowed. Please try with scalac -Dscalac.patmat.analysisBudget=512 or -Dscalac.patmat.analysisBudget=off.)
[warn]       value.toLowerCase match {
[warn]             ^

In play 2.0.4 (with scala 2.9.1) it worked ok, with this version (scala 2.10) it yields this warning

Any idea what could be wrong?

Upvotes: 4

Views: 1404

Answers (4)

Vitamon
Vitamon

Reputation: 548

For sbt 0.13.* adding -J scalac option in build.sbt works for me:

scalacOptions ++= Seq("-Jscalac.patmat.analysisBudget=off")

or

sbt -J-Dscalac.patmat.analysisBudget=off

or you can add the option with "-J" to the global options file: /usr/local/etc/sbtopts

Upvotes: 0

agilesteel
agilesteel

Reputation: 16859

For 'per project' SBT configuration add this to your .scala build file.

initialize ~= { _ => sys.props("scalac.patmat.analysisBudget") = "off" }

Upvotes: 1

etreworgy
etreworgy

Reputation: 644

Just ran into the same issue(but not in Play). For a more permanent fix simply create a file ~/.sbtconfig, and add these lines:

#!/bin/sh
SBT_OPTS="-Dscalac.patmat.analysisBudget=off"

This file and the SBT_OPTS defined inside it will be used every time you run sbt. Depending on where you got Play from it might be bundled with its own version of sbt and may not use this file at launch time.

Upvotes: 2

Faiz
Faiz

Reputation: 16255

Maybe this?

What happens if you add

scalacOptions ++= Seq("-Dscalac.patmat.analysisBudget=1024")

to your project/Build.scala?

[UPDATE / CORRECTION]

I was wrong about scalacOptions - -D options need to be passed as JVM arguments, not arguments to scalac. Since sbt/play respect the JAVA_OPTS environment, variable, maybe you could try running play or sbt like this?

JAVA_OPTS="-Dscalac.patmat.analysisBudget=off" sbt
# Or
JAVA_OPTS="-Dscalac.patmat.analysisBudget=off" play

That's assuming you are on a Unix-y OS.

Upvotes: 5

Related Questions