2014-10-01 10 views
1

프로젝트에서 만든 런타임 예외가 있으며 전체 프로그램이 폭발하지 않도록 내 클래스 중 하나에 걸렸습니다. 그것이 발생하면 (즉, 누군가가 try/catch 문을 삭제하면 빌드 또는 정적 분석 도구에서 무언가를 얻음으로써 알고 싶음). 불행히도, 자바가이 미확인 된 예외에 대한 try/catch 문을 갖도록 강요하지 않기 때문에 컴파일 타임에 강제 적용 할 방법이 없습니다. (나는 예외를 체크 한 예외로 바꿀 수 없다).정적 분석 사용자 지정 규칙을 사용하여 검사되지 않은 예외 처리 적용

아마도 checkstyle/pmd/findbugs 사용자 정의 규칙을 사용하여 특정 클래스에서 try/catch 문을 실행할 수있는 방법이 있는지 궁금합니다. (특정 클래스의 특정 메소드가 내 런타임 예외에 대한 try catch 문을 가지고 있는지 확인하십시오).

감사합니다.

답변

1

더있다 Findstyle, FindBugs 또는 PMD (또는 해당 제공 패키지)의 기존 감지기로 원하는 것을 수행 할 수 있습니다. 그래서 당신은 자신의 롤백해야합니다.

클래스 Y 그 아래에 런타임 예외를 잡는다 catch 블록 방법 X를 찾는 PMD XPath rule를 작성하는 것 실제 프로그래밍없이이 문제를 해결하는 가장 쉬운 방법.

오류가 발생하는 경우 가장 쉬운 방법은 custom Checkstyle check이지만 약간의 프로그래밍이 필요하므로 나중에 모든 곳에서 사용자 지정 검사를 배포해야합니다.

다른 답변에서 제안한 것처럼 FindBugs 감지기를 작성할 수도 있지만 특정 FindBugs 기능 (예 : 바이트 코드 분석)을 사용하지 않으므로 지나치게 잔인합니다.

+1

나는 예외가 던져지기를 기대하는 일부 테스트를하기로 결정했습니다. 시험 출력에 도달한다. 그것은 내 자신의 규칙을 작성하는 데 너무 많은 번거 로움이었습니다. –

2

런타임 예외의 개념은 "throws XYException"절을 지정할 필요가 없다는 것입니다.

그러나 findbugs-contrib을 확인할 수 있습니다. 그래도 해결되지 않으면 사용자 정의 버그 탐지기를 작성할 수 있습니다. 여기에 몇 가지 출발점은 없습니다 :

+0

예, 내 문제는 내가 체크 예외를 사용할 수 없다는 사실에 있지만, 체크되지 않은 예외를 처리하도록 강제하고 싶습니다. findbugs와 같은 것은 내가 사용할 수있는 규칙을 가지고 있지 않습니다. 나중에 링크를 살펴 보겠습니다. 그러나이 작업을하기에는 너무 많은 작업처럼 보입니다. 방금 대규모로 해결해야 할 수도 있습니다. ******** 경고 TRY/CATCH를 제거하지 마십시오. ******** comment :) –

+0

findbugs! = findbugscontrib에주의하십시오. findbugs-contrib는 findbug에 대한 추가 버그 패턴입니다. 그들은 몇 가지 추가적인 버그를 가지고있어서 어떤 deak을 예외 처리로 탐지합니까 ... – Lonzak

+0

내가 언급 한 목록을 살펴 보았습니다 :> –