2017-06-19 18 views
0

IntelliJのネイティブAspectJで遊んでいる間に、私は奇妙なことに気付きました:対応するポイントカットで使用するクラスのインポートがないと、アドバイスは実行されません。 たとえば、以下のポイントカットを想定していますJavaネイティブAOP | Aspectのインポートが必要です

public pointcut changeObject(): 
     call(void MyObject.change()); 

アドバイスの実行が、今私がMyObjectにかのimport文を持っているかどうかという事実に依存します。それが存在しない場合は、エラーなしでコンパイルが、私はメッセージを取得: 「警告:(8、0)AJC:このタイプ名の不一致:MyObjectには[Xlint:invalidAbsoluteTypeName]」

In this tutorial彼らは輸入を必要としません(IntelliJもインポートを不要とマークします)。だから問題は何か不思議です。

My setup:IntelliJ Ultimate 2017.1を有効にしてAspectJプラグインを有効にしました。私は AspectJ 1.8.10をインストールし、IDEのコンパイラ設定でAjcコンパイラを参照しました。プロジェクト構造では、 "Modules | Dependencies"のaspectjrt.jarを参照しました。

Intellijがnot the best AspectJ supportを持っているという事実に関連していますか?

答えて

0

AOPプラグインを使用してEclipseでこの状況をテストした後、私は答えを見つけました。ポイントカットやアドバイスで使用されるクラスをインポートする必要があります。

現時点でIntelliJは、1)pointcutsで使用されているクラスをインポートするのではなく、2)それらが使用されていないことを示す(実際にインポートを最適化するときに削除する) 。さらに、eclipseはIntelliJにはない "このタイプ名に一致しない"という警告を表示します。最後に、アドバイスされたコードセクションを強調する方法も優れています。

関連する問題