Làm cách nào để tìm tất cả các lớp không sử dụng trong Intellij Idea?


126

Có một kiểm tra "Khai báo chưa sử dụng" có thể tìm thấy tất cả mã chưa sử dụng trong Intellij Idea. (xem câu hỏi này ) Nhưng tôi muốn tìm tất cả các lớp không sử dụng, không phải phương thức, biến, v.v. Chỉ các lớp. (rất khó để tìm chỉ các lớp trong danh sách kết quả 3000). Làm thế nào tôi có thể làm điều đó?


Chỉ cần chạy kiểm tra nhấp vào nút bên phải và xem điều này trong danh sách menu.
Cherry

Đó là hai câu hỏi - chúng sẽ tốt hơn khi là những câu hỏi riêng biệt. Ngoài ra serialVersionXXX là một ý tưởng tồi cho hầu hết các dự án.
Kỹ sư phần mềm vào

Đó là một ý tưởng tồi vì rất ít nhà phát triển biết nó dùng để làm gì và nó hầu như luôn bị lạm dụng. Trong java cực kỳ hiếm khi sử dụng cơ chế tuần tự hóa để đọc và ghi các đối tượng ở cấp độ byte, và nếu bạn làm như vậy thì phiên bản nối tiếp mặc định thường đủ để cung cấp sự an toàn. Một serialVersion được mã hóa cứng phải được cập nhật theo cách thủ công mỗi khi giao diện của một lớp thay đổi và mỗi khi danh sách trường thay đổi - luôn luôn, các nhà phát triển không làm điều này vì đơn giản là họ không hiểu serialVersion dùng để làm gì. Lý do chính mà bạn nhìn thấy nó trong mã là do nhật thực.
Kỹ sư phần mềm

Câu trả lời:


218
  • Nhấn Ctrl+ Shift+ A(trong Mac Command+ Shift+ A)
  • Nhập "khai báo không sử dụng"
  • Nhấp đúp vào "Tờ khai chưa sử dụng"

Cài đặt sẽ bật lên

  • Nhấp vào Java / Khai báo dư thừa / Khai báo không sử dụng
  • ở dưới cùng bên phải, chọn "Cài đặt trình chỉnh sửa nhanh"
  • bỏ chọn các trường kiểm tra, ..., kiểm tra các thông số. Chỉ Kiểm tra Lớp mới được đánh dấu.
  • nhấn OK

Cài đặt đóng

  • Trên thanh menu, nhấp vào Phân tích / Chạy kiểm tra theo tên (hoặc Ctrl+ Alt+ Shift+ I- trong Mac Command+ Option+ Shift+ I)
  • Chèn văn bản "Decla không sử dụng"
  • Chọn "Khai báo không sử dụng Java | Dự phòng khai báo"

Bắt đầu tìm kiếm

  • Kiểm tra trạng thái công việc ở cuối Idea, khi hoàn thành: tận hưởng thành quả và cảm giác tuyệt vời khi dọn dẹp mã lộn xộn. :)

Đăng câu trả lời gần như chính xác trong vòng vài phút cho một số câu hỏi, đề xuất rằng một trong số chúng trùng lặp với câu kia. xin vui lòng đánh dấu chúng như vậy.
Jaap

3
Một trong số chúng đặc biệt dành cho việc sử dụng IntelliJ Idea, một cái khác dành cho Java nói chung. Tôi sẽ không nói đây là những bản sao.
BlondCode

7
Nó bỏ qua cấu hình "Chỉ Kiểm tra Lớp", vì vậy tôi nhận được rất nhiều kết quả không mong muốn (các phương thức, trường không sử dụng, v.v., và tệ hơn, nhiều trong số chúng là dương tính giả, vì một số lý do ...).
thelawnmowerman

6
Có một sự thay đổi trong Studio 3.0 Chỉ tùy chọn lớp học kiểm tra đưa ra sau khi bước: Chọn "tuyên bố không sử dụng Java | Tuyên bố dự phòng"
Sourabh Saldi

4
Chúng tôi không cần thay đổi cài đặt chung để chạy kiểm tra với các thông số khác nhau. Hành động chạy kiểm tra theo tên sẽ bật lên các cài đặt cho việc kiểm tra.
TWiStErRob

11

Tôi không nghĩ điều này có thể làm được. Tôi nghi ngờ rằng tính năng này được cố ý bỏ qua IDE vì nó không thể được sử dụng một cách an toàn theo cách mà các cấu trúc lại "loại bỏ XXX không sử dụng" khác có thể.

Các khai báo không sử dụng mà IDEA (và AFAIK, NetBeans) tìm kiếm dành cho các thành viên riêng tư và các biến cục bộ: những thứ không thể truy cập, thậm chí động, từ bên ngoài lớp hoặc phạm vi đó. (Chà, ít nhất là không làm những việc với Reflection hoặc JVM hacking mà bạn không nên làm.) Bất kể mã bên ngoài làm gì với thư viện của bạn, nó sẽ không làm cho những thứ đó được sử dụng, vì phạm vi của chúng bị hạn chế và IDE có thể thấy tất cả. Trình biên dịch có thể xác định điều này bằng cách chỉ xem mã của bạn.

Đối với các lớp, ngay cả khi chúng không có publicquyền truy cập, chúng có thể được tham chiếu động với Class.forName()và điều này thực sự xảy ra trong mã trực tiếp. Vì vậy, ngay cả khi chúng dường như không được sử dụng trong mã dự án của bạn, chúng có thể được sử dụng tùy thuộc vào những gì bạn hoặc mã bên ngoài sử dụng thư viện của bạn chạy. Vì vậy, IDE không thể đảm bảo rằng việc xóa các lớp đó sẽ không thay đổi hành vi có thể quan sát được bên ngoài.

Đó là lý do tại sao tôi nghĩ IDEA không cung cấp hành vi này: nó có thể mang lại cho người dùng những kỳ vọng sai lầm về sự an toàn và việc xóa chúng không phải là một cách tái cấu trúc an toàn.


6
Chà, nó sẽ làm xám tên lớp khi thực sự xem tệp và cung cấp cho bạn một hành động có ý định "loại bỏ lớp không sử dụng", tất cả những gì còn thiếu là có thể tự động tìm thấy chúng. Chắc chắn có những cách có thể phá vỡ mọi thứ nhưng điều đó đúng với nhiều cách tái cấu trúc.
Rob Fletcher

2
Class.forName () được cho là không khác bất kỳ, từ quan điểm phân tích an toàn, so với việc sử dụng phản chiếu để đọc / đặt các trường riêng tư trên một lớp. Vì vậy, nếu IntelliJ sẽ làm điều này cho các trường, đó không phải là câu trả lời chấp nhận được cho lý do tại sao nó cũng không làm điều đó cho các lớp. Trong cả hai trường hợp, kết quả phân tích không được đảm bảo 100% là an toàn.
Dogs

1

Có thể bạn nên xem xét việc Unused Symbolkiểm tra với các cài đặt sau:

nhập mô tả hình ảnh ở đây


Ha! Có vẻ như không :-) Tôi đã tắt mọi thứ trong nhóm "khai báo chưa sử dụng" và chỉ để lại "Biểu tượng không sử dụng" với "kiểm tra lớp" mà thôi. Nhưng kết quả không thay đổi. :-(
Cherry

@Cherry, rất tiếc khi biết ... Có lẽ bạn nên gửi lỗi cho jetbrains
Vic

1

Tôi không chắc liệu điều này có trả lời được câu hỏi của bạn hay không nhưng trước đây tôi đã sử dụng một công cụ là Fortify để chạy các quy tắc xem xét mã trong dự án, chỉ chính xác các mục nhập chưa sử dụng, mã chết, các lớp không sử dụng, v.v. Đó là một phần mềm trả phí nhưng tôi chắc chắn rằng sẽ có một số plugin / phần mềm miễn phí sẽ có sẵn cho tương tự.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.