diff --git a/idea/src/org/jetbrains/jet/plugin/util/InfinitePeriodicalTask.java b/idea/src/org/jetbrains/jet/plugin/util/InfinitePeriodicalTask.java index 43a146d505a..50233e0a1f2 100644 --- a/idea/src/org/jetbrains/jet/plugin/util/InfinitePeriodicalTask.java +++ b/idea/src/org/jetbrains/jet/plugin/util/InfinitePeriodicalTask.java @@ -42,13 +42,17 @@ public class InfinitePeriodicalTask { public void run() { myUpdateAlarm.addRequest(this, delay); LongRunningReadTask task = taskProvider.compute(); - task.init(); + + boolean invalidRequest = !task.init(); //noinspection unchecked if (task.shouldStart(currentTask)) { currentTask = task; currentTask.run(); } + else if (invalidRequest) { + currentTask = null; + } } }, delay); diff --git a/idea/src/org/jetbrains/jet/plugin/util/LongRunningReadTask.java b/idea/src/org/jetbrains/jet/plugin/util/LongRunningReadTask.java index 06b28b4bc71..2d7e08c4552 100644 --- a/idea/src/org/jetbrains/jet/plugin/util/LongRunningReadTask.java +++ b/idea/src/org/jetbrains/jet/plugin/util/LongRunningReadTask.java @@ -125,11 +125,18 @@ public abstract class LongRunningReadTask { }); } - public final void init() { + /** + * Executed in GUI Thread. + * + * @return true if new request was successfully created, false if request is invalid and shouldn't be started + */ + public final boolean init() { ApplicationManager.getApplication().assertIsDispatchThread(); requestInfo = prepareRequestInfo(); currentState = State.INITIALIZED; + + return requestInfo != null; } private void resultReady(ResultData resultData) {