// Copyright 2015 The Bazel Authors. All rights reserved.
//
// 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.

syntax = "proto3";

package blaze;


option java_package = "com.google.devtools.intellij.ideinfo";

message ArtifactLocation {
  string relative_path = 2;
  bool is_source = 3;

  // path from the execution root to the actual root:
  // exec_root + root_execution_path_fragment + relative_path = absolute_path
  string root_execution_path_fragment = 4;
  // whether this artifact comes from an external repository (bazel only)
  bool is_external = 5;

  // The contents of relative_path and root_execution_path_fragment have changed
  // for external workspaces. This is a temporary field to distinguish between
  // the two versions.
  bool is_new_external_version = 6;
}

message LibraryArtifact {
  ArtifactLocation jar = 1;
  ArtifactLocation interface_jar = 2;
  ArtifactLocation source_jar = 3;
}

message JavaIdeInfo {
  repeated LibraryArtifact jars = 1;
  repeated LibraryArtifact generated_jars = 2;
  ArtifactLocation package_manifest = 3;
  repeated ArtifactLocation sources = 4;
  ArtifactLocation jdeps = 5;
  LibraryArtifact filtered_gen_jar = 6;
  string main_class = 7;
}

message CIdeInfo {
  repeated ArtifactLocation source = 1;

  repeated string transitive_include_directory = 3;
  repeated string transitive_quote_include_directory = 4;
  repeated string transitive_define = 5;
  repeated string transitive_system_include_directory = 6;

  repeated string target_copt = 7;
  repeated string target_define = 8;
  repeated string target_include = 9;
}

message AndroidIdeInfo {
  repeated ArtifactLocation resources = 1;
  ArtifactLocation apk = 3;
  repeated ArtifactLocation dependency_apk = 4;
  ArtifactLocation manifest = 5;
  string java_package = 7;
  bool has_idl_sources = 8;
  LibraryArtifact idl_jar = 9;
  bool generate_resource_class = 10;
  string legacy_resources = 11;
  LibraryArtifact resource_jar = 12;
  string idl_import_root = 13;
}

message AndroidSdkIdeInfo {
  ArtifactLocation android_jar = 1;
}

message PyIdeInfo {
  repeated ArtifactLocation sources = 1;
}

message CToolchainIdeInfo {
  string target_name = 1;
  repeated string base_compiler_option = 2;
  repeated string cpp_option = 3;
  repeated string c_option = 4;
  string preprocessor_executable = 5;
  string cpp_executable = 6;
  repeated string link_option = 7;
  repeated string built_in_include_directory = 8;
  repeated string unfiltered_compiler_option = 9;
}

message ProtoLibraryLegacyJavaIdeInfo {
  enum ApiFlavor {
    NONE = 0;
    IMMUTABLE = 1;
    MUTABLE = 2;
    BOTH = 3;
  }

  int32 api_version = 1;
  ApiFlavor api_flavor = 2;
  repeated LibraryArtifact jars1 = 3;
  repeated LibraryArtifact jars_mutable = 4;
  repeated LibraryArtifact jars_immutable = 5;
}

message TestInfo {
  string size = 1;
}

message JavaToolchainIdeInfo {
  string source_version = 1;
  string target_version = 2;
}

message TargetKey {
  string label = 1;
  repeated string aspect_ids = 3;
}

message Dependency {
  enum DependencyType {
    COMPILE_TIME = 0;
    RUNTIME = 1;
  }

  TargetKey target = 1;
  DependencyType dependency_type = 2;
}

message TargetIdeInfo {
  string label = 1 [deprecated = true];
  repeated string dependencies = 4 [deprecated = true];

  // kind is one of {JAVA,ANDROID}_{LIBRARY,BINARY,TEST} and JAVA_IMPORT
  JavaIdeInfo java_ide_info = 7;
  AndroidIdeInfo android_ide_info = 8;

  repeated string tags = 9;
  repeated string runtime_deps = 10 [deprecated = true];

  ArtifactLocation build_file_artifact_location = 11;

  CIdeInfo c_ide_info = 12;
  CToolchainIdeInfo c_toolchain_ide_info = 13;

  string kind_string = 14;

  TestInfo test_info = 15;

  ProtoLibraryLegacyJavaIdeInfo proto_library_legacy_java_ide_info = 16;
  JavaToolchainIdeInfo java_toolchain_ide_info = 17;

  PyIdeInfo py_ide_info = 18;

  TargetKey key = 19;

  repeated Dependency deps = 20;

  reserved 21;

  AndroidSdkIdeInfo android_sdk_ide_info = 22;

  // Next available: 24
}
