// Copyright 2018 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 bazel.kotlin;

option java_package = "io.bazel.kotlin.model";
option java_multiple_files = true;

// An abstract definition of an annotation processor. This is encoded into a format understood by kapt3.
// +stable
message AnnotationProcessor {
    // The annotation processor class.
    string processor_class = 1;
    // The Bazel `java_plugin` `generates_api` attribute.
    bool generates_api = 2;
    // The full transitive classpath required for annotation processing.
    repeated string classpath = 3;
    // The label of the plugin.
    string label = 4;
}

// A container for all of the types of compiler plugins needed by the kotlin compilers.
// +stable
message CompilerPlugins {
    // Regular java annotation_processor descriptors.
    repeated AnnotationProcessor annotation_processors = 1;
}

// Toolchain info this contains info to be used to configure the compile tasks as well as configuring certain features
// in IDE plugins.
// +stable
message KotlinToolchainInfo {
    // Common properties that should be common to all platforms.
    message Common {
        // mandatory
        string language_version = 1;
        // mandatory
        string api_version = 2;
        // mandatory
        // oneof "enable", "warn" or "error"
        string coroutines = 3;
    }

    // Properties specific to the JVM.
    message Jvm {
        // The property is additionally to configure the source and target bytecode levels in kapt3, javac and kotlin.
        // mandatory
        // oneof "1.6", or "1.8"
        string jvm_target = 1;
    }

    Common common = 1;
    Jvm jvm = 2;
}

enum RuleKind {
    LIBRARY = 0;
    BINARY = 1;
    TEST = 2;
    IMPORT = 3;
}

enum Platform {
    JVM = 0;
    JS = 1;
}

// Common info about a Kotlin compilation task, this message is shared by all compilation tasks.
message CompilationTaskInfo {
    string label = 1;
    // The Platform type.
    Platform platform = 2;
    // The kind of the rule.
    RuleKind rule_kind = 3;
    // The name of the module being compiled.
    string module_name = 4;
    // Flags to be passed straight through to the compiler.
    string passthrough_flags = 5;
    // Toolchain info for this build.
    KotlinToolchainInfo toolchain_info = 6;
    // Compiler plugin descriptors.
    CompilerPlugins plugins = 7;
    // Paths to Jars that the kotlin compiler will allow package private access to.
    repeated string friend_paths = 8;
    // The path of the primary output for the task, this is derived from the flagfile.
    string primary_output_path = 9;
    // Strings to enable various debugging behaviours
    // trace: enables trace logging.
    // timings: causes timing information to be printed at the of an action.
    repeated string debug = 10;
}

// Mested messages not marked with stable could be refactored.
message JvmCompilationTask {
    // Directories used by the builder.
    message Directories {
        // The directory the compiler should use for class files.
        string classes = 1;
        // The directory to use by annotation processors to produce classes.
        string generated_classes = 2;
        // The directory used by annotation processors. The generated sources are currently only java.
        string generated_sources = 3;
        // A temp directory that the compiler may use. The source_jars are expanding into here.
        string temp = 4;
    }

    // Outputs produced by the builder.
    message Outputs {
        // The path to the primary output jar.
        string jar = 1;
        // The path to the jdeps file.
        string jdeps = 2;
        string srcjar = 3;
    }

    message Inputs {
        // The full classpath
        repeated string classpath = 1;
        // Direct dependencies of the target.
        map<string, string> direct_dependencies = 2;
        // Indirect dependencies of the target.
        map<string, string> indirect_dependencies = 3;
        // Partitioned from the builder flags and could have been augmented with sources discovered by expanding the
        // source_jars and from annotation processing.
        repeated string kotlin_sources = 4;
        // Partitioned from the builder flags and could have been augmented with sources discovered by expanding the
        // source_jars and from annotation processing.
        repeated string java_sources = 5;
        // Jars containing additional sources.
        repeated string source_jars = 6;
    }

    CompilationTaskInfo info = 1;
    Directories directories = 2;
    Outputs outputs = 3;
    Inputs inputs = 4;
}

message JsCompilationTask {
    message Outputs {
        // The primary output
        string js = 1;
        string jar = 3;
        string srcjar = 4;
    }

    message Inputs {
        repeated string libraries = 1;
        // Partitioned from the builder flags, expanding the source_jars.
        repeated string kotlin_sources = 2;
    }

    CompilationTaskInfo info = 1;
    Outputs outputs = 3;
    Inputs inputs = 4;

    // flags that should be passed through straight to the kotlinc-js compiler.
    repeated string pass_through_flags = 5;
}
