Bagaimana menemukan semua kelas yang tidak terpakai di Intellij Idea?


126

Ada pemeriksaan "Deklarasi yang tidak digunakan" yang dapat menemukan semua kode yang tidak digunakan di Intellij Idea. (lihat pertanyaan ini ) Tetapi saya ingin menemukan semua kelas yang tidak digunakan, bukan metode, variabel, dll. Hanya kelas. (sulit untuk hanya menemukan kelas dalam 3000 daftar hasil). Bagaimana saya bisa melakukan itu?


Jalankan inspeksi, klik tombol kanan dan lihat ini di daftar menu.
Cherry

Itu dua pertanyaan - lebih baik sebagai pertanyaan terpisah. Juga serialVersionXXX adalah ide yang buruk untuk sebagian besar proyek.
Insinyur Perangkat Lunak

Itu ide yang buruk karena sangat sedikit pengembang yang tahu untuk apa ini, dan hampir selalu disalahgunakan. Sangat jarang di java untuk menggunakan mekanisme serialisasi untuk membaca dan menulis objek pada tingkat byte, dan jika Anda menggunakan versi serial default biasanya cukup untuk memberikan keamanan. SerialVersion yang di-hardcode harus diperbarui secara manual setiap kali antarmuka kelas berubah, dan setiap kali daftar bidang berubah - selalu, pengembang tidak melakukan ini karena mereka tidak mengerti untuk apa serialVersion itu. Alasan utama Anda melihatnya dalam kode adalah karena gerhana.
Insinyur Perangkat Lunak

Jawaban:


218
  • Tekan Ctrl+ Shift+ A(di Mac Command+ Shift+ A)
  • Masukkan "deklar yang tidak digunakan"
  • Klik dua kali pada "Deklarasi yang tidak digunakan"

Pengaturan akan muncul

  • Klik pada Java / Declaration redundancy / Unused declaration
  • di kanan bawah pilih "On the fly editor settings"
  • hapus centang bidang centang, ..., periksa parameter. Hanya Periksa Kelas yang harus dicentang.
  • tekan OK

Pengaturan ditutup

  • Pada bilah menu, klik Analisis / Jalankan Inspeksi berdasarkan Nama (atau Ctrl+ Alt+ Shift+ I- di Mac Command+ Option+ Shift+ I)
  • Sisipkan teks "Dekla yang tidak digunakan"
  • Pilih "Unused declaration Java | Declaration redundancy"

Pencarian dimulai

  • Periksa status pekerjaan di bagian bawah Ide, setelah selesai: nikmati hasil dan perasaan senang membersihkan kode yang kacau. :)

Memposting jawaban yang hampir sama persis dalam beberapa menit untuk beberapa pertanyaan, menyarankan bahwa salah satunya adalah duplikat dari yang lain. tolong tandai mereka seperti itu.
Jaap

3
Salah satunya khusus untuk penggunaan IntelliJ Idea, yang lainnya untuk Java umum. Saya tidak akan mengatakan ini adalah duplikasi.
BlondCode

7
Ini mengabaikan konfigurasi "Hanya Periksa Kelas", jadi saya mendapatkan banyak dan banyak hasil yang tidak diinginkan (metode yang tidak digunakan, bidang, dll, dan, yang lebih buruk, banyak di antaranya adalah positif palsu, karena beberapa alasan ...).
thelawnmowerman

6
Ada perubahan di Studio 3.0 Hanya centang opsi kelas muncul setelah langkah: Pilih "Unused declaration Java | Declaration redundancy"
Sourabh Saldi

4
Kami tidak perlu mengubah pengaturan global untuk menjalankan pemeriksaan dengan parameter berbeda. Tindakan Jalankan inspeksi berdasarkan nama akan memunculkan pengaturan untuk inspeksi.
TWiStErRob

11

Saya tidak berpikir ini bisa dilakukan. Saya menduga fitur ini sengaja ditinggalkan dari IDE karena tidak dapat digunakan dengan aman seperti refactorings "hapus XXX yang tidak terpakai" lainnya.

Deklarasi yang tidak terpakai yang dicari IDEA (dan AFAIK, NetBeans) adalah untuk anggota pribadi dan variabel lokal: hal-hal yang tidak dapat diakses, bahkan secara dinamis, dari luar kelas atau ruang lingkup itu. (Yah, setidaknya tanpa melakukan hal-hal dengan Refleksi atau peretasan JVM yang tidak seharusnya Anda lakukan.) Tidak peduli apa yang dilakukan kode luar dengan perpustakaan Anda, itu tidak akan menyebabkan hal-hal itu digunakan, karena cakupannya terbatas dan IDE dapat melihat semuanya. Kompilator dapat menentukan ini hanya dengan melihat kode Anda.

Untuk kelas, meskipun mereka tidak memiliki publicakses, mereka dapat direferensikan secara dinamis dengan Class.forName(), dan ini sebenarnya terjadi dalam kode langsung. Jadi, meskipun tampaknya tidak digunakan dalam kode proyek Anda, mereka mungkin digunakan tergantung pada apa yang Anda atau kode eksternal yang dijalankan oleh pustaka Anda. Jadi, IDE tidak dapat menjamin bahwa menghapus class tersebut tidak akan mengubah perilaku yang dapat diamati secara eksternal.

Itulah mengapa menurut saya IDEA tidak memberikan perilaku ini: mungkin memberikan pengguna harapan keamanan yang salah, dan menghapusnya bukanlah pemfaktoran ulang yang aman.


6
Yah, itu membuat nama kelas menjadi abu-abu ketika benar-benar melihat file dan memberi Anda tindakan niat untuk "menghapus kelas yang tidak digunakan", semua yang hilang adalah dapat secara otomatis menemukannya. Tentu ada cara yang bisa merusak banyak hal tapi itu berlaku untuk banyak refactoring.
Rob Fletcher

2
Class.forName () bisa dibilang tidak ada bedanya, dari sudut keamanan analisis, daripada menggunakan refleksi untuk membaca / menyetel bidang pribadi di kelas. Jadi jika IntelliJ akan melakukan ini untuk bidang, itu bukan jawaban yang dapat diterima mengapa itu tidak akan melakukannya untuk kelas juga. Dalam kedua kasus tersebut, hasil analisis tidak dijamin 100% aman.
Anjing

1

Mungkin Anda harus memeriksa Unused Symbolpemeriksaan dengan pengaturan berikut:

masukkan deskripsi gambar di sini


Ha! Sepertinya tidak :-) Saya mematikan semua yang ada di grup "deklarasi tidak terpakai" dan hanya menyisakan "Simbol tak terpakai" dengan "kelas centang" saja. Tapi hasilnya tidak berubah. :-(
Cherry

@Cherry, maaf mendengar ... Mungkin Anda harus mengajukan cacat ke jetbrains
Vic

1

Saya tidak yakin apakah ini akan menjawab pertanyaan Anda tetapi saya menggunakan alat di masa lalu seperti Fortify untuk menjalankan aturan peninjauan kode pada proyek, yang secara tepat menunjuk ke impor yang tidak digunakan, kode mati, kelas yang tidak digunakan, dll. Ini adalah perangkat lunak berbayar tetapi saya Saya yakin akan ada beberapa plugin / software gratis yang akan tersedia untuk hal yang sama.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.