DfaNullability (@NotNull DfaNullability right) { if (this == NOT_NULL) { return right == NULL ? null : NOT_NULL; } if (right == NOT_NULL) { return this == NULL ? null : NOT_NULL; } if (this == UNKNOWN) return right; if (right == UNKNOWN) return this; if (this == FLUSHED && toNullability(right) == Nullability.NULLABLE || right == FLUSHED && toNullability(this) == Nullability.NULLABLE) { return NULLABLE; } return equals(right) ? this : null; }