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 411cc3d5720a..f53181ad8e54 100644 --- a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java @@ -387,9 +387,10 @@ public class BuildManager implements ApplicationComponent{ } public void clearState(Project project) { - cancelPreloadedBuilds(project); - final String projectPath = getProjectPath(project); + + cancelPreloadedBuilds(projectPath); + synchronized (myProjectDataMap) { final ProjectData data = myProjectDataMap.get(projectPath); if (data != null) { @@ -544,8 +545,7 @@ public class BuildManager implements ApplicationComponent{ return futures; } - private void cancelPreloadedBuilds(Project project) { - final String projectPath = getProjectPath(project); + private void cancelPreloadedBuilds(final String projectPath) { runCommand(new Runnable() { @Override public void run() { @@ -632,12 +632,7 @@ public class BuildManager implements ApplicationComponent{ sessionId = UUID.randomUUID(); } - final RequestFuture future = usingPreloadedProcess? preloadedFuture : new RequestFuture(handler, sessionId, new RequestFuture.CancelAction() { - @Override - public void cancel(RequestFuture future) throws Exception { - myMessageDispatcher.cancelSession(future.getRequestID()); - } - }); + final RequestFuture future = usingPreloadedProcess? preloadedFuture : new RequestFuture(handler, sessionId, new CancelBuildSessionAction()); _future.setDelegate(future); if (!usingPreloadedProcess && (future.isCancelled() || project.isDisposed())) { @@ -833,12 +828,7 @@ public class BuildManager implements ApplicationComponent{ // launching build process from projectTaskQueue ensures that no other build process for this project is currently running return projectTaskQueue.submit(new Callable, OSProcessHandler>>() { public Pair, OSProcessHandler> call() throws Exception { - final RequestFuture future = new RequestFuture(new PreloadedProcessMessageHandler(project), UUID.randomUUID(), new RequestFuture.CancelAction() { - @Override - public void cancel(RequestFuture future) throws Exception { - myMessageDispatcher.cancelSession(future.getRequestID()); - } - }); + final RequestFuture future = new RequestFuture(new PreloadedProcessMessageHandler(), UUID.randomUUID(), new CancelBuildSessionAction()); try { myMessageDispatcher.registerBuildMessageHandler(future, null); final OSProcessHandler processHandler = launchBuildProcess(project, myListenPort, future.getRequestID(), true); @@ -1349,6 +1339,7 @@ public class BuildManager implements ApplicationComponent{ Disposer.register(project, new Disposable() { @Override public void dispose() { + cancelPreloadedBuilds(projectPath); myProjectDataMap.remove(projectPath); } }); @@ -1368,7 +1359,7 @@ public class BuildManager implements ApplicationComponent{ @Override public void projectClosing(Project project) { - cancelPreloadedBuilds(project); + cancelPreloadedBuilds(getProjectPath(project)); for (TaskFuture future : cancelAutoMakeTasks(project)) { future.waitFor(500, TimeUnit.MILLISECONDS); } @@ -1613,4 +1604,10 @@ public class BuildManager implements ApplicationComponent{ } } + private class CancelBuildSessionAction implements RequestFuture.CancelAction { + @Override + public void cancel(RequestFuture future) throws Exception { + myMessageDispatcher.cancelSession(future.getRequestID()); + } + } } diff --git a/java/compiler/impl/src/com/intellij/compiler/server/PreloadedProcessMessageHandler.java b/java/compiler/impl/src/com/intellij/compiler/server/PreloadedProcessMessageHandler.java index 5a8c3e28a1c6..2a328caabe22 100644 --- a/java/compiler/impl/src/com/intellij/compiler/server/PreloadedProcessMessageHandler.java +++ b/java/compiler/impl/src/com/intellij/compiler/server/PreloadedProcessMessageHandler.java @@ -15,25 +15,14 @@ */ package com.intellij.compiler.server; -import com.intellij.openapi.project.Project; -import org.jetbrains.annotations.NotNull; - /** * @author Eugene Zhuravlev * Date: 20-Oct-14 */ class PreloadedProcessMessageHandler extends DelegatingMessageHandler { - @NotNull - private final Project myProject; private volatile BuilderMessageHandler myDelegateHandler; - public PreloadedProcessMessageHandler(@NotNull Project project) { - myProject = project; - } - - @NotNull - public Project getProject() { - return myProject; + public PreloadedProcessMessageHandler() { } @Override