1# Copyright 2018 The Bazel Authors. All rights reserved. 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14"""Rule adapter for aar_import.""" 15 16load(":adapters/base.bzl", "make_adapter") 17load( 18 ":providers.bzl", 19 "MIAndroidAarNativeLibsInfo", 20 "MIAndroidAssetsInfo", 21 "MIAndroidDexInfo", 22 "MIAndroidResourcesInfo", 23 "MIJavaResourcesInfo", 24 "providers", 25) 26load(":resources.bzl", "liteparse") 27load(":transform.bzl", "dex") 28load("//rules:java.bzl", _java = "java") 29 30def _aspect_attrs(): 31 """Attrs of the rule requiring traversal by the aspect.""" 32 return ["deps", "exports"] 33 34def _adapt(target, ctx): 35 """Adapts the rule and target data. 36 37 Args: 38 target: The target. 39 ctx: The context. 40 41 Returns: 42 A list of providers. 43 """ 44 45 assets = depset() 46 assets_dir = None 47 if AndroidAssetsInfo in target: 48 assets = target[AndroidAssetsInfo].assets 49 assets_dir = target[AndroidAssetsInfo].local_asset_dir 50 51 label = None 52 resources = depset() 53 if AndroidResourcesInfo in target: 54 label = target[AndroidResourcesInfo].label 55 resources = target[AndroidResourcesInfo].direct_android_resources 56 57 return [ 58 providers.make_mi_android_aar_native_libs_info( 59 native_libs = target[AndroidNativeLibsInfo].native_libs, 60 deps = providers.collect( 61 MIAndroidAarNativeLibsInfo, 62 ctx.rule.attr.deps, 63 ctx.rule.attr.exports, 64 ), 65 ), 66 providers.make_mi_android_assets_info( 67 assets = assets, 68 assets_dir = assets_dir, 69 deps = providers.collect( 70 MIAndroidAssetsInfo, 71 ctx.rule.attr.deps, 72 ctx.rule.attr.exports, 73 ), 74 ), 75 providers.make_mi_android_dex_info( 76 dex_shards = dex( 77 ctx, 78 target[JavaInfo].runtime_output_jars, 79 target[JavaInfo].transitive_compile_time_jars, 80 ), 81 deps = providers.collect( 82 MIAndroidDexInfo, 83 ctx.rule.attr.deps, 84 ctx.rule.attr.exports, 85 ), 86 ), 87 providers.make_mi_android_resources_info( 88 # TODO(b/124229660): The package for an aar should be retrieved from 89 # the AndroidManifest.xml in the aar. Using the package is a short 90 # term work-around. 91 package = _java.resolve_package_from_label( 92 ctx.label, 93 ctx.rule.attr.package, 94 ), 95 label = label, 96 r_pb = liteparse(ctx), 97 resources = resources, 98 deps = providers.collect( 99 MIAndroidResourcesInfo, 100 ctx.rule.attr.deps, 101 ctx.rule.attr.exports, 102 ), 103 ), 104 providers.make_mi_java_resources_info( 105 deps = providers.collect( 106 MIJavaResourcesInfo, 107 ctx.rule.attr.deps, 108 ctx.rule.attr.exports, 109 ), 110 ), 111 ] 112 113aar_import = make_adapter(_aspect_attrs, _adapt) 114