@Override
  public void invoke(final @NotNull Project project, Editor editor, final PsiFile file) throws IncorrectOperationException {
    final PsiModifierListOwner owner = AddAnnotationPsiFix.getContainer(file, editor.getCaretModel().getOffset());
    assert owner != null;
    AnnotationPlace place = ExternalAnnotationsManager.getInstance(project).chooseAnnotationsPlaceNoUi(owner);
    if (mySingleAnnotationName != null) {
      getProviderFor(file, owner, mySingleAnnotationName)
        .ifPresent(provider -> provider.createFix(owner, place).invoke(project, editor, file));
      return;
    }
    List<AnnotationProvider> annotations = availableAnnotations(owner, project).collect(Collectors.toList());
    if (annotations.isEmpty()) return;
    JBPopupFactory.getInstance().createListPopup(
      new BaseListPopupStep<>(JavaBundle.message("annotate.intention.chooser.title"), annotations) {
        @Override
        public PopupStep<?> onChosen(final AnnotationProvider selectedValue, final boolean finalChoice) {
          return doFinalStep(() -> ReadAction.nonBlocking(() -> selectedValue.createFix(owner, place))
                .finishOnUiThread(ModalityState.current(), fix -> fix.invoke(project, editor, file))
                .submit(AppExecutorUtil.getAppExecutorService()));
        }

        @Override
        public boolean isSpeedSearchEnabled() {
          return true;
        }

        @Override
        public @NotNull String getTextFor(final AnnotationProvider value) {
          return value.getName(project);
        }
      }).showInBestPositionFor(editor);
  }
@Override
  public void invoke(final @NotNull Project project, Editor editor, final PsiFile file)