boolean (@NotNull PsiExpression expression) { PsiType type = expression.getType(); if (type == null || !PsiTypes.booleanType().isAssignableFrom(type)) return false; if (!(expression instanceof PsiMethodCallExpression) && !(expression instanceof PsiReferenceExpression)) return true; PsiElement parent = PsiUtil.skipParenthesizedExprUp(expression.getParent()); if (parent instanceof PsiStatement) return !(parent instanceof PsiReturnStatement); if (parent instanceof PsiPolyadicExpression polyadic) { IElementType tokenType = polyadic.getOperationTokenType(); return tokenType.equals(JavaTokenType.ANDAND) || tokenType.equals(JavaTokenType.OROR) || tokenType.equals(JavaTokenType.AND) || tokenType.equals(JavaTokenType.OR); } if (parent instanceof PsiConditionalExpression conditional) { return PsiTreeUtil.isAncestor(conditional.getCondition(), expression, false); } return PsiUtil.isAccessedForWriting(expression); }