Pergunta

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?

Foi útil?

Solução

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.

Outras dicas

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.

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

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

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top