From 09cd61e37dea3442c1cc2790fa2bc7563bf859d9 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Thu, 16 Jun 2016 12:34:48 +0200 Subject: [PATCH] automake scheduling policy: when doc save is scheduled, cancel pending automake tasks too --- .../com/intellij/compiler/server/BuildManager.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java index 7fdb400cc0ef..67f9a73663a0 100644 --- a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java @@ -303,7 +303,10 @@ public class BuildManager implements Disposable { EditorFactory.getInstance().getEventMulticaster().addDocumentListener(new DocumentAdapter() { @Override public void documentChanged(DocumentEvent e) { - scheduleProjectSave(); + final VirtualFile file = FileDocumentManager.getInstance().getFile(e.getDocument()); + if (file != null && file.isInLocalFileSystem()) { + scheduleProjectSave(); + } } }); @@ -452,6 +455,7 @@ public class BuildManager implements Disposable { private void scheduleProjectSave() { if (!IS_UNIT_TEST_MODE && !PowerSaveMode.isEnabled()) { + myAutoMakeTask.cancelPendingExecution(); myDocumentSaveTask.schedule(); } } @@ -1333,7 +1337,7 @@ public class BuildManager implements Disposable { } private abstract static class BuildManagerPeriodicTask implements Runnable { - private final Alarm myAlarm = new Alarm(Alarm.ThreadToUse.SHARED_THREAD); + private final Alarm myAlarm = new Alarm(Alarm.ThreadToUse.POOLED_THREAD); private final AtomicBoolean myInProgress = new AtomicBoolean(false); private final Runnable myTaskRunnable = () -> { try { @@ -1345,11 +1349,15 @@ public class BuildManager implements Disposable { }; public final void schedule() { - myAlarm.cancelAllRequests(); + cancelPendingExecution(); final int delay = Math.max(100, getDelay()); myAlarm.addRequest(this, delay); } + public void cancelPendingExecution() { + myAlarm.cancelAllRequests(); + } + protected abstract int getDelay(); protected abstract void runTask();