Skip to content

Commit

Permalink
Support Bazel rules_kotlin's toolchain without legacy providers
Browse files Browse the repository at this point in the history
This is a prerequisite to finally turn down legacy struct providers. The last such instance is used in rules_kotlin. And it's used to serve as integration with IntelliJ.

After this change, PR bazelbuild/rules_kotlin#1157 may be merged, keeping rules_kotlin working with IntelliJ.

Legacy struct providers have been deprecated by Bazel. Replacing them with modern providers, will make it possible to simplify and remove legacy handling from Bazel.

More info on: https://bazel.build/extending/rules#migrating_from_legacy_providers
Issue: bazelbuild/bazel#19467
PiperOrigin-RevId: 627353414
  • Loading branch information
Googler authored and copybara-github committed Apr 23, 2024
1 parent ee1be83 commit 702227e
Showing 1 changed file with 9 additions and 6 deletions.
15 changes: 9 additions & 6 deletions aspect/intellij_info_impl.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ DEPS = [
"test_app", # android_instrumentation_test
"instruments", # android_instrumentation_test
"tests", # From test_suite
"_kt_toolchain", # From rules_kotlin
]

# Run-time dependency attributes, grouped by type.
Expand Down Expand Up @@ -994,13 +995,15 @@ def collect_java_toolchain_info(target, ide_info, ide_info_file, output_groups):
def artifact_to_path(artifact):
return artifact.root_execution_path_fragment + "/" + artifact.relative_path

def collect_kotlin_toolchain_info(target, ide_info, ide_info_file, output_groups):
def collect_kotlin_toolchain_info(target, ctx, ide_info, ide_info_file, output_groups):
"""Updates kotlin_toolchain-relevant output groups, returns false if not a kotlin_toolchain target."""
if not hasattr(target, "kt"):
return False
kt = target.kt
if not hasattr(kt, "language_version"):
if ctx.rule.kind == "_kt_toolchain" and platform_common.ToolchainInfo in target:
kt = target[platform_common.ToolchainInfo]
elif hasattr(target, "kt") and hasattr(target.kt, "language_version"):
kt = target.kt # Legacy struct provider mechanism
else:
return False

ide_info["kt_toolchain_ide_info"] = struct(
language_version = kt.language_version,
)
Expand Down Expand Up @@ -1160,7 +1163,7 @@ def intellij_info_aspect_impl(target, ctx, semantics):
handled = collect_java_info(target, ctx, semantics, ide_info, ide_info_file, output_groups) or handled
handled = collect_java_toolchain_info(target, ide_info, ide_info_file, output_groups) or handled
handled = collect_android_info(target, ctx, semantics, ide_info, ide_info_file, output_groups) or handled
handled = collect_kotlin_toolchain_info(target, ide_info, ide_info_file, output_groups) or handled
handled = collect_kotlin_toolchain_info(target, ctx, ide_info, ide_info_file, output_groups) or handled

# Any extra ide info
if hasattr(semantics, "extra_ide_info"):
Expand Down

0 comments on commit 702227e

Please sign in to comment.