summaryrefslogtreecommitdiff
path: root/java/compiler/impl/src/com/intellij/compiler/server/DefaultMessageHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/compiler/impl/src/com/intellij/compiler/server/DefaultMessageHandler.java')
-rw-r--r--java/compiler/impl/src/com/intellij/compiler/server/DefaultMessageHandler.java59
1 files changed, 31 insertions, 28 deletions
diff --git a/java/compiler/impl/src/com/intellij/compiler/server/DefaultMessageHandler.java b/java/compiler/impl/src/com/intellij/compiler/server/DefaultMessageHandler.java
index 6a8c9740df80..bfde64d4396e 100644
--- a/java/compiler/impl/src/com/intellij/compiler/server/DefaultMessageHandler.java
+++ b/java/compiler/impl/src/com/intellij/compiler/server/DefaultMessageHandler.java
@@ -20,6 +20,7 @@ import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.progress.ProgressIndicator;
+import com.intellij.openapi.progress.util.ProgressIndicatorBase;
import com.intellij.openapi.progress.util.ProgressIndicatorUtils;
import com.intellij.openapi.progress.util.ReadTask;
import com.intellij.openapi.project.DumbService;
@@ -40,7 +41,6 @@ import org.jetbrains.jps.api.CmdlineRemoteProto;
import org.jetbrains.org.objectweb.asm.Opcodes;
import java.util.*;
-import java.util.concurrent.atomic.AtomicBoolean;
/**
* @author Eugene Zhuravlev
@@ -66,19 +66,23 @@ public abstract class DefaultMessageHandler implements BuilderMessageHandler {
//noinspection EnumSwitchStatementWhichMissesCases
switch (msg.getType()) {
case BUILD_EVENT:
- handleBuildEvent(sessionId, msg.getBuildEvent());
+ final CmdlineRemoteProto.Message.BuilderMessage.BuildEvent event = msg.getBuildEvent();
+ if (event.getEventType() == CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.Type.CUSTOM_BUILDER_MESSAGE && event.hasCustomBuilderMessage()) {
+ final CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage message = event.getCustomBuilderMessage();
+ if (!myProject.isDisposed()) {
+ myProject.getMessageBus().syncPublisher(CustomBuilderMessageHandler.TOPIC).messageReceived(
+ message.getBuilderId(), message.getMessageType(), message.getMessageText()
+ );
+ }
+ }
+ handleBuildEvent(sessionId, event);
break;
case COMPILE_MESSAGE:
handleCompileMessage(sessionId, msg.getCompileMessage());
break;
case CONSTANT_SEARCH_TASK:
final CmdlineRemoteProto.Message.BuilderMessage.ConstantSearchTask task = msg.getConstantSearchTask();
- myTaskExecutor.submit(new Runnable() {
- @Override
- public void run() {
- handleConstantSearchTask(channel, sessionId, task);
- }
- });
+ handleConstantSearchTask(channel, sessionId, task);
break;
}
}
@@ -88,30 +92,29 @@ public abstract class DefaultMessageHandler implements BuilderMessageHandler {
protected abstract void handleBuildEvent(UUID sessionId, CmdlineRemoteProto.Message.BuilderMessage.BuildEvent event);
private void handleConstantSearchTask(final Channel channel, final UUID sessionId, final CmdlineRemoteProto.Message.BuilderMessage.ConstantSearchTask task) {
- while (true) {
- final AtomicBoolean canceled = new AtomicBoolean(false);
- DumbService.getInstance(myProject).waitForSmartMode();
- ProgressIndicatorUtils.runWithWriteActionPriority(new ReadTask() {
- @Override
- public void computeInReadAction(@NotNull ProgressIndicator indicator) {
- if (DumbService.isDumb(myProject)) {
- canceled.set(true);
- return;
- }
-
- doHandleConstantSearchTask(channel, sessionId, task);
+ ProgressIndicatorUtils.scheduleWithWriteActionPriority(new ProgressIndicatorBase(), myTaskExecutor, new ReadTask() {
+ @Override
+ public void computeInReadAction(@NotNull ProgressIndicator indicator) {
+ if (DumbService.isDumb(myProject)) {
+ onCanceled(indicator);
}
-
- @Override
- public void onCanceled(@NotNull ProgressIndicator indicator) {
- canceled.set(true);
+ else {
+ doHandleConstantSearchTask(channel, sessionId, task);
}
- });
- if (!canceled.get()) {
- break;
}
- }
+
+ @Override
+ public void onCanceled(@NotNull ProgressIndicator indicator) {
+ DumbService.getInstance(myProject).runWhenSmart(new Runnable() {
+ @Override
+ public void run() {
+ handleConstantSearchTask(channel, sessionId, task);
+ }
+ });
+ }
+ });
}
+
private void doHandleConstantSearchTask(Channel channel, UUID sessionId, CmdlineRemoteProto.Message.BuilderMessage.ConstantSearchTask task) {
final String ownerClassName = task.getOwnerClassName();
final String fieldName = task.getFieldName();