@Override
  public void invoke(@NotNull final Project project, final Editor editor, final PsiFile file, DataContext dataContext) {
    final SelectionModel selectionModel = editor.getSelectionModel();
    if (!selectionModel.hasSelection()) {
      final int offset = editor.getCaretModel().getOffset();
      Pair<TextRange, List<PsiExpression>> rangeAndExpressions = getExpressionsAndSelectionRange(project, editor, file, offset);
      TextRange suggestedSelection = rangeAndExpressions.getFirst();
      if (suggestedSelection != null) {
        selectionModel.setSelection(suggestedSelection.getStartOffset(), suggestedSelection.getEndOffset());
      }
      else {
        final PsiElement[] statementsInRange = IntroduceVariableUtil.findStatementsAtOffset(editor, file, offset);
        List<PsiExpression> expressions = rangeAndExpressions.getSecond();
        IntroduceTargetChooser.showChooser(editor, expressions,
                                           new Pass<>() {
                                             @Override
                                             public void pass(final PsiExpression selectedValue) {
                                               invoke(project, editor, file, selectedValue.getTextRange().getStartOffset(),
                                                      selectedValue.getTextRange().getEndOffset());
                                             }
                                           },
                                           new PsiExpressionTrimRenderer.RenderFunction(),
                                           RefactoringBundle.message("introduce.target.chooser.expressions.title"),
                                           IntroduceVariableUtil.preferredSelection(statementsInRange, expressions), ScopeHighlighter.NATURAL_RANGER);
        return;
      }
    }
    if (invoke(project, editor, file, selectionModel.getSelectionStart(), selectionModel.getSelectionEnd()) &&
        LookupManager.getActiveLookup(editor) == null) {
      selectionModel.removeSelection();
    }
  }
@Override
  public void invoke(@NotNull final Project project, final Editor editor, final PsiFile file, DataContext dataContext)