IDEA-391061 [java-inspections] Wrong "Null check can be eliminated" in ternary expression with Optional.orElse

(cherry picked from commit 981d5220655ad40e0ee687528bc8e658230ad64d)

IJ-CR-211319

GitOrigin-RevId: 8cd81496b1e49802e669c541af701825caed3c0a
This commit is contained in:
Tagir Valeev
2026-07-01 20:19:17 +00:00
committed by intellij-monorepo-bot
parent 9c2ff93194
commit f26681a212
3 changed files with 27 additions and 2 deletions
@@ -45,6 +45,7 @@ import com.intellij.psi.util.PsiExpressionTrimRenderer;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.refactoring.util.LambdaRefactoringUtil;
import com.intellij.util.ObjectUtils;
import com.intellij.util.containers.ContainerUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.callMatcher.CallHandler;
@@ -554,8 +555,7 @@ public final class SimplifyOptionalCallChainsInspection extends AbstractBaseJava
public @Nullable Context extractContext(@NotNull Project project, @NotNull PsiMethodCallExpression call) {
PsiExpression falseArg = getOrElseArgument(call, myType);
if (!ExpressionUtils.isNullLiteral(falseArg)) return null;
PsiLocalVariable returnVar = PsiTreeUtil.getParentOfType(call, PsiLocalVariable.class, true);
if (returnVar == null) return null;
if (!(PsiUtil.skipParenthesizedExprUp(call.getParent()) instanceof PsiLocalVariable returnVar)) return null;
PsiStatement nextStatement =
tryCast(PsiTreeUtil.skipWhitespacesForward(returnVar.getParent()), PsiStatement.class);
if (nextStatement == null) return null;
@@ -0,0 +1,22 @@
// "Replace null check with orElse("")" "false"
import java.util.Optional;
class Test {
public static final class Example {
private final Optional<String> optional;
public Example(Optional<String> optional) { this.optional = optional; }
public static Example get() {
return null;
}
public Optional<String> optional() { return optional; }
}
public static String test() {
Example example = Example.get();
String value = example == null ? null : example.optional().<caret>orElse(null);
return value == null ? "" : value;
}
}
@@ -20,9 +20,12 @@ import com.intellij.codeInspection.LocalInspectionTool;
import com.intellij.codeInspection.SimplifyOptionalCallChainsInspection;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.testFramework.IdeaTestUtil;
import com.intellij.testFramework.LightProjectDescriptor;
import com.intellij.testFramework.PsiTestUtil;
import org.jetbrains.annotations.NotNull;
import static com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase.JAVA_21;
public class SimplifyOptionalCallChainsInspectionTest extends LightQuickFixParameterizedTestCase {
@Override
protected Sdk getProjectJDK() {