2013-01-16 14 views
16

私はScala 2.9コンパイラプラグイン(ソースコード)を持っていて、2.9でうまく動作しますが、2.10でコンパイルさえしません。最終的に終了Scala 2.9コンパイラプラグインを2.10に移行する際の情報はありますか?

[scalac] C:\***.scala:31: error: illegal cyclic reference involving class Global 
    [scalac] val fileSeparator = System.getProperty("file.separator"); 
    [scalac]      ^

...:次のようなエラーの(多分100+)数十同じ種類のすべてがあります

[scalac] scala.reflect.internal.Types$TypeError: illegal cyclic reference involving class Global 
    [scalac]  at scala.reflect.internal.Types$class.defineBaseClassesOfCompoundType(Types.scala:1731) 
    [scalac]  at scala.reflect.internal.SymbolTable.defineBaseClassesOfCompoundType(SymbolTable.scala:12) 
    [scalac]  at scala.reflect.internal.Types$CompoundType.baseClasses(Types.scala:1581) 
    [scalac]  at scala.reflect.internal.Types$TypeRef.baseClasses(Types.scala:2369) 
    [scalac]  at scala.reflect.internal.Types$SimpleTypeProxy$class.baseClasses(Types.scala:248) 
    [scalac]  at scala.reflect.internal.Types$SingletonType.baseClasses(Types.scala:1292) 
    [scalac]  at scala.reflect.internal.Types$Type.findMembers(Types.scala:1058) 
    [scalac]  at scala.reflect.internal.Types$Type.membersBasedOnFlags(Types.scala:683) 
    [scalac]  at scala.reflect.internal.Types$Type.implicitMembers(Types.scala:637) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.collect$1(Contexts.scala:630) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.collectImplicitImports(Contexts.scala:642) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:670) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:675) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:675) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:675) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:675) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:675) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:675) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:675) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:675) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:675) 
    [scalac]  at scala.tools.nsc.typechecker.Contexts$Context.implicitss(Contexts.scala:675) 
    [scalac]  at scala.tools.nsc.typechecker.Implicits$ImplicitSearch.bestImplicit(Implicits.scala:1378) 
    [scalac]  at scala.tools.nsc.typechecker.Implicits$class.inferImplicit(Implicits.scala:82) 
    [scalac]  at scala.tools.nsc.Global$$anon$1.inferImplicit(Global.scala:490) 
    [scalac]  at scala.tools.nsc.typechecker.Implicits$class.inferImplicit(Implicits.scala:37) 
    [scalac]  at scala.tools.nsc.Global$$anon$1.inferImplicit(Global.scala:490) 
    [scalac]  at scala.tools.nsc.typechecker.Typers$Typer.hasImport$1(Typers.scala:764) 
    [scalac]  at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$action$1(Typers.scala:766) 
    [scalac]  at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$checkFeature$1.apply$mcV$sp(Typers.scala:788) 
    [scalac]  at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3$$anonfun$apply$1.apply(Analyzer.scala:100) 
    [scalac]  at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3$$anonfun$apply$1.apply(Analyzer.scala:100) 
    [scalac]  at scala.collection.immutable.List.foreach(List.scala:309) 
    [scalac]  at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:32) 
    [scalac]  at scala.collection.mutable.ListBuffer.foreach(ListBuffer.scala:45) 
    [scalac]  at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3.apply(Analyzer.scala:100) 
    [scalac]  at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:461) 
    [scalac]  at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3$$anonfun$run$1.apply(Analyzer.scala:90) 
    [scalac]  at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3$$anonfun$run$1.apply(Analyzer.scala:90) 
    [scalac]  at scala.collection.Iterator$class.foreach(Iterator.scala:727) 
    [scalac]  at scala.collection.AbstractIterator.foreach(Iterator.scala:1156) 
    [scalac]  at scala.tools.nsc.typechecker.Analyzer$typerFactory$$anon$3.run(Analyzer.scala:90) 
    [scalac]  at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1574) 
    [scalac]  at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1548) 
    [scalac]  at scala.tools.nsc.Global$Run.compileSources(Global.scala:1544) 
    [scalac]  at scala.tools.nsc.Global$Run.compile(Global.scala:1654) 
    [scalac]  at scala.tools.ant.Scalac.executeInternal(Scalac.scala:699) 
    [scalac]  at scala.tools.ant.Scalac.execute(Scalac.scala:647) 
    ... 

私はいくつかの情報を必要とするか、持っているものにとして役立ちます2.10で変わった、あるいはこれをどうにかして対処するのか...私はインターネットでグーグルでフォーラムを見てみましたが、このテーマに関する情報はほとんど見つかりませんでした。

助けてくれてありがとう!

EDIT:追加情報これは明らかにantタスクを使用しています(スタックトレースを参照)。そのタスクが定義されています

<taskdef resource="scala/tools/ant/antlib.xml"> 
     <classpath> 
      <pathelement location=".../scala-library.jar" /> 
      <pathelement location=".../scala-reflect.jar" /> 
      <pathelement location=".../scala-compiler.jar" /> 
     </classpath> 
    </taskdef> 

EDIT 2:その他の追加情報:私はコマンドライン2.10コンパイラを使用して(他のものが失敗したとして、まだそれを実行しなかった)をコンパイルにこのプラグインを得ることができた(覚えています - すべてが2.9の世界では問題ありません) - antベースのビルドは引き続き同じ方法で失敗します(バグ?)。私は2つの変更を加えなければならなかった。最初にvarargsを扱います。私は次のようにこれを変更しなければならなかった

def bar = foo _; 

:効果として広告 2.9 Scalaで書かれたそれのための同義語である別の方法がある

def foo(arg: String*) { ... } 

次のような方法がありますそれが動作するように取得する:

def bar(arg: String*) = foo(arg: *); 

もう一つは、私はちょうどそれを得るためにそれをコメントアウト「hasAssignedAnnotations」ValOrDefDef.symbol中に存在する任意のより多くのではない(と対処実際の修正ではなくコンパイルする)。

もう一度、マイグレーションに役立つウェブサイトやドキュメントを知っている人は誰ですか?つまり、コンパイラプラグインを含め、必要な点で2.9から2.10に変更されたものです。

ありがとうございます!

+0

ちょっと推測すると、おそらく2の中にシンボル「システム」の新しいシャドーイングがあります。10コンパイラ。 2.10では、 'sys.props(" file.separator ")'を使うこともできますが、そのエラーを修正するかもしれません。 –

+0

エラーは非常に異なっていて、まったく関連していないような多くの行に表示されます。ここに含まれているのは単なる例です。 – Learner

+0

あなたのソースへのリンクがありますか? –

答えて

2

使用可能なドキュメントはありません。私が正しく覚えていれば、マーティン・オデスキーはthis presentationに1000以上のファイルが編集されていると言った。 2.10では、より良いリフレクションをサポートするためにコンパイラの大部分を書き直しました。副作用として、macrosが出現しました。もちろん、もう1つの副作用は、多くのコンパイラプラグインが動作しなくなったことです。

理論的にはscala source codeのgitの履歴をブラウズ/検索することができますが、実際にはこれはおそらく時間がかかりすぎます。いくつかのコンパイラプラグインは、出荷が少し容易であるため、マクロに変換されています。これがあなたのための選択肢かどうかは分かりません。

スケーラに同梱されているプラ​​グインに加えられた変更を確認することをお勧めします。多くの情報と変更が含まれている継続プラグインのthis commit新しいリフレクション - 9,001の追加ファイルと6,403の削除ファイルの表示)が見つかりました。私はこれがどんな助けでもいいと思います。

関連する問題