Как OpenClover считает сложность для метода? - PullRequest
0 голосов
/ 20 января 2020

У меня есть метод в классе:

    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:

Сложность метода

Цикломати c сложность одного метода , Он рассчитывается следующим образом:

сложность пустого метода == 1
сложность простого оператора == 0
сложность блока переключения == количество операторов кейса
попытка сложности блока catch == число ловли операторы
сложность троичного выражения == 1
сложность логического выражения == число && или || в выражении

В отчете, созданном OpenClover (версия 4.4.1), сложность этого метода равна 3. Почему? Как это было посчитано?

PS. Например, в отчете JaCoCo я вижу Ctx = 1 для этого метода.

1 Ответ

0 голосов
/ 20 января 2020

Try-with-resources эффективно синтактичен c сахар. Есть несколько уловов и сгенерированных условных блоков. См. раздел JLS 14.20.3.1 .

Кловер не знает, использовалась ли попытка с ресурсами. Вероятно, он смотрит на AST, который уже преобразовал try-with-resources в эквивалентный try-catch-finally. Это означает, что нет никаких следов этой специфической языковой конструкции c, и нет никакого способа иметь специальный случай для нее, даже если разработчики Clover хотели бы иметь такую.

...