PMD - очень высокая сложность NPath с тернарным оператором (?

Я использую PMD для создания отчета о качестве кода проекта.
Я не понимаю результат проверки сложности NPath.
Я создал скучный класс, который демонстрирует результат (это не настоящий класс, но он использует тот же шаблон):

import java.util.*;

public class SOFExample {

    private final Map<String, Date> magicMap = new HashMap<String, Date>();    
    protected static final long UNKNWOWN = 0L;
    private static final class MyCal { long aTime; long bTime; long cTime; long dTime;}

    public void usefullMethod(final List<MyCal> myCals) {

        final Date a = magicMap.get("a");
        final Date b = magicMap.get("b");
        final Date c = magicMap.get("c");
        final Date d = magicMap.get("d");

        final long aTime = a == null ? UNKNWOWN : a.getTime();
        final long bTime = b == null ? UNKNWOWN : b.getTime();
        final long cTime = c == null ? UNKNWOWN : c.getTime();
        final long dTime = d == null ? UNKNWOWN : d.getTime();

        for (MyCal myCal : myCals) {
            if(myCal.aTime == UNKNWOWN) myCal.aTime = aTime;
            if(myCal.bTime == UNKNWOWN) myCal.bTime = bTime;
            if(myCal.cTime == UNKNWOWN) myCal.cTime = cTime;
            if(myCal.dTime == UNKNWOWN) myCal.dTime = dTime;
        }
    }
}

Результат PMD:

Метод полезный lMethod () имеет сложность NPath 10625

Если я добавлю новую переменную, инициализированную таким же образом, я получу следующее:

Метод полезныйlMethod () имеет сложность NPath 103125

А если я заменю все? Со структурой if-else я получил следующее:

Метод functionlMethod () имеет сложность NPath 1056

Почему я получил такой очень высокий результат с тройным '?' Оператор?

Что не так с этим кодом? (В этом демонстрационном коде легко извлечь метод получения значений по умолчанию, но в реальном коде это может быть невозможно)

14
задан Guillaume 3 January 2016 в 03:08
поделиться