【问题标题】:static analysis custom rule to enforce unchecked exception handling静态分析自定义规则以强制执行未经检查的异常处理
【发布时间】:2014-10-01 09:44:23
【问题描述】:

我在我的项目中创建了一个运行时异常,我想确保它在我的一个类中被捕获,以便整个程序在它发生时不会爆炸(即,如果有人删除我想通过构建或静态分析工具中的某些内容失败来了解 try/catch 语句)。不幸的是,由于 java 没有强制我为这个未经检查的异常使用 try/catch 语句,所以没有办法在编译时强制执行它。 (我无法将我的异常更改为已检查异常)。

我想知道是否有任何方法可以在特定类中强制执行 try/catch 语句,可能是使用 checkstyle/pmd/findbugs 自定义规则。 (检查特定类中的特定方法是否有针对我的运行时异常的 try catch 语句)。

谢谢。

【问题讨论】:

    标签: java checkstyle findbugs runtimeexception pmd


    【解决方案1】:

    【讨论】:

    • 是的,我的问题在于我不能使用已检查的异常,但我确实想强制处理未检查的异常。似乎 findbugs 没有我可以开箱即用的规则。稍后我会看一下链接,但要让它工作似乎需要做太多的工作,我可能只需要解决大量的 ********* WARNING DO NOT REMOVE TRY/CATCH ********评论:)
    • 请注意 findbugs != findbugscontrib。 Findbugs-contrib 是 findbugs 的附加错误模式。他们有一些额外的错误可以检测哪些异常处理的缺陷......
    • 我确实浏览了你提到的那个列表:>
    【解决方案2】:

    Checkstyle、FindBugs 或 PMD(或它们的贡献包)中没有现有的检测器可以满足您的需求。所以你必须自己动手。

    在没有实际编程的情况下解决此问题的最简单方法是编写一个 PMD XPath rule,它在 Y 类中查找方法 X 和一个 catch 块,用于在其下捕获运行时异常。

    如果做不到这一点,custom Checkstyle check 将是下一个最简单的方法,但它需要一点编程,随后您必须在任何地方部署您的自定义检查。

    您也可以按照另一个答案中的建议编写自己的 FindBugs 检测器,但由于您不会使用任何特定的 FindBugs 功能(例如字节码分析),所以对我来说这似乎有点矫枉过正。

    【讨论】:

    • 我决定进行一些测试,这些测试会导致该异常被抛出并期望它被处理,而不是到达测试输出。自己写规则太麻烦了。
    猜你喜欢
    • 1970-01-01
    • 2015-05-24
    • 2023-04-02
    • 1970-01-01
    • 2010-11-08
    • 2014-05-30
    • 2011-01-10
    • 2012-08-27
    相关资源
    最近更新 更多