プラグイン作って覚えたことを淡々と記録するよ(イベントフック編)
とりあえずコンパイル結果とインスペクションの結果の拾い方がわかった。
まずは,コンパイル結果について
- CompilationStatusListener[com.intellij.openapi.compilerパッケージ]を使う
- CompilerManager.addCompilationStatusListener()[上記と同じパッケージ]で登録
- CompilerManagerはインスタンスを取得するにはProjectが必要なので,ProjectComponentでリスナー登録しとくと良い。
次がインスペクションの結果,ってエディタの右上に出てるボックスインジケータの変更を検知するやり方
- WolfTheProblemSolver.ProblemListener [com.intellij.problemsパッケージ]を使う
- 登録先は,WolfTheProblemSolver。
- CompilerManager同様,WolfTheProblemSolverもインスタンス取得にProjectが要る。
- イベントのサイクルがいまいちわからん。経験則だとこんな感じ。
- インジケータがグリーンの間は何も起きない(みたい)
- キーをタイプしはじめると,problemsAppeared()が発火する。
- キータイプ中は常に,problemsChanged()が発火してる。
- キータイプが終わると,problemsDisappeared()が発火する。
- 問題の有無はWolfTheProblemSolverで評価する(hasSyntaxErrors()/isProblemFile()を利用)。
WolfTheProblemSolverは見つけたのはいいけど,ちょっと使い道を思案中。
その他のイベントについては,Event Soundsプラグインを参考にするとヨロシ。
ps.
JUnitのテスト結果のイベントも拾ってみたいんだけど,JUnitプラグインはIDEA組み込みでソースがないから,解析にちょい苦労してる。なんとなくそれっぽいのは見つけたけど,イベントフックできるかどうかはわからん。