javasonarquberefactoringcode-readability

The Cyclomatic Complexity of this method is 13 which is greater than 10 authorized


Please help reduce the cyclomatic complexity of this method. I don't really understand how this can be done, I need all the conditions in this method and obviously there are no duplicates.

private boolean isPropertyAccessed(AccessLevels readAccessLevel, Relationship relationship) {
    boolean isAccessed1 = readAccessLevel.isAccessed1() && relationship.getAccessed1Relationship() == ACCESSED1;
    boolean isAccessed2 = readAccessLevel.isAccessed2() && relationship.getAccessed2Relationship() == ACCESSED2;
    boolean isAccessed3 = readAccessLevel.isAccessed3() && relationship.getAccessed3Relationship() == ACCESSED3;
    boolean isAccessed4 = readAccessLevel.isAccessed4() && relationship.getAccessed4Relationship() == ACCESSED4;
    boolean isAccessed5 = readAccessLevel.isAccessed5() && relationship.getAccessed5Relationship() == ACCESSED5;
    boolean isAccessed6 = readAccessLevel.isAccessed6() && relationship.getAccessed6Relationship() == ACCESSED6;
    return readAccessLevel.isAll() || isAccessed1 || isAccessed2 || isAccessed3
        || isAccessed4 || isAccessed5 || isAccessed6;
}

Thanks


Solution

  • You can use streams for your return statement to git rid of the sonar issue, but refactoring the whole thing might be a better idea

    return Stream.of(readAccessLevel.isAll(),isAccessed1,isAccessed2,isAccessed3,
            isAccessed4,isAccessed5,isAccessed6).anyMatch(Boolean.TRUE::equals);