How to revert the state when lookup canceled?
I implemented a code chooser use `com.intellij.codeInsight.lookup.Lookup`:
public class ReplaceAction extends EditorAction {
public ReplaceAction() { super(new Handler()); }
@Override
public void update(Editor editor, Presentation presentation, DataContext dataContext) {
super.update(editor, presentation, dataContext);
}
private static class Handler extends EditorActionHandler {
@Override
public void doExecute(final Editor editor, @Nullable Caret caret, DataContext dataContext) {
if (!editor.getSelectionModel().hasSelection(true) || editor.getProject() == null) {
return;
}
LookupElement[] items = new LookupElement[10];
for (int i = 0; i < items.length; i++) {
items[i] = LookupElementBuilder.create("lookup item " + i);
}
final LookupEx lookup = LookupManager.getInstance(editor.getProject()).showLookup(editor, items);
if (lookup != null) {
lookup.addLookupListener(new LookupAdapter() {
@Override
public void lookupCanceled(LookupEvent event) {
// TODO Reverts to the state before modification.
}
});
}
}
@Override
protected boolean isEnabledForCaret(@NotNull Editor editor, @NotNull Caret caret, DataContext dataContext) {
return editor.getSelectionModel().hasSelection(true);
}
}
}

How to revert the state in the `lookupCanceled(LookupEvent )` method?
请先登录再写评论。
It depends on which state you mean. Basically, you just remember the parts relevant to you and restore them. The code in com.intellij.codeInsight.completion.CodeCompletionHandlerBase#rememberDocumentState might provide an example.