mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
build manager listener for build started/stopped notifications
This commit is contained in:
@@ -500,11 +500,38 @@ public class BuildManager implements ApplicationComponent{
|
||||
final Project project, final boolean isRebuild, final boolean isMake,
|
||||
final boolean onlyCheckUpToDate, final List<TargetTypeBuildScope> scopes,
|
||||
final Collection<String> paths,
|
||||
final Map<String, String> userData, final DefaultMessageHandler handler) {
|
||||
final Map<String, String> 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);
|
||||
|
||||
@@ -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<BuildManagerListener> TOPIC = Topic.create("Build Manager", BuildManagerListener.class);
|
||||
|
||||
void buildStarted(Project project, UUID sessionId, boolean isAutomake);
|
||||
|
||||
void buildFinished(Project project, UUID sessionId, boolean isAutomake);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user