BuilderElementHandler (@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(); }