private void mergeVariableTypes(DfaMemoryStateImpl other) {
    Set<DfaVariableValue> vars = StreamEx.of(myVariableTypes, other.myVariableTypes).toFlatCollection(Map::keySet, HashSet::new);
    for (DfaVariableValue var : vars) {
      DfType type = getDfType(var);
      DfType otherType = other.getDfType(var);
      DfType result;
      if (!type.equals(otherType)) {
        result = type.join(otherType).correctTypeOnFlush(type).correctTypeOnFlush(otherType);
      } else {
        result = type;
      }
      recordVariableType(var, result);
    }
  }
private void mergeVariableTypes(DfaMemoryStateImpl other)