2014-07-15 57 views
0

我試圖找出拋出語句發生在catch塊內的情況。例如:如何檢測throw語句是否發生在catch語句中?

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

是否有可能訪問的每個catch塊來遍歷其單位爲了檢查throw語句存在的明確開始/結束範圍?有關我如何做到這一點的任何想法?

+1

爲什麼需要這樣做? –

+0

開發工具來檢查一些異常處理合同 – EijiAdachi

+0

編譯器已經這樣做了。你想添加什麼功能? –

回答

0

如果您只是想將其作爲靜態代碼分析,我建議您在IDE的查找操作中使用正則表達式來查找捕獲括號內的任何throw實例。在IntelliJ中肯定支持。

+0

我必須用SOOT來做到這一點。 – EijiAdachi

+1

作爲一般規則,使用正則表達式在嵌套結構中導航不起作用:直覺是正則表達式實際上無法計數,並且要導航嵌套結構,您必須對嵌套進行計數。這個鏈接似乎是關於HTML的,但它實際上是關於嵌套的文本結構以及爲什麼人們似乎無法理解爲此使用正則表達式無用:http://stackoverflow.com/a/1732454/120163 –

0

查看您的標籤我假設您正在使用菸灰。

您可以使用您正在查看的JimpleBody的陷阱來確定語句是否位於try/catch塊中。只需調用body.getTraps()。