// 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;

  // set for derived artifacts (is_source = false)
  string root_execution_path_fragment = 4;
  // whether this artifact comes from an external repository (bazel only)
  bool is_external = 5;
}

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;
}

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 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;
}
