74 lines
2.3 KiB
Python
74 lines
2.3 KiB
Python
# 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.
|
|
|
|
"""A rule for declaring and passing kotlinc plugins."""
|
|
|
|
load("//:visibility.bzl", "RULES_KOTLIN")
|
|
|
|
_KtCompilerPluginInfo = provider(
|
|
doc = "Info for running a plugin that directly registers itself to kotlinc extension points",
|
|
fields = dict(
|
|
plugin_id = "string",
|
|
jar = "File",
|
|
args = "list[string]",
|
|
),
|
|
)
|
|
|
|
KtCompilerPluginInfo, _make_kt_compiler_plugin_info = (_KtCompilerPluginInfo, _KtCompilerPluginInfo)
|
|
|
|
def _kt_compiler_plugin_impl(ctx):
|
|
|
|
return [
|
|
JavaPluginInfo(
|
|
runtime_deps = [],
|
|
processor_class = None,
|
|
),
|
|
_make_kt_compiler_plugin_info(
|
|
plugin_id = ctx.attr.plugin_id,
|
|
jar = ctx.file.jar or ctx.attr.jar[JavaInfo].output_jar,
|
|
args = [
|
|
"plugin:%s:%s=%s" % (ctx.attr.plugin_id, k, v)
|
|
for (k, v) in ctx.attr.args.items()
|
|
],
|
|
),
|
|
]
|
|
|
|
kt_compiler_plugin = rule(
|
|
implementation = _kt_compiler_plugin_impl,
|
|
attrs = dict(
|
|
plugin_id = attr.string(
|
|
doc = "ID used to register this plugin with kotlinc",
|
|
mandatory = True,
|
|
),
|
|
jar = attr.label(
|
|
doc = "JAR that provides the plugin implementation",
|
|
mandatory = True,
|
|
allow_single_file = [".jar"],
|
|
cfg = "exec",
|
|
),
|
|
args = attr.string_dict(
|
|
doc = """Args to pass to the plugin
|
|
|
|
The rule impl will format key-value pairs for the koltinc
|
|
CLI. All plugin invocations will receive the same args.
|
|
""",
|
|
default = {},
|
|
),
|
|
),
|
|
provides = [
|
|
JavaPluginInfo, # Allow this rule to be passed to java rules
|
|
KtCompilerPluginInfo,
|
|
],
|
|
)
|