diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/metrics/BooleanExpressionComplexityCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/metrics/BooleanExpressionComplexityCheck.java index 19c3c48d7..16b41658d 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/metrics/BooleanExpressionComplexityCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/metrics/BooleanExpressionComplexityCheck.java @@ -125,10 +125,14 @@ public final class BooleanExpressionComplexityCheck extends Check case TokenTypes.EXPR: visitExpr(); break; + case TokenTypes.BOR: + if (!isPipeOperator(ast)) { + context.visitBooleanOperator(); + } + break; case TokenTypes.LAND: case TokenTypes.BAND: case TokenTypes.LOR: - case TokenTypes.BOR: case TokenTypes.BXOR: context.visitBooleanOperator(); break; @@ -137,6 +141,19 @@ public final class BooleanExpressionComplexityCheck extends Check } } + /** + * Checks if {@link TokenTypes#BOR binary OR} is applied to exceptions + * in + * + * multi-catch (pipe-syntax). + * @param binaryOr {@link TokenTypes#BOR binary or} + * @return true if binary or is applied to exceptions in multi-catch. + */ + private static boolean isPipeOperator(DetailAST binaryOr) + { + return binaryOr.getParent().getType() == TokenTypes.TYPE; + } + @Override public void leaveToken(DetailAST ast) { diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/metrics/BooleanExpressionComplexityCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/metrics/BooleanExpressionComplexityCheckTest.java index 60af6b44c..0749b910d 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/metrics/BooleanExpressionComplexityCheckTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/metrics/BooleanExpressionComplexityCheckTest.java @@ -55,4 +55,16 @@ public class BooleanExpressionComplexityCheckTest extends BaseCheckTestSupport verify(checkConfig, getPath("metrics" + File.separator + "BooleanExpressionComplexityCheckTestInput.java"), expected); } + + @Test + public void testNPE() throws Exception + { + DefaultConfiguration checkConfig = + createCheckConfig(BooleanExpressionComplexityCheck.class); + + String[] expected = { + }; + + verify(checkConfig, getPath("metrics" + File.separator + "InputBooleanExpressionComplexityNPE.java"), expected); + } } diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/metrics/InputBooleanExpressionComplexityNPE.java b/src/test/resources/com/puppycrawl/tools/checkstyle/metrics/InputBooleanExpressionComplexityNPE.java new file mode 100644 index 000000000..6ca72ffe7 --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/metrics/InputBooleanExpressionComplexityNPE.java @@ -0,0 +1,12 @@ +package com.puppycrawl.tools.checkstyle.metrics; + +public class InputBooleanExpressionComplexityNPE +{ + static { + try { + System.out.println("a"); + } catch (IllegalStateException | IllegalArgumentException e) { + throw new RuntimeException(e); + } + } +}