void (@NotNull PsiPolyadicExpression expression) { super.visitPolyadicExpression(expression); final PsiExpression[] operands = expression.getOperands(); if (operands.length == 0) return; final IElementType operationTokenType = expression.getOperationTokenType(); PsiExpression lOperand = operands[0]; TypeView left = new TypeView(lOperand); for(int i = 1; i < operands.length; i++) { final PsiExpression rOperand = operands[i]; if (rOperand == null) return; final TypeView right = new TypeView(rOperand); if (tryFindConversionIfOperandIsNull(left, right, rOperand)) continue; if (tryFindConversionIfOperandIsNull(right, left, lOperand)) continue; if (!TypeConversionUtil.isBinaryOperatorApplicable(operationTokenType, left.getType(), right.getType(), false)) { if (left.isChanged()) { findConversionOrFail(lOperand, lOperand, left.getTypePair()); } if (right.isChanged()) { findConversionOrFail(rOperand, rOperand, right.getTypePair()); } } lOperand = rOperand; left = right; } }