private static boolean collectRecordAssignment(@NotNull VarTracker tracker,
                                                 @Nullable Exprent exprent,
                                                 @NotNull Statement statement) {
    if (!(exprent instanceof AssignmentExprent assignmentExprent)) {
      return false;
    }
    Exprent exprentLeft = assignmentExprent.getLeft();
    if (!(exprentLeft instanceof VarExprent leftVarExprent)) {
      return false;
    }
    Exprent right = assignmentExprent.getRight();
    if (right instanceof VarExprent varExprent) {
      RecordVarExprent reassignedRecord = tracker.getRecord(varExprent);
      if (reassignedRecord == null) {
        return false;
      }
      reassignedRecord.copyFrom(leftVarExprent);
      tracker.put(leftVarExprent, reassignedRecord, statement);
    }
    else if (right instanceof FunctionExprent functionExprent &&
             functionExprent.getFuncType() == FunctionExprent.FUNCTION_CAST &&
             functionExprent.getLstOperands().size() == 2 &&
             functionExprent.getLstOperands().get(1) instanceof ConstExprent constExprent) {
      Exprent varForCast = functionExprent.getLstOperands().get(0);
      RecordVarExprent recordToCast = tracker.getRecord(varForCast);
      if (recordToCast == null) {
        return false;
      }
      if (!recordToCast.getVarType().equals(constExprent.getExprType())) {
        return false;
      }
      recordToCast.copyFrom(leftVarExprent);
      tracker.put(leftVarExprent, recordToCast, statement);
    }
    else {
      return false;
    }
    return true;
  }
private static boolean collectRecordAssignment(@NotNull VarTracker tracker,
                                                 @Nullable Exprent exprent,
                                                 @NotNull Statement statement)