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

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;
  string aspect_id = 2;
}

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