diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/OptionalGetWithoutIsPresentInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/OptionalGetWithoutIsPresentInspection.java index d5e3601e1a56..0d27eee4995c 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/OptionalGetWithoutIsPresentInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/OptionalGetWithoutIsPresentInspection.java @@ -151,6 +151,12 @@ public class OptionalGetWithoutIsPresentInspection extends BaseInspection { PsiElement parent = PsiTreeUtil.getParentOfType(context, PsiIfStatement.class, PsiWhileStatement.class, PsiConditionalExpression.class, PsiPolyadicExpression.class); while (parent != null) { + if (parent instanceof PsiPolyadicExpression) { + final PsiPolyadicExpression polyadicExpression = (PsiPolyadicExpression)parent; + if (JavaTokenType.OROR.equals(polyadicExpression.getOperationTokenType())) { + checker.negate = true; + } + } parent.accept(checker); if (checker.hasIsPresentCall()) { return true; @@ -180,9 +186,7 @@ public class OptionalGetWithoutIsPresentInspection extends BaseInspection { @Override public void visitPolyadicExpression(PsiPolyadicExpression expression) { final IElementType tokenType = expression.getOperationTokenType(); - if (tokenType == JavaTokenType.OROR) { - negate = !negate; - } else if (tokenType != JavaTokenType.ANDAND) { + if (tokenType != JavaTokenType.ANDAND && tokenType != JavaTokenType.OROR) { return; } for (PsiExpression operand : expression.getOperands()) { diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/bugs/OptionalGetWithoutIsPresentInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/bugs/OptionalGetWithoutIsPresentInspectionTest.java index c8f1db0b7345..ae19a64f0f8b 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/bugs/OptionalGetWithoutIsPresentInspectionTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/bugs/OptionalGetWithoutIsPresentInspectionTest.java @@ -79,6 +79,37 @@ public class OptionalGetWithoutIsPresentInspectionTest extends LightInspectionTe "}"); } + public void testPolyadicExpression1() { + doTest("import java.util.Optional;" + + "class X {" + + " public void demo(Optional value) {\n" + + " boolean flag = value.isPresent() && \"Yes\".equals(value.get());\n" + + " }" + + "}"); + } + + public void testPolyadicExpression2() { + doTest("import java.util.Optional;" + + "class X {" + + " boolean m(Optional o) {" + + " return !o.isPresent() || o.get().equals(\"j\");" + + " }" + + "}"); + } + + public void testPolyadicExpression3() { + doTest("import java.util.Optional;" + + "class X {" + + " String g() {" + + " Optional o = Optional.empty();" + + " if(o == null || !o.isPresent()) {" + + " return \"\";" + + " }" + + " return o.get();" + + " }" + + "}"); + } + public void testOptionalGetWithoutIsPresent() { doTest(); }