package com.puppycrawl.tools.checkstyle.checks.metrics; // Advise: for lack of ambiguity try to make all factors prime numbers public class InputNPathComplexity { //NP = 5 void testIfWithExpression() { // NP = (if-range=1) + 1 + (expr=3) = 5 if (true && true || (true || true)) { } } //NP = 5 void testIfElseWithExpression() { // NP = (if-range=1) + (else-range=1) + (expr=3) = 5 if (true && true || (true || true)) { } else { } } //NP = 4 int testSimpleSwitch() { int a = 0; // NP = (case-range[1]=1) + (case-range[2]=1) + (case-range[3]=1) // + (default-range=1) + (expr=0) = 4 switch(a) { case 1: break; case 2: case 3: break; } return a; } //NP = 4 void testSimpleSwitchWithDefault() { int a = 0; // NP = (case-range[1]=1) + (case-range[2]=1) + (case-range[3]=1) // + (default-range=1) + (expr=0) = 4 switch(a) { case 1: break; case 2: case 3: break; default: break; } } //NP = 6 void testSwitchWithExpression() { int a = 0; // NP = (case-range[1]=1) + (case-range[2]=1) + (case-range[3]=1) // + (default-range=1) + (expr=2) = 6 switch(true ? a : a) { case 1: break; case 2: case 3: break; default: break; } } //NP = 15 void testComplexSwitch() { int a = 0; // NP = (case-range[1]=2) + (case-range[2]=5*2) + (case-range[3]=2) // + (default-range=1) + (expr=0) = 15 switch(a) { case 1: // NP(case-range) = (if-range=1) + 1 + (expr=0) = 2 if (true) { } break; case 2: // NP(case-range) = (if-range=1) + (else-range=1) + (expr=3) = 5 if (true && true || (true || true)) { } else { } // NP(case-range) = (if-range=1) + 1 + (expr=0) = 2 if (true) { } case 3: // NP(case-range) = (if-range=1) + 1 + (expr=0) = 2 if (true) { } break; default: break; } } // NP = 11 void testComplexIfElse() { // NP = (if-range=1) + (else-range=9) + (expr=1) = 11 if (true && true) { } // NP(else-range) = (if-range=1) + (else-range=6) + (expr=2) = 9 else if (true || true || true) { } // NP(else-range) = (if-range=1) + 1 + (expr=4) = 6 else if (true && true && true || true || true) { } } // NP = 8 boolean testComplexReturn() { // NP = (if-range=3) + (else-range=4) + (expr=1) = 8 if (true && true) { // NP(if-range) = 3 return true && true || (true && true); } else { // NP(else-range) = (expr(1)=0) + (expr(2)=1) + (expr(3)=1) + 2 = 4 return true ? true && true : true || true; } } // NP = (for-statement[1]=2) * (for-statement[2]=3) // * (for-statement[3]=4) * (for-statement[4]=5) = 120 void testForCyclesComplex() { // NP(for-statement) = (for-range=1) + (expr(1)=0) + (expr(2)=0) + (expr(3)=0) + 1 = 2 for (int i = 0; i < 10; i++); // NP(for-statement) = (for-range=1) + (expr(1)=0) + (expr(2)=1) + (expr(3)=0) + 1 = 3 for (int i = 0; i < 10 && true; i++); // NP(for-statement) = (for-range=1) + (expr(1)=2) + (expr(2)=0) + (expr(3)=0) + 1 = 4 for (int i = true ? 0 : 0; i < 10; i++); // NP(for-statement) = (for-range=1) + (expr(1)=0) + (expr(2)=1+2) + (expr(3)=0) + 1 = 5 for (int i = 0; true ? i < 10 : true || true; i++); } // NP = (while-statement[1]=2) * (while-statement[2]=3) = 6 boolean testWhileCyclesComplex() { int a = 0; // NP(while-statement) = (while-range=1) + (expr=0) + 1 = 2 while (a != 0) { } // NP(while-statement) = (while-range=1) + (expr=1) + 1 = 3 while (a != 0 && a == 0) { return a == 0 || a == 0; } return true; } // NP = (do-statement[1]=6) * (do-statement[2]=3) = 21 void testDoWhileCyclesComplex() { int a = 0; // NP(do-statement) = (do-range=1) + (expr=1) + 1 = 3 do { } while (a < 10 && true); // NP(do-statement) = // (do-range=3) + ((expr(1)=0) + (expr(2)=0) + (expr(3)=1) + 2) + 1 = 7 do { // NP(do-range) = (do-range=1) + (expr=1) + 1 = 3 do { } while (a < 10 || true); } while (true ? a > 10 : (a < 10 || true)); } // NP = (question-statement[1]=5) * (question-statement[2]=7) = 35 void testComplexTernaryOperator() { // NP(question-statement) = (expr(1)=0) + (expr(2)=2) + (expr(3)=1+2) + 2 = 7 boolean a = true ? (true ? true : true) : (false ? (true || false) : true); // NP(question-statement) = (expr(1)=0) + (expr(2)=2) + (expr(3)=1) + 2 = 5; boolean b = true ? (true ? true : true) : true || true; } // NP = (if-expression[1]=5) * (if-expression[2]=5) = 25 void testSimpleTernaryBadFormatting() { // NP(if-expression) = (if-range=2) + 1 + (expr=2) = 5 if( true ? true : true ) { boolean a = true ? true : true; } // NP(if-expression) = (if-range=2) + 1 + (expr=2) = 5 if( true ? true : true) { boolean b = true ? true : true; } } //Calculation for try-catch is wrong now //See issue #3814 https://github.com/checkstyle/checkstyle/issues/3814 void testTryCatch() { try { } catch (Exception e) { } } }