package org.jetbrains.javac;

option java_package = "org.jetbrains.jps.javac";
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 = 1;
      CANCEL = 2;
      SHUTDOWN = 3;
    }

    message OutputGroup {
      required string output_root = 1;
      repeated string source_root = 2;
    }

    required Type request_type = 1;
    repeated string option = 2;
    repeated string file = 3;
    repeated string platform_classpath = 4;
    repeated string classpath = 5;
    repeated string sourcepath = 6;
    repeated OutputGroup output = 7;
  }

  message Response {
    enum Type {
      BUILD_MESSAGE = 1;
      OUTPUT_OBJECT = 2;
      CLASS_DATA = 3;
      BUILD_COMPLETED = 4;
      REQUEST_ACK = 5;
      SRC_FILE_LOADED = 6;
    }

    message CompileMessage {
      enum Kind {
        ERROR = 1;
        WARNING = 2;
        MANDATORY_WARNING = 3;
        NOTE = 4;
        OTHER = 5;
        STD_OUT = 6;
      }
      required Kind kind = 1;
      optional string text = 2;
      optional string source_uri = 3;
      optional uint64 problem_begin_offset = 4;
      optional uint64 problem_end_offset = 5;
      optional uint64 problem_location_offset = 6;
      optional uint64 line = 7;
      optional uint64 column = 8;
    }

    message OutputObject {
     enum Kind {
       SOURCE = 1;
       CLASS = 2;
       HTML = 3;
       OTHER = 4;
     }

     required Kind kind = 1;
     required string file_path = 2;
     optional string output_root = 3;
     optional string relative_path = 4;
     optional string class_name = 5;
     optional string source_uri = 6;
     optional bytes content = 7;
    }

    message ClassData {
     required string class_name = 1;
     repeated string import_statement = 2;
     repeated string static_import = 3;
     repeated string identifier = 4;
    }

    required Type response_type = 1;
    optional CompileMessage compile_message = 2;
    optional OutputObject output_object = 3;
    optional ClassData class_data = 4;
    optional bool completion_status = 5;
  }

  required UUID session_id = 1;
  required Type message_type = 2;
  optional Request request = 3;
  optional Response response = 4;
  optional Failure failure = 5;
}


