# Copyright 2022 Google LLC. 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. """Convenience macro for getting `kt_compiler_plugin` into uncooperative rules. Some targets (Z), where we would like to export a plugin (Y), use rules that don't support `exported_plugins` (e.g android_library). To solve this, we create a dummy target (X) that has `X.exported_plugins = [Y]`, and then set `Z.exports = [Y]`. This creates a chain of exports for `kt_traverse_exports` to follow when discovering `kt_compiler_plugin`s. """ load(":compiler_plugin.bzl", "kt_compiler_plugin") load(":jvm_import.bzl", "kt_jvm_import") def _kt_compiler_plugin_export( name, visibility = [], compatible_with = [], **kwargs): if not name.endswith("_plugin_export"): fail() basename = name.replace("_plugin_export", "") kt_jvm_import( name = name, exported_plugins = [basename + "_plugin"], jars = [basename + "_empty_jar"], compatible_with = compatible_with, visibility = visibility, neverlink = True, # Don't link kotlin stdlib into Java users ) kt_compiler_plugin( name = basename + "_plugin", visibility = visibility, compatible_with = compatible_with, **kwargs ) native.genrule( name = basename + "_empty_jar", visibility = visibility, outs = [name + "_empty.jar"], cmd = """$(location @bazel_tools//tools/zip:zipper) c $@ "assets/_empty=" """, compatible_with = compatible_with, tools = ["@bazel_tools//tools/zip:zipper"], ) kt_compiler_plugin_export = _kt_compiler_plugin_export