2014-07-15 3 views
0

throw 문이 catch 블록 내부에서 발생하는 경우를 식별하려고합니다. 예를 들어 :throw 문이 catch 내에서 발생하는 것을 감지하는 방법은 무엇입니까?

catch(MyException e){ 
    throw e; 
} 
catch(Exception e){ 
    throw new AnotherType(); 
} 

그것은 throw 문의 존재를 확인하기 위해 자사의 단위를 반복 각 catch 블록의 명시 적 시작/종료 범위에 액세스 할 수 있습니까? 내가 어떻게이 일을 할 수 있는지에 대한 생각?

+1

왜 이렇게해야합니까? –

+0

일부 예외 처리 계약을 확인하는 개발 도구 – EijiAdachi

+0

컴파일러는 이미이를 수행합니다. 어떤 기능을 추가하려고합니까? –

답변

0

정적 코드 분석으로이 작업을 수행하려는 경우 IDE 찾기 작업에서 정규식을 사용하여 catch 괄호 안에 throw 인스턴스를 찾는 것이 좋습니다. IntelliJ에서 확실히 지원됩니다.

+0

나는 그것을하기 위해 SOOT를 사용해야합니다. – EijiAdachi

+1

일반적으로 정규 표현식을 사용하여 중첩 구조를 탐색하면 작동하지 않습니다. 직관적 인 정규 표현식은 계산할 수 없으며 중첩 구조를 탐색하려면 중첩을 계산해야합니다. 이 링크는 HTML에 관한 것으로 보이지만 실제로는 중첩 된 텍스트 구조와 왜 사람들이 정규 표현식을 사용하는 무용지를 이해하지 못하는 것일까? http://stackoverflow.com/a/1732454/120163 –

0

태그를 볼 때 나는 Soot를 사용하고 있다고 가정합니다.

보고있는 JimpleBody의 트랩을 사용하여 구문이 try/catch 블록에 있는지 확인할 수 있습니다. body.getTraps()를 호출하면됩니다.