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

option java_generate_equals_and_hash = true;

message ArtifactLocation {
  // deprecated -- this is not machine agnostic and will be removed in a future release
  string root_path = 1 [deprecated=true];

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

message CRuleIdeInfo {
  repeated ArtifactLocation source = 1;
  repeated ArtifactLocation exported_header = 2;

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

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

  string label = 1;
  Kind kind = 2;
  // deprecated -- this is not machine agnostic and will be removed in a future release
  string build_file = 3 [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;
}
