Intellij Idea에서 사용하지 않는 모든 클래스를 찾는 방법은 무엇입니까?


126

Intellij Idea에서 사용되지 않은 모든 코드를 찾을 수있는 검사 "사용되지 않은 선언"이 있습니다. ( 이 질문 참조 ) 그러나 메서드, 변수 등이 아닌 사용되지 않는 모든 클래스를 찾고 싶습니다 . 클래스 . (3000 개의 결과 목록에서 클래스 만 찾기가 어렵습니다). 어떻게 할 수 있습니까?


검사를 실행하고 오른쪽 버튼을 클릭하고 메뉴 목록에서 확인하십시오.
Cherry

그것은 두 가지 질문입니다. 그들은 별도의 질문으로 더 나을 것입니다. 또한 serialVersionXXX는 대부분의 프로젝트에서 나쁜 생각입니다.
소프트웨어 엔지니어

그 이유를 아는 개발자가 거의없고 거의 항상 오용되기 때문에 나쁜 생각입니다. Java에서 직렬화 메커니즘을 사용하여 바이트 수준에서 객체를 읽고 쓰는 것은 극히 드뭅니다. 기본 직렬 버전을 사용하면 일반적으로 안전을 제공하기에 충분합니다. 하드 코딩 된 serialVersion은 클래스의 인터페이스가 변경 될 때마다 그리고 필드 목록이 변경 될 때마다 수동으로 업데이트해야합니다. 변함없이 개발자는 serialVersion이 무엇인지 이해하지 못하기 때문에이를 수행하지 않습니다. 코드에서 볼 수있는 주된 이유는 일식 때문입니다.
Software Engineer

답변:


218
  • Ctrl+ Shift+ A(Mac Command+ Shift+ A)를 누릅니다.
  • "미사용 선언"을 입력하십시오.
  • "미사용 선언"을 두 번 클릭합니다.

설정이 나타납니다.

  • Java / Declaration redundancy / Unused declaration을 클릭하십시오.
  • 오른쪽 하단에서 "On the fly editor settings"를 선택합니다.
  • 체크 필드를 해제하고, ..., 매개 변수를 확인합니다. 체크 클래스 만 선택해야합니다.
  • 확인을 누릅니다.

설정이 닫힙니다.

  • 메뉴 모음에서 Analyze / Run Inspection by Name (또는 Ctrl+ Alt+ Shift+ I-Mac Command+ Option+ Shift+ I)을 클릭합니다.
  • "Unused decla"텍스트 삽입
  • "Unused declaration Java | Declaration redundancy"를 선택하십시오.

검색 시작

  • 완료되면 Idea 하단에서 작업 상태를 확인하십시오. 결과를 즐기고 엉망인 코드를 정리하는 멋진 느낌을 즐기십시오. :)

몇 분 안에 몇 분 안에 거의 똑같은 답변을 게시하면 그중 하나가 다른 질문의 중복을 제안합니다. 표시해주세요.
Jaap

3
그중 하나는 특별히 IntelliJ Idea 사용을위한 것이고 다른 하나는 일반 Java를위한 것입니다. 나는 이것이 중복이라고 말하지 않을 것입니다.
BlondCode

7
"Only Check Classes"구성을 무시하므로 원치 않는 결과가 많이 발생합니다 (사용하지 않는 메서드, 필드 등, 더 나쁜 점은 여러 가지 이유로 많은 오류가 오 탐지 ...).
thelawnmowerman

6
3.0 만 체크 클래스 옵션이 단계 이후에 오는 Studio에서 변화가 : 선택 "사용하지 않는 선언 자바 | 선언 중복"
Sourabh Saldi

4
다른 매개 변수로 검사를 실행하기 위해 전역 설정을 변경할 필요가 없습니다. 이름으로 검사 실행 작업은 검사 설정을 표시합니다.
TWiStErRob

11

나는 이것이 가능하다고 생각하지 않습니다. 이 기능은 다른 "사용하지 않는 XXX 제거"리팩토링처럼 안전하게 사용할 수 없기 때문에 의도적으로 IDE에서 제외되었다고 생각합니다.

사용하지 않는 IDEA (및 AFAIK, NetBeans) 선언은 개인 멤버 및 로컬 변수를위한 것입니다. 해당 클래스 또는 범위 외부에서 동적으로도 액세스 할 수없는 것입니다. (적어도 리플렉션이나 JVM 해킹을하지 않고서는 안됩니다.) 외부 코드가 라이브러리에서 무엇을하든 상관없이 범위가 제한되어 있고 IDE는 모든 것을 볼 수 있습니다. 컴파일러는 코드 만보고이를 확인할 수 있습니다.

클래스의 경우 public액세스 권한 이 없더라도를 사용하여 동적으로 참조 할 수 있으며 Class.forName()이는 실제로 라이브 코드에서 발생합니다. 따라서 프로젝트 코드 내에서 분명히 사용되지 않더라도 라이브러리 실행을 사용하는 사용자 또는 외부 코드에 따라 사용될 수 있습니다. 따라서 IDE는 이러한 클래스를 제거해도 외부에서 관찰 가능한 동작이 변경되지 않는다고 보장 할 수 없습니다.

그렇기 때문에 IDEA가이 동작을 제공하지 않는다고 생각합니다. 사용자에게 안전에 대한 잘못된 기대를 줄 수 있으며이를 제거하는 것은 안전한 리팩토링이 아닙니다.


6
글쎄, 실제로 파일을 볼 때 클래스 이름을 회색으로 표시하고 "사용하지 않는 클래스를 제거"하려는 의도 작업을 제공합니다. 빠진 것은 자동으로 파일을 찾을 수 있다는 것뿐입니다. 확실히 일을 깨뜨릴 수있는 방법이 있지만 많은 리팩토링에 해당됩니다.
Rob Fletcher 2015

2
Class.forName ()은 클래스에서 private 필드를 읽고 / 설정하기 위해 리플렉션을 사용하는 것과 분석 안전성의 관점에서 다르지 않습니다. 따라서 IntelliJ가 필드에 대해이 작업을 수행 할 경우 클래스에 대해서도 수행하지 않는 이유에 대한 대답은 허용되지 않습니다. 두 경우 모두 분석 결과가 100 % 안전하다고 보장 할 수 없습니다.
Dogs

1

Unused Symbol다음 설정으로 검사를 조사 해야 할 수도 있습니다 .

여기에 이미지 설명 입력


하아! :-) "사용하지 않는 선언"그룹의 모든 항목을 끄고 "클래스 검사"만있는 "사용되지 않은 기호"만 남겨 둡니다. 그러나 결과는 변하지 않습니다. :-(
Cherry

@Cherry, 유감 ... 어쩌면 당신은 JetBrains의에 결함을 제기한다

1

이것이 귀하의 질문에 답할 수 있을지 확실하지 않지만 과거에 Fortify로 프로젝트에서 코드 검토 규칙을 실행하는 도구를 사용했습니다. 사용되지 않은 가져 오기, 데드 코드, 사용되지 않은 클래스 등을 정확하게 가리키는 도구입니다. 유료 소프트웨어이지만 저는 무료 플러그인 / 소프트웨어도 동일하게 사용할 수있을 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.