""" Copyright (C) 2023 The Android Open Source Project 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. """ load("@rules_android//rules:common.bzl", _common = "common") load("@rules_android//rules:java.bzl", _java = "java") load( "@rules_android//rules:processing_pipeline.bzl", "ProviderInfo", "processing_pipeline", ) load("@rules_android//rules:utils.bzl", "utils") load( "@rules_android//rules/android_library:impl.bzl", "finalize", _BASE_PROCESSORS = "PROCESSORS", ) load("@rules_kotlin//kotlin:common.bzl", _kt_common = "common") load("@rules_kotlin//kotlin:compiler_opt.bzl", "merge_kotlincopts") load("@rules_kotlin//kotlin:jvm_compile.bzl", "kt_jvm_compile") load("@rules_kotlin//toolchains/kotlin_jvm:kt_jvm_toolchains.bzl", _kt_jvm_toolchains = "kt_jvm_toolchains") def _validations_processor(ctx, **_unused_sub_ctxs): utils.check_for_failures(ctx.label, ctx.attr.deps, ctx.attr.exports) def _process_jvm( ctx, java_package, # @unused exceptions_ctx, # @unused resources_ctx, idl_ctx, db_ctx, **_unused_sub_ctxs): # Filter out disallowed sources. srcs = ctx.files.srcs + idl_ctx.idl_java_srcs + db_ctx.java_srcs # kt_jvm_compile expects deps that only carry CcInfo in runtime_deps deps = [dep for dep in ctx.attr.deps if JavaInfo in dep] + idl_ctx.idl_deps runtime_deps = [dep for dep in ctx.attr.deps if JavaInfo not in dep] jvm_ctx = kt_jvm_compile( ctx, ctx.outputs.lib_jar, # ctx.outputs.lib_src_jar, # Implicitly determines file. srcs = srcs, common_srcs = ctx.files.common_srcs, coverage_srcs = ctx.files.coverage_srcs, deps = deps, plugins = ctx.attr.plugins + db_ctx.java_plugins, exports = ctx.attr.exports, # As the JavaInfo constructor does not support attaching # exported_plugins, for the purposes of propagation, the plugin is # wrapped in a java_library.exported_plugins target and attached with # export to this rule. exported_plugins = ctx.attr.exported_plugins, runtime_deps = runtime_deps, r_java = resources_ctx.r_java, javacopts = ctx.attr.javacopts + db_ctx.javac_opts, kotlincopts = merge_kotlincopts(ctx), neverlink = ctx.attr.neverlink, testonly = ctx.attr.testonly, android_lint_plugins = [], android_lint_rules_jars = depset(), manifest = getattr(ctx.file, "manifest", None), merged_manifest = resources_ctx.merged_manifest, resource_files = ctx.files.resource_files, kt_toolchain = _kt_jvm_toolchains.get(ctx), java_toolchain = _common.get_java_toolchain(ctx), disable_lint_checks = [], rule_family = _kt_common.RULE_FAMILY.ANDROID_LIBRARY, annotation_processor_additional_outputs = ( db_ctx.java_annotation_processor_additional_outputs ), annotation_processor_additional_inputs = ( db_ctx.java_annotation_processor_additional_inputs ), ) java_info = jvm_ctx.java_info return ProviderInfo( name = "jvm_ctx", value = struct( java_info = java_info, providers = [java_info], ), ) def _process_coverage(ctx, **_unused_ctx): return ProviderInfo( name = "coverage_ctx", value = struct( providers = [ coverage_common.instrumented_files_info( ctx, source_attributes = ["srcs", "coverage_srcs"], dependency_attributes = ["assets", "deps", "exports"], ), ], ), ) PROCESSORS = processing_pipeline.prepend( processing_pipeline.replace( _BASE_PROCESSORS, JvmProcessor = _process_jvm, CoverageProcessor = _process_coverage, ), ValidationsProcessor = _validations_processor, ) _PROCESSING_PIPELINE = processing_pipeline.make_processing_pipeline( processors = PROCESSORS, finalize = finalize, ) def impl(ctx): java_package = _java.resolve_package_from_label(ctx.label, ctx.attr.custom_package) return processing_pipeline.run(ctx, java_package, _PROCESSING_PIPELINE)