Antlr Checkstyle DetailAST,StringLiteral

Antlr Checkstyle DetailAST,StringLiteral,antlr,checkstyle,rule,Antlr,Checkstyle,Rule,我正在尝试编写自定义的checkstyle规则。我对TokenTypes.STRING\u LITERAL感兴趣。这种方法的问题是,字符串可能是串联字符串、StringBuffer、StringBuilder,也可能在方法中 请容忍我,因为我是Checkstyle编码的新手 如果连接了完整字符串,如何获取该字符串。aAST似乎将它们作为单个字符串文本输出 有没有其他方法可以获取完整的字符串 非常感谢任何指针。这在Checkstyle中很难做到,因为Checkstyle完全在AST上工作。它不是编

我正在尝试编写自定义的checkstyle规则。我对TokenTypes.STRING\u LITERAL感兴趣。这种方法的问题是,字符串可能是串联字符串、StringBuffer、StringBuilder,也可能在方法中

请容忍我,因为我是Checkstyle编码的新手

  • 如果连接了完整字符串,如何获取该字符串。aAST似乎将它们作为单个字符串文本输出

  • 有没有其他方法可以获取完整的字符串


  • 非常感谢任何指针。

    这在Checkstyle中很难做到,因为Checkstyle完全在AST上工作。它不是编译器,所以它不知道运行时类型或语法含义

    因此,为了使用Checkstyle实现这一点,您必须手动分析AST并手动构建连接的字符串。如果字符串的一部分由静态方法生成,或者使用StringBuilder/StringBuffer生成,那么我认为通过AST分析查找完整字符串的任务实际上是不可能的


    相反,您可能想看看其他静态代码分析工具,它们可能更适合您的任务,例如,它可以处理编译后的代码,并且通常能够执行非常复杂的检查。但是,运行它比Checkstyle需要更多的资源,而且在旧机器上,您可能无法在IDE中保存时自动运行FindBugs。

    谢谢。我完全同意解析AST所带来的痛苦。我设法获得了SQL字符串文字(连接)。仍然无法捕获运行时参数。我遵循了模式[link=,并对其进行了调整以连接我的sql字符串。这似乎也适用于StringBuilder/StringBuffer构造的字符串。如果发现异常,我将进行更新。
    public void visitToken(DetailAST aAST) {}