@Override
    public Object @NotNull [] getVariants() {
      final List<LookupElement> variants = Collections.synchronizedList(new SmartList<>());
      processCandidates(extension -> {

        final GenericAttributeValue<String> id = extension.getId();
        if (id == null || extension.getXmlElement() == null) return true;

        final String value = id.getStringValue();
        if (value == null) return true;

        final String toolwindowId = getAttributeValue(extension, "toolWindowId");
        final String displayType = getAttributeValue(extension, "displayType");
        final String logByDefault = getAttributeValue(extension, "isLogByDefault");
        Icon logIcon = !"false".equals(logByDefault) ? AllIcons.Ide.Notification.NoEvents : null;

        variants.add(LookupElementBuilder.create(extension.getXmlElement(), value)
                       .withTailText(toolwindowId != null ? " (" + toolwindowId + ")" : "")
                       .withTypeText(displayType, logIcon, false)
                       .withTypeIconRightAligned(true));
        return true;
      });
      return variants.toArray(LookupElement.EMPTY_ARRAY);
    }
@Override
    public Object @NotNull [] getVariants()