2011-07-26 8 views
2

@unmatchableアノテーションを監視し、パターンマッチングで見つかった場合は警告をスローするプラグインを作成しています。ScalaコンパイラTypeRef to ClassDef

私はTypeRefを見つけることができましたが、私はそれをClassDefに変換することができないので、注釈を検査することができます。

実際のClassDefを取得するには、ツリーのルートを取得し、TreeOpts.findを使用する必要があると思います。しかし、私はルートツリーがどこにあるのか見つけることができません。

EDIT:マッチング可能なアノテーションがライブラリに含まれている場合は、ルートコンパイル単位以上のものが必要です。

これまで私がこれまで持っていたことは次のとおりです。

答えて

0

一般に、タイプ/シンボルをツリーに変換することはできません。これは、ツリーに対応するツリーがないためです。シンボルがバイナリクラスファイルで定義されたクラスに対応している場合です。

しかし、あなたがしようとしていることを理解する限り、ClassDefは必要ありません。すでに取得したシンボルには注釈に関するすべての情報があります。 Symbols.scalaで定義されているhasAnnotationメソッドとgetAnnotationメソッドをチェックします(行1115-1118)。

関連する問題