@NotNull
  public static BuilderElementHandler getHandlerFor(@NotNull PsiVariable psiVariable, boolean hasSingularAnnotation) {
    if (!hasSingularAnnotation) {
      return new NonSingularHandler();
    }

    final PsiType psiType = psiVariable.getType();
    final String qualifiedName = PsiTypeUtil.getQualifiedName(psiType);
    if (!isInvalidSingularType(qualifiedName)) {
      if (containsOrAnyEndsWith(COLLECTION_TYPES, qualifiedName)) {
        return new SingularCollectionHandler(qualifiedName);
      }
      if (containsOrAnyEndsWith(MAP_TYPES, qualifiedName)) {
        return new SingularMapHandler(qualifiedName);
      }
      if (containsOrAnyEndsWith(GUAVA_COLLECTION_TYPES, qualifiedName)) {
        return new SingularGuavaCollectionHandler(qualifiedName, qualifiedName.contains("Sorted"));
      }
      if (containsOrAnyEndsWith(GUAVA_MAP_TYPES, qualifiedName)) {
        return new SingularGuavaMapHandler(qualifiedName, qualifiedName.contains("Sorted"));
      }
      if (containsOrAnyEndsWith(GUAVA_TABLE_TYPES, qualifiedName)) {
        return new SingularGuavaTableHandler(qualifiedName, false);
      }
    }
    return new EmptyBuilderElementHandler();
  }
@NotNull
  public static BuilderElementHandler getHandlerFor(@NotNull PsiVariable psiVariable, boolean hasSingularAnnotation)