0

我正在使用 GroovyCodeVisitor 来检查和抱怨脚本中是否有禁止的类型。访问者会看到对 new Banned() 的尝试,但是当访问返回 Banned 的方法时,它只会看到 Object。这是故意的还是我错过了什么。我只是想确认该方法是一个普通的香草声明,它返回普通的旧无聊 Banned 并且不包含任何形式的泛型,这应该消除擦除作为问题的潜在来源。

在任何跳转之前,我没有使用 SecureASTCompilationCustsomer,因为我使用匹配器来禁止类,而不是简单地添加黑白列表以及 SecureASTCompilationCustomizer 支持的其他内容。

4

1 回答 1

0

GroovyCodeVisitor 用于访问“代码”。例如,方法的主体。方法的返回类型存储在 MethodNode 中,而不是您使用 GroovyCodeVisitor 处理的代码部分。您可以使用 ClassCodeVisitorSupport 并覆盖 visitMethod(MethodNode mn) 然后通过 mn.getReturnType() 获取返回类型并将其提供给您的检查代码。当然,如果这样声明,方法的返回类型只是例如“禁止”。例如,如果您使用“def”,则返回类型将为 Object。

于 2012-05-08T11:19:47.720 回答