如何防止使用静态分析工具在代码中使用指定的class/method?

How to prevent to use specified class/method in code with static analysis tools?

我们有很多团队有很多 java 代码。 为了避免性能问题,我们要防止在许多代码存储库上使用某些指定的 classes/methods。

如何防止使用静态分析工具(如 CheckStyle、Sonarqube)在代码中使用指定的 class/method?

你可以看看ArchUnit。我怀疑您可以使用它来编写一些单元测试来查找您想要禁止的 classes/packages 并在遇到它们时抛出错误。

你也可以这样写custom checks for Checkstyle

您也可以尝试 JArchitect,您可以使用 cqlinq 创建自定义规则来检测特定 classes/methods.

的所有使用

这听起来很适合 Checkstyle 的 IllegalType and IllegalImport checks. Also, for finer granularity, you can use ImportControl.

此外,在您的配置中,您可以使用 MatchXPath:

禁止某些方法,如下所示

<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
        "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
        "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">

<module name="Checker">
    <property name="charset" value="UTF-8"/>

    <module name="TreeWalker">
        <module name="MatchXpath">
            <property name="query" value="//METHOD_CALL//DOT[.//IDENT[@text = 'yourForbiddenMethod']]"/>
            <message key="matchxpath.match"
                     value="Avoid using deprecated method 'yourForbiddenMethod()'."/>
        </module>

    </module>
</module>

代码示例:


public class Test {
    static int method(Object args) {
        return AllowedClass.yourForbiddenMethod(args);
    }
}

结果:

➜  src java -jar checkstyle-8.42-all.jar -c config.xml Test.java
Starting audit...
[ERROR] /src/Test.java:3:29: Avoid using deprecated method yourForbiddenMethod(). [MatchXpath]
Audit done.
Checkstyle ends with 1 errors.