@Nullable
  private static ChainSearchTarget create(PsiClassType classType) {
    PsiClass resolvedClass = PsiUtil.resolveClassInClassTypeOnly(classType);
    if (resolvedClass == null) return null;
    byte iteratorKind = SignatureData.ZERO_DIM;
    String iteratorClass = getIteratorKind(resolvedClass);
    if (iteratorClass != null) {
      resolvedClass = PsiUtil.resolveClassInClassTypeOnly(PsiUtil.substituteTypeParameter(classType, iteratorClass, 0, false));
      if (resolvedClass == null) return null;
      iteratorKind = SignatureData.ITERATOR_ONE_DIM;
    }
    if (resolvedClass.hasTypeParameters() ||
        resolvedClass instanceof PsiTypeParameter ||
        AnnotationUtil.isAnnotated(resolvedClass, CommonClassNames.JAVA_LANG_FUNCTIONAL_INTERFACE, CHECK_EXTERNAL)) {
      return null;
    }
    String packageName = JavaHierarchyUtil.getPackageName(resolvedClass);
    if (packageName == null || EXCLUDED_PACKAGES.contains(packageName)) {
      return null;
    }

    String classQName = resolvedClass.getQualifiedName();
    if (classQName == null) {
      return null;
    }
    return new ChainSearchTarget(classQName, new byte[] {iteratorKind}, classType);
  }
@Nullable
  private static ChainSearchTarget create(PsiClassType classType)