// 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;
    // If this is true the builder will print out debug messages.
    int32 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;
}
