boolean (final char charTyped, Project project, final Editor originalEditor, final Editor editor, PsiFile file) { final LookupImpl lookup = (LookupImpl)LookupManager.getActiveLookup(originalEditor); if (lookup == null){ return false; } if (charTyped == ' ' && ChooseItemAction.hasTemplatePrefix(lookup, TemplateSettings.SPACE_CHAR)) { return false; } final CharFilter.Result result = getLookupAction(charTyped, lookup); if (lookup.isLookupDisposed()) { return false; } if (result == CharFilter.Result.ADD_TO_PREFIX) { Document document = editor.getDocument(); long modificationStamp = document.getModificationStamp(); if (!lookup.performGuardedChange(() -> { lookup.fireBeforeAppendPrefix(charTyped); EditorModificationUtil.typeInStringAtCaretHonorMultipleCarets(originalEditor, String.valueOf(charTyped), true); })) { return true; } lookup.appendPrefix(charTyped); if (lookup.isStartCompletionWhenNothingMatches() && lookup.getItems().isEmpty()) { final CompletionProgressIndicator completion = CompletionServiceImpl.getCurrentCompletionProgressIndicator(); if (completion != null) { completion.scheduleRestart(); } else { AutoPopupController.getInstance(editor.getProject()).scheduleAutoPopup(editor); } } originalEditor.getCaretModel().runForEachCaret(caret -> { DataContext context = DataManager.getInstance().getDataContext(originalEditor.getContentComponent()); AutoHardWrapHandler.getInstance().wrapLineIfNecessary(originalEditor, context, modificationStamp); }); final CompletionProgressIndicator completion = CompletionServiceImpl.getCurrentCompletionProgressIndicator(); if (completion != null) { completion.prefixUpdated(); } return true; } if (result == CharFilter.Result.SELECT_ITEM_AND_FINISH_LOOKUP && lookup.isFocused()) { LookupElement item = lookup.getCurrentItem(); if (item != null) { if (completeTillTypedCharOccurrence(charTyped, lookup, item)) { return true; } FeatureUsageTracker.getInstance().triggerFeatureUsed(CodeCompletionFeatures.EDITING_COMPLETION_FINISH_BY_DOT_ETC); lookup.finishLookupInWritableFile(charTyped, item); return true; } } lookup.putUserData(CANCELLATION_CHAR, charTyped); lookup.hideLookup(false); TypedHandler.autoPopupCompletion(editor, charTyped, project, file); return false; }