Skip to content
This repository was archived by the owner on Aug 5, 2024. It is now read-only.

Commit 3037649

Browse files
gottagofaster236Space Team
authored andcommitted
[feature] aar_import support | #BAZEL-866
Merge-request: BAZEL-MR-885 Merged-by: Lev Leontev <[email protected]>
1 parent 689caef commit 3037649

File tree

8 files changed

+67
-6
lines changed

8 files changed

+67
-6
lines changed

aspects/rules/android/android_info.bzl

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,29 @@ def extract_android_info(target, ctx, dep_targets, **kwargs):
5555
)
5656

5757
return create_proto(target, ctx, android_target_info_proto, "android_target_info"), None
58+
59+
def extract_android_aar_import_info(target, ctx, dep_targets, **kwargs):
60+
if ctx.rule.kind != "aar_import":
61+
return None, None
62+
63+
if AndroidManifestInfo not in target:
64+
return None, None
65+
manifest = file_location(target[AndroidManifestInfo].manifest)
66+
67+
resource_folder = None
68+
r_txt = None
69+
if AndroidResourcesInfo in target:
70+
direct_android_resources = target[AndroidResourcesInfo].direct_android_resources.to_list()
71+
if direct_android_resources:
72+
direct_android_resource = direct_android_resources[0]
73+
resource_files = direct_android_resource.resources
74+
if resource_files:
75+
resource_folder = file_location(resource_files[0])
76+
r_txt = file_location(direct_android_resource.r_txt)
77+
78+
android_aar_import_info_proto = create_struct(
79+
manifest = manifest,
80+
resource_folder = resource_folder,
81+
r_txt = r_txt,
82+
)
83+
return create_proto(target, ctx, android_aar_import_info_proto, "android_aar_import_info"), None

bazelrunner/src/main/kotlin/org/jetbrains/bsp/bazel/bazelrunner/params/BazelFlag.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ object BazelFlag {
2828
@JvmStatic fun experimentalGoogleLegacyApi(): String =
2929
flag("experimental_google_legacy_api")
3030

31+
@JvmStatic fun experimentalEnableAndroidMigrationApis(): String =
32+
flag("experimental_enable_android_migration_apis")
33+
3134
@JvmStatic fun device(device: String): String =
3235
arg("device", device)
3336

server/src/main/kotlin/org/jetbrains/bsp/bazel/server/bsp/managers/BazelBspAspectsManager.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import org.jetbrains.bsp.bazel.bazelrunner.params.BazelFlag.aspect
55
import org.jetbrains.bsp.bazel.bazelrunner.params.BazelFlag.buildManualTests
66
import org.jetbrains.bsp.bazel.bazelrunner.params.BazelFlag.color
77
import org.jetbrains.bsp.bazel.bazelrunner.params.BazelFlag.curses
8+
import org.jetbrains.bsp.bazel.bazelrunner.params.BazelFlag.experimentalEnableAndroidMigrationApis
89
import org.jetbrains.bsp.bazel.bazelrunner.params.BazelFlag.experimentalGoogleLegacyApi
910
import org.jetbrains.bsp.bazel.bazelrunner.params.BazelFlag.keepGoing
1011
import org.jetbrains.bsp.bazel.bazelrunner.params.BazelFlag.outputGroups
@@ -65,6 +66,7 @@ class BazelBspAspectsManager(
6566
buildManualTests(),
6667
curses(false),
6768
experimentalGoogleLegacyApi(),
69+
experimentalEnableAndroidMigrationApis(),
6870
),
6971
null,
7072
// Setting `CARGO_BAZEL_REPIN=1` updates `cargo_lockfile`

server/src/main/kotlin/org/jetbrains/bsp/bazel/server/bsp/managers/BazelBspLanguageExtensionsGenerator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ enum class Language(private val fileName: String, val ruleNames: List<String>, v
1616
Cpp("//aspects:rules/cpp/cpp_info.bzl", listOf("rules_cc"), listOf("extract_cpp_info"), false),
1717
Kotlin("//aspects:rules/kt/kt_info.bzl", listOf("io_bazel_rules_kotlin", "rules_kotlin"), listOf("extract_kotlin_info"), true),
1818
Rust("//aspects:rules/rust/rust_info.bzl", listOf("rules_rust"), listOf("extract_rust_crate_info"), false),
19-
Android("//aspects:rules/android/android_info.bzl", listOf(), listOf("extract_android_info"), false);
19+
Android("//aspects:rules/android/android_info.bzl", listOf(), listOf("extract_android_info", "extract_android_aar_import_info"), false);
2020

2121
fun toLoadStatement(): String =
2222
this.functions.joinToString(

server/src/main/kotlin/org/jetbrains/bsp/bazel/server/sync/BazelProjectMapper.kt

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -289,12 +289,10 @@ class BazelProjectMapper(
289289
}
290290

291291
private fun createLibraries(targets: Map<String, TargetInfo>): Map<String, Library> {
292-
return targets.mapValues { entry ->
293-
val targetId = entry.key
294-
val targetInfo = entry.value
292+
return targets.mapValues { (targetId, targetInfo) ->
295293
Library(
296294
label = targetId,
297-
outputs = getTargetJarUris(targetInfo),
295+
outputs = getTargetJarUris(targetInfo) + getAndroidAarUris(targetInfo),
298296
sources = getSourceJarUris(targetInfo),
299297
dependencies = targetInfo.dependenciesList.map { it.id },
300298
interfaceJars = getTargetInterfaceJars(targetInfo).map { it.toUri() }.toSet(),
@@ -311,6 +309,21 @@ class BazelProjectMapper(
311309
.flatMap { it.binaryJarsList }
312310
.resolveUris()
313311

312+
private fun getAndroidAarUris(targetInfo: TargetInfo): Set<URI> {
313+
if (!targetInfo.hasAndroidAarImportInfo()) return emptySet()
314+
val androidAarImportInfo = targetInfo.androidAarImportInfo
315+
316+
val result = mutableSetOf<URI>()
317+
result += bazelPathsResolver.resolve(androidAarImportInfo.manifest).toUri()
318+
if (androidAarImportInfo.hasResourceFolder()) {
319+
result += bazelPathsResolver.resolve(androidAarImportInfo.resourceFolder).resolve("res").toUri()
320+
}
321+
if (androidAarImportInfo.hasRTxt()) {
322+
result += bazelPathsResolver.resolve(targetInfo.androidAarImportInfo.rTxt).toUri()
323+
}
324+
return result
325+
}
326+
314327
private fun getSourceJarUris(targetInfo: TargetInfo) =
315328
targetInfo.jvmTargetInfo.jarsList
316329
.flatMap { it.sourceJarsList }

server/src/main/kotlin/org/jetbrains/bsp/bazel/server/sync/TargetInfoReader.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.google.protobuf.TextFormat
55
import kotlinx.coroutines.Dispatchers
66
import kotlinx.coroutines.flow.asFlow
77
import kotlinx.coroutines.runBlocking
8+
import org.jetbrains.bsp.bazel.info.BspTargetInfo.AndroidAarImportInfo
89
import org.jetbrains.bsp.bazel.info.BspTargetInfo.AndroidTargetInfo
910
import org.jetbrains.bsp.bazel.info.BspTargetInfo.CppTargetInfo
1011
import org.jetbrains.bsp.bazel.info.BspTargetInfo.JavaRuntimeInfo
@@ -125,6 +126,12 @@ class TargetInfoReader {
125126
targetInfoBuilder.setAndroidTargetInfo(info)
126127
}
127128

129+
"android_aar_import_info" -> {
130+
val builder = readFromFile(path, AndroidAarImportInfo.newBuilder())
131+
val info = builder.build()
132+
targetInfoBuilder.setAndroidAarImportInfo(info)
133+
}
134+
128135
"general" -> {
129136
val builder: TargetInfo.Builder = readFromFile(path, TargetInfo.newBuilder())
130137
val info = builder.buildPartial()

server/src/main/kotlin/org/jetbrains/bsp/bazel/server/sync/TargetKindResolver.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@ import org.jetbrains.bsp.bazel.server.sync.model.Tag
55

66
class TargetKindResolver {
77
fun resolveTags(targetInfo: BspTargetInfo.TargetInfo): Set<Tag> {
8-
if (targetInfo.kind == "resources_union" || targetInfo.kind == "java_import") {
8+
if (targetInfo.kind == "resources_union" ||
9+
targetInfo.kind == "java_import" ||
10+
targetInfo.kind == "aar_import"
11+
) {
912
return LIBRARY
1013
}
1114
val tag = ruleSuffixToTargetType.filterKeys {

server/src/main/kotlin/org/jetbrains/bsp/bazel/server/sync/proto/bsp_target_info.proto

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,12 @@ message AndroidTargetInfo {
103103
string kotlin_target_id = 5;
104104
}
105105

106+
message AndroidAarImportInfo {
107+
FileLocation manifest = 1;
108+
FileLocation resource_folder = 2;
109+
FileLocation r_txt = 3;
110+
}
111+
106112
message TargetInfo {
107113
string id = 10;
108114
string kind = 20;
@@ -122,4 +128,5 @@ message TargetInfo {
122128
PythonTargetInfo python_target_info = 8000;
123129
RustCrateInfo rust_crate_info = 9000;
124130
AndroidTargetInfo android_target_info = 10000;
131+
AndroidAarImportInfo android_aar_import_info = 11000;
125132
}

0 commit comments

Comments
 (0)