2012-05-04 18 views
0

我正在使用GroovyCodeVisitor來檢查和抱怨禁止類型是否在腳本中。訪問者看到嘗試新的Banned(),但在訪問返回Banned的方法時,它只能看到Object。這是故意的還是我錯過了一些東西。我只是想確認這個方法是一個普通的香草聲明,它返回的是簡單的舊的枯燥的禁止,並且不包括任何形式的泛型,它應該消除作爲潛在問題源的擦除。GroovyCodeVisitor說java方法返回的是對象而不是實際的類型。沒有涉及的仿製藥

在任何跳轉之前,我沒有使用SecureASTCompilationCustsomer,因爲我使用匹配器來禁止類,而不是簡單地添加SecureASTCompilationCustomizer支持的黑白列表和其他東西。

回答

0

GroovyCodeVisitor用於訪問「代碼」。例如,這是一個方法的主體。方法的返回類型存儲在MethodNode中,而不是您使用GroovyCodeVisitor處理的代碼部分。您可以使用ClassCodeVisitorSupport並重寫visitMethod(MethodNode mn),然後通過mn.getReturnType()獲取返回類型,並將其提供給您的檢查代碼。當然,一個方法的返回類型只有例如「禁止」(如果聲明的話)。例如,如果使用「def」,則返回類型將爲Object。

相關問題