private PsiType composeBound(InferenceVariable variable,
                               InferenceBound boundType,
                               Function<? super Pair<PsiType, PsiType>, ? extends PsiType> fun,
                               PsiSubstitutor substitutor) {
    return composeBound(variable, boundType, fun, substitutor, false);
  }
private PsiType composeBound(InferenceVariable variable,
                               InferenceBound boundType,
                               Function<? super Pair<PsiType, PsiType>, ? extends PsiType> fun,
                               PsiSubstitutor substitutor)