PsiElementVisitor (@NotNull ProblemsHolder holder, boolean isOnTheFly) { if (!PsiUtil.isLanguageLevel8OrHigher(holder.getFile())) { return PsiElementVisitor.EMPTY_VISITOR; } return new JavaElementVisitor() { @Override public void visitConditionalExpression(@NotNull PsiConditionalExpression expression) { super.visitConditionalExpression(expression); PsiExpression condition = PsiUtil.skipParenthesizedExprDown(expression.getCondition()); if (condition == null) return; PsiReferenceExpression optionalRef = extractOptionalFromPresenceCheck(condition); if (optionalRef == null) return; boolean invert = isEmptyCheck(condition); PsiExpression thenExpression = invert ? expression.getElseExpression() : expression.getThenExpression(); PsiExpression elseExpression = invert ? expression.getThenExpression() : expression.getElseExpression(); check(condition, optionalRef, thenExpression, elseExpression); } @Override public void visitIfStatement(@NotNull PsiIfStatement statement) { super.visitIfStatement(statement); PsiExpression condition = PsiUtil.skipParenthesizedExprDown(statement.getCondition()); if (condition == null) return; PsiReferenceExpression optionalRef = extractOptionalFromPresenceCheck(condition); if (optionalRef == null) return; boolean invert = isEmptyCheck(condition); PsiStatement thenStatement = extractThenStatement(statement, invert); PsiStatement elseStatement = extractElseStatement(statement, invert); check(condition, optionalRef, thenStatement, elseStatement); } void check(@NotNull PsiExpression condition, PsiReferenceExpression optionalRef, PsiElement thenElement, PsiElement elseElement) { for (OptionalIsPresentCase scenario : CASES) { scenario.getProblemType(optionalRef, thenElement, elseElement).registerProblem(holder, condition, scenario); } } }; }