@Override
  public PsiType visitClassType(@NotNull PsiClassType classType) {
    if (!myVisited.add(classType)) return classType;
    final PsiClassType.ClassResolveResult classResolveResult = classType.resolveGenerics();
    final PsiClass psiClass = classResolveResult.getElement();
    final PsiSubstitutor substitutor = classResolveResult.getSubstitutor();
    if (psiClass == null) return classType;
    return new PsiImmediateClassType(psiClass, recapture(substitutor));
  }
@Override
  public PsiType visitClassType(@NotNull PsiClassType classType)