2016-12-22 421 views
0

我正在開發一個項目來分析基於jersey的註釋,以在來自java源代碼的項目之間構建請求交互圖。JavaParser提取註釋參數值

可以很容易地解析和獲取信息時everythink像

@GET  
@Path("/parameter/{param}") 
public Response getParam(@PathParam("param") String prm) {  

    String output = "Jersey say : " + prm;  
    return Response.status(200).entity(output).build(); 

} 

我可以提取像值{方法: 「GET」,路徑: 「參數/ {PARAM}」

另一種情況是

private static final PARAMETER_PATH="/parameter/{param}"; 

@GET  
@Path(PARAMETER_PATH) 
public Response getParam(@PathParam("param") String prm) {  

    String output = "Jersey say : " + prm;  
    return Response.status(200).entity(output).build(); 

} 

private static String PATH_VARIABLE_STR = "{param}"; 
private static PARAMETER_PATH = "/parameter/"+PATH_VARIABLE_STR; 

    @GET  
    @Path(PARAMETER_PATH) 
    public Response getParam(@PathParam("param") String prm) {  

     String output = "Jersey say : " + prm;  
     return Response.status(200).entity(output).build(); 

    } 

在最後兩種情況下,我無法提取真正的價值。

我怎樣才能得到這個變量的值,而我的工作靜態源代碼JavaParser類,AST或等

我在等待你的建議。 謝謝。

回答

2

JavaParser或其他解析器生成的AST不計算值。如果你的代碼中有3 + 5,這是一個附加,解析器將不會有解釋它的邏輯並得出結論,即相當於8。你需要自己實現這個邏輯。你想基本上爲Java創建一個解釋器。我會說你可以輕鬆地做幾個基本的操作:考慮文字,基本的4個數學運算,而不是更多。當然,如果你試圖考慮整個Java語言,那麼這個東西會很快失去控制。

聲明:我是JavaParser的貢獻者

+0

感謝費德里科。我正在處理VariableDeclarator以提取變量名稱和值,並將其添加到包名稱列表中。至少我通過比較包和名稱來獲得價值,將變量搜索到列表中。你說有沒有簡單的方法來解析器做到這一點。好吧,如果我需要一些邏輯操作,我必須實現基本的解釋器。再次感謝。 – Tugrul