// 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.build.lib.ideinfo.androidstudio";


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 JavaRuleIdeInfo {
  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 CRuleIdeInfo {
  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 rule_copt = 7;
  repeated string rule_define = 8;
  repeated string rule_include = 9;
}

message AndroidRuleIdeInfo {
  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;
}

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 RuleIdeInfo {
  enum Kind {
    ANDROID_BINARY = 0;
    ANDROID_LIBRARY = 1;
    ANDROID_TEST = 2;
    ANDROID_ROBOELECTRIC_TEST = 3;
    JAVA_LIBRARY = 4;
    JAVA_TEST = 5;
    JAVA_IMPORT = 6;
    JAVA_BINARY = 7;
    PROTO_LIBRARY = 8;
    ANDROID_SDK = 9;
    JAVA_PLUGIN = 10;
    ANDROID_RESOURCES = 11;
    CC_LIBRARY = 12;
    CC_BINARY = 13;
    CC_TEST = 14;
    CC_INC_LIBRARY = 15;
    CC_TOOLCHAIN = 16;
    JAVA_WRAP_CC = 17;
  }

  string label = 1;
  Kind kind = 2 [deprecated=true];
  repeated string dependencies = 4;

  // kind is one of {JAVA,ANDROID}_{LIBRARY,BINARY,TEST} and JAVA_IMPORT
  JavaRuleIdeInfo java_rule_ide_info = 7;
  AndroidRuleIdeInfo android_rule_ide_info = 8;

  repeated string tags = 9;
  repeated string runtime_deps = 10;

  ArtifactLocation build_file_artifact_location = 11;

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