NetBeansのプラグインに関する雑多メモです。メモにはJava以外の言語の観点は入っていません。
SQEプラグイン
Windows環境での話です。Unix/Mac系では確認していません。
Checkstyle、FindBugsを使うため、SQEプラグインをインストールしました。プラグインがインストールされるディレクトリは、NetBeans自体をインストールしたディレクトリ配下ではなく、ユーザーディレクトリ配下でした(C:\Users\ユーザー名\.netbeans\6.9\modules)。確かに同一マシンを複数ユーザーで使用しているとき、誰かが入れたプラグインの影響を受けずに済むので理にかなっているのかもしれません。
また、Windows Vista以降では、C:\Program Files下にユーザーの権限でファイルを保存しようとすると、VirtualStore機能でユーザー固有ディレクトリに保存される(id:torutk:20100901)という機能が働くので、NetBeans自体のディレクトリ(デフォルトでC:\Program Files\NetBeans 6.9.1)にプラグインやその設定を入れたつもりがそこには実は入ってないという状況になるより分かりやすいかもしれません。
ユーザーディレクトリの場所を確認するには、NetBeansの[ヘルプ]→[製品について]をクリックし、「製品について」ダイアログを表示します。下の方にユーザーディレクトリの場所が記載されています。
警告の嵐
SQEプラグインをインストールすると、デフォルトでCheckstyle、PMD、FindBugsの検証が働き、ソースコードのいたるところに警告マークが付いてショックを受けます。
警告を見ていくと、以下のようなメッセージが出ます。
- [Checkstyle]ファイルが新しい行で終了していません。
- ファイル先頭行
- [Checkstyle]最初の一文はピリオドで終わらなければなりません。
- Javadocコメントの先頭行
- [Checkstyle]閉じていないHTMLタグが見つかりました:
- Javadocコメントの@authorタグでメールアドレスを<>内に記述している行
- [PMD]Each class should declare at least one constructor
- クラス宣言行
- [Checkstyle]Javadocコメントがありません。
- [PMD] Found non-transient, non-static member. Please mark as transient or provide accessors.
- privateフィールドでgetメソッドなし
- [PMD] Private field 'xxx' could be made final; it is only initialized in the declaration or constructor.
- 初期値を入れた後変更していないフィールド宣言行
- [FindBugs] 読まれないフィールドhoge.Fuga.xxxがあります。
- 同上
- [Checkstyle]Line has trailing spaces.
- 空行
- [Checkstyle]メソッド'mmm'は拡張するように設計されていません-abstractかfinalである必要があります。
- privateなフィールドを読み書きしているメソッドの宣言行
- [Checkstyle]行が80行を超えています。
- 80桁以上のコードを記述している行
- [Checkstyle] Utility classes should not have a public or default constructor.
- [PMD] Avoid instantiation through private constructors from outside of the constructor's class.
- Initialize-On-Demand Holderイディオムの内部クラス宣言行
いくつかルールに手を入れないと、不可抗力な指摘も挙がり「こんなのいらねー」となってしまいます。
Checkstyle in SQE
Checkstyleの検証ルールは、XML形式の設定ファイルで制御することができます。ルール設定ファイルは、SQLプラグインを入れた後、[ツール]メニュー→[オプション]で「オプションダイアログ」が開くので、[Quality]ボタンを押し、[Checkstyle]タブを選択し、Config File欄に指定します。
Checkstyleルール設定ファイルのデフォルトは、ユーザーディレクトリ\config\Preferences\org\nbheaven\sqe\codedefects\checkstyle.xmlとなります。
以下に、いくつかの指摘を抑制したルール設定ファイルの変更方法メモを記載しています。
FindBugs in SQE
FindBugsの検証ルールは、NetBeans上から有効・無効に設定することができます。[ツール]→[オプション]で「オプションダイアログ」が開くので、[Quality]ボタンを押し、[FindBugs]タブを選択します。表形式でBug Detectorの一覧が表示されます。行を選択すると、そのBug Detectorの説明が表の下にあるテキスト領域に表示されます。Enabled列のチェックを付ける/はずすことで、検証ルール(Bug Detector)の有効・無効を設定します。
設定が保存されるのは、ユーザーディレクトリ\config\findbugs\UserPreferences.findbugsです。記述例(一部抜粋)は以下です。
detectorAbnormalFinallyBlockReturn=AbnormalFinallyBlockReturn|true detectorAbstractClassEmptyMethods=AbstractClassEmptyMethods|true
また、同設定ファイルの末尾には、
detector_threshold=2 effort=default filter_settings=Medium|BAD_PRACTICE,CORRECTNESS,EXPERIMENTAL,I18N,MALICIOUS_CODE,MT_CORRECTNESS,PERFORMANCE,SECURITY,STYLE|false filter_settings_neg=NOISE| run_at_full_build=true
のような設定があります。
PMD in SQE
PMDの検証ルールは、NetBeans上から有効・無効に設定することができます。[ツール]→[オプション]で「オプションダイアログ」が開くので、[Quality]ボタンを押し、[PMD]タブを選択します。表形式でルール一覧が表示されます。行を選択すると、そのルールの説明(メッセージ雛形)とコード例が表の下にあるテキスト領域に表示されます。Enabled列のチェックを付ける/はずすことで、検証ルールの有効・無効を設定します。
設定が保存されるのは、ユーザーディレクトリ\config\pmd\pmd.settingsです。このファイルはデフォルトは空で、上記オプションで無効にしたルールの名前が記録されます。
- pmd.settingsの例(4つのルールのEnabled列のチェックをはずしたとき)
IfElseStmtsMustUseBraces IfStmtsMustUseBraces ForLoopsMustUseBraces WhileLoopsMustUseBraces