From 54ced25af2c17551f6511e358dd86c9bce3fd9c7 Mon Sep 17 00:00:00 2001 From: nik Date: Fri, 2 Nov 2012 20:51:40 +0400 Subject: [PATCH] external build: support 'show compiler log' option for GWT compiler --- .../intellij/compiler/impl/CompileDriver.java | 10 +- .../server/CustomBuilderMessageHandler.java | 29 + .../proto/cmdline_remote_proto.proto | 8 + .../jetbrains/jps/api/CmdlineProtoUtil.java | 58 +- .../jetbrains/jps/api/CmdlineRemoteProto.java | 630 ++++++++++++++++++ .../jetbrains/jps/cmdline/BuildSession.java | 5 + .../messages/CustomBuilderMessage.java | 29 + 7 files changed, 748 insertions(+), 21 deletions(-) create mode 100644 java/compiler/impl/src/com/intellij/compiler/server/CustomBuilderMessageHandler.java create mode 100644 jps/jps-builders/src/org/jetbrains/jps/incremental/messages/CustomBuilderMessage.java diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java b/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java index 21081fdb823f..05d2c2f386dd 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java @@ -29,6 +29,7 @@ import com.intellij.compiler.make.ChangedConstantsDependencyProcessor; import com.intellij.compiler.make.DependencyCache; import com.intellij.compiler.progress.CompilerTask; import com.intellij.compiler.server.BuildManager; +import com.intellij.compiler.server.CustomBuilderMessageHandler; import com.intellij.compiler.server.DefaultMessageHandler; import com.intellij.diagnostic.IdeErrorsDialog; import com.intellij.diagnostic.PluginException; @@ -512,7 +513,7 @@ public class CompileDriver { ExitStatus status = ExitStatus.SUCCESS; if (event.hasCompletionStatus()) { final CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.Status completionStatus = event.getCompletionStatus(); - switch(completionStatus) { + switch (completionStatus) { case CANCELED: status = ExitStatus.CANCELLED; break; @@ -529,6 +530,13 @@ public class CompileDriver { } compileContext.putUserDataIfAbsent(COMPILE_SERVER_BUILD_STATUS, status); break; + case CUSTOM_BUILDER_MESSAGE: + if (event.hasCustomBuilderMessage()) { + CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage message = event.getCustomBuilderMessage(); + messageBus.syncPublisher(CustomBuilderMessageHandler.TOPIC).messageReceived(message.getBuilderId(), message.getMessageType(), + message.getMessageText()); + } + break; } } }); diff --git a/java/compiler/impl/src/com/intellij/compiler/server/CustomBuilderMessageHandler.java b/java/compiler/impl/src/com/intellij/compiler/server/CustomBuilderMessageHandler.java new file mode 100644 index 000000000000..74bf6792e6e9 --- /dev/null +++ b/java/compiler/impl/src/com/intellij/compiler/server/CustomBuilderMessageHandler.java @@ -0,0 +1,29 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.compiler.server; + +import com.intellij.util.messages.Topic; + +import java.util.EventListener; + +/** + * @author nik + */ +public interface CustomBuilderMessageHandler extends EventListener { + Topic TOPIC = Topic.create("custom builder message", CustomBuilderMessageHandler.class); + + void messageReceived(String builderId, String messageType, String messageText); +} diff --git a/jps/jps-builders/proto/cmdline_remote_proto.proto b/jps/jps-builders/proto/cmdline_remote_proto.proto index 1452b93763bf..4c7eff8ebfc4 100644 --- a/jps/jps-builders/proto/cmdline_remote_proto.proto +++ b/jps/jps-builders/proto/cmdline_remote_proto.proto @@ -93,6 +93,7 @@ message Message { enum Type { BUILD_COMPLETED = 1; FILES_GENERATED = 2; + CUSTOM_BUILDER_MESSAGE = 3; } enum Status { @@ -107,10 +108,17 @@ message Message { required string relative_path = 2; } + message CustomBuilderMessage { + required string builder_id = 1; + required string message_type = 2; + required string message_text = 3; + } + required Type event_type = 1; optional string description = 2; optional Status completion_status = 3; repeated GeneratedFile generated_files = 4; + optional CustomBuilderMessage custom_builder_message = 5; } message CompileMessage { diff --git a/jps/jps-builders/src/org/jetbrains/jps/api/CmdlineProtoUtil.java b/jps/jps-builders/src/org/jetbrains/jps/api/CmdlineProtoUtil.java index ac843603c68b..c093a8e7b4ba 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/api/CmdlineProtoUtil.java +++ b/jps/jps-builders/src/org/jetbrains/jps/api/CmdlineProtoUtil.java @@ -10,6 +10,7 @@ import java.io.ByteArrayOutputStream; import java.io.PrintStream; import java.util.*; +import static org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage; import static org.jetbrains.jps.api.CmdlineRemoteProto.Message.ControllerMessage.ParametersMessage.TargetTypeBuildScope; /** @@ -115,29 +116,29 @@ public class CmdlineProtoUtil { .setType(CmdlineRemoteProto.Message.ControllerMessage.Type.CANCEL_BUILD_COMMAND).build(); } - public static CmdlineRemoteProto.Message.BuilderMessage createCompileProgressMessageResponse(String text, float done) { + public static BuilderMessage createCompileProgressMessageResponse(String text, float done) { return createCompileMessage(BuildMessage.Kind.PROGRESS, text, null, -1L, -1L, -1L, -1, -1, done); } - public static CmdlineRemoteProto.Message.BuilderMessage createCompileMessage(final BuildMessage.Kind kind, + public static BuilderMessage createCompileMessage(final BuildMessage.Kind kind, String text, String path, long beginOffset, long endOffset, long offset, long line, long column, float done) { - final CmdlineRemoteProto.Message.BuilderMessage.CompileMessage.Builder builder = CmdlineRemoteProto.Message.BuilderMessage.CompileMessage.newBuilder(); + final BuilderMessage.CompileMessage.Builder builder = BuilderMessage.CompileMessage.newBuilder(); switch (kind) { case ERROR: - builder.setKind(CmdlineRemoteProto.Message.BuilderMessage.CompileMessage.Kind.ERROR); + builder.setKind(BuilderMessage.CompileMessage.Kind.ERROR); break; case WARNING: - builder.setKind(CmdlineRemoteProto.Message.BuilderMessage.CompileMessage.Kind.WARNING); + builder.setKind(BuilderMessage.CompileMessage.Kind.WARNING); break; case INFO: - builder.setKind(CmdlineRemoteProto.Message.BuilderMessage.CompileMessage.Kind.INFO); + builder.setKind(BuilderMessage.CompileMessage.Kind.INFO); break; default: - builder.setKind(CmdlineRemoteProto.Message.BuilderMessage.CompileMessage.Kind.PROGRESS); + builder.setKind(BuilderMessage.CompileMessage.Kind.PROGRESS); } if (text != null) { builder.setText(text); @@ -163,19 +164,33 @@ public class CmdlineProtoUtil { if (done >= 0.0f) { builder.setDone(done); } - return CmdlineRemoteProto.Message.BuilderMessage.newBuilder().setType(CmdlineRemoteProto.Message.BuilderMessage.Type.COMPILE_MESSAGE).setCompileMessage(builder.build()).build(); + return BuilderMessage.newBuilder().setType(BuilderMessage.Type.COMPILE_MESSAGE).setCompileMessage(builder.build()).build(); } - public static CmdlineRemoteProto.Message.BuilderMessage createBuildCompletedEvent(@Nullable String description, final CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.Status status) { - return createBuildEvent(CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.Type.BUILD_COMPLETED, description, status, null); + public static BuilderMessage createCustomBuilderMessage(String builderId, String messageType, String messageText) { + BuilderMessage.BuildEvent.CustomBuilderMessage builderMessage = + BuilderMessage.BuildEvent.CustomBuilderMessage.newBuilder() + .setBuilderId(builderId) + .setMessageType(messageType) + .setMessageText(messageText) + .build(); + return createBuildEvent(BuilderMessage.BuildEvent.Type.CUSTOM_BUILDER_MESSAGE, null, null, null, builderMessage); } - public static CmdlineRemoteProto.Message.BuilderMessage createFileGeneratedEvent(final Collection> paths) { - return createBuildEvent(CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.Type.FILES_GENERATED, null, null, paths); + public static BuilderMessage createBuildCompletedEvent(@Nullable String description, final BuilderMessage.BuildEvent.Status status) { + return createBuildEvent(BuilderMessage.BuildEvent.Type.BUILD_COMPLETED, description, status, null, null); } - public static CmdlineRemoteProto.Message.BuilderMessage createBuildEvent(final CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.Type type, @Nullable String description, final CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.Status status, Collection> generatedPaths) { - final CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.Builder builder = CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.newBuilder().setEventType(type); + public static BuilderMessage createFileGeneratedEvent(final Collection> paths) { + return createBuildEvent(BuilderMessage.BuildEvent.Type.FILES_GENERATED, null, null, paths, null); + } + + private static BuilderMessage createBuildEvent(final BuilderMessage.BuildEvent.Type type, + @Nullable String description, + final BuilderMessage.BuildEvent.Status status, + Collection> generatedPaths, + final BuilderMessage.BuildEvent.CustomBuilderMessage builderMessage) { + final BuilderMessage.BuildEvent.Builder builder = BuilderMessage.BuildEvent.newBuilder().setEventType(type); if (description != null) { builder.setDescription(description); } @@ -184,19 +199,22 @@ public class CmdlineProtoUtil { } if (generatedPaths != null) { for (Pair pair : generatedPaths) { - final CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.GeneratedFile.Builder fileBuilder = CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.GeneratedFile.newBuilder(); - final CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.GeneratedFile generatedFile = fileBuilder.setOutputRoot(pair.first).setRelativePath(pair.second).build(); + final BuilderMessage.BuildEvent.GeneratedFile.Builder fileBuilder = BuilderMessage.BuildEvent.GeneratedFile.newBuilder(); + final BuilderMessage.BuildEvent.GeneratedFile generatedFile = fileBuilder.setOutputRoot(pair.first).setRelativePath(pair.second).build(); builder.addGeneratedFiles(generatedFile); } } - return CmdlineRemoteProto.Message.BuilderMessage.newBuilder().setType(CmdlineRemoteProto.Message.BuilderMessage.Type.BUILD_EVENT).setBuildEvent(builder.build()).build(); + if (builderMessage != null) { + builder.setCustomBuilderMessage(builderMessage); + } + return BuilderMessage.newBuilder().setType(BuilderMessage.Type.BUILD_EVENT).setBuildEvent(builder.build()).build(); } - public static CmdlineRemoteProto.Message.BuilderMessage createParamRequest() { - return CmdlineRemoteProto.Message.BuilderMessage.newBuilder().setType(CmdlineRemoteProto.Message.BuilderMessage.Type.PARAM_REQUEST).build(); + public static BuilderMessage createParamRequest() { + return BuilderMessage.newBuilder().setType(BuilderMessage.Type.PARAM_REQUEST).build(); } - public static CmdlineRemoteProto.Message toMessage(UUID sessionId, CmdlineRemoteProto.Message.BuilderMessage builderMessage) { + public static CmdlineRemoteProto.Message toMessage(UUID sessionId, BuilderMessage builderMessage) { return CmdlineRemoteProto.Message.newBuilder().setSessionId(toProtoUUID(sessionId)).setType(CmdlineRemoteProto.Message.Type.BUILDER_MESSAGE).setBuilderMessage(builderMessage).build(); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/api/CmdlineRemoteProto.java b/jps/jps-builders/src/org/jetbrains/jps/api/CmdlineRemoteProto.java index 096567ff8049..4e6b2c22b3eb 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/api/CmdlineRemoteProto.java +++ b/jps/jps-builders/src/org/jetbrains/jps/api/CmdlineRemoteProto.java @@ -5149,6 +5149,10 @@ public final class CmdlineRemoteProto { getGeneratedFilesList(); org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.GeneratedFile getGeneratedFiles(int index); int getGeneratedFilesCount(); + + // optional .org.jetbrains.jpsservice.Message.BuilderMessage.BuildEvent.CustomBuilderMessage custom_builder_message = 5; + boolean hasCustomBuilderMessage(); + org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage getCustomBuilderMessage(); } public static final class BuildEvent extends com.google.protobuf.GeneratedMessageLite @@ -5172,10 +5176,12 @@ public final class CmdlineRemoteProto { implements com.google.protobuf.Internal.EnumLite { BUILD_COMPLETED(0, 1), FILES_GENERATED(1, 2), + CUSTOM_BUILDER_MESSAGE(2, 3), ; public static final int BUILD_COMPLETED_VALUE = 1; public static final int FILES_GENERATED_VALUE = 2; + public static final int CUSTOM_BUILDER_MESSAGE_VALUE = 3; public final int getNumber() { return value; } @@ -5184,6 +5190,7 @@ public final class CmdlineRemoteProto { switch (value) { case 1: return BUILD_COMPLETED; case 2: return FILES_GENERATED; + case 3: return CUSTOM_BUILDER_MESSAGE; default: return null; } } @@ -5686,6 +5693,538 @@ public final class CmdlineRemoteProto { // @@protoc_insertion_point(class_scope:org.jetbrains.jpsservice.Message.BuilderMessage.BuildEvent.GeneratedFile) } + public interface CustomBuilderMessageOrBuilder + extends com.google.protobuf.MessageLiteOrBuilder { + + // required string builder_id = 1; + boolean hasBuilderId(); + String getBuilderId(); + + // required string message_type = 2; + boolean hasMessageType(); + String getMessageType(); + + // required string message_text = 3; + boolean hasMessageText(); + String getMessageText(); + } + public static final class CustomBuilderMessage extends + com.google.protobuf.GeneratedMessageLite + implements CustomBuilderMessageOrBuilder { + // Use CustomBuilderMessage.newBuilder() to construct. + private CustomBuilderMessage(Builder builder) { + super(builder); + } + private CustomBuilderMessage(boolean noInit) {} + + private static final CustomBuilderMessage defaultInstance; + public static CustomBuilderMessage getDefaultInstance() { + return defaultInstance; + } + + public CustomBuilderMessage getDefaultInstanceForType() { + return defaultInstance; + } + + private int bitField0_; + // required string builder_id = 1; + public static final int BUILDER_ID_FIELD_NUMBER = 1; + private java.lang.Object builderId_; + public boolean hasBuilderId() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getBuilderId() { + java.lang.Object ref = builderId_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + builderId_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getBuilderIdBytes() { + java.lang.Object ref = builderId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + builderId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // required string message_type = 2; + public static final int MESSAGE_TYPE_FIELD_NUMBER = 2; + private java.lang.Object messageType_; + public boolean hasMessageType() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getMessageType() { + java.lang.Object ref = messageType_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + messageType_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getMessageTypeBytes() { + java.lang.Object ref = messageType_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + messageType_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // required string message_text = 3; + public static final int MESSAGE_TEXT_FIELD_NUMBER = 3; + private java.lang.Object messageText_; + public boolean hasMessageText() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getMessageText() { + java.lang.Object ref = messageText_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + messageText_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getMessageTextBytes() { + java.lang.Object ref = messageText_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + messageText_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private void initFields() { + builderId_ = ""; + messageType_ = ""; + messageText_ = ""; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + if (!hasBuilderId()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasMessageType()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasMessageText()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBytes(1, getBuilderIdBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBytes(2, getMessageTypeBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeBytes(3, getMessageTextBytes()); + } + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, getBuilderIdBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, getMessageTypeBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(3, getMessageTextBytes()); + } + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage, Builder> + implements org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessageOrBuilder { + // Construct using org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + builderId_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + messageType_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + messageText_ = ""; + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage getDefaultInstanceForType() { + return org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage.getDefaultInstance(); + } + + public org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage build() { + org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage buildPartial() { + org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage result = new org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.builderId_ = builderId_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.messageType_ = messageType_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.messageText_ = messageText_; + result.bitField0_ = to_bitField0_; + return result; + } + + public Builder mergeFrom(org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage other) { + if (other == org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage.getDefaultInstance()) return this; + if (other.hasBuilderId()) { + setBuilderId(other.getBuilderId()); + } + if (other.hasMessageType()) { + setMessageType(other.getMessageType()); + } + if (other.hasMessageText()) { + setMessageText(other.getMessageText()); + } + return this; + } + + public final boolean isInitialized() { + if (!hasBuilderId()) { + + return false; + } + if (!hasMessageType()) { + + return false; + } + if (!hasMessageText()) { + + return false; + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + + return this; + default: { + if (!parseUnknownField(input, extensionRegistry, tag)) { + + return this; + } + break; + } + case 10: { + bitField0_ |= 0x00000001; + builderId_ = input.readBytes(); + break; + } + case 18: { + bitField0_ |= 0x00000002; + messageType_ = input.readBytes(); + break; + } + case 26: { + bitField0_ |= 0x00000004; + messageText_ = input.readBytes(); + break; + } + } + } + } + + private int bitField0_; + + // required string builder_id = 1; + private java.lang.Object builderId_ = ""; + public boolean hasBuilderId() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getBuilderId() { + java.lang.Object ref = builderId_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + builderId_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setBuilderId(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + builderId_ = value; + + return this; + } + public Builder clearBuilderId() { + bitField0_ = (bitField0_ & ~0x00000001); + builderId_ = getDefaultInstance().getBuilderId(); + + return this; + } + void setBuilderId(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000001; + builderId_ = value; + + } + + // required string message_type = 2; + private java.lang.Object messageType_ = ""; + public boolean hasMessageType() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getMessageType() { + java.lang.Object ref = messageType_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + messageType_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setMessageType(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + messageType_ = value; + + return this; + } + public Builder clearMessageType() { + bitField0_ = (bitField0_ & ~0x00000002); + messageType_ = getDefaultInstance().getMessageType(); + + return this; + } + void setMessageType(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000002; + messageType_ = value; + + } + + // required string message_text = 3; + private java.lang.Object messageText_ = ""; + public boolean hasMessageText() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public String getMessageText() { + java.lang.Object ref = messageText_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + messageText_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setMessageText(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + messageText_ = value; + + return this; + } + public Builder clearMessageText() { + bitField0_ = (bitField0_ & ~0x00000004); + messageText_ = getDefaultInstance().getMessageText(); + + return this; + } + void setMessageText(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000004; + messageText_ = value; + + } + + // @@protoc_insertion_point(builder_scope:org.jetbrains.jpsservice.Message.BuilderMessage.BuildEvent.CustomBuilderMessage) + } + + static { + defaultInstance = new CustomBuilderMessage(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:org.jetbrains.jpsservice.Message.BuilderMessage.BuildEvent.CustomBuilderMessage) + } + private int bitField0_; // required .org.jetbrains.jpsservice.Message.BuilderMessage.BuildEvent.Type event_type = 1; public static final int EVENT_TYPE_FIELD_NUMBER = 1; @@ -5760,11 +6299,22 @@ public final class CmdlineRemoteProto { return generatedFiles_.get(index); } + // optional .org.jetbrains.jpsservice.Message.BuilderMessage.BuildEvent.CustomBuilderMessage custom_builder_message = 5; + public static final int CUSTOM_BUILDER_MESSAGE_FIELD_NUMBER = 5; + private org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage customBuilderMessage_; + public boolean hasCustomBuilderMessage() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage getCustomBuilderMessage() { + return customBuilderMessage_; + } + private void initFields() { eventType_ = org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.Type.BUILD_COMPLETED; description_ = ""; completionStatus_ = org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.Status.CANCELED; generatedFiles_ = java.util.Collections.emptyList(); + customBuilderMessage_ = org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage.getDefaultInstance(); } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -5781,6 +6331,12 @@ public final class CmdlineRemoteProto { return false; } } + if (hasCustomBuilderMessage()) { + if (!getCustomBuilderMessage().isInitialized()) { + memoizedIsInitialized = 0; + return false; + } + } memoizedIsInitialized = 1; return true; } @@ -5800,6 +6356,9 @@ public final class CmdlineRemoteProto { for (int i = 0; i < generatedFiles_.size(); i++) { output.writeMessage(4, generatedFiles_.get(i)); } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeMessage(5, customBuilderMessage_); + } } private int memoizedSerializedSize = -1; @@ -5824,6 +6383,10 @@ public final class CmdlineRemoteProto { size += com.google.protobuf.CodedOutputStream .computeMessageSize(4, generatedFiles_.get(i)); } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, customBuilderMessage_); + } memoizedSerializedSize = size; return size; } @@ -5934,6 +6497,8 @@ public final class CmdlineRemoteProto { bitField0_ = (bitField0_ & ~0x00000004); generatedFiles_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00000008); + customBuilderMessage_ = org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage.getDefaultInstance(); + bitField0_ = (bitField0_ & ~0x00000010); return this; } @@ -5984,6 +6549,10 @@ public final class CmdlineRemoteProto { bitField0_ = (bitField0_ & ~0x00000008); } result.generatedFiles_ = generatedFiles_; + if (((from_bitField0_ & 0x00000010) == 0x00000010)) { + to_bitField0_ |= 0x00000008; + } + result.customBuilderMessage_ = customBuilderMessage_; result.bitField0_ = to_bitField0_; return result; } @@ -6009,6 +6578,9 @@ public final class CmdlineRemoteProto { } } + if (other.hasCustomBuilderMessage()) { + mergeCustomBuilderMessage(other.getCustomBuilderMessage()); + } return this; } @@ -6023,6 +6595,12 @@ public final class CmdlineRemoteProto { return false; } } + if (hasCustomBuilderMessage()) { + if (!getCustomBuilderMessage().isInitialized()) { + + return false; + } + } return true; } @@ -6072,6 +6650,15 @@ public final class CmdlineRemoteProto { addGeneratedFiles(subBuilder.buildPartial()); break; } + case 42: { + org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage.Builder subBuilder = org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage.newBuilder(); + if (hasCustomBuilderMessage()) { + subBuilder.mergeFrom(getCustomBuilderMessage()); + } + input.readMessage(subBuilder, extensionRegistry); + setCustomBuilderMessage(subBuilder.buildPartial()); + break; + } } } } @@ -6251,6 +6838,49 @@ public final class CmdlineRemoteProto { return this; } + // optional .org.jetbrains.jpsservice.Message.BuilderMessage.BuildEvent.CustomBuilderMessage custom_builder_message = 5; + private org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage customBuilderMessage_ = org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage.getDefaultInstance(); + public boolean hasCustomBuilderMessage() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage getCustomBuilderMessage() { + return customBuilderMessage_; + } + public Builder setCustomBuilderMessage(org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage value) { + if (value == null) { + throw new NullPointerException(); + } + customBuilderMessage_ = value; + + bitField0_ |= 0x00000010; + return this; + } + public Builder setCustomBuilderMessage( + org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage.Builder builderForValue) { + customBuilderMessage_ = builderForValue.build(); + + bitField0_ |= 0x00000010; + return this; + } + public Builder mergeCustomBuilderMessage(org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage value) { + if (((bitField0_ & 0x00000010) == 0x00000010) && + customBuilderMessage_ != org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage.getDefaultInstance()) { + customBuilderMessage_ = + org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage.newBuilder(customBuilderMessage_).mergeFrom(value).buildPartial(); + } else { + customBuilderMessage_ = value; + } + + bitField0_ |= 0x00000010; + return this; + } + public Builder clearCustomBuilderMessage() { + customBuilderMessage_ = org.jetbrains.jps.api.CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.CustomBuilderMessage.getDefaultInstance(); + + bitField0_ = (bitField0_ & ~0x00000010); + return this; + } + // @@protoc_insertion_point(builder_scope:org.jetbrains.jpsservice.Message.BuilderMessage.BuildEvent) } diff --git a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java index 866ce41c4d63..1ee336c0cdcb 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java +++ b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java @@ -115,6 +115,11 @@ final class BuildSession implements Runnable, CanceledStatus { compilerMessage.getProblemLocationOffset(), compilerMessage.getLine(), compilerMessage.getColumn(), -1.0f); } + else if (buildMessage instanceof CustomBuilderMessage) { + CustomBuilderMessage builderMessage = (CustomBuilderMessage)buildMessage; + response = CmdlineProtoUtil.createCustomBuilderMessage(builderMessage.getBuilderId(), builderMessage.getMessageType(), + builderMessage.getMessageText()); + } else { float done = -1.0f; if (buildMessage instanceof ProgressMessage) { diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/messages/CustomBuilderMessage.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/messages/CustomBuilderMessage.java new file mode 100644 index 000000000000..fdd07964385c --- /dev/null +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/messages/CustomBuilderMessage.java @@ -0,0 +1,29 @@ +package org.jetbrains.jps.incremental.messages; + +/** + * @author nik + */ +public class CustomBuilderMessage extends BuildMessage { + private final String myBuilderId; + private final String myMessageType; + private final String myMessageText; + + public CustomBuilderMessage(String builderId, String messageType, String messageText) { + super("", Kind.INFO); + myBuilderId = builderId; + myMessageType = messageType; + myMessageText = messageText; + } + + public String getBuilderId() { + return myBuilderId; + } + + public String getMessageType() { + return myMessageType; + } + + public String getMessageText() { + return myMessageText; + } +}