private static @Nullable PsiSubstitutor getSuperSubstitutorWithCaching(@NotNull PsiClass superClass,
                                                                         @NotNull PsiClass derivedClass,
                                                                         @NotNull GlobalSearchScope resolveScope,
                                                                         @NotNull PsiSubstitutor derivedSubstitutor) {
    PsiSubstitutor substitutor = ScopedClassHierarchy.getSuperClassSubstitutor(derivedClass, resolveScope, superClass);
    if (substitutor == null) return null;
    if (PsiUtil.isRawSubstitutor(derivedClass, derivedSubstitutor)) return createRawSubstitutor(superClass);

    return composeSubstitutors(derivedSubstitutor, substitutor, superClass);
  }
private static @Nullable PsiSubstitutor getSuperSubstitutorWithCaching(@NotNull PsiClass superClass,
                                                                         @NotNull PsiClass derivedClass,
                                                                         @NotNull GlobalSearchScope resolveScope,
                                                                         @NotNull PsiSubstitutor derivedSubstitutor)