Intellij Idea'da kullanılmayan tüm sınıfları nasıl bulabilirim?


126

Intellij Idea'da kullanılmayan tüm kodları bulabilen bir denetim "Kullanılmayan bildirim" vardır. ( bu soruya bakın ) Ancak kullanılmayan tüm sınıfları bulmak istiyorum, yöntemleri, değişkenleri vs. değil . Sadece sınıfları. (3000 sonuç listesinde sadece sınıfları bulmak zordur). Bunu nasıl yapabilirim?


Denetimi çalıştırın ve sağ tuşa tıklayın ve bunu menü listesinde görün.
Cherry

Bu iki soru - ayrı sorular olarak daha iyi olacaktır. Ayrıca serialVersionXXX çoğu proje için kötü bir fikirdir.
Software Engineer

Bu kötü bir fikir çünkü çok az geliştirici bunun ne için olduğunu biliyor ve neredeyse her zaman kötüye kullanılıyor. Java'da nesneleri bayt düzeyinde okumak ve yazmak için serileştirme mekanizmasını kullanmak son derece nadirdir ve bunu yaparsanız, varsayılan seri sürüm genellikle güvenliği sağlamak için yeterlidir. Bir sınıfın arabirimi her değiştiğinde ve alan listesi her değiştiğinde, sabit kodlu bir serialVersion manuel olarak güncellenmelidir - her zaman, geliştiriciler bunu yapmazlar çünkü serialVersion'ın ne için olduğunu anlamazlar. Onu kodda görmenizin ana nedeni tutulma yüzündendir.
Software Engineer

Yanıtlar:


218
  • Ctrl+ Shift+ A(Mac'te Command+ Shift+ A) tuşlarına basın
  • "Kullanılmayan bildirimi" girin
  • "Kullanılmayan bildirime" çift tıklayın

Ayarlar açılacak

  • Java / Declaration redundancy / Unused beyanına tıklayın
  • sağ altta "Anında düzenleyici ayarları" nı seçin
  • alanların işaretini kaldırın, ..., parametreleri kontrol edin. Yalnızca Kontrol Sınıfları işaretlenmelidir.
  • tamam tuşuna basın

Ayarlar kapanır

  • Menü çubuğunda, Denetimi Ada Göre Analiz Et / Çalıştır'ı tıklayın (veya Mac + + + ' da Ctrl+ Alt+ Shift+ I- )CommandOptionShiftI
  • "Kullanılmayan dekla" metnini ekleyin
  • "Kullanılmayan bildirim Java | Bildirim artıklığı" nı seçin

Arama başlar

  • İşiniz bittiğinde Idea'nın altındaki iş durumunu kontrol edin: sonuçların ve karışık kodu temizlemenin harika hissinin tadını çıkarın. :)

Birkaç dakika içinde birkaç soruya hemen hemen aynı cevabı göndermek, birinin diğerinin kopyası olduğunu öne sürün. lütfen bunları bu şekilde işaretleyin.
Jaap

3
Bunlardan biri özellikle IntelliJ Idea kullanımı için, diğeri genel Java içindir. Bunların kopya olduğunu söyleyemem.
BlondCode

7
"Yalnızca Sınıfları Kontrol Et" yapılandırmasını yok sayıyor, bu yüzden çok sayıda istenmeyen sonuç alıyorum (kullanılmayan yöntemler, alanlar vb. Ve daha da kötüsü, birçoğu çeşitli nedenlerle yanlış pozitifler ...).
thelawnmowerman

6
Studio 3.0'da bir değişiklik var Yalnızca sınıfları kontrol et seçeneği adımdan sonra geliyor: "Kullanılmayan bildirim Java | Artıklık beyanı"
Sourabh Saldi

4
Farklı parametrelerle bir inceleme yapmak için genel ayarları değiştirmemize gerek yok. İsme göre incelemeyi çalıştır eylemi incelemenin ayarlarını açar.
TWiStErRob

11

Bunun yapılabileceğini sanmıyorum. Bu özelliğin kasıtlı olarak IDE'lerin dışında bırakıldığından şüpheleniyorum çünkü diğer "kullanılmayan XXX" yeniden düzenlemelerinin yapabileceği şekilde güvenli bir şekilde kullanılamaz.

IDEA'nın (ve AFAIK, NetBeans'ın) aradığı kullanılmayan bildirimler özel üyeler ve yerel değişkenler içindir: bu sınıfın veya kapsamın dışından dinamik olarak bile erişilemeyen şeyler. (En azından Yansıma veya JVM hackleme ile yapmamanız gereken şeyleri yapmadan.) Dış kod kitaplığınızla ne yaparsa yapsın, bu şeylerin kullanılmasına neden olmaz çünkü kapsamları sınırlıdır ve IDE hepsini görebilir. Derleyici bunu yalnızca kodunuza bakarak belirleyebilir.

Sınıflar için, publicerişimleri olmasa bile , bunlara dinamik olarak referans verilebilir.Class.forName() ve bu aslında canlı kodda gerçekleşir. Dolayısıyla, projenizin kodu içinde görünüşte kullanılmasalar bile, sizin veya kütüphanenizin çalıştırdığı harici kodlara bağlı olarak kullanılabilirler. Dolayısıyla IDE, bu sınıfları kaldırmanın dışarıdan gözlemlenebilir davranışı değiştirmeyeceğini garanti edemez.

İşte bu yüzden IDEA'nın bu davranışı sağlamadığını düşünüyorum: kullanıcılara yanlış güvenlik beklentileri verebilir ve bunları kaldırmak güvenli bir yeniden düzenleme değildir.


6
Aslında, dosyayı gerçekten görüntülerken sınıf adını grileştirir ve size "kullanılmayan sınıfı kaldırmak" için bir niyet eylemi verir, tek eksik olan onları otomatik olarak bulabilmektir. Kesinlikle bir şeyleri bozabilecek yollar vardır, ancak bu birçok yeniden düzenleme için geçerlidir.
Rob Fletcher

2
Class.forName (), tartışmalı bir şekilde analiz güvenliği açısından, bir sınıftaki özel alanları okumak / ayarlamak için yansıma kullanmaktan farklı değildir. Dolayısıyla, IntelliJ bunu alanlar için yapacaksa, sınıflar için de neden bunu yapmayacağına dair kabul edilebilir bir cevap değildir. Her iki durumda da, analiz sonucunun güvenli olduğu% 100 garanti edilmez.
Köpekler

1

Belki Unused Symbolaşağıdaki ayarlarla incelemeye bakmalısınız :

görüntü açıklamasını buraya girin


Ha! Görünmüyor :-) "Kullanılmayan bildirim" grubundaki her şeyi kapattım ve yalnızca "kontrol sınıfları" ile yalnızca "Kullanılmayan simgesi" bıraktım. Ancak sonuçlar değişmez. :-(
Kiraz

@Cherry, duyduğuma üzüldüm ... Belki de jetbrains'e bir kusur bildirmelisin
Vic

1

Bunun sorunuzu yanıtlayacağından emin değilim, ancak geçmişte Fortify olarak projede kod inceleme kurallarını çalıştırmak için bir araç kullandım, bu tam olarak kullanılmayan ithalatı, ölü kodu, kullanılmayan sınıfları vb. İşaret ediyor. Ücretli bir yazılım ama ben Eminim bazı ücretsiz eklentiler / yazılımlar da mevcut olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.