4

我從遊戲2.0.4移植一個應用程序來打2.1階:無法爲不可達

但下面的代碼檢查賽揚這樣的警告:

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]   ^

在遊戲2.0.4(帶斯卡拉2.9.1)它工作正常,與此版本(斯卡拉2.10)它產生此警告

任何想法可能是錯誤的?

+2

錯誤消息告訴你到底發生了什麼問題。你不瞭解哪部分? –

+0

嗯,我想知道爲什麼它可以與play2.0.4一起工作,並且我可以在哪裏傳遞-D ... params以避免該警告 – opensas

+1

他們在2.10中更改了模式匹配代碼,這就是行爲改變的原因。至於什麼問題,我不知道...... –

回答

5

也許this?

會發生什麼事,如果你添加

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

project/Build.scala

[UPDATE /校正]

我錯scalacOptions - -D選項需要爲JVM參數,沒有參數scalac傳遞。由於sbt/play尊重JAVA_OPTS環境變量,也許你可以嘗試運行playsbt這樣?

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

這是假設你在Unix-y操作系統上。

+0

試圖插件它plugins.sbt也Build.scala,同樣的事情發生...... – opensas

+0

嘗試過類似的程序與2.10.0-RC2,並證實通過'-Dscalac .patmat.analysisBudget'的確解決了這個問題。 – Faiz

+0

非常感謝!通過它與JAVA_OPTS沒有工作 – opensas

2

剛剛遇到同樣的問題(但不是在播放)。對於更永久性的修復只需創建一個文件~/.sbtconfig,並添加這些行:

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

該文件和SBT_OPTS定義裏面它會被用來每次運行sbt時間。根據你從哪裏獲得Play可能與其自己版本的sbt捆綁在一起,並且可能不會在發佈時使用該文件。

1

對於'每個項目'SBT配置添加到您的.scala構建文件。 。

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

對於SBT 0.13 *在build.sbt添加-J scalac選項爲我工作:

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

sbt -J-Dscalac.patmat.analysisBudget=off 

,或者您可以使用「-J添加選項「到全局選項文件:/ usr/local/etc/sbtopts