Intellij Ideaで未使用のクラスをすべて見つけるにはどうすればよいですか?


126

Intellij Ideaの未使用のコードをすべて見つけることができる「未使用の宣言」の検査があります。(この質問を参照)しかし、メソッド、変数などではなく、すべての未使用のクラスを検索します。クラスのみを検索します。(3000の結果リストでクラスのみを見つけるのは困難です)。どうすればできますか?


検査を実行して右ボタンをクリックし、メニューリストでこれを確認してください。
Cherry

これは2つの質問です。これらは別々の質問の方が適しています。また、serialVersionXXXはほとんどのプロジェクトにとって悪い考えです。
ソフトウェアエンジニア、

それが何のためにあるのかを知っている開発者はほとんどいないので、それは悪い考えであり、ほとんど常に誤用されます。Javaでは、シリアライゼーションメカニズムを使用してバイトレベルでオブジェクトを読み書きすることは非常にまれであり、通常はデフォルトのシリアルバージョンで十分です。ハードコードされたserialVersionは、クラスのインターフェイスが変更されるたび、およびフィールドリストが変更されるたびに手動で更新する必要があります。開発者は、serialVersionの目的を理解していないため、これを実行しません。あなたがコードでそれを見る主な理由は日食のためです。
ソフトウェアエンジニア

回答:


218
  • プレスCtrl+ Shift+ A(Macの場合でCommand+ Shift+ A
  • 「未使用の申告書」を入力してください
  • 「未使用の宣言」をダブルクリックします

設定がポップアップします

  • Java /宣言の冗長性/未使用の宣言をクリックします
  • 右下で「オンザフライエディター設定」を選択します
  • チェックフィールドのチェックを外し、...、チェックパラメーター。チェッククラスのみをチェックする必要があります。
  • OKを押します

設定を閉じます

  • メニューバーで、分析上のクリック/ファイル名を指定して実行名による検査(またはCtrl+ Alt+ Shift+ I-マックでCommand+ Option+ Shift+ I
  • 「未使用のdecla」というテキストを挿入します
  • 「未使用の宣言Java |宣言の冗長性」を選択します

検索開始

  • 終了したら、アイデアの下部でジョブの状態を確認します。結果と、混乱したコードをクリーンアップする素晴らしい感覚をお楽しみください。:)

ほぼ同じ答えを数分以内にいくつかの質問に投稿する場合は、一方が他方の複製であることを示唆します。そのようにマークしてください。
Jaap

3
それらの1つはIntelliJ Ideaの使用のために特別に、もう1つは一般的なJava用です。これらが重複しているとは言えません。
BlondCode 2016

7
「クラスのチェックのみ」構成を無視するため、多くの不要な結果(未使用のメソッド、フィールドなど、さらに悪いことに、いくつかの理由でそれらの多くが誤検知)を取得します。
thelawnmowerman 2017年

6
Studio 3.0には変更点があります。ステップの後に「クラスのチェックのみ」オプションがあります。「未使用の宣言Java |宣言の冗長性」を選択
Sourabh Saldi

4
異なるパラメーターで検査を実行するためにグローバル設定を変更する必要はありません。名前による検査の実行アクションは、検査の設定をポップアップします。
TWiStErRob 2018

11

これは可能だとは思いません。この機能は、他の「未使用のXXXを削除する」リファクタリングのように安全に使用できないため、意図的にIDEから除外されていると思います。

IDEA(およびAFAIK、NetBeans)が検索する未使用の宣言は、プライベートメンバーおよびローカル変数(クラスまたはスコープの外部から動的にアクセスできないもの)を対象としています。(まあ、少なくとも、ReflectionやJVMのハッキングで想定外のことをしなくても。)ライブラリで外部コードが何をしても、スコープが制限されているため、これらのものが使用されることはありません。 IDEはそれをすべて見ることができます。コンパイラは、コードだけを見てこれを判断できます。

クラスの場合、publicアクセス権がなくても、を使用して動的に参照できClass.forName()ます。これは実際にはライブコードで発生します。したがって、それらがプロジェクトのコード内で使用されていないように見えても、ライブラリの実行内容またはライブラリを使用する外部コードによっては使用される可能性があります。したがって、IDEは、これらのクラスを削除しても外部から観察可能な動作が変更されないことを保証できません。

IDEAがこの動作を提供しないのはこのためです。安全性についてユーザーに誤った期待を与える可能性があり、それらを削除しても安全なリファクタリングではありません。


6
ファイルを実際に表示すると、クラス名がグレー表示され、「未使用のクラスを削除する」という意図的なアクションが提供されます。欠けているのは、自動的にそれらを見つけることができることだけです。確かに、物事を壊す可能性のある方法がありますが、それは多くのリファクタリングに当てはまります。
Rob Fletcher、

2
Class.forName()は、分析の安全性の点から、リフレクションを使用してクラスのプライベートフィールドを読み取り/設定することとほぼ同じです。したがって、IntelliJがフィールドに対してこれを行う場合、それがクラスに対しても同様に行わない理由としては、それは受け入れられない回答です。どちらの場合も、分析結果が100%安全であるとは限りません。
イヌ

1

たぶんUnused Symbol、次の設定で検査を調べる必要があります。

ここに画像の説明を入力してください


ハ!:-)私は「未使用の宣言」グループのすべてをオフにし、「未使用のシンボル」だけを「チェッククラス」のみに残します。しかし、結果は変わりません。:-(
Cherry

@Cherry、ごめんなさい...たぶん、あなたはジェットブレーンに欠陥を提出する必要があります
Vic

1

これがあなたの質問に答えるかどうかはわかりませんが、Fortifyとして過去にツールを使用して、プロジェクトでコードレビュールールを実行しました。これは、未使用のインポート、デッドコード、未使用のクラスなどを正確に指します。有料のソフトウェアですが同じためにいくつかの無料のプラグイン/ソフトウェアが利用可能になると確信しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.