はじめに
今回は、
インスペクション
いわゆるコード検査なのですが
インスペクションの設定は
当然のように
インスペクションの調整は、
そこをぐっと乗り越えて、
残念ながらお母さんは居ませんが、
このHectorおじさんをクリックすると 図3 のようなポップアップが表示され、
この検査レベルなのですが、
Highlighting Level | Hector | 意味 |
---|---|---|
None | なんのチェックもしません。普通のテキストエディタ並になります。 | |
Syntax | 文法のチェックだけします。 | |
Inspections | 文法チェックおよびインスペクションの両方を行います。 | |
Power Save Mode | Power Save Mode」 |
インスペクションの設定
メニューバーの
「Default」
より具体的に言うと<ANDROID_
に保存され、<PROJECT_
に保存されます。
プロファイルの設定部分のUIもカラースキーマやキーマップとおもむきが異なり、
インスペクション項目はひとつひとつ重要度
すべてのインスペクション項目に共通した設定項目が、
重要度 | 意味 |
---|---|
Typo | スペル間違い |
Server problem | JetBrainsのCIサーバ:TeamCityで指摘された警告です。これを使うことはないと思います。 |
Weak Warning | 軽微な警告を指摘するのに用います。 |
Info | 情報提供用です。 |
Warning | 警告用です。 |
Error | エラー用です。 |
プリセットされている重要度のうち
一応、
インスペクションもインテンションと同じように候補リストから検査を無効化
「Disable inspection」
- Suppress all inspections for class
- 「すべての検査」
を 「このクラス」 で無効にします。 - Suppress for class
- 「この検査」
を 「このクラス」 で無効にします。 - Suppress for method
- 「この検査」
を 「このメソッド」 で無効にします。 - Suppress for statement
- 「この検査」
を 「この命令文」 で無効にします。 - Suppress for statement with comment
- 「この検査」
を 「この命令文」 で無効にします。
実行してみるとわかりますが、@SuppressWarnings
アノテーションが付与されます
@SuppressWarnings
アノテーションはJDK標準のものなのですが、@SuppressWarnings("all")
」
そんな理由もあって、
おすすめ(おもしろ)インスペクション
インテンションとは比較ならないほどインスペクションの項目は多岐に渡ります。IntelliJ IDEA 12 Ultimate Edition版ですが、
インスペクションの項目には、
とはいえ、
- Abstraction issues
- 抽象化に関する問題を指摘します
(クドいのでOFFで良いです)。 - Android
- Androidに関する問題を指摘します。
- Android Lint
- Android Lintによる警告を指摘します。
- Assignment issues
- 代入に関する問題をしてきます。ほとんど無視して良いですが、
ちょっとだけ気になる検査項目があります。 - Bitwise operation issues
- ビット演算子の問題を指摘します。全部OFFで良いと思います。ビット演算子なんて使いませんよね……。
- Class metrics
- クラスメトリクスを検査します。残念ながらライン数
(LOC) を数える項目はありません。 - Class structure
- クラス構造に関する問題を指摘します。コーディング規約に応じて、
いくつかピックアップするとよいでしょう。 - Cloning issues
- クローン
( Cloneable
)に関する問題を指摘します (全てOFFのままで十分だと思います)。 - Code maturity issues
- コードの成熟度に関する問題を指摘します。どうやらデバッグライトを残しているかどうかを検査するようです。
- Code style issues
- コーディングスタイルに関する問題を指摘します。
- Compiler issues
- コンパイラに関する問題を指摘します。つまりはjavac相当の指摘をします。
- Concurrency annotaion issues
- 並列処理のアノテーションに関する問題を指摘します。
@GuradedBy
アノテーション等は使ったことが無いので、筆者も実はよくわかっていません。 - Control flow issues
- 制御構文に関する問題を指摘します。
- Data flow issues
- データフローに関する問題を指摘します。
- Declaration redundancy
- 無駄な宣言をしているかどうかを指摘します。
- Dependency issues
- 依存性に関する問題を指摘します。JDependみたいなものです。
- Encapsulation issues
- カプセル化に関する問題を指摘します。マジメにやるとキリがないので、
全部OFFでも構わないと思います。 - Error handling
- エラー処理に関する問題を指摘します。
- Finalization issues
- ファイナライズに関する問題を指摘します。
- General
- 一般的な問題を指摘します。何をもって
「一般的」 と言っているのかはわかりません……。 - Groovy
- Groovyに関する問題を指摘します。サブカテゴリにJavaと同じくらいの検査カテゴリが存在します。Android StudioのGroovyサポートがどこまで本気なのかわからないので、
しばらくは 「Groovyの開発もできる」 とは思わないほうが良いと思います。 - HTML
- HTMLに関する問題を指摘します。
- Imports
- インポート文に関する問題を指摘します。
- Inheritance issues
- 継承に関する問題です。これもマジメに検査すると疲れる系ですので、
ほどほどにしましょう。 - Initialization issues
- 初期化に関する問題を指摘します。
- IntelliJ IDEA Platform Inspections
- これはIntelliJのプラグインに関する問題を指摘するカテゴリです。Android Studioではプラグイン開発はできないので、
このカテゴリ自体が無意味です。 - Internationalization issues
- 国際化
(i18n) に関する問題を指摘します。 - J2ME issues
- J2MEに関する問題を指摘します。これもIntelliJから単純に持ってきた検査項目で、
Android Studioでは全くの無意味です。 - Java language level issues
- Javaの言語レベルに関する問題を指摘します。平たく言うと
「Java5以降の構文を使っているかをチェックする」 カテゴリです。今となっては古くさい検査なので、 すべてOFFで問題ありません。 - Java language level migration aids
- Java言語のマイグレーション支援を行います。
- JavaBeans issues
- JavaBeans規約に関する問題を指摘します。
- Javadoc issues
- Javadocに関する問題を指摘します。
- JUnit isseus
- JUnitに関する問題を指摘します。JUnit3かJUnit4かによっても検査項目が若干異なります。
- Language Injection
- Android Studioの
「Language Injection機能」 に関する問題を指摘します。 - Logging issues
- ログ出力に関する問題を指摘します。
- Maven
- Mavenに関する問題を指摘します。Android StudioでMavenはサポートしてるとは言い難いので、
これも無視して良い検査項目でしょう。 - Memory issues
- メモリ管理に関する問題を指摘します。
- Method metrics
- メソッドのメトリクスを指摘します。クラスメトリクス同様、
ライン数を検査する項目はありません。 - Modularization issues
- モジュール化に関する問題を指摘します。
- Naming conventions
- 命名規則を守っているかどうかを指摘します。
- Numeric issues
- 数値に関する問題を指摘します。
- Packaging issues
- パッケージングに関する問題を指摘します。
- Pattern Validation
- 先ほどの"Language Injection"同様、
Android Studioの 「Language Injection機能」 に関する問題を指摘します。 - Performance issues
- パフォーマンスに関する問題を指摘します。
- Portability issues
- 移植性に関する問題を指摘します。
- Probable bugs
- ありがちなバグを指摘します。
- Properties Files
- プロパティファイルに関する問題を指摘します。果たしてAndroid開発でJavaのプロパティファイルを使うことがあるんでしょうか?
- RELAX NG
- RELAX NGに関する問題を指摘します。
- Resource management issues
- リソース管理に関する問題を指摘します。
- Security issues
- セキュリティに関する問題を指摘します。
- Serialization issues
- シリアライズ
( Serializable
)に関する問題を指摘します。これもマジメにチェックすると骨が折れます。 - Spelling
- スペルチェックを行います。
- Threading issues
- スレッドに関する問題を指摘します。
- toString() issues
toString()
メソッドに関する問題を指摘します。- Verbose or redundant code constructs
- 冗長かつ無駄なコードを指摘します。
- Visibility issues
- 可視性に関する問題を指摘します。
- XML
- XMLに関する問題を指摘します。
インスペクションはおもしろい項目が多いのですが、
スペルチェック
- 『Spelling / Typo』
すでにAndroid Studioを使い始めている人は、
「スペルチェックはうれしいけれど、
- 「Process code」
… ソースコードを対象 - 「Process literals」
…文字リテラルを対象 - 「Process comments」
…コメントを対象
また、
登録した単語は<PROJECT_
に保存されます
serialVersionUIDの追加
- 『Serialization issues / Serializable class without 'serialVersionUID'』
Serializable
インターフェイスを実装したクラスに対して serialVersionUID
を追加します。次回説明する予定のメニューバーserialVersionUID
の生成はインスペクションに含まれています。意外に忘れがちで、
あと、
疑わしい名前
- 『Naming conventions / Questionable name』
foo, bar, boo
のように意味の無い適当な名前を使っているかどうかを指摘します。この機能をもってして
お母さんが入っているは大げさとして、hoge
」
Java言語のマイグレーション支援
これは
ただインテンションと異なり、
- Anonymous type can be replaced with lambda
- 匿名クラスをラムダ式に置き換えます
(Java8用)。 - Anonymous type can be replaced with method reference
- 匿名クラスをメソッドリファレンス
(method references) に置き換えます (Java8用)。 - Collections.
EMPTY_* field access replaceable with 'Collections. empty*()' method call Collections.
をEMPTY_* Collections.
に置き換えるempty*() (Java5以降)。 - Enumeration can be iteration
- Enumration を Iterator に置き換えます
(Java2以降)。 - Explicit type can be replaced with <>
- 型パラメータをダイヤモンド演算子
( <>
)に置き換えます (Java7以降)。 - 'for' loop replaceable with 'for each'
- forループを拡張forループ
(for each) に置き換えます (Java5以降)。 - Identical 'catch' branches in 'try' statement
- try-catchをマルチキャッチに置き換えます
(Java7以降)。 - 'if' replaceable with 'switch'
- if文をswitch文に置き換えます
(Java7以降)。 - 'indexOf()' expression is replaceable with 'contains()'
String.
をindexOf() String.
に置き換えますcontains() (Java5以降)。 - Lambda can be replaced with method reference
- ラムダ式をメソッドリファレンスに置き換えます
(Java8用)。 - Method can be variable arity method
- メソッド引数を可変引数に置き換えます
(Java5以降)。 - Possible heap pollution from parameterized vararg type
@SafeVarargs
アノテーションできる可変引数を報告します(Java7以降)。 - Raw use of parameterized class
- 型パラメータを使えるのに使ってないのを報告します
(Java5以降)。 - 'StringBuffer' may be 'StringBuilder'
StringBeffer
をStringBuilder
に置き換えます(Java5以降)。 - 'try finally' replaceable with 'try' with resources
- try-finaly を try-with-resource に置き換えます
(Java7以降)。 - Unnecessary boxing
- 無駄なボクシングを指摘します
(Java5以降)。 - Unnecessary unboxing
- 無駄なアンボクシングを指摘します
(Java5以降)。 - Usages of API documented as @since 1.
5 (1. 6|1. 7) - Java5, 6, 7 で追加されたAPIを使っているかを報告します
(Java1. 4以下)。 - 'while' loop replaceable with 'for each'
- whileループを拡張forループ
(for each) に置き換えます (Java5以降)。
個人的には
Android / Android Lint
本来なら一番最初に紹介すべきAndroidに関するインスペクション項目です。数えてみたら
『Android Lint』
Javadocに関する問題
これは面白いというより、
- 『Javadoc issues / Declaration has Javadoc problems』
を使います。おそらく、
Javadocの自動生成はできませんが、
まとめと次回の予告
Android Studioの元になったIntelliJの目玉機能とも言えるのがこのインテンション&インスペクションです。正直、
次回はエディタの基本操作として、