@Override
      public Boolean visitClassType(@NotNull PsiClassType classType) {
        final InferenceVariable inferenceVariable = fun.fun(classType);
        if (inferenceVariable != null) {
          if (dependencies != null) {
            dependencies.add(inferenceVariable);
            return true;
          }
          return false;
        }
        PsiClassType.ClassResolveResult result = classType.resolveGenerics();
        PsiClass aClass = result.getElement();
        if (aClass != null) {
          PsiSubstitutor substitutor = result.getSubstitutor();
          for (PsiTypeParameter typeParameter : PsiUtil.typeParametersIterable(aClass)) {
            PsiType psiType = substitutor.substitute(typeParameter);
            if (psiType != null && !psiType.accept(this)) return false;
          }
        }
        return true;
      }
@Override
      public Boolean visitClassType(@NotNull PsiClassType classType)