1

私はマクロパラディを使ってメソッドとケースクラスを生成しています(マクロは、私自身のコアファイルとは別のプロジェクトで定義されています)。Eclipse:Scalaの暗黙的な変換とマクロアノテーションを解決する問題

すべてがコンパイルされ、期待通りに実行されますが、Eclipseはマクロで生成された変数とメソッドを解決できません。しかし、Eclipseを閉じて再オープンすると、完全にすべてが識別されます。私は、クラスとメソッドを表示し、正しい情報を得ることができます。しかし、何かを変更したり、メソッドを参照するファイルを閉じて再オープンしたりすると、Eclipseは生成されたすべての変数とメソッドを強調し、 "見つからない:value {name}"({name}はvar名)。

更新
私は次のような場合に行動を隔離しました:

  1. 私は1つのファイルに注釈付きオブジェクトAで始まり、そして別でA.helloを使用して、オブジェクトBファイル。
  2. は私が反対する方法を「hello」を追加しますAのファイルを、コンパイルA.すべては私がオブジェクトAに含まれているファイルを再度開くまでは、正常に動作します

質問(!):Eclipseは何をするのか私はファイルを開く?コンパイルされたファイルではなく、書かれたファイルに基づいてクラスのインデックスを再作成しようとしていますか?
エンド更新

どのようにEclipseのは、変数を解決するのでしょうか?ターゲット/フォルダ内のクラスファイルを調べていますか?私は生成されたすべてのコードに対して* .classファイルを持っているので、Eclipseがそれらを見ているならば、これらの変数は実際に存在するはずです。

これらの変数を正しく解決するためにEclipseを入手した人はいますか?私はIntelliJ IDEAを試しましたが、IDEAは暗黙的な変換とマクロを使用して何も解決できません(私は運がないとオンラインで見つけました)。

情報:Javaの開発者のための
のEclipse IDE

バージョン:酸素放出(4.7.0)
ビルドID:20170620から1800

Scalaのプラグイン
scala-ide.org
4.4.1.v-2_11-201605041057-92a3ed3
org.scala-ide.sdt.feature

コンパイラプラグイン:
macroparadise
org.scalamacros
paradise_2.11.8
バージョン2.1.0

+0

本当に驚くべきことではありませんが、IDEは一般的にマクロや依存型などの高度な言語機能をサポートするのにはあまり役に立ちません – cchantep

答えて

0

周りを探した後、それはorg.scala.macroparadiseプラグインはのIntelliJでサポートされていないように思えますかEclipse。私はIntellij scalaプラグインでサポートされているorg.scalameta.paradiseプラグインに切り替えることで問題を解決しました。

org.scalametaを使用すると、生成されたすべての変数を解決でき、IDEでマクロを展開できます。

関連する問題