@Override
  public void addElement(LookupElement element, LookupElementPresentation presentation) {
    boolean shouldSkip = shouldSkip(element);
    presentation.freeze();
    element.putUserData(DEFAULT_PRESENTATION, presentation);
    CompletionSorterImpl sorter = obtainSorter(element);
    ProcessingContext context = createContext();
    Classifier<LookupElement> classifier = myClassifiers.computeIfAbsent(sorter, s -> s.buildClassifier(new EmptyClassifier()));
    classifier.addElement(element, context);

    boolean batchUpdate = Boolean.TRUE.equals(isInBatchUpdate.get());
    if (batchUpdate) {
      synchronized (this) {
        if (shouldSkip) {
          mySkippedItems.add(element);
        }
        batchItems.add(new Pair<>(element, presentation));
      }
    }
    else {
      synchronized (this) {
        if (shouldSkip) {
          mySkippedItems.add(element);
        }
        super.addElement(element, presentation);
      }
      trimToLimit(context);
    }
  }
@Override
  public void addElement(LookupElement element, LookupElementPresentation presentation)