@Override
  public @Nullable DfType tryJoinExactly(@NotNull DfType other) {
    if (other == DfType.BOTTOM) return this;
    if (other == DfType.TOP) return other;
    if (other instanceof DfEphemeralReferenceType) {
      TypeConstraint otherConstraint = ((DfEphemeralReferenceType)other).getConstraint();
      TypeConstraint constraint = myTypeConstraint.tryJoinExactly(otherConstraint);
      return constraint == null ? null :
             constraint == myTypeConstraint ? this :
             constraint == otherConstraint ? other :
             new DfEphemeralReferenceType(constraint);
    }
    return null;
  }
@Override
  public @Nullable DfType tryJoinExactly(@NotNull DfType other)