diff --git a/java/compiler/compile-server/compile-server.iml b/java/compiler/compile-server/compile-server.iml new file mode 100644 index 000000000000..d1ae89fe89f6 --- /dev/null +++ b/java/compiler/compile-server/compile-server.iml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/java/compiler/compile-server/proto/gen_proto.bat b/java/compiler/compile-server/proto/gen_proto.bat new file mode 100644 index 000000000000..ea0421735789 --- /dev/null +++ b/java/compiler/compile-server/proto/gen_proto.bat @@ -0,0 +1 @@ +protoc -I=. --java_out=../src *.proto \ No newline at end of file diff --git a/java/compiler/compile-server/proto/jps_remote_proto.proto b/java/compiler/compile-server/proto/jps_remote_proto.proto new file mode 100644 index 000000000000..0789c5ebc779 --- /dev/null +++ b/java/compiler/compile-server/proto/jps_remote_proto.proto @@ -0,0 +1,99 @@ +package org.jetbrains.jpsservice; + +option java_package = "org.jetbrains.jpsservice"; +option optimize_for = LITE_RUNTIME; + +message Message { + + message UUID { + required sint64 most_sig_bits = 1; + required sint64 least_sig_bits = 2; + } + + enum Type { + REQUEST = 1; + RESPONSE = 2; + FAILURE = 3; + } + + message Failure { + optional int32 error_code = 1; + optional string description = 2; + optional string stacktrace = 3; + } + + message Request { + enum Type { + COMPILE_REQUEST = 1; + SHUTDOWN_COMMAND = 2; + } + + message CompilationRequest { + enum Type { + REBUILD = 1; + MAKE = 2; + CLEAN = 3; + CANCEL = 4; + } + required Type command_type = 1; + optional string project_id = 2; + repeated string module_name = 4; + } + + message ShutdownCommand { + enum ShutdownPolicy { + CANCEL_RUNNING_BUILDS = 1; + WAIT_RUNNING_BUILDS = 2; + } + required ShutdownPolicy shutdownPolicy = 1; + } + + required Type request_type = 1; + optional CompilationRequest compile_request = 2; + optional ShutdownCommand shutdown_command = 3; + } + + message Response { + enum Type { + COMMAND_RESPONSE = 1; + COMPILE_MESSAGE = 2; + } + + message CommandResponse { + enum Type { + COMMAND_ACCEPTED = 1; + COMMAND_REJECTED = 2; + BUILD_COMPLETED = 3; + BUILD_CANCELED = 4; + } + required Type command_type = 1; + optional string description = 2; + } + + message CompileMessage { + enum Kind { + ERROR = 1; + WARNING = 2; + INFO = 3; + PROGRESS = 4; + } + required Kind kind = 1; + optional string text = 2; + optional string source_file_path = 3; + optional uint32 line = 4; + optional uint32 column = 5; + } + + required Type response_type = 1; + optional CommandResponse command_response = 2; + optional CompileMessage compile_message = 3; + } + + required UUID session_id = 1; + required Type message_type = 2; + optional Request request = 3; + optional Response response = 4; + optional Failure failure = 5; +} + + diff --git a/java/compiler/compile-server/src/org/jetbrains/jpsservice/Client.java b/java/compiler/compile-server/src/org/jetbrains/jpsservice/Client.java new file mode 100644 index 000000000000..1438b100125f --- /dev/null +++ b/java/compiler/compile-server/src/org/jetbrains/jpsservice/Client.java @@ -0,0 +1,229 @@ +package org.jetbrains.jpsservice; + +import org.jboss.netty.bootstrap.ClientBootstrap; +import org.jboss.netty.channel.*; +import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory; +import org.jboss.netty.handler.codec.protobuf.ProtobufDecoder; +import org.jboss.netty.handler.codec.protobuf.ProtobufEncoder; +import org.jboss.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder; +import org.jboss.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jpsservice.impl.JpsClientMessageHandler; +import org.jetbrains.jpsservice.impl.ProtoUtil; + +import java.net.InetSocketAddress; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import java.util.concurrent.*; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; + +/** + * @author Eugene Zhuravlev + * Date: 8/11/11 + */ +public class Client { + private static enum State { + DISCONNECTED, CONNECTING, CONNECTED, DISCONNECTING + } + private final AtomicReference myState = new AtomicReference(State.DISCONNECTED); + + private final ChannelPipelineFactory myPipelineFactory; + private final ChannelFactory myChannelFactory; + private ChannelFuture myConnectFuture; + private final ConcurrentHashMap myHandlers = new ConcurrentHashMap(); + + public Client() { + myChannelFactory = new NioClientSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool(), 1); + + myPipelineFactory = new ChannelPipelineFactory() { + public ChannelPipeline getPipeline() throws Exception { + return Channels.pipeline( + new ProtobufVarint32FrameDecoder(), + new ProtobufDecoder(JpsRemoteProto.Message.getDefaultInstance()), + new ProtobufVarint32LengthFieldPrepender(), + new ProtobufEncoder(), + new JpsClientMessageHandler() { + + protected JpsServerResponseHandler getHandler(UUID sessionId) { + final RequestFuture future = myHandlers.get(sessionId); + return future != null? future.myHandler : null; + } + + protected void terminateSession(UUID sessionId) { + final RequestFuture future = myHandlers.remove(sessionId); + if (future != null) { + final JpsServerResponseHandler handler = future.myHandler; + try { + if (handler != null) { + try { + handler.sessionTerminated(); + } + catch (Throwable ignored) { + ignored.printStackTrace(); + } + } + } + finally { + future.setDone(); + } + } + } + + public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { + try { + super.channelClosed(ctx, e); + } + finally { + for (UUID uuid : new ArrayList(myHandlers.keySet())) { + terminateSession(uuid); + } + } + } + } + ); + } + }; + } + + public Future sendCompileRequest(String projectId, List modules, boolean rebuild, JpsServerResponseHandler handler) throws Throwable { + if (myState.get() != State.CONNECTED) { + return null; + } + return sendRequest( + rebuild? ProtoUtil.createRebuildRequest(projectId, modules) : ProtoUtil.createMakeRequest(projectId, modules), + handler + ); + } + + @Nullable + public Future sendShutdownRequest() throws Throwable { + if (myState.get() != State.CONNECTED) { + return null; + } + return sendRequest(ProtoUtil.createShutdownRequest(true), null); + } + + private Future sendRequest(JpsRemoteProto.Message.Request request, @Nullable JpsServerResponseHandler handler) { + final UUID sessionUUID = UUID.randomUUID(); + final RequestFuture requestFuture = new RequestFuture(handler); + myHandlers.put(sessionUUID, requestFuture); + boolean success = false; + try { + final ChannelFuture future = Channels.write(myConnectFuture.getChannel(), ProtoUtil.toMessage(sessionUUID, request)); + future.awaitUninterruptibly(); + success = future.isSuccess(); + return success? requestFuture : null; + } + finally { + if (!success) { + requestFuture.setDone(); + myHandlers.remove(sessionUUID); + handler.sessionTerminated(); + } + } + } + + public boolean connect(final String host, final int port) throws Throwable { + if (myState.compareAndSet(State.DISCONNECTED, State.CONNECTING)) { + boolean success = false; + + try { + final ClientBootstrap bootstrap = new ClientBootstrap(myChannelFactory); + bootstrap.setPipelineFactory(myPipelineFactory); + bootstrap.setOption("tcpNoDelay", true); + bootstrap.setOption("keepAlive", true); + final ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, port)); + future.awaitUninterruptibly(); + + success = future.isSuccess(); + + if (success) { + myConnectFuture = future; + } + else { + final Throwable reason = future.getCause(); + if (reason != null) { + throw reason; + } + } + + return success; + } + finally { + myState.compareAndSet(State.CONNECTING, success? State.CONNECTED : State.DISCONNECTED); + } + } + // already connected + return false; + } + + public void disconnect() { + if (myState.compareAndSet(State.CONNECTED, State.DISCONNECTING)) { + try { + final ChannelFuture future = myConnectFuture; + if (future != null) { + try { + final ChannelFuture closeFuture = future.getChannel().close(); + closeFuture.awaitUninterruptibly(); + } + finally { + myChannelFactory.releaseExternalResources(); + } + } + } + finally { + myConnectFuture = null; + myState.compareAndSet(State.DISCONNECTING, State.DISCONNECTED); + } + } + } + + public boolean isConnected() { + return myState.get() == State.CONNECTED; + } + + private static class RequestFuture implements Future { + private final Semaphore mySemaphore = new Semaphore(1); + private final AtomicBoolean myDone = new AtomicBoolean(false); + private final JpsServerResponseHandler myHandler; + + public RequestFuture(JpsServerResponseHandler handler) { + myHandler = handler; + mySemaphore.acquireUninterruptibly(); + } + + public void setDone() { + if (!myDone.getAndSet(true)) { + mySemaphore.release(); + } + } + + public boolean cancel(boolean mayInterruptIfRunning) { + return false; + } + + public boolean isCancelled() { + return false; + } + + public boolean isDone() { + return myDone.get(); + } + + public Object get() throws InterruptedException, ExecutionException { + while (!isDone()) { + mySemaphore.tryAcquire(100L, TimeUnit.MILLISECONDS); + } + return null; + } + + public Object get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { + if (!isDone()) { + mySemaphore.tryAcquire(timeout, unit); + } + return null; + } + } +} diff --git a/java/compiler/compile-server/src/org/jetbrains/jpsservice/JpsRemoteProto.java b/java/compiler/compile-server/src/org/jetbrains/jpsservice/JpsRemoteProto.java new file mode 100644 index 000000000000..60ad125a21cf --- /dev/null +++ b/java/compiler/compile-server/src/org/jetbrains/jpsservice/JpsRemoteProto.java @@ -0,0 +1,3617 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: jps_remote_proto.proto + +package org.jetbrains.jpsservice; + +public final class JpsRemoteProto { + private JpsRemoteProto() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + public static final class Message extends + com.google.protobuf.GeneratedMessageLite { + // Use Message.newBuilder() to construct. + private Message() { + initFields(); + } + private Message(boolean noInit) {} + + private static final Message defaultInstance; + public static Message getDefaultInstance() { + return defaultInstance; + } + + public Message getDefaultInstanceForType() { + return defaultInstance; + } + + public enum Type + implements com.google.protobuf.Internal.EnumLite { + REQUEST(0, 1), + RESPONSE(1, 2), + FAILURE(2, 3), + ; + + + public final int getNumber() { return value; } + + public static Type valueOf(int value) { + switch (value) { + case 1: return REQUEST; + case 2: return RESPONSE; + case 3: return FAILURE; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public Type findValueByNumber(int number) { + return Type.valueOf(number) + ; } + }; + + private final int index; + private final int value; + private Type(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:org.jetbrains.jpsservice.Message.Type) + } + + public static final class UUID extends + com.google.protobuf.GeneratedMessageLite { + // Use UUID.newBuilder() to construct. + private UUID() { + initFields(); + } + private UUID(boolean noInit) {} + + private static final UUID defaultInstance; + public static UUID getDefaultInstance() { + return defaultInstance; + } + + public UUID getDefaultInstanceForType() { + return defaultInstance; + } + + // required sint64 most_sig_bits = 1; + public static final int MOST_SIG_BITS_FIELD_NUMBER = 1; + private boolean hasMostSigBits; + private long mostSigBits_ = 0L; + public boolean hasMostSigBits() { return hasMostSigBits; } + public long getMostSigBits() { return mostSigBits_; } + + // required sint64 least_sig_bits = 2; + public static final int LEAST_SIG_BITS_FIELD_NUMBER = 2; + private boolean hasLeastSigBits; + private long leastSigBits_ = 0L; + public boolean hasLeastSigBits() { return hasLeastSigBits; } + public long getLeastSigBits() { return leastSigBits_; } + + private void initFields() { + } + public final boolean isInitialized() { + if (!hasMostSigBits) return false; + if (!hasLeastSigBits) return false; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasMostSigBits()) { + output.writeSInt64(1, getMostSigBits()); + } + if (hasLeastSigBits()) { + output.writeSInt64(2, getLeastSigBits()); + } + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasMostSigBits()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt64Size(1, getMostSigBits()); + } + if (hasLeastSigBits()) { + size += com.google.protobuf.CodedOutputStream + .computeSInt64Size(2, getLeastSigBits()); + } + memoizedSerializedSize = size; + return size; + } + + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID 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.jpsservice.JpsRemoteProto.Message.UUID parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID 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.jpsservice.JpsRemoteProto.Message.UUID 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.jpsservice.JpsRemoteProto.Message.UUID parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID 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.jpsservice.JpsRemoteProto.Message.UUID prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID, Builder> { + private org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID result; + + // Construct using org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID(); + return builder; + } + + protected org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID internalGetResult() { + return result; + } + + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID(); + return this; + } + + public Builder clone() { + return create().mergeFrom(result); + } + + public org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID getDefaultInstanceForType() { + return org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID.getDefaultInstance(); + } + + public boolean isInitialized() { + return result.isInitialized(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + public org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID returnMe = result; + result = null; + return returnMe; + } + + public Builder mergeFrom(org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID other) { + if (other == org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID.getDefaultInstance()) return this; + if (other.hasMostSigBits()) { + setMostSigBits(other.getMostSigBits()); + } + if (other.hasLeastSigBits()) { + setLeastSigBits(other.getLeastSigBits()); + } + return this; + } + + 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 8: { + setMostSigBits(input.readSInt64()); + break; + } + case 16: { + setLeastSigBits(input.readSInt64()); + break; + } + } + } + } + + + // required sint64 most_sig_bits = 1; + public boolean hasMostSigBits() { + return result.hasMostSigBits(); + } + public long getMostSigBits() { + return result.getMostSigBits(); + } + public Builder setMostSigBits(long value) { + result.hasMostSigBits = true; + result.mostSigBits_ = value; + return this; + } + public Builder clearMostSigBits() { + result.hasMostSigBits = false; + result.mostSigBits_ = 0L; + return this; + } + + // required sint64 least_sig_bits = 2; + public boolean hasLeastSigBits() { + return result.hasLeastSigBits(); + } + public long getLeastSigBits() { + return result.getLeastSigBits(); + } + public Builder setLeastSigBits(long value) { + result.hasLeastSigBits = true; + result.leastSigBits_ = value; + return this; + } + public Builder clearLeastSigBits() { + result.hasLeastSigBits = false; + result.leastSigBits_ = 0L; + return this; + } + + // @@protoc_insertion_point(builder_scope:org.jetbrains.jpsservice.Message.UUID) + } + + static { + defaultInstance = new UUID(true); + org.jetbrains.jpsservice.JpsRemoteProto.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:org.jetbrains.jpsservice.Message.UUID) + } + + public static final class Failure extends + com.google.protobuf.GeneratedMessageLite { + // Use Failure.newBuilder() to construct. + private Failure() { + initFields(); + } + private Failure(boolean noInit) {} + + private static final Failure defaultInstance; + public static Failure getDefaultInstance() { + return defaultInstance; + } + + public Failure getDefaultInstanceForType() { + return defaultInstance; + } + + // optional int32 error_code = 1; + public static final int ERROR_CODE_FIELD_NUMBER = 1; + private boolean hasErrorCode; + private int errorCode_ = 0; + public boolean hasErrorCode() { return hasErrorCode; } + public int getErrorCode() { return errorCode_; } + + // optional string description = 2; + public static final int DESCRIPTION_FIELD_NUMBER = 2; + private boolean hasDescription; + private java.lang.String description_ = ""; + public boolean hasDescription() { return hasDescription; } + public java.lang.String getDescription() { return description_; } + + // optional string stacktrace = 3; + public static final int STACKTRACE_FIELD_NUMBER = 3; + private boolean hasStacktrace; + private java.lang.String stacktrace_ = ""; + public boolean hasStacktrace() { return hasStacktrace; } + public java.lang.String getStacktrace() { return stacktrace_; } + + private void initFields() { + } + public final boolean isInitialized() { + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasErrorCode()) { + output.writeInt32(1, getErrorCode()); + } + if (hasDescription()) { + output.writeString(2, getDescription()); + } + if (hasStacktrace()) { + output.writeString(3, getStacktrace()); + } + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasErrorCode()) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, getErrorCode()); + } + if (hasDescription()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(2, getDescription()); + } + if (hasStacktrace()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(3, getStacktrace()); + } + memoizedSerializedSize = size; + return size; + } + + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure 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.jpsservice.JpsRemoteProto.Message.Failure parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure 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.jpsservice.JpsRemoteProto.Message.Failure 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.jpsservice.JpsRemoteProto.Message.Failure parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure 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.jpsservice.JpsRemoteProto.Message.Failure prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure, Builder> { + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure result; + + // Construct using org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure(); + return builder; + } + + protected org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure internalGetResult() { + return result; + } + + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure(); + return this; + } + + public Builder clone() { + return create().mergeFrom(result); + } + + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure getDefaultInstanceForType() { + return org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure.getDefaultInstance(); + } + + public boolean isInitialized() { + return result.isInitialized(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure returnMe = result; + result = null; + return returnMe; + } + + public Builder mergeFrom(org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure other) { + if (other == org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure.getDefaultInstance()) return this; + if (other.hasErrorCode()) { + setErrorCode(other.getErrorCode()); + } + if (other.hasDescription()) { + setDescription(other.getDescription()); + } + if (other.hasStacktrace()) { + setStacktrace(other.getStacktrace()); + } + return this; + } + + 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 8: { + setErrorCode(input.readInt32()); + break; + } + case 18: { + setDescription(input.readString()); + break; + } + case 26: { + setStacktrace(input.readString()); + break; + } + } + } + } + + + // optional int32 error_code = 1; + public boolean hasErrorCode() { + return result.hasErrorCode(); + } + public int getErrorCode() { + return result.getErrorCode(); + } + public Builder setErrorCode(int value) { + result.hasErrorCode = true; + result.errorCode_ = value; + return this; + } + public Builder clearErrorCode() { + result.hasErrorCode = false; + result.errorCode_ = 0; + return this; + } + + // optional string description = 2; + public boolean hasDescription() { + return result.hasDescription(); + } + public java.lang.String getDescription() { + return result.getDescription(); + } + public Builder setDescription(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasDescription = true; + result.description_ = value; + return this; + } + public Builder clearDescription() { + result.hasDescription = false; + result.description_ = getDefaultInstance().getDescription(); + return this; + } + + // optional string stacktrace = 3; + public boolean hasStacktrace() { + return result.hasStacktrace(); + } + public java.lang.String getStacktrace() { + return result.getStacktrace(); + } + public Builder setStacktrace(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasStacktrace = true; + result.stacktrace_ = value; + return this; + } + public Builder clearStacktrace() { + result.hasStacktrace = false; + result.stacktrace_ = getDefaultInstance().getStacktrace(); + return this; + } + + // @@protoc_insertion_point(builder_scope:org.jetbrains.jpsservice.Message.Failure) + } + + static { + defaultInstance = new Failure(true); + org.jetbrains.jpsservice.JpsRemoteProto.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:org.jetbrains.jpsservice.Message.Failure) + } + + public static final class Request extends + com.google.protobuf.GeneratedMessageLite { + // Use Request.newBuilder() to construct. + private Request() { + initFields(); + } + private Request(boolean noInit) {} + + private static final Request defaultInstance; + public static Request getDefaultInstance() { + return defaultInstance; + } + + public Request getDefaultInstanceForType() { + return defaultInstance; + } + + public enum Type + implements com.google.protobuf.Internal.EnumLite { + COMPILE_REQUEST(0, 1), + SHUTDOWN_COMMAND(1, 2), + ; + + + public final int getNumber() { return value; } + + public static Type valueOf(int value) { + switch (value) { + case 1: return COMPILE_REQUEST; + case 2: return SHUTDOWN_COMMAND; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public Type findValueByNumber(int number) { + return Type.valueOf(number) + ; } + }; + + private final int index; + private final int value; + private Type(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:org.jetbrains.jpsservice.Message.Request.Type) + } + + public static final class CompilationRequest extends + com.google.protobuf.GeneratedMessageLite { + // Use CompilationRequest.newBuilder() to construct. + private CompilationRequest() { + initFields(); + } + private CompilationRequest(boolean noInit) {} + + private static final CompilationRequest defaultInstance; + public static CompilationRequest getDefaultInstance() { + return defaultInstance; + } + + public CompilationRequest getDefaultInstanceForType() { + return defaultInstance; + } + + public enum Type + implements com.google.protobuf.Internal.EnumLite { + REBUILD(0, 1), + MAKE(1, 2), + CLEAN(2, 3), + CANCEL(3, 4), + ; + + + public final int getNumber() { return value; } + + public static Type valueOf(int value) { + switch (value) { + case 1: return REBUILD; + case 2: return MAKE; + case 3: return CLEAN; + case 4: return CANCEL; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public Type findValueByNumber(int number) { + return Type.valueOf(number) + ; } + }; + + private final int index; + private final int value; + private Type(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:org.jetbrains.jpsservice.Message.Request.CompilationRequest.Type) + } + + // required .org.jetbrains.jpsservice.Message.Request.CompilationRequest.Type command_type = 1; + public static final int COMMAND_TYPE_FIELD_NUMBER = 1; + private boolean hasCommandType; + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest.Type commandType_; + public boolean hasCommandType() { return hasCommandType; } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest.Type getCommandType() { return commandType_; } + + // optional string project_id = 2; + public static final int PROJECT_ID_FIELD_NUMBER = 2; + private boolean hasProjectId; + private java.lang.String projectId_ = ""; + public boolean hasProjectId() { return hasProjectId; } + public java.lang.String getProjectId() { return projectId_; } + + // repeated string module_name = 4; + public static final int MODULE_NAME_FIELD_NUMBER = 4; + private java.util.List moduleName_ = + java.util.Collections.emptyList(); + public java.util.List getModuleNameList() { + return moduleName_; + } + public int getModuleNameCount() { return moduleName_.size(); } + public java.lang.String getModuleName(int index) { + return moduleName_.get(index); + } + + private void initFields() { + commandType_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest.Type.REBUILD; + } + public final boolean isInitialized() { + if (!hasCommandType) return false; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasCommandType()) { + output.writeEnum(1, getCommandType().getNumber()); + } + if (hasProjectId()) { + output.writeString(2, getProjectId()); + } + for (java.lang.String element : getModuleNameList()) { + output.writeString(4, element); + } + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasCommandType()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, getCommandType().getNumber()); + } + if (hasProjectId()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(2, getProjectId()); + } + { + int dataSize = 0; + for (java.lang.String element : getModuleNameList()) { + dataSize += com.google.protobuf.CodedOutputStream + .computeStringSizeNoTag(element); + } + size += dataSize; + size += 1 * getModuleNameList().size(); + } + memoizedSerializedSize = size; + return size; + } + + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest 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.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest 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.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest 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.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest 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.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest, Builder> { + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest result; + + // Construct using org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest(); + return builder; + } + + protected org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest internalGetResult() { + return result; + } + + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest(); + return this; + } + + public Builder clone() { + return create().mergeFrom(result); + } + + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest getDefaultInstanceForType() { + return org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest.getDefaultInstance(); + } + + public boolean isInitialized() { + return result.isInitialized(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.moduleName_ != java.util.Collections.EMPTY_LIST) { + result.moduleName_ = + java.util.Collections.unmodifiableList(result.moduleName_); + } + org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest returnMe = result; + result = null; + return returnMe; + } + + public Builder mergeFrom(org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest other) { + if (other == org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest.getDefaultInstance()) return this; + if (other.hasCommandType()) { + setCommandType(other.getCommandType()); + } + if (other.hasProjectId()) { + setProjectId(other.getProjectId()); + } + if (!other.moduleName_.isEmpty()) { + if (result.moduleName_.isEmpty()) { + result.moduleName_ = new java.util.ArrayList(); + } + result.moduleName_.addAll(other.moduleName_); + } + return this; + } + + 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 8: { + int rawValue = input.readEnum(); + org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest.Type value = org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest.Type.valueOf(rawValue); + if (value != null) { + setCommandType(value); + } + break; + } + case 18: { + setProjectId(input.readString()); + break; + } + case 34: { + addModuleName(input.readString()); + break; + } + } + } + } + + + // required .org.jetbrains.jpsservice.Message.Request.CompilationRequest.Type command_type = 1; + public boolean hasCommandType() { + return result.hasCommandType(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest.Type getCommandType() { + return result.getCommandType(); + } + public Builder setCommandType(org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest.Type value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasCommandType = true; + result.commandType_ = value; + return this; + } + public Builder clearCommandType() { + result.hasCommandType = false; + result.commandType_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest.Type.REBUILD; + return this; + } + + // optional string project_id = 2; + public boolean hasProjectId() { + return result.hasProjectId(); + } + public java.lang.String getProjectId() { + return result.getProjectId(); + } + public Builder setProjectId(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasProjectId = true; + result.projectId_ = value; + return this; + } + public Builder clearProjectId() { + result.hasProjectId = false; + result.projectId_ = getDefaultInstance().getProjectId(); + return this; + } + + // repeated string module_name = 4; + public java.util.List getModuleNameList() { + return java.util.Collections.unmodifiableList(result.moduleName_); + } + public int getModuleNameCount() { + return result.getModuleNameCount(); + } + public java.lang.String getModuleName(int index) { + return result.getModuleName(index); + } + public Builder setModuleName(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.moduleName_.set(index, value); + return this; + } + public Builder addModuleName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.moduleName_.isEmpty()) { + result.moduleName_ = new java.util.ArrayList(); + } + result.moduleName_.add(value); + return this; + } + public Builder addAllModuleName( + java.lang.Iterable values) { + if (result.moduleName_.isEmpty()) { + result.moduleName_ = new java.util.ArrayList(); + } + super.addAll(values, result.moduleName_); + return this; + } + public Builder clearModuleName() { + result.moduleName_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:org.jetbrains.jpsservice.Message.Request.CompilationRequest) + } + + static { + defaultInstance = new CompilationRequest(true); + org.jetbrains.jpsservice.JpsRemoteProto.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:org.jetbrains.jpsservice.Message.Request.CompilationRequest) + } + + public static final class ShutdownCommand extends + com.google.protobuf.GeneratedMessageLite { + // Use ShutdownCommand.newBuilder() to construct. + private ShutdownCommand() { + initFields(); + } + private ShutdownCommand(boolean noInit) {} + + private static final ShutdownCommand defaultInstance; + public static ShutdownCommand getDefaultInstance() { + return defaultInstance; + } + + public ShutdownCommand getDefaultInstanceForType() { + return defaultInstance; + } + + public enum ShutdownPolicy + implements com.google.protobuf.Internal.EnumLite { + CANCEL_RUNNING_BUILDS(0, 1), + WAIT_RUNNING_BUILDS(1, 2), + ; + + + public final int getNumber() { return value; } + + public static ShutdownPolicy valueOf(int value) { + switch (value) { + case 1: return CANCEL_RUNNING_BUILDS; + case 2: return WAIT_RUNNING_BUILDS; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public ShutdownPolicy findValueByNumber(int number) { + return ShutdownPolicy.valueOf(number) + ; } + }; + + private final int index; + private final int value; + private ShutdownPolicy(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:org.jetbrains.jpsservice.Message.Request.ShutdownCommand.ShutdownPolicy) + } + + // required .org.jetbrains.jpsservice.Message.Request.ShutdownCommand.ShutdownPolicy shutdownPolicy = 1; + public static final int SHUTDOWNPOLICY_FIELD_NUMBER = 1; + private boolean hasShutdownPolicy; + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand.ShutdownPolicy shutdownPolicy_; + public boolean hasShutdownPolicy() { return hasShutdownPolicy; } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand.ShutdownPolicy getShutdownPolicy() { return shutdownPolicy_; } + + private void initFields() { + shutdownPolicy_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand.ShutdownPolicy.CANCEL_RUNNING_BUILDS; + } + public final boolean isInitialized() { + if (!hasShutdownPolicy) return false; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasShutdownPolicy()) { + output.writeEnum(1, getShutdownPolicy().getNumber()); + } + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasShutdownPolicy()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, getShutdownPolicy().getNumber()); + } + memoizedSerializedSize = size; + return size; + } + + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand 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.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand 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.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand 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.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand 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.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand, Builder> { + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand result; + + // Construct using org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand(); + return builder; + } + + protected org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand internalGetResult() { + return result; + } + + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand(); + return this; + } + + public Builder clone() { + return create().mergeFrom(result); + } + + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand getDefaultInstanceForType() { + return org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand.getDefaultInstance(); + } + + public boolean isInitialized() { + return result.isInitialized(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand returnMe = result; + result = null; + return returnMe; + } + + public Builder mergeFrom(org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand other) { + if (other == org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand.getDefaultInstance()) return this; + if (other.hasShutdownPolicy()) { + setShutdownPolicy(other.getShutdownPolicy()); + } + return this; + } + + 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 8: { + int rawValue = input.readEnum(); + org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand.ShutdownPolicy value = org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand.ShutdownPolicy.valueOf(rawValue); + if (value != null) { + setShutdownPolicy(value); + } + break; + } + } + } + } + + + // required .org.jetbrains.jpsservice.Message.Request.ShutdownCommand.ShutdownPolicy shutdownPolicy = 1; + public boolean hasShutdownPolicy() { + return result.hasShutdownPolicy(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand.ShutdownPolicy getShutdownPolicy() { + return result.getShutdownPolicy(); + } + public Builder setShutdownPolicy(org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand.ShutdownPolicy value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasShutdownPolicy = true; + result.shutdownPolicy_ = value; + return this; + } + public Builder clearShutdownPolicy() { + result.hasShutdownPolicy = false; + result.shutdownPolicy_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand.ShutdownPolicy.CANCEL_RUNNING_BUILDS; + return this; + } + + // @@protoc_insertion_point(builder_scope:org.jetbrains.jpsservice.Message.Request.ShutdownCommand) + } + + static { + defaultInstance = new ShutdownCommand(true); + org.jetbrains.jpsservice.JpsRemoteProto.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:org.jetbrains.jpsservice.Message.Request.ShutdownCommand) + } + + // required .org.jetbrains.jpsservice.Message.Request.Type request_type = 1; + public static final int REQUEST_TYPE_FIELD_NUMBER = 1; + private boolean hasRequestType; + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.Type requestType_; + public boolean hasRequestType() { return hasRequestType; } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.Type getRequestType() { return requestType_; } + + // optional .org.jetbrains.jpsservice.Message.Request.CompilationRequest compile_request = 2; + public static final int COMPILE_REQUEST_FIELD_NUMBER = 2; + private boolean hasCompileRequest; + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest compileRequest_; + public boolean hasCompileRequest() { return hasCompileRequest; } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest getCompileRequest() { return compileRequest_; } + + // optional .org.jetbrains.jpsservice.Message.Request.ShutdownCommand shutdown_command = 3; + public static final int SHUTDOWN_COMMAND_FIELD_NUMBER = 3; + private boolean hasShutdownCommand; + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand shutdownCommand_; + public boolean hasShutdownCommand() { return hasShutdownCommand; } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand getShutdownCommand() { return shutdownCommand_; } + + private void initFields() { + requestType_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.Type.COMPILE_REQUEST; + compileRequest_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest.getDefaultInstance(); + shutdownCommand_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand.getDefaultInstance(); + } + public final boolean isInitialized() { + if (!hasRequestType) return false; + if (hasCompileRequest()) { + if (!getCompileRequest().isInitialized()) return false; + } + if (hasShutdownCommand()) { + if (!getShutdownCommand().isInitialized()) return false; + } + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasRequestType()) { + output.writeEnum(1, getRequestType().getNumber()); + } + if (hasCompileRequest()) { + output.writeMessage(2, getCompileRequest()); + } + if (hasShutdownCommand()) { + output.writeMessage(3, getShutdownCommand()); + } + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasRequestType()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, getRequestType().getNumber()); + } + if (hasCompileRequest()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, getCompileRequest()); + } + if (hasShutdownCommand()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, getShutdownCommand()); + } + memoizedSerializedSize = size; + return size; + } + + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Request parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Request 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.jpsservice.JpsRemoteProto.Message.Request parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Request parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Request parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Request parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Request 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.jpsservice.JpsRemoteProto.Message.Request 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.jpsservice.JpsRemoteProto.Message.Request parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Request 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.jpsservice.JpsRemoteProto.Message.Request prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + org.jetbrains.jpsservice.JpsRemoteProto.Message.Request, Builder> { + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Request result; + + // Construct using org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new org.jetbrains.jpsservice.JpsRemoteProto.Message.Request(); + return builder; + } + + protected org.jetbrains.jpsservice.JpsRemoteProto.Message.Request internalGetResult() { + return result; + } + + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new org.jetbrains.jpsservice.JpsRemoteProto.Message.Request(); + return this; + } + + public Builder clone() { + return create().mergeFrom(result); + } + + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Request getDefaultInstanceForType() { + return org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.getDefaultInstance(); + } + + public boolean isInitialized() { + return result.isInitialized(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Request build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Request buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Request buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + org.jetbrains.jpsservice.JpsRemoteProto.Message.Request returnMe = result; + result = null; + return returnMe; + } + + public Builder mergeFrom(org.jetbrains.jpsservice.JpsRemoteProto.Message.Request other) { + if (other == org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.getDefaultInstance()) return this; + if (other.hasRequestType()) { + setRequestType(other.getRequestType()); + } + if (other.hasCompileRequest()) { + mergeCompileRequest(other.getCompileRequest()); + } + if (other.hasShutdownCommand()) { + mergeShutdownCommand(other.getShutdownCommand()); + } + return this; + } + + 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 8: { + int rawValue = input.readEnum(); + org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.Type value = org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.Type.valueOf(rawValue); + if (value != null) { + setRequestType(value); + } + break; + } + case 18: { + org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest.Builder subBuilder = org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest.newBuilder(); + if (hasCompileRequest()) { + subBuilder.mergeFrom(getCompileRequest()); + } + input.readMessage(subBuilder, extensionRegistry); + setCompileRequest(subBuilder.buildPartial()); + break; + } + case 26: { + org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand.Builder subBuilder = org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand.newBuilder(); + if (hasShutdownCommand()) { + subBuilder.mergeFrom(getShutdownCommand()); + } + input.readMessage(subBuilder, extensionRegistry); + setShutdownCommand(subBuilder.buildPartial()); + break; + } + } + } + } + + + // required .org.jetbrains.jpsservice.Message.Request.Type request_type = 1; + public boolean hasRequestType() { + return result.hasRequestType(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.Type getRequestType() { + return result.getRequestType(); + } + public Builder setRequestType(org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.Type value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasRequestType = true; + result.requestType_ = value; + return this; + } + public Builder clearRequestType() { + result.hasRequestType = false; + result.requestType_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.Type.COMPILE_REQUEST; + return this; + } + + // optional .org.jetbrains.jpsservice.Message.Request.CompilationRequest compile_request = 2; + public boolean hasCompileRequest() { + return result.hasCompileRequest(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest getCompileRequest() { + return result.getCompileRequest(); + } + public Builder setCompileRequest(org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasCompileRequest = true; + result.compileRequest_ = value; + return this; + } + public Builder setCompileRequest(org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest.Builder builderForValue) { + result.hasCompileRequest = true; + result.compileRequest_ = builderForValue.build(); + return this; + } + public Builder mergeCompileRequest(org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest value) { + if (result.hasCompileRequest() && + result.compileRequest_ != org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest.getDefaultInstance()) { + result.compileRequest_ = + org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest.newBuilder(result.compileRequest_).mergeFrom(value).buildPartial(); + } else { + result.compileRequest_ = value; + } + result.hasCompileRequest = true; + return this; + } + public Builder clearCompileRequest() { + result.hasCompileRequest = false; + result.compileRequest_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.CompilationRequest.getDefaultInstance(); + return this; + } + + // optional .org.jetbrains.jpsservice.Message.Request.ShutdownCommand shutdown_command = 3; + public boolean hasShutdownCommand() { + return result.hasShutdownCommand(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand getShutdownCommand() { + return result.getShutdownCommand(); + } + public Builder setShutdownCommand(org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasShutdownCommand = true; + result.shutdownCommand_ = value; + return this; + } + public Builder setShutdownCommand(org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand.Builder builderForValue) { + result.hasShutdownCommand = true; + result.shutdownCommand_ = builderForValue.build(); + return this; + } + public Builder mergeShutdownCommand(org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand value) { + if (result.hasShutdownCommand() && + result.shutdownCommand_ != org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand.getDefaultInstance()) { + result.shutdownCommand_ = + org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand.newBuilder(result.shutdownCommand_).mergeFrom(value).buildPartial(); + } else { + result.shutdownCommand_ = value; + } + result.hasShutdownCommand = true; + return this; + } + public Builder clearShutdownCommand() { + result.hasShutdownCommand = false; + result.shutdownCommand_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.ShutdownCommand.getDefaultInstance(); + return this; + } + + // @@protoc_insertion_point(builder_scope:org.jetbrains.jpsservice.Message.Request) + } + + static { + defaultInstance = new Request(true); + org.jetbrains.jpsservice.JpsRemoteProto.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:org.jetbrains.jpsservice.Message.Request) + } + + public static final class Response extends + com.google.protobuf.GeneratedMessageLite { + // Use Response.newBuilder() to construct. + private Response() { + initFields(); + } + private Response(boolean noInit) {} + + private static final Response defaultInstance; + public static Response getDefaultInstance() { + return defaultInstance; + } + + public Response getDefaultInstanceForType() { + return defaultInstance; + } + + public enum Type + implements com.google.protobuf.Internal.EnumLite { + COMMAND_RESPONSE(0, 1), + COMPILE_MESSAGE(1, 2), + ; + + + public final int getNumber() { return value; } + + public static Type valueOf(int value) { + switch (value) { + case 1: return COMMAND_RESPONSE; + case 2: return COMPILE_MESSAGE; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public Type findValueByNumber(int number) { + return Type.valueOf(number) + ; } + }; + + private final int index; + private final int value; + private Type(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:org.jetbrains.jpsservice.Message.Response.Type) + } + + public static final class CommandResponse extends + com.google.protobuf.GeneratedMessageLite { + // Use CommandResponse.newBuilder() to construct. + private CommandResponse() { + initFields(); + } + private CommandResponse(boolean noInit) {} + + private static final CommandResponse defaultInstance; + public static CommandResponse getDefaultInstance() { + return defaultInstance; + } + + public CommandResponse getDefaultInstanceForType() { + return defaultInstance; + } + + public enum Type + implements com.google.protobuf.Internal.EnumLite { + COMMAND_ACCEPTED(0, 1), + COMMAND_REJECTED(1, 2), + BUILD_COMPLETED(2, 3), + BUILD_CANCELED(3, 4), + ; + + + public final int getNumber() { return value; } + + public static Type valueOf(int value) { + switch (value) { + case 1: return COMMAND_ACCEPTED; + case 2: return COMMAND_REJECTED; + case 3: return BUILD_COMPLETED; + case 4: return BUILD_CANCELED; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public Type findValueByNumber(int number) { + return Type.valueOf(number) + ; } + }; + + private final int index; + private final int value; + private Type(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:org.jetbrains.jpsservice.Message.Response.CommandResponse.Type) + } + + // required .org.jetbrains.jpsservice.Message.Response.CommandResponse.Type command_type = 1; + public static final int COMMAND_TYPE_FIELD_NUMBER = 1; + private boolean hasCommandType; + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse.Type commandType_; + public boolean hasCommandType() { return hasCommandType; } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse.Type getCommandType() { return commandType_; } + + // optional string description = 2; + public static final int DESCRIPTION_FIELD_NUMBER = 2; + private boolean hasDescription; + private java.lang.String description_ = ""; + public boolean hasDescription() { return hasDescription; } + public java.lang.String getDescription() { return description_; } + + private void initFields() { + commandType_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse.Type.COMMAND_ACCEPTED; + } + public final boolean isInitialized() { + if (!hasCommandType) return false; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasCommandType()) { + output.writeEnum(1, getCommandType().getNumber()); + } + if (hasDescription()) { + output.writeString(2, getDescription()); + } + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasCommandType()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, getCommandType().getNumber()); + } + if (hasDescription()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(2, getDescription()); + } + memoizedSerializedSize = size; + return size; + } + + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse 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.jpsservice.JpsRemoteProto.Message.Response.CommandResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse 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.jpsservice.JpsRemoteProto.Message.Response.CommandResponse 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.jpsservice.JpsRemoteProto.Message.Response.CommandResponse parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse 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.jpsservice.JpsRemoteProto.Message.Response.CommandResponse prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse, Builder> { + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse result; + + // Construct using org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse(); + return builder; + } + + protected org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse internalGetResult() { + return result; + } + + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse(); + return this; + } + + public Builder clone() { + return create().mergeFrom(result); + } + + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse getDefaultInstanceForType() { + return org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse.getDefaultInstance(); + } + + public boolean isInitialized() { + return result.isInitialized(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse returnMe = result; + result = null; + return returnMe; + } + + public Builder mergeFrom(org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse other) { + if (other == org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse.getDefaultInstance()) return this; + if (other.hasCommandType()) { + setCommandType(other.getCommandType()); + } + if (other.hasDescription()) { + setDescription(other.getDescription()); + } + return this; + } + + 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 8: { + int rawValue = input.readEnum(); + org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse.Type value = org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse.Type.valueOf(rawValue); + if (value != null) { + setCommandType(value); + } + break; + } + case 18: { + setDescription(input.readString()); + break; + } + } + } + } + + + // required .org.jetbrains.jpsservice.Message.Response.CommandResponse.Type command_type = 1; + public boolean hasCommandType() { + return result.hasCommandType(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse.Type getCommandType() { + return result.getCommandType(); + } + public Builder setCommandType(org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse.Type value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasCommandType = true; + result.commandType_ = value; + return this; + } + public Builder clearCommandType() { + result.hasCommandType = false; + result.commandType_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse.Type.COMMAND_ACCEPTED; + return this; + } + + // optional string description = 2; + public boolean hasDescription() { + return result.hasDescription(); + } + public java.lang.String getDescription() { + return result.getDescription(); + } + public Builder setDescription(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasDescription = true; + result.description_ = value; + return this; + } + public Builder clearDescription() { + result.hasDescription = false; + result.description_ = getDefaultInstance().getDescription(); + return this; + } + + // @@protoc_insertion_point(builder_scope:org.jetbrains.jpsservice.Message.Response.CommandResponse) + } + + static { + defaultInstance = new CommandResponse(true); + org.jetbrains.jpsservice.JpsRemoteProto.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:org.jetbrains.jpsservice.Message.Response.CommandResponse) + } + + public static final class CompileMessage extends + com.google.protobuf.GeneratedMessageLite { + // Use CompileMessage.newBuilder() to construct. + private CompileMessage() { + initFields(); + } + private CompileMessage(boolean noInit) {} + + private static final CompileMessage defaultInstance; + public static CompileMessage getDefaultInstance() { + return defaultInstance; + } + + public CompileMessage getDefaultInstanceForType() { + return defaultInstance; + } + + public enum Kind + implements com.google.protobuf.Internal.EnumLite { + ERROR(0, 1), + WARNING(1, 2), + INFO(2, 3), + PROGRESS(3, 4), + ; + + + public final int getNumber() { return value; } + + public static Kind valueOf(int value) { + switch (value) { + case 1: return ERROR; + case 2: return WARNING; + case 3: return INFO; + case 4: return PROGRESS; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public Kind findValueByNumber(int number) { + return Kind.valueOf(number) + ; } + }; + + private final int index; + private final int value; + private Kind(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:org.jetbrains.jpsservice.Message.Response.CompileMessage.Kind) + } + + // required .org.jetbrains.jpsservice.Message.Response.CompileMessage.Kind kind = 1; + public static final int KIND_FIELD_NUMBER = 1; + private boolean hasKind; + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage.Kind kind_; + public boolean hasKind() { return hasKind; } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage.Kind getKind() { return kind_; } + + // optional string text = 2; + public static final int TEXT_FIELD_NUMBER = 2; + private boolean hasText; + private java.lang.String text_ = ""; + public boolean hasText() { return hasText; } + public java.lang.String getText() { return text_; } + + // optional string source_file_path = 3; + public static final int SOURCE_FILE_PATH_FIELD_NUMBER = 3; + private boolean hasSourceFilePath; + private java.lang.String sourceFilePath_ = ""; + public boolean hasSourceFilePath() { return hasSourceFilePath; } + public java.lang.String getSourceFilePath() { return sourceFilePath_; } + + // optional uint32 line = 4; + public static final int LINE_FIELD_NUMBER = 4; + private boolean hasLine; + private int line_ = 0; + public boolean hasLine() { return hasLine; } + public int getLine() { return line_; } + + // optional uint32 column = 5; + public static final int COLUMN_FIELD_NUMBER = 5; + private boolean hasColumn; + private int column_ = 0; + public boolean hasColumn() { return hasColumn; } + public int getColumn() { return column_; } + + private void initFields() { + kind_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage.Kind.ERROR; + } + public final boolean isInitialized() { + if (!hasKind) return false; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasKind()) { + output.writeEnum(1, getKind().getNumber()); + } + if (hasText()) { + output.writeString(2, getText()); + } + if (hasSourceFilePath()) { + output.writeString(3, getSourceFilePath()); + } + if (hasLine()) { + output.writeUInt32(4, getLine()); + } + if (hasColumn()) { + output.writeUInt32(5, getColumn()); + } + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasKind()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, getKind().getNumber()); + } + if (hasText()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(2, getText()); + } + if (hasSourceFilePath()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(3, getSourceFilePath()); + } + if (hasLine()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(4, getLine()); + } + if (hasColumn()) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(5, getColumn()); + } + memoizedSerializedSize = size; + return size; + } + + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage 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.jpsservice.JpsRemoteProto.Message.Response.CompileMessage parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage 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.jpsservice.JpsRemoteProto.Message.Response.CompileMessage 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.jpsservice.JpsRemoteProto.Message.Response.CompileMessage parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage 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.jpsservice.JpsRemoteProto.Message.Response.CompileMessage prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage, Builder> { + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage result; + + // Construct using org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage(); + return builder; + } + + protected org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage internalGetResult() { + return result; + } + + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage(); + return this; + } + + public Builder clone() { + return create().mergeFrom(result); + } + + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage getDefaultInstanceForType() { + return org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage.getDefaultInstance(); + } + + public boolean isInitialized() { + return result.isInitialized(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage returnMe = result; + result = null; + return returnMe; + } + + public Builder mergeFrom(org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage other) { + if (other == org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage.getDefaultInstance()) return this; + if (other.hasKind()) { + setKind(other.getKind()); + } + if (other.hasText()) { + setText(other.getText()); + } + if (other.hasSourceFilePath()) { + setSourceFilePath(other.getSourceFilePath()); + } + if (other.hasLine()) { + setLine(other.getLine()); + } + if (other.hasColumn()) { + setColumn(other.getColumn()); + } + return this; + } + + 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 8: { + int rawValue = input.readEnum(); + org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage.Kind value = org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage.Kind.valueOf(rawValue); + if (value != null) { + setKind(value); + } + break; + } + case 18: { + setText(input.readString()); + break; + } + case 26: { + setSourceFilePath(input.readString()); + break; + } + case 32: { + setLine(input.readUInt32()); + break; + } + case 40: { + setColumn(input.readUInt32()); + break; + } + } + } + } + + + // required .org.jetbrains.jpsservice.Message.Response.CompileMessage.Kind kind = 1; + public boolean hasKind() { + return result.hasKind(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage.Kind getKind() { + return result.getKind(); + } + public Builder setKind(org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage.Kind value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasKind = true; + result.kind_ = value; + return this; + } + public Builder clearKind() { + result.hasKind = false; + result.kind_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage.Kind.ERROR; + return this; + } + + // optional string text = 2; + public boolean hasText() { + return result.hasText(); + } + public java.lang.String getText() { + return result.getText(); + } + public Builder setText(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasText = true; + result.text_ = value; + return this; + } + public Builder clearText() { + result.hasText = false; + result.text_ = getDefaultInstance().getText(); + return this; + } + + // optional string source_file_path = 3; + public boolean hasSourceFilePath() { + return result.hasSourceFilePath(); + } + public java.lang.String getSourceFilePath() { + return result.getSourceFilePath(); + } + public Builder setSourceFilePath(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasSourceFilePath = true; + result.sourceFilePath_ = value; + return this; + } + public Builder clearSourceFilePath() { + result.hasSourceFilePath = false; + result.sourceFilePath_ = getDefaultInstance().getSourceFilePath(); + return this; + } + + // optional uint32 line = 4; + public boolean hasLine() { + return result.hasLine(); + } + public int getLine() { + return result.getLine(); + } + public Builder setLine(int value) { + result.hasLine = true; + result.line_ = value; + return this; + } + public Builder clearLine() { + result.hasLine = false; + result.line_ = 0; + return this; + } + + // optional uint32 column = 5; + public boolean hasColumn() { + return result.hasColumn(); + } + public int getColumn() { + return result.getColumn(); + } + public Builder setColumn(int value) { + result.hasColumn = true; + result.column_ = value; + return this; + } + public Builder clearColumn() { + result.hasColumn = false; + result.column_ = 0; + return this; + } + + // @@protoc_insertion_point(builder_scope:org.jetbrains.jpsservice.Message.Response.CompileMessage) + } + + static { + defaultInstance = new CompileMessage(true); + org.jetbrains.jpsservice.JpsRemoteProto.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:org.jetbrains.jpsservice.Message.Response.CompileMessage) + } + + // required .org.jetbrains.jpsservice.Message.Response.Type response_type = 1; + public static final int RESPONSE_TYPE_FIELD_NUMBER = 1; + private boolean hasResponseType; + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.Type responseType_; + public boolean hasResponseType() { return hasResponseType; } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.Type getResponseType() { return responseType_; } + + // optional .org.jetbrains.jpsservice.Message.Response.CommandResponse command_response = 2; + public static final int COMMAND_RESPONSE_FIELD_NUMBER = 2; + private boolean hasCommandResponse; + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse commandResponse_; + public boolean hasCommandResponse() { return hasCommandResponse; } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse getCommandResponse() { return commandResponse_; } + + // optional .org.jetbrains.jpsservice.Message.Response.CompileMessage compile_message = 3; + public static final int COMPILE_MESSAGE_FIELD_NUMBER = 3; + private boolean hasCompileMessage; + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage compileMessage_; + public boolean hasCompileMessage() { return hasCompileMessage; } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage getCompileMessage() { return compileMessage_; } + + private void initFields() { + responseType_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.Type.COMMAND_RESPONSE; + commandResponse_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse.getDefaultInstance(); + compileMessage_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage.getDefaultInstance(); + } + public final boolean isInitialized() { + if (!hasResponseType) return false; + if (hasCommandResponse()) { + if (!getCommandResponse().isInitialized()) return false; + } + if (hasCompileMessage()) { + if (!getCompileMessage().isInitialized()) return false; + } + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasResponseType()) { + output.writeEnum(1, getResponseType().getNumber()); + } + if (hasCommandResponse()) { + output.writeMessage(2, getCommandResponse()); + } + if (hasCompileMessage()) { + output.writeMessage(3, getCompileMessage()); + } + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasResponseType()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, getResponseType().getNumber()); + } + if (hasCommandResponse()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, getCommandResponse()); + } + if (hasCompileMessage()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, getCompileMessage()); + } + memoizedSerializedSize = size; + return size; + } + + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Response parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Response 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.jpsservice.JpsRemoteProto.Message.Response parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Response parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Response parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Response parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Response 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.jpsservice.JpsRemoteProto.Message.Response 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.jpsservice.JpsRemoteProto.Message.Response parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message.Response 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.jpsservice.JpsRemoteProto.Message.Response prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + org.jetbrains.jpsservice.JpsRemoteProto.Message.Response, Builder> { + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Response result; + + // Construct using org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new org.jetbrains.jpsservice.JpsRemoteProto.Message.Response(); + return builder; + } + + protected org.jetbrains.jpsservice.JpsRemoteProto.Message.Response internalGetResult() { + return result; + } + + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new org.jetbrains.jpsservice.JpsRemoteProto.Message.Response(); + return this; + } + + public Builder clone() { + return create().mergeFrom(result); + } + + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Response getDefaultInstanceForType() { + return org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.getDefaultInstance(); + } + + public boolean isInitialized() { + return result.isInitialized(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Response build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Response buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Response buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + org.jetbrains.jpsservice.JpsRemoteProto.Message.Response returnMe = result; + result = null; + return returnMe; + } + + public Builder mergeFrom(org.jetbrains.jpsservice.JpsRemoteProto.Message.Response other) { + if (other == org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.getDefaultInstance()) return this; + if (other.hasResponseType()) { + setResponseType(other.getResponseType()); + } + if (other.hasCommandResponse()) { + mergeCommandResponse(other.getCommandResponse()); + } + if (other.hasCompileMessage()) { + mergeCompileMessage(other.getCompileMessage()); + } + return this; + } + + 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 8: { + int rawValue = input.readEnum(); + org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.Type value = org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.Type.valueOf(rawValue); + if (value != null) { + setResponseType(value); + } + break; + } + case 18: { + org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse.Builder subBuilder = org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse.newBuilder(); + if (hasCommandResponse()) { + subBuilder.mergeFrom(getCommandResponse()); + } + input.readMessage(subBuilder, extensionRegistry); + setCommandResponse(subBuilder.buildPartial()); + break; + } + case 26: { + org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage.Builder subBuilder = org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage.newBuilder(); + if (hasCompileMessage()) { + subBuilder.mergeFrom(getCompileMessage()); + } + input.readMessage(subBuilder, extensionRegistry); + setCompileMessage(subBuilder.buildPartial()); + break; + } + } + } + } + + + // required .org.jetbrains.jpsservice.Message.Response.Type response_type = 1; + public boolean hasResponseType() { + return result.hasResponseType(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.Type getResponseType() { + return result.getResponseType(); + } + public Builder setResponseType(org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.Type value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasResponseType = true; + result.responseType_ = value; + return this; + } + public Builder clearResponseType() { + result.hasResponseType = false; + result.responseType_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.Type.COMMAND_RESPONSE; + return this; + } + + // optional .org.jetbrains.jpsservice.Message.Response.CommandResponse command_response = 2; + public boolean hasCommandResponse() { + return result.hasCommandResponse(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse getCommandResponse() { + return result.getCommandResponse(); + } + public Builder setCommandResponse(org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasCommandResponse = true; + result.commandResponse_ = value; + return this; + } + public Builder setCommandResponse(org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse.Builder builderForValue) { + result.hasCommandResponse = true; + result.commandResponse_ = builderForValue.build(); + return this; + } + public Builder mergeCommandResponse(org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse value) { + if (result.hasCommandResponse() && + result.commandResponse_ != org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse.getDefaultInstance()) { + result.commandResponse_ = + org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse.newBuilder(result.commandResponse_).mergeFrom(value).buildPartial(); + } else { + result.commandResponse_ = value; + } + result.hasCommandResponse = true; + return this; + } + public Builder clearCommandResponse() { + result.hasCommandResponse = false; + result.commandResponse_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CommandResponse.getDefaultInstance(); + return this; + } + + // optional .org.jetbrains.jpsservice.Message.Response.CompileMessage compile_message = 3; + public boolean hasCompileMessage() { + return result.hasCompileMessage(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage getCompileMessage() { + return result.getCompileMessage(); + } + public Builder setCompileMessage(org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasCompileMessage = true; + result.compileMessage_ = value; + return this; + } + public Builder setCompileMessage(org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage.Builder builderForValue) { + result.hasCompileMessage = true; + result.compileMessage_ = builderForValue.build(); + return this; + } + public Builder mergeCompileMessage(org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage value) { + if (result.hasCompileMessage() && + result.compileMessage_ != org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage.getDefaultInstance()) { + result.compileMessage_ = + org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage.newBuilder(result.compileMessage_).mergeFrom(value).buildPartial(); + } else { + result.compileMessage_ = value; + } + result.hasCompileMessage = true; + return this; + } + public Builder clearCompileMessage() { + result.hasCompileMessage = false; + result.compileMessage_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.CompileMessage.getDefaultInstance(); + return this; + } + + // @@protoc_insertion_point(builder_scope:org.jetbrains.jpsservice.Message.Response) + } + + static { + defaultInstance = new Response(true); + org.jetbrains.jpsservice.JpsRemoteProto.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:org.jetbrains.jpsservice.Message.Response) + } + + // required .org.jetbrains.jpsservice.Message.UUID session_id = 1; + public static final int SESSION_ID_FIELD_NUMBER = 1; + private boolean hasSessionId; + private org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID sessionId_; + public boolean hasSessionId() { return hasSessionId; } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID getSessionId() { return sessionId_; } + + // required .org.jetbrains.jpsservice.Message.Type message_type = 2; + public static final int MESSAGE_TYPE_FIELD_NUMBER = 2; + private boolean hasMessageType; + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Type messageType_; + public boolean hasMessageType() { return hasMessageType; } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Type getMessageType() { return messageType_; } + + // optional .org.jetbrains.jpsservice.Message.Request request = 3; + public static final int REQUEST_FIELD_NUMBER = 3; + private boolean hasRequest; + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Request request_; + public boolean hasRequest() { return hasRequest; } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Request getRequest() { return request_; } + + // optional .org.jetbrains.jpsservice.Message.Response response = 4; + public static final int RESPONSE_FIELD_NUMBER = 4; + private boolean hasResponse; + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Response response_; + public boolean hasResponse() { return hasResponse; } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Response getResponse() { return response_; } + + // optional .org.jetbrains.jpsservice.Message.Failure failure = 5; + public static final int FAILURE_FIELD_NUMBER = 5; + private boolean hasFailure; + private org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure failure_; + public boolean hasFailure() { return hasFailure; } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure getFailure() { return failure_; } + + private void initFields() { + sessionId_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID.getDefaultInstance(); + messageType_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Type.REQUEST; + request_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.getDefaultInstance(); + response_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.getDefaultInstance(); + failure_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure.getDefaultInstance(); + } + public final boolean isInitialized() { + if (!hasSessionId) return false; + if (!hasMessageType) return false; + if (!getSessionId().isInitialized()) return false; + if (hasRequest()) { + if (!getRequest().isInitialized()) return false; + } + if (hasResponse()) { + if (!getResponse().isInitialized()) return false; + } + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasSessionId()) { + output.writeMessage(1, getSessionId()); + } + if (hasMessageType()) { + output.writeEnum(2, getMessageType().getNumber()); + } + if (hasRequest()) { + output.writeMessage(3, getRequest()); + } + if (hasResponse()) { + output.writeMessage(4, getResponse()); + } + if (hasFailure()) { + output.writeMessage(5, getFailure()); + } + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasSessionId()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, getSessionId()); + } + if (hasMessageType()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(2, getMessageType().getNumber()); + } + if (hasRequest()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, getRequest()); + } + if (hasResponse()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, getResponse()); + } + if (hasFailure()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, getFailure()); + } + memoizedSerializedSize = size; + return size; + } + + public static org.jetbrains.jpsservice.JpsRemoteProto.Message parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message 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.jpsservice.JpsRemoteProto.Message parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message 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.jpsservice.JpsRemoteProto.Message 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.jpsservice.JpsRemoteProto.Message parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static org.jetbrains.jpsservice.JpsRemoteProto.Message 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.jpsservice.JpsRemoteProto.Message prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + org.jetbrains.jpsservice.JpsRemoteProto.Message, Builder> { + private org.jetbrains.jpsservice.JpsRemoteProto.Message result; + + // Construct using org.jetbrains.jpsservice.JpsRemoteProto.Message.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new org.jetbrains.jpsservice.JpsRemoteProto.Message(); + return builder; + } + + protected org.jetbrains.jpsservice.JpsRemoteProto.Message internalGetResult() { + return result; + } + + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new org.jetbrains.jpsservice.JpsRemoteProto.Message(); + return this; + } + + public Builder clone() { + return create().mergeFrom(result); + } + + public org.jetbrains.jpsservice.JpsRemoteProto.Message getDefaultInstanceForType() { + return org.jetbrains.jpsservice.JpsRemoteProto.Message.getDefaultInstance(); + } + + public boolean isInitialized() { + return result.isInitialized(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private org.jetbrains.jpsservice.JpsRemoteProto.Message buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + public org.jetbrains.jpsservice.JpsRemoteProto.Message buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + org.jetbrains.jpsservice.JpsRemoteProto.Message returnMe = result; + result = null; + return returnMe; + } + + public Builder mergeFrom(org.jetbrains.jpsservice.JpsRemoteProto.Message other) { + if (other == org.jetbrains.jpsservice.JpsRemoteProto.Message.getDefaultInstance()) return this; + if (other.hasSessionId()) { + mergeSessionId(other.getSessionId()); + } + if (other.hasMessageType()) { + setMessageType(other.getMessageType()); + } + if (other.hasRequest()) { + mergeRequest(other.getRequest()); + } + if (other.hasResponse()) { + mergeResponse(other.getResponse()); + } + if (other.hasFailure()) { + mergeFailure(other.getFailure()); + } + return this; + } + + 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: { + org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID.Builder subBuilder = org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID.newBuilder(); + if (hasSessionId()) { + subBuilder.mergeFrom(getSessionId()); + } + input.readMessage(subBuilder, extensionRegistry); + setSessionId(subBuilder.buildPartial()); + break; + } + case 16: { + int rawValue = input.readEnum(); + org.jetbrains.jpsservice.JpsRemoteProto.Message.Type value = org.jetbrains.jpsservice.JpsRemoteProto.Message.Type.valueOf(rawValue); + if (value != null) { + setMessageType(value); + } + break; + } + case 26: { + org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.Builder subBuilder = org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.newBuilder(); + if (hasRequest()) { + subBuilder.mergeFrom(getRequest()); + } + input.readMessage(subBuilder, extensionRegistry); + setRequest(subBuilder.buildPartial()); + break; + } + case 34: { + org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.Builder subBuilder = org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.newBuilder(); + if (hasResponse()) { + subBuilder.mergeFrom(getResponse()); + } + input.readMessage(subBuilder, extensionRegistry); + setResponse(subBuilder.buildPartial()); + break; + } + case 42: { + org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure.Builder subBuilder = org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure.newBuilder(); + if (hasFailure()) { + subBuilder.mergeFrom(getFailure()); + } + input.readMessage(subBuilder, extensionRegistry); + setFailure(subBuilder.buildPartial()); + break; + } + } + } + } + + + // required .org.jetbrains.jpsservice.Message.UUID session_id = 1; + public boolean hasSessionId() { + return result.hasSessionId(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID getSessionId() { + return result.getSessionId(); + } + public Builder setSessionId(org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasSessionId = true; + result.sessionId_ = value; + return this; + } + public Builder setSessionId(org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID.Builder builderForValue) { + result.hasSessionId = true; + result.sessionId_ = builderForValue.build(); + return this; + } + public Builder mergeSessionId(org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID value) { + if (result.hasSessionId() && + result.sessionId_ != org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID.getDefaultInstance()) { + result.sessionId_ = + org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID.newBuilder(result.sessionId_).mergeFrom(value).buildPartial(); + } else { + result.sessionId_ = value; + } + result.hasSessionId = true; + return this; + } + public Builder clearSessionId() { + result.hasSessionId = false; + result.sessionId_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.UUID.getDefaultInstance(); + return this; + } + + // required .org.jetbrains.jpsservice.Message.Type message_type = 2; + public boolean hasMessageType() { + return result.hasMessageType(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Type getMessageType() { + return result.getMessageType(); + } + public Builder setMessageType(org.jetbrains.jpsservice.JpsRemoteProto.Message.Type value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasMessageType = true; + result.messageType_ = value; + return this; + } + public Builder clearMessageType() { + result.hasMessageType = false; + result.messageType_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Type.REQUEST; + return this; + } + + // optional .org.jetbrains.jpsservice.Message.Request request = 3; + public boolean hasRequest() { + return result.hasRequest(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Request getRequest() { + return result.getRequest(); + } + public Builder setRequest(org.jetbrains.jpsservice.JpsRemoteProto.Message.Request value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasRequest = true; + result.request_ = value; + return this; + } + public Builder setRequest(org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.Builder builderForValue) { + result.hasRequest = true; + result.request_ = builderForValue.build(); + return this; + } + public Builder mergeRequest(org.jetbrains.jpsservice.JpsRemoteProto.Message.Request value) { + if (result.hasRequest() && + result.request_ != org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.getDefaultInstance()) { + result.request_ = + org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.newBuilder(result.request_).mergeFrom(value).buildPartial(); + } else { + result.request_ = value; + } + result.hasRequest = true; + return this; + } + public Builder clearRequest() { + result.hasRequest = false; + result.request_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Request.getDefaultInstance(); + return this; + } + + // optional .org.jetbrains.jpsservice.Message.Response response = 4; + public boolean hasResponse() { + return result.hasResponse(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Response getResponse() { + return result.getResponse(); + } + public Builder setResponse(org.jetbrains.jpsservice.JpsRemoteProto.Message.Response value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasResponse = true; + result.response_ = value; + return this; + } + public Builder setResponse(org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.Builder builderForValue) { + result.hasResponse = true; + result.response_ = builderForValue.build(); + return this; + } + public Builder mergeResponse(org.jetbrains.jpsservice.JpsRemoteProto.Message.Response value) { + if (result.hasResponse() && + result.response_ != org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.getDefaultInstance()) { + result.response_ = + org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.newBuilder(result.response_).mergeFrom(value).buildPartial(); + } else { + result.response_ = value; + } + result.hasResponse = true; + return this; + } + public Builder clearResponse() { + result.hasResponse = false; + result.response_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Response.getDefaultInstance(); + return this; + } + + // optional .org.jetbrains.jpsservice.Message.Failure failure = 5; + public boolean hasFailure() { + return result.hasFailure(); + } + public org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure getFailure() { + return result.getFailure(); + } + public Builder setFailure(org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasFailure = true; + result.failure_ = value; + return this; + } + public Builder setFailure(org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure.Builder builderForValue) { + result.hasFailure = true; + result.failure_ = builderForValue.build(); + return this; + } + public Builder mergeFailure(org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure value) { + if (result.hasFailure() && + result.failure_ != org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure.getDefaultInstance()) { + result.failure_ = + org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure.newBuilder(result.failure_).mergeFrom(value).buildPartial(); + } else { + result.failure_ = value; + } + result.hasFailure = true; + return this; + } + public Builder clearFailure() { + result.hasFailure = false; + result.failure_ = org.jetbrains.jpsservice.JpsRemoteProto.Message.Failure.getDefaultInstance(); + return this; + } + + // @@protoc_insertion_point(builder_scope:org.jetbrains.jpsservice.Message) + } + + static { + defaultInstance = new Message(true); + org.jetbrains.jpsservice.JpsRemoteProto.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:org.jetbrains.jpsservice.Message) + } + + + static { + } + + public static void internalForceInit() {} + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/java/compiler/compile-server/src/org/jetbrains/jpsservice/JpsServerResponseHandler.java b/java/compiler/compile-server/src/org/jetbrains/jpsservice/JpsServerResponseHandler.java new file mode 100644 index 000000000000..b3c46364112b --- /dev/null +++ b/java/compiler/compile-server/src/org/jetbrains/jpsservice/JpsServerResponseHandler.java @@ -0,0 +1,20 @@ +package org.jetbrains.jpsservice; + +/** + * @author Eugene Zhuravlev + * Date: 8/15/11 + */ +public interface JpsServerResponseHandler { + void handleCompileMessage(JpsRemoteProto.Message.Response.CompileMessage compileResponse); + + /** + * + * @param response + * @return false + */ + void handleCommandResponse(JpsRemoteProto.Message.Response.CommandResponse response); + + void handleFailure(JpsRemoteProto.Message.Failure failure); + + void sessionTerminated(); +} diff --git a/java/compiler/compile-server/src/org/jetbrains/jpsservice/JpsServerResponseHandlerAdapter.java b/java/compiler/compile-server/src/org/jetbrains/jpsservice/JpsServerResponseHandlerAdapter.java new file mode 100644 index 000000000000..e5611023d47e --- /dev/null +++ b/java/compiler/compile-server/src/org/jetbrains/jpsservice/JpsServerResponseHandlerAdapter.java @@ -0,0 +1,20 @@ +package org.jetbrains.jpsservice; + +/** + * @author Eugene Zhuravlev + * Date: 8/15/11 + */ +public class JpsServerResponseHandlerAdapter implements JpsServerResponseHandler { + + public void handleCompileMessage(JpsRemoteProto.Message.Response.CompileMessage compileResponse) { + } + + public void handleCommandResponse(JpsRemoteProto.Message.Response.CommandResponse response) { + } + + public void handleFailure(JpsRemoteProto.Message.Failure failure) { + } + + public void sessionTerminated() { + } +} diff --git a/java/compiler/compile-server/src/org/jetbrains/jpsservice/Server.java b/java/compiler/compile-server/src/org/jetbrains/jpsservice/Server.java new file mode 100644 index 000000000000..ebe7c0f0d074 --- /dev/null +++ b/java/compiler/compile-server/src/org/jetbrains/jpsservice/Server.java @@ -0,0 +1,97 @@ +package org.jetbrains.jpsservice; + +import org.jboss.netty.bootstrap.ServerBootstrap; +import org.jboss.netty.channel.*; +import org.jboss.netty.channel.group.ChannelGroup; +import org.jboss.netty.channel.group.ChannelGroupFuture; +import org.jboss.netty.channel.group.DefaultChannelGroup; +import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory; +import org.jboss.netty.handler.codec.protobuf.ProtobufDecoder; +import org.jboss.netty.handler.codec.protobuf.ProtobufEncoder; +import org.jboss.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder; +import org.jboss.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender; +import org.jetbrains.jpsservice.impl.JpsServerMessageHandler; + +import java.net.InetSocketAddress; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +/** + * @author Eugene Zhuravlev + * Date: 8/11/11 + */ +public class Server { + public static final int DEFAULT_SERVER_PORT = 7777; + private static final int MAX_SIMULTANEOUS_BUILD_SESSIONS = Math.max(2, Runtime.getRuntime().availableProcessors()); + + private final ChannelGroup myAllOpenChannels = new DefaultChannelGroup("jps-server"); + private final ChannelFactory myChannelFactory; + private final ChannelPipelineFactory myPipelineFactory; + private final ExecutorService myBuildsExecutor; + + public Server() { + final ExecutorService threadPool = Executors.newCachedThreadPool(); + myBuildsExecutor = Executors.newFixedThreadPool(MAX_SIMULTANEOUS_BUILD_SESSIONS); + myChannelFactory = new NioServerSocketChannelFactory(threadPool, threadPool, 1); + final ChannelRegistrar channelRegistrar = new ChannelRegistrar(); + final JpsServerMessageHandler messageHandler = new JpsServerMessageHandler(myBuildsExecutor, this); + myPipelineFactory = new ChannelPipelineFactory() { + public ChannelPipeline getPipeline() throws Exception { + return Channels.pipeline( + channelRegistrar, + new ProtobufVarint32FrameDecoder(), + new ProtobufDecoder(JpsRemoteProto.Message.getDefaultInstance()), + new ProtobufVarint32LengthFieldPrepender(), + new ProtobufEncoder(), + messageHandler + ); + } + }; + } + + public void start(int listenPort) { + final ServerBootstrap bootstrap = new ServerBootstrap(myChannelFactory); + bootstrap.setPipelineFactory(myPipelineFactory); + bootstrap.setOption("child.tcpNoDelay", true); + bootstrap.setOption("child.keepAlive", true); + final Channel serverChannel = bootstrap.bind(new InetSocketAddress(listenPort)); + myAllOpenChannels.add(serverChannel); + } + + public void stop() { + try { + myBuildsExecutor.shutdownNow(); + final ChannelGroupFuture closeFuture = myAllOpenChannels.close(); + closeFuture.awaitUninterruptibly(); + } + finally { + myChannelFactory.releaseExternalResources(); + } + } + + public static void main(String[] args) { + int port = DEFAULT_SERVER_PORT; + if (args.length > 0) { + try { + port = Integer.parseInt(args[0]); + } + catch (NumberFormatException e) { + System.out.println("Error parsing port, using default ("+port+"): " + e.getMessage()); + } + } + final Server server = new Server(); + server.start(port); + Runtime.getRuntime().addShutdownHook(new Thread("Shutdown hook thread") { + public void run() { + server.stop(); + } + }); + } + + private class ChannelRegistrar extends SimpleChannelUpstreamHandler { + public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { + myAllOpenChannels.add(e.getChannel()); + super.channelOpen(ctx, e); + } + } +} diff --git a/java/compiler/compile-server/src/org/jetbrains/jpsservice/impl/JpsClientMessageHandler.java b/java/compiler/compile-server/src/org/jetbrains/jpsservice/impl/JpsClientMessageHandler.java new file mode 100644 index 000000000000..33888e922c39 --- /dev/null +++ b/java/compiler/compile-server/src/org/jetbrains/jpsservice/impl/JpsClientMessageHandler.java @@ -0,0 +1,70 @@ +package org.jetbrains.jpsservice.impl; + +import org.jboss.netty.channel.ChannelHandlerContext; +import org.jboss.netty.channel.ExceptionEvent; +import org.jboss.netty.channel.MessageEvent; +import org.jboss.netty.channel.SimpleChannelHandler; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jpsservice.JpsRemoteProto; +import org.jetbrains.jpsservice.JpsServerResponseHandler; + +import java.util.UUID; + +/** + * @author Eugene Zhuravlev + * Date: 8/11/11 + */ +public abstract class JpsClientMessageHandler extends SimpleChannelHandler{ + + public final void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { + final JpsRemoteProto.Message message = (JpsRemoteProto.Message)e.getMessage(); + final UUID sessionId = ProtoUtil.fromProtoUUID(message.getSessionId()); + final JpsRemoteProto.Message.Type messageType = message.getMessageType(); + + final JpsServerResponseHandler handler = getHandler(sessionId); + if (handler == null) { + return; // discard message + } + + boolean terminateSession = false; + + try { + if (messageType == JpsRemoteProto.Message.Type.FAILURE) { + terminateSession = true; + handler.handleFailure(message.getFailure()); + } + else if (messageType == JpsRemoteProto.Message.Type.RESPONSE) { + final JpsRemoteProto.Message.Response response = message.getResponse(); + final JpsRemoteProto.Message.Response.Type responseType = response.getResponseType(); + if (responseType == JpsRemoteProto.Message.Response.Type.COMMAND_RESPONSE) { + final JpsRemoteProto.Message.Response.CommandResponse commandResponse = response.getCommandResponse(); + terminateSession = commandResponse.getCommandType() != JpsRemoteProto.Message.Response.CommandResponse.Type.COMMAND_ACCEPTED; + handler.handleCommandResponse(commandResponse); + } + else if (responseType == JpsRemoteProto.Message.Response.Type.COMPILE_MESSAGE) { + handler.handleCompileMessage(response.getCompileMessage()); + } + else { + throw new Exception("Unknown response: " + response); + } + } + else { + throw new Exception("Unknown message received: " + message); + } + } + finally { + if (terminateSession) { + terminateSession(sessionId); + } + } + } + + public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception { + super.exceptionCaught(ctx, e); + } + + @Nullable + protected abstract JpsServerResponseHandler getHandler(UUID sessionId); + + protected abstract void terminateSession(UUID sessionId); +} diff --git a/java/compiler/compile-server/src/org/jetbrains/jpsservice/impl/JpsServerMessageHandler.java b/java/compiler/compile-server/src/org/jetbrains/jpsservice/impl/JpsServerMessageHandler.java new file mode 100644 index 000000000000..d146a94b534d --- /dev/null +++ b/java/compiler/compile-server/src/org/jetbrains/jpsservice/impl/JpsServerMessageHandler.java @@ -0,0 +1,236 @@ +package org.jetbrains.jpsservice.impl; + +import org.codehaus.gant.GantBinding; +import org.jboss.netty.channel.*; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.ether.ProjectWrapper; +import org.jetbrains.jps.Project; +import org.jetbrains.jps.listeners.BuildInfoPrinter; +import org.jetbrains.jpsservice.JpsRemoteProto; +import org.jetbrains.jpsservice.Server; + +import java.io.PrintStream; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutorService; + +/** + * @author Eugene Zhuravlev + * Date: 8/11/11 + */ +public class JpsServerMessageHandler extends SimpleChannelHandler { + private ConcurrentHashMap myBuildsInProgress = new ConcurrentHashMap(); + private final ExecutorService myBuildsExecutorService; + private final Server myServer; + + public JpsServerMessageHandler(ExecutorService buildsExecutorService, Server server) { + myBuildsExecutorService = buildsExecutorService; + myServer = server; + } + + public void messageReceived(final ChannelHandlerContext ctx, MessageEvent e) throws Exception { + final JpsRemoteProto.Message message = (JpsRemoteProto.Message)e.getMessage(); + final UUID sessionId = ProtoUtil.fromProtoUUID(message.getSessionId()); + + JpsRemoteProto.Message responseMessage = null; + boolean shutdown = false; + + if (message.getMessageType() != JpsRemoteProto.Message.Type.REQUEST) { + responseMessage = ProtoUtil.toMessage(sessionId, ProtoUtil.createFailure("Cannot handle message " + message.toString())); + } + else if (!message.hasRequest()) { + responseMessage = ProtoUtil.toMessage(sessionId, ProtoUtil.createFailure("No request in message: " + message.toString())); + } + else { + final JpsRemoteProto.Message.Request request = message.getRequest(); + final JpsRemoteProto.Message.Request.Type requestType = request.getRequestType(); + if (requestType == JpsRemoteProto.Message.Request.Type.COMPILE_REQUEST) { + final JpsRemoteProto.Message.Response response = startBuild(sessionId, ctx, request.getCompileRequest()); + if (response != null) { + responseMessage = ProtoUtil.toMessage(sessionId, response); + } + } + else if (requestType == JpsRemoteProto.Message.Request.Type.SHUTDOWN_COMMAND){ + shutdown = true; + responseMessage = ProtoUtil.toMessage(sessionId, ProtoUtil.createCommandAcceptedResponse(null)); + } + else { + responseMessage = ProtoUtil.toMessage(sessionId, ProtoUtil.createFailure("Unknown request: " + message)); + } + } + if (responseMessage != null) { + final ChannelFuture future = Channels.write(ctx.getChannel(), responseMessage); + if (shutdown) { + future.addListener(new ChannelFutureListener() { + public void operationComplete(ChannelFuture future) throws Exception { + // todo pay attention to policy + myBuildsExecutorService.submit(new Runnable() { + public void run() { + myServer.stop(); + } + }); + } + }); + } + } + } + + @Nullable + private JpsRemoteProto.Message.Response startBuild(UUID sessionId, final ChannelHandlerContext channelContext, JpsRemoteProto.Message.Request.CompilationRequest compileRequest) { + if (!compileRequest.hasProjectId()) { + return ProtoUtil.createCommandRejectedResponse("No project specified"); + } + + final String projectId = compileRequest.getProjectId(); + final JpsRemoteProto.Message.Request.CompilationRequest.Type commandType = compileRequest.getCommandType(); + + if (commandType == JpsRemoteProto.Message.Request.CompilationRequest.Type.CLEAN || + commandType == JpsRemoteProto.Message.Request.CompilationRequest.Type.MAKE || + commandType == JpsRemoteProto.Message.Request.CompilationRequest.Type.REBUILD) { + if (myBuildsInProgress.putIfAbsent(projectId, "") != null) { + return ProtoUtil.createCommandRejectedResponse("Project is being compiled already"); + } + myBuildsExecutorService.submit(new CompilationTask(sessionId, channelContext, commandType, projectId, compileRequest.getModuleNameList())); + return null; // the rest will be handled asynchronously + } + + if (commandType == JpsRemoteProto.Message.Request.CompilationRequest.Type.CANCEL) { + final String projectInProgress = myBuildsInProgress.remove(projectId); + if (projectInProgress == null) { + return ProtoUtil.createCommandRejectedResponse("Build for requested project is not running"); + } + // todo: perform cancel + return ProtoUtil.createBuildCanceledResponse(projectId); + } + + return ProtoUtil.createCommandRejectedResponse("Unsupported command: '" + commandType + "'"); + } + + public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception { + super.exceptionCaught(ctx, e); + } + + private class CompilationTask implements Runnable { + + private final UUID mySessionId; + private final ChannelHandlerContext myChannelContext; + private final JpsRemoteProto.Message.Request.CompilationRequest.Type myCompileType; + private final String myProjectPath; + private final List myModules; + + public CompilationTask(UUID sessionId, ChannelHandlerContext channelContext, JpsRemoteProto.Message.Request.CompilationRequest.Type compileType, String projectId, List modules) { + mySessionId = sessionId; + myChannelContext = channelContext; + myCompileType = compileType; + myProjectPath = projectId; + myModules = modules; + } + + public void run() { + Channels.write(myChannelContext.getChannel(), ProtoUtil.toMessage(mySessionId, ProtoUtil.createCommandAcceptedResponse("build started"))); + Throwable error = null; + try { + final int size = myModules.size(); + + final Map pathVars = new HashMap(); // todo + pathVars.put("MAVEN_REPOSITORY", "C:/Users/jeka/.m2/repository"); + + final ProjectWrapper proj = ProjectWrapper.load(new GantBinding(), myProjectPath, getStartupScript(), pathVars, myCompileType == JpsRemoteProto.Message.Request.CompilationRequest.Type.MAKE); + + proj.getProject().getBuilder().setBuildInfoPrinter(new BuildInfoPrinter() { + public Object printProgressMessage(Project project, String message) { + Channels.write(myChannelContext.getChannel(), ProtoUtil.toMessage(mySessionId, ProtoUtil.createCompileProgressMessageResponse(message))); + return null; + } + + public Object printCompilationErrors(Project project, String compilerName, String messages) { + Channels.write(myChannelContext.getChannel(), ProtoUtil.toMessage(mySessionId, ProtoUtil.createCompileErrorMessageResponse(messages, null, -1, -1))); + return null; + } + }); + + switch (myCompileType) { + case REBUILD: + proj.rebuild(); + break; + case MAKE: + proj.makeModules(null, createMakeFlags()); + break; + case CLEAN: + proj.clean(); + break; + } + proj.save(); + } + catch (Throwable e) { + error = e; + } + finally { + final JpsRemoteProto.Message lastMessage = error != null? + ProtoUtil.toMessage(mySessionId, ProtoUtil.createFailure("build failed: ", error)) : + ProtoUtil.toMessage(mySessionId, ProtoUtil.createBuildCompletedResponse("build completed")); + + Channels.write(myChannelContext.getChannel(), lastMessage).addListener(new ChannelFutureListener() { + public void operationComplete(ChannelFuture future) throws Exception { + myBuildsInProgress.remove(myProjectPath); + } + }); + } + } + + private String getStartupScript() { + return "import org.jetbrains.jps.*\n" + + "\n" + + //"project.createJavaSdk (\n" + + //" \"IDEA jdk\", \n" + + //" \"/home/db/develop/jetbrains/jdk1.6.0_22\", \n" + + //" { \n" + + //" getDelegate ().classpath (\n" + + //" \"/home/db/develop/jetbrains/jdk1.6.0_22/jre/lib/plugin.jar\",\n" + + //" \"/home/db/develop/jetbrains/jdk1.6.0_22/jre/lib/charsets.jar\",\n" + + //" \"/home/db/develop/jetbrains/jdk1.6.0_22/jre/lib/jce.jar\",\n" + + //" \"/home/db/develop/jetbrains/jdk1.6.0_22/jre/lib/rt.jar\",\n" + + //" \"/home/db/develop/jetbrains/jdk1.6.0_22/jre/lib/management-agent.jar\",\n" + + //" \"/home/db/develop/jetbrains/jdk1.6.0_22/jre/lib/resources.jar\",\n" + + //" \"/home/db/develop/jetbrains/jdk1.6.0_22/jre/lib/deploy.jar\",\n" + + //" \"/home/db/develop/jetbrains/jdk1.6.0_22/jre/lib/jsse.jar\",\n" + + //" \"/home/db/develop/jetbrains/jdk1.6.0_22/jre/lib/javaws.jar\",\n" + + //" \"/home/db/develop/jetbrains/jdk1.6.0_22/jre/lib/alt-rt.jar\",\n" + + //" \"/home/db/develop/jetbrains/jdk1.6.0_22/jre/lib/ext/sunpkcs11.jar\",\n" + + //" \"/home/db/develop/jetbrains/jdk1.6.0_22/jre/lib/ext/dnsns.jar\",\n" + + //" \"/home/db/develop/jetbrains/jdk1.6.0_22/jre/lib/ext/localedata.jar\",\n" + + //" \"/home/db/develop/jetbrains/jdk1.6.0_22/jre/lib/ext/sunjce_provider.jar\",\n" + + //" \"/home/db/develop/jetbrains/jdk1.6.0_22/lib/tools.jar\"\n" + + //" )\n" + + //" }\n" + + //")\n" + + //"\n" + + //"project.projectSdk = project.sdks [\"IDEA jdk\"]\n" + + "project.builder.useInProcessJavac = true"; + } + + private ProjectWrapper.Flags createMakeFlags() { + return new ProjectWrapper.Flags() { + public boolean tests() { + return true; + } + + public boolean incremental() { + return true; + } + + public boolean force() { + return false; + } + + public PrintStream logStream() { + return null; // todo + } + }; + } + } + +} diff --git a/java/compiler/compile-server/src/org/jetbrains/jpsservice/impl/ProtoUtil.java b/java/compiler/compile-server/src/org/jetbrains/jpsservice/impl/ProtoUtil.java new file mode 100644 index 000000000000..2abc1ad8a146 --- /dev/null +++ b/java/compiler/compile-server/src/org/jetbrains/jpsservice/impl/ProtoUtil.java @@ -0,0 +1,141 @@ +package org.jetbrains.jpsservice.impl; + +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jpsservice.JpsRemoteProto; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.Collection; +import java.util.Collections; +import java.util.UUID; + +/** + * @author Eugene Zhuravlev + * Date: 8/15/11 + */ +public class ProtoUtil { + + public static JpsRemoteProto.Message.Failure createFailure(final String description) { + return createFailure(description, null); + } + + public static JpsRemoteProto.Message.Failure createFailure(final String description, @Nullable Throwable reason) { + final JpsRemoteProto.Message.Failure.Builder builder = JpsRemoteProto.Message.Failure.newBuilder().setDescription(description); + if (reason != null) { + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + reason.printStackTrace(new PrintStream(baos)); + builder.setStacktrace(new String(baos.toByteArray())); + } + return builder.build(); + } + + public static JpsRemoteProto.Message.Request createMakeRequest(String project, Collection modules) { + return createCompileRequest(JpsRemoteProto.Message.Request.CompilationRequest.Type.MAKE, project, modules); + } + + public static JpsRemoteProto.Message.Request createRebuildRequest(String project, Collection modules) { + return createCompileRequest(JpsRemoteProto.Message.Request.CompilationRequest.Type.REBUILD, project, modules); + } + + public static JpsRemoteProto.Message.Request createCleanRequest(String project, Collection modules) { + return createCompileRequest(JpsRemoteProto.Message.Request.CompilationRequest.Type.CLEAN, project, modules); + } + + public static JpsRemoteProto.Message.Request createCancelRequest(String project) { + return createCompileRequest(JpsRemoteProto.Message.Request.CompilationRequest.Type.CANCEL, project, Collections.emptyList()); + } + + public static JpsRemoteProto.Message.Request createCompileRequest(final JpsRemoteProto.Message.Request.CompilationRequest.Type command, String project, Collection modules) { + final JpsRemoteProto.Message.Request.CompilationRequest.Builder builder = JpsRemoteProto.Message.Request.CompilationRequest.newBuilder().setCommandType(command); + builder.setProjectId(project); + if (modules.size() > 0) { + builder.addAllModuleName(modules); + } + return JpsRemoteProto.Message.Request.newBuilder().setRequestType(JpsRemoteProto.Message.Request.Type.COMPILE_REQUEST).setCompileRequest(builder.build()).build(); + } + + public static JpsRemoteProto.Message.UUID toProtoUUID(UUID requestId) { + return JpsRemoteProto.Message.UUID.newBuilder().setMostSigBits(requestId.getMostSignificantBits()).setLeastSigBits(requestId.getLeastSignificantBits()).build(); + } + + public static UUID fromProtoUUID(JpsRemoteProto.Message.UUID uuid) { + return new UUID(uuid.getMostSigBits(), uuid.getLeastSigBits()); + } + + public static JpsRemoteProto.Message.Request createShutdownRequest(boolean cancelRunningBuilds) { + final JpsRemoteProto.Message.Request.ShutdownCommand.Builder builder = JpsRemoteProto.Message.Request.ShutdownCommand.newBuilder(); + builder.setShutdownPolicy( + cancelRunningBuilds? JpsRemoteProto.Message.Request.ShutdownCommand.ShutdownPolicy.CANCEL_RUNNING_BUILDS : JpsRemoteProto.Message.Request.ShutdownCommand.ShutdownPolicy.WAIT_RUNNING_BUILDS + ); + return JpsRemoteProto.Message.Request.newBuilder().setRequestType(JpsRemoteProto.Message.Request.Type.SHUTDOWN_COMMAND).setShutdownCommand(builder.build()).build(); + } + + public static JpsRemoteProto.Message.Response createCommandAcceptedResponse(@Nullable String description) { + return createCommandResponse(JpsRemoteProto.Message.Response.CommandResponse.Type.COMMAND_ACCEPTED, description); + } + + public static JpsRemoteProto.Message.Response createCommandRejectedResponse(@Nullable String description) { + return createCommandResponse(JpsRemoteProto.Message.Response.CommandResponse.Type.COMMAND_REJECTED, description); + } + + public static JpsRemoteProto.Message.Response createBuildCompletedResponse(@Nullable String description) { + return createCommandResponse(JpsRemoteProto.Message.Response.CommandResponse.Type.BUILD_COMPLETED, description); + } + + public static JpsRemoteProto.Message.Response createBuildCanceledResponse(@Nullable String description) { + return createCommandResponse(JpsRemoteProto.Message.Response.CommandResponse.Type.BUILD_CANCELED, description); + } + + public static JpsRemoteProto.Message.Response createCommandResponse(final JpsRemoteProto.Message.Response.CommandResponse.Type type, @Nullable String description) { + final JpsRemoteProto.Message.Response.CommandResponse.Builder builder = JpsRemoteProto.Message.Response.CommandResponse.newBuilder().setCommandType(type); + if (description != null) { + builder.setDescription(description); + } + return JpsRemoteProto.Message.Response.newBuilder().setResponseType(JpsRemoteProto.Message.Response.Type.COMMAND_RESPONSE).setCommandResponse(builder.build()).build(); + } + + public static JpsRemoteProto.Message.Response createCompileInfoMessageResponse(String text, String path) { + return createCompileMessageResponse(JpsRemoteProto.Message.Response.CompileMessage.Kind.INFO, text, path, -1, -1); + } + + public static JpsRemoteProto.Message.Response createCompileProgressMessageResponse(String text) { + return createCompileMessageResponse(JpsRemoteProto.Message.Response.CompileMessage.Kind.PROGRESS, text, null, -1, -1); + } + + public static JpsRemoteProto.Message.Response createCompileWarningMessageResponse(String text, String path, int line, int column) { + return createCompileMessageResponse(JpsRemoteProto.Message.Response.CompileMessage.Kind.WARNING, text, path, line, column); + } + + public static JpsRemoteProto.Message.Response createCompileErrorMessageResponse(String text, String path, int line, int column) { + return createCompileMessageResponse(JpsRemoteProto.Message.Response.CompileMessage.Kind.ERROR, text, path, line, column); + } + + public static JpsRemoteProto.Message.Response createCompileMessageResponse(final JpsRemoteProto.Message.Response.CompileMessage.Kind msgKind, String text, String path, int line, int column) { + final JpsRemoteProto.Message.Response.CompileMessage.Builder builder = JpsRemoteProto.Message.Response.CompileMessage.newBuilder().setKind(msgKind); + if (text != null) { + builder.setText(text); + } + if (path != null) { + builder.setSourceFilePath(path); + } + if (line >=0) { + builder.setLine(line); + } + if (column >=0) { + builder.setColumn(column); + } + return JpsRemoteProto.Message.Response.newBuilder().setResponseType(JpsRemoteProto.Message.Response.Type.COMPILE_MESSAGE).setCompileMessage(builder.build()).build(); + } + + public static JpsRemoteProto.Message toMessage(final UUID sessionId, JpsRemoteProto.Message.Response response) { + return JpsRemoteProto.Message.newBuilder().setSessionId(toProtoUUID(sessionId)).setMessageType(JpsRemoteProto.Message.Type.RESPONSE).setResponse(response).build(); + } + + public static JpsRemoteProto.Message toMessage(final UUID sessionId, JpsRemoteProto.Message.Request request) { + return JpsRemoteProto.Message.newBuilder().setSessionId(toProtoUUID(sessionId)).setMessageType(JpsRemoteProto.Message.Type.REQUEST).setRequest(request).build(); + } + + public static JpsRemoteProto.Message toMessage(final UUID sessionId, JpsRemoteProto.Message.Failure failure) { + return JpsRemoteProto.Message.newBuilder().setSessionId(toProtoUUID(sessionId)).setMessageType(JpsRemoteProto.Message.Type.FAILURE).setFailure(failure).build(); + } +} diff --git a/java/compiler/impl/src/com/intellij/compiler/JpsServerManager.java b/java/compiler/impl/src/com/intellij/compiler/JpsServerManager.java new file mode 100644 index 000000000000..44070e32fd4d --- /dev/null +++ b/java/compiler/impl/src/com/intellij/compiler/JpsServerManager.java @@ -0,0 +1,136 @@ +/* + * Copyright 2000-2011 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; + +import com.intellij.execution.ExecutionException; +import com.intellij.execution.configurations.GeneralCommandLine; +import com.intellij.execution.process.OSProcessHandler; +import com.intellij.execution.process.ProcessHandler; +import com.intellij.openapi.application.PathManager; +import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.projectRoots.JavaSdkType; +import com.intellij.openapi.projectRoots.Sdk; +import com.intellij.openapi.projectRoots.impl.JavaAwareProjectJdkTableImpl; +import com.intellij.openapi.util.ShutDownTracker; +import org.jetbrains.jps.Jps; +import org.jetbrains.jpsservice.Client; +import org.jetbrains.jpsservice.Server; + +import java.io.File; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; + +/** + * @author Eugene Zhuravlev + * Date: 9/6/11 + */ +public class JpsServerManager { + private static final Logger LOG = Logger.getInstance("#com.intellij.compiler.JpsServerManager"); + + public static void main(String[] args) { + ensureServerStarted(); + } + + private static boolean ensureServerStarted() { + return Holder.ourServerProcess != null; + } + + private static class Holder { + private static Client ourServerClient; + private static ProcessHandler ourServerProcess; + + static { + try { + final int port = Server.DEFAULT_SERVER_PORT; + final Process process = launchServer(port); + final OSProcessHandler processHandler = new OSProcessHandler(process, null); + processHandler.startNotify(); + final Client client = new Client(); + client.connect("localhost", port); + + ourServerProcess = processHandler; + ourServerClient = client; + + ShutDownTracker.getInstance().registerShutdownTask(new Runnable() { + @Override + public void run() { + shutdownServer(client, processHandler); + } + }); + } + catch (Throwable e) { + LOG.error(e); // todo + } + } + } + + private static void shutdownServer(Client client, OSProcessHandler processHandler) { + try { + final Future future = client.sendShutdownRequest(); + if (future != null) { + future.get(500, TimeUnit.MILLISECONDS); + } + } + catch (Throwable ignored) { + LOG.info(ignored); + } + finally { + processHandler.destroyProcess(); + } + } + + private static Process launchServer(int port) throws ExecutionException { + final Sdk projectJdk = JavaAwareProjectJdkTableImpl.getInstanceEx().getInternalJdk(); + final GeneralCommandLine cmdLine = new GeneralCommandLine(); + cmdLine.setExePath(((JavaSdkType)projectJdk.getSdkType()).getVMExecutablePath(projectJdk)); + + final StringBuilder cp = new StringBuilder(); + cp.append(getResourcePath(Server.class)); + cp.append(File.pathSeparator).append(getResourcePath(com.google.protobuf.Message.class)); + cp.append(File.pathSeparator).append(getResourcePath(org.jboss.netty.bootstrap.Bootstrap.class)); + final String jpsJar = getResourcePath(Jps.class); + final File parentFile = new File(jpsJar).getParentFile(); + final File[] files = parentFile.listFiles(); + if (files != null) { + for (File file : files) { + final String name = file.getName(); + final boolean shouldAdd = + name.endsWith("jar") && + (name.startsWith("ant") || + name.startsWith("jps") || + name.startsWith("asm") || + name.startsWith("gant")|| + name.startsWith("groovy") || + name.startsWith("javac2") + ); + if (shouldAdd) { + cp.append(File.pathSeparator).append(file.getPath()); + } + } + } + cmdLine.addParameter("-classpath"); + cmdLine.addParameter(cp.toString()); + + cmdLine.addParameter("org.jetbrains.jpsservice.Server"); + cmdLine.addParameter(Integer.toString(port)); + return cmdLine.createProcess(); + } + + private static String getResourcePath(Class aClass) { + return PathManager.getResourceRoot(aClass, "/" + aClass.getName().replace('.', '/') + ".class"); + } + +} diff --git a/lib/netty-3.2.5.Final.jar b/lib/netty-3.2.5.Final.jar new file mode 100644 index 000000000000..f3b79fcbaa75 Binary files /dev/null and b/lib/netty-3.2.5.Final.jar differ diff --git a/lib/required_for_dist.txt b/lib/required_for_dist.txt index 106bcb33b8f5..9a38684039ed 100644 --- a/lib/required_for_dist.txt +++ b/lib/required_for_dist.txt @@ -42,3 +42,4 @@ xmlrpc-2.0.jar xpp3-1.1.4-min.jar xstream.jar swingx-core-1.6.2.jar +netty-3.2.5.Final.jar diff --git a/lib/src/netty-3.2.5.Final-sources.jar b/lib/src/netty-3.2.5.Final-sources.jar new file mode 100644 index 000000000000..cb6cb9bf537e Binary files /dev/null and b/lib/src/netty-3.2.5.Final-sources.jar differ