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?

0
正式评论

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.

请先登录再写评论。