@Override
  public void visitTupleAssignmentExpression(@NotNull GrTupleAssignmentExpression expression) {
    super.visitTupleAssignmentExpression(expression); // visitExpression

    GrExpression initializer = expression.getRValue();
    if (initializer == null) return;

    GrTuple tupleExpression = expression.getLValue();
    GrExpression[] lValues = tupleExpression.getExpressions();
    if (initializer instanceof GrListOrMap) {
      GrExpression[] initializers = ((GrListOrMap)initializer).getInitializers();
      for (int i = 0; i < lValues.length; i++) {
        GrExpression lValue = lValues[i];
        if (initializers.length <= i) break;
        GrExpression rValue = initializers[i];
        processAssignmentWithinMultipleAssignment(lValue.getType(), rValue.getType(), rValue);
      }
    }
    else {
      MultiAssignmentTypes multiAssignmentTypes = getMultiAssignmentTypes(initializer);
      if (multiAssignmentTypes == null) {
        return;
      }
      for (int position = 0; position < lValues.length; position++) {
        PsiType rType = multiAssignmentTypes.getComponentType(position);
        GrExpression lValue = lValues[position];
        // For assignments with spread dot
        if (PsiImplUtil.isSpreadAssignment(lValue)) {
          if (rType != null) {
            PsiType lType = lValue.getNominalType();
            final PsiType argType = extractIterableTypeParameter(lType, false);
            if (argType != null) {
              processAssignment(argType, rType, tupleExpression, getExpressionPartToHighlight(lValue));
            }
          }
          return;
        }
        if (lValue instanceof GrReferenceExpression && ((GrReferenceExpression)lValue).resolve() instanceof GrReferenceExpression) {
          //lvalue is not-declared variable
          return;
        }

        if (rType != null) {
          PsiType lType = lValue.getNominalType();
          if (lType != null) {
            processAssignment(lType, rType, tupleExpression, getExpressionPartToHighlight(lValue));
          }
        }
      }
    }
  }
@Override
  public void visitTupleAssignmentExpression(@NotNull GrTupleAssignmentExpression expression)