Я хотел бы отобразить индикатор выполнения при запуске пользовательского IntentionAction
в моем пользовательском плагине IntellIJ IDEA.
Однако, это не отображается независимо от того, что я делаю. Чтобы проверить, заключается ли проблема в IntentionAction
, я скопировал и вставил код в простую реализацию AnAction
. Весь класс выглядит так:
public class HelloAction extends AnAction {
public HelloAction() {
super("Hello");
}
public void actionPerformed(AnActionEvent event) {
Project project = event.getData(CommonDataKeys.PROJECT);
ProgressManager.getInstance().run(new Task.Modal(project, "daf", false) {
public void run(ProgressIndicator indicator) {
indicator.setText("This is how you update the indicator");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {}
indicator.setFraction(0.5); // halfway done
try {
Thread.sleep(2000);
} catch (InterruptedException e) {}
}
});
Messages.showMessageDialog(project, "Hello world!", "Greeting", Messages.getInformationIcon());
}
}
И это прекрасно работает. И когда я использую тот же код внутри IntentionAction
, ничего не отображается.
public class GenerateIntentionAction extends PsiElementBaseIntentionAction implements IntentionAction {
...
public void invoke(@NotNull Project project, Editor editor, @NotNull PsiElement element) throws IncorrectOperationException {
ProgressManager.getInstance().run(new Task.Modal(project, "daf", false) {
public void run(ProgressIndicator indicator) {
indicator.setText("This is how you update the indicator");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {}
indicator.setFraction(0.5); // halfway done
try {
Thread.sleep(2000);
} catch (InterruptedException e) {}
}
});
Я попытался запустить вызов runWithProgressSynchronously
вместо run
, попытался сделать Task
Modal
и Backgroundable
- безрезультатно. Я не знаю, что не так, кроме того, что ProgressIndicator
внутри IntentionAction
всегда EmptyProgressIndicator