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 996225f83c71..b0a49698baba 100644 --- a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java @@ -500,11 +500,38 @@ public class BuildManager implements ApplicationComponent{ final Project project, final boolean isRebuild, final boolean isMake, final boolean onlyCheckUpToDate, final List scopes, final Collection paths, - final Map userData, final DefaultMessageHandler handler) { + final Map userData, final DefaultMessageHandler messageHandler) { final String projectPath = getProjectPath(project); final UUID sessionId = UUID.randomUUID(); + final boolean isAutomake = messageHandler instanceof AutoMakeMessageHandler; + final BuilderMessageHandler handler = new MessageHandlerWrapper(messageHandler) { + @Override + public void buildStarted(UUID sessionId) { + super.buildStarted(sessionId); + try { + ApplicationManager.getApplication().getMessageBus().syncPublisher(BuildManagerListener.TOPIC).buildStarted(project, sessionId, isAutomake); + } + catch (Throwable e) { + LOG.error(e); + } + } + @Override + public void sessionTerminated(UUID sessionId) { + try { + super.sessionTerminated(sessionId); + } + finally { + try { + ApplicationManager.getApplication().getMessageBus().syncPublisher(BuildManagerListener.TOPIC).buildFinished(project, sessionId, isAutomake); + } + catch (Throwable e) { + LOG.error(e); + } + } + } + }; // ensure server is listening if (myListenPort < 0) { try { @@ -578,7 +605,7 @@ public class BuildManager implements ApplicationComponent{ userData, globals, currentFSChanges); } - myMessageDispatcher.registerBuildMessageHandler(sessionId, new BuilderMessageHandlerWrapper(handler) { + myMessageDispatcher.registerBuildMessageHandler(sessionId, new MessageHandlerWrapper(handler) { @Override public void sessionTerminated(UUID sessionId) { try { @@ -981,34 +1008,6 @@ public class BuildManager implements ApplicationComponent{ return builder.toString(); } - private static class BuilderMessageHandlerWrapper implements BuilderMessageHandler { - private final DefaultMessageHandler myHandler; - - public BuilderMessageHandlerWrapper(DefaultMessageHandler handler) { - myHandler = handler; - } - - @Override - public void buildStarted(UUID sessionId) { - myHandler.buildStarted(sessionId); - } - - @Override - public void handleBuildMessage(Channel channel, UUID sessionId, CmdlineRemoteProto.Message.BuilderMessage msg) { - myHandler.handleBuildMessage(channel, sessionId, msg); - } - - @Override - public void handleFailure(UUID sessionId, CmdlineRemoteProto.Message.Failure failure) { - myHandler.handleFailure(sessionId, failure); - } - - @Override - public void sessionTerminated(UUID sessionId) { - myHandler.sessionTerminated(sessionId); - } - } - private static abstract class BuildManagerPeriodicTask implements Runnable { private final Alarm myAlarm = new Alarm(Alarm.ThreadToUse.SHARED_THREAD); private final AtomicBoolean myInProgress = new AtomicBoolean(false); diff --git a/java/compiler/impl/src/com/intellij/compiler/server/BuildManagerListener.java b/java/compiler/impl/src/com/intellij/compiler/server/BuildManagerListener.java new file mode 100644 index 000000000000..292e6bd90152 --- /dev/null +++ b/java/compiler/impl/src/com/intellij/compiler/server/BuildManagerListener.java @@ -0,0 +1,18 @@ +package com.intellij.compiler.server; + +import com.intellij.openapi.project.Project; +import com.intellij.util.messages.Topic; + +import java.util.UUID; + +/** + * @author Eugene Zhuravlev + * Date: 7/3/13 + */ +public interface BuildManagerListener { + Topic TOPIC = Topic.create("Build Manager", BuildManagerListener.class); + + void buildStarted(Project project, UUID sessionId, boolean isAutomake); + + void buildFinished(Project project, UUID sessionId, boolean isAutomake); +} diff --git a/java/compiler/impl/src/com/intellij/compiler/server/MessageHandlerWrapper.java b/java/compiler/impl/src/com/intellij/compiler/server/MessageHandlerWrapper.java new file mode 100644 index 000000000000..a90ff9b4270d --- /dev/null +++ b/java/compiler/impl/src/com/intellij/compiler/server/MessageHandlerWrapper.java @@ -0,0 +1,38 @@ +package com.intellij.compiler.server; + +import org.jboss.netty.channel.Channel; +import org.jetbrains.jps.api.CmdlineRemoteProto; + +import java.util.UUID; + +/** +* @author Eugene Zhuravlev +* Date: 7/3/13 +*/ +class MessageHandlerWrapper implements BuilderMessageHandler { + private final BuilderMessageHandler myHandler; + + public MessageHandlerWrapper(BuilderMessageHandler handler) { + myHandler = handler; + } + + @Override + public void buildStarted(UUID sessionId) { + myHandler.buildStarted(sessionId); + } + + @Override + public void handleBuildMessage(Channel channel, UUID sessionId, CmdlineRemoteProto.Message.BuilderMessage msg) { + myHandler.handleBuildMessage(channel, sessionId, msg); + } + + @Override + public void handleFailure(UUID sessionId, CmdlineRemoteProto.Message.Failure failure) { + myHandler.handleFailure(sessionId, failure); + } + + @Override + public void sessionTerminated(UUID sessionId) { + myHandler.sessionTerminated(sessionId); + } +}