Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OpenClover如何计算方法的复杂性?_Java_Clover - Fatal编程技术网

Java OpenClover如何计算方法的复杂性?

Java OpenClover如何计算方法的复杂性?,java,clover,Java,Clover,我在一个类中有一个方法: public boolean tryFile() throws IOException { File file = File.createTempFile("test", "dat"); file.deleteOnExit(); try (FileOutputStream fos = new FileOutputStream(file)) { fos.write(20); }

我在一个类中有一个方法:

    public boolean tryFile() throws IOException {
        File file = File.createTempFile("test", "dat");
        file.deleteOnExit();
        try (FileOutputStream fos = new FileOutputStream(file)) {
            fos.write(20);
        }
        return file.exists();
    }
根据OpenClover文档:

方法复杂性

单个方法的圈复杂度。计算如下:

空方法复杂性==1
简单语句复杂性==0
开关块复杂度==案例语句数
try catch块复杂度==catch语句数
三元表达式复杂性==1
布尔表达式复杂性==表达式中的&&或| |个数

在OpenClover(版本4.4.1)生成的报告中,此方法的复杂性等于3。为什么?怎么算


注:例如,在JaCoCo报告中,我看到这个方法的Ctx=1。

使用资源进行尝试是有效的。生成了一些捕获和条件块。看


克洛弗不知道使用了什么样的资源。它可能正在查看一个AST,它已经将try with resources转换为等效的try-catch-finally。这意味着没有特定语言结构的踪迹,也没有办法为它设置特殊情况,即使Clover开发人员想要一个。

没有。Clover从不查看字节码。JaCoCo正在研究字节码。顺便说一句,JaCoCo对这种情况有一个过滤器,JaCoCo报告中这种方法的圈复杂度(CTX)是1。@AlekseyUlasevich字节码是一个错误,对不起。我不清楚Clover的具体实现细节,但它们可能不是直接解析源代码,而是通过AST,而且AST解析器还没有将try with resources转换为等效的try-catch。