diff --git a/java/java-impl-inspections/src/com/intellij/codeInspection/dataFlow/ConstantValueInspection.java b/java/java-impl-inspections/src/com/intellij/codeInspection/dataFlow/ConstantValueInspection.java index 29bbcd23c5e3..08a0b46c4cfc 100644 --- a/java/java-impl-inspections/src/com/intellij/codeInspection/dataFlow/ConstantValueInspection.java +++ b/java/java-impl-inspections/src/com/intellij/codeInspection/dataFlow/ConstantValueInspection.java @@ -1,4 +1,4 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.codeInspection.dataFlow; import com.intellij.codeInsight.daemon.impl.quickfix.SimplifyBooleanExpressionFix; @@ -400,6 +400,13 @@ public final class ConstantValueInspection extends AbstractBaseJavaLocalInspecti ref.set(true); return false; } + if (element instanceof PsiMethodCallExpression methodCallExpression) { + List contracts = JavaMethodContractUtil.getMethodCallContracts(methodCallExpression); + if (ContainerUtil.exists(contracts, contract -> contract.isTrivial() && contract.getReturnValue().isFail())) { + ref.set(true); + return false; + } + } return true; }); return ref.get(); diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/SkipSwitchExpressionWithThrow.java b/java/java-tests/testData/inspection/dataFlow/fixture/SkipSwitchExpressionWithThrow.java index 6297b6690a57..2c3378260a90 100644 --- a/java/java-tests/testData/inspection/dataFlow/fixture/SkipSwitchExpressionWithThrow.java +++ b/java/java-tests/testData/inspection/dataFlow/fixture/SkipSwitchExpressionWithThrow.java @@ -1,3 +1,5 @@ +import org.jetbrains.annotations.Nullable; + class SkipSwitchExpressionWithThrow { static boolean test(int x) { return switch (x) { @@ -7,4 +9,20 @@ class SkipSwitchExpressionWithThrow { default -> throw new IllegalStateException(); }; } + + public enum Foo { + A, B + } + + public static R exception() { + throw new RuntimeException(); + } + + @Nullable + public static Object test2(Foo foo) { + return switch (foo) { + case A -> null; + case B -> exception(); + }; + } } \ No newline at end of file