mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
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:
committed by
intellij-monorepo-bot
parent
9c2ff93194
commit
f26681a212
+2
-2
@@ -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;
|
||||
}
|
||||
}
|
||||
+3
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user