1*7594170eSAndroid Build Coastguard Worker""" 2*7594170eSAndroid Build Coastguard WorkerCopyright (C) 2023 The Android Open Source Project 3*7594170eSAndroid Build Coastguard Worker 4*7594170eSAndroid Build Coastguard WorkerLicensed under the Apache License, Version 2.0 (the "License"); 5*7594170eSAndroid Build Coastguard Workeryou may not use this file except in compliance with the License. 6*7594170eSAndroid Build Coastguard WorkerYou may obtain a copy of the License at 7*7594170eSAndroid Build Coastguard Worker 8*7594170eSAndroid Build Coastguard Worker http://www.apache.org/licenses/LICENSE-2.0 9*7594170eSAndroid Build Coastguard Worker 10*7594170eSAndroid Build Coastguard WorkerUnless required by applicable law or agreed to in writing, software 11*7594170eSAndroid Build Coastguard Workerdistributed under the License is distributed on an "AS IS" BASIS, 12*7594170eSAndroid Build Coastguard WorkerWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*7594170eSAndroid Build Coastguard WorkerSee the License for the specific language governing permissions and 14*7594170eSAndroid Build Coastguard Workerlimitations under the License. 15*7594170eSAndroid Build Coastguard Worker""" 16*7594170eSAndroid Build Coastguard Worker 17*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/java:sdk_library.bzl", "JavaSdkLibraryInfo") 18*7594170eSAndroid Build Coastguard Worker 19*7594170eSAndroid Build Coastguard WorkerMETALAVA_ARGS = [ 20*7594170eSAndroid Build Coastguard Worker "--quiet", 21*7594170eSAndroid Build Coastguard Worker "--format=v2", 22*7594170eSAndroid Build Coastguard Worker] 23*7594170eSAndroid Build Coastguard Worker 24*7594170eSAndroid Build Coastguard Workerdef _get_inputs(ctx): 25*7594170eSAndroid Build Coastguard Worker inputs = [] 26*7594170eSAndroid Build Coastguard Worker inputs.extend(ctx.files.base) 27*7594170eSAndroid Build Coastguard Worker from_deps = [] 28*7594170eSAndroid Build Coastguard Worker if ctx.attr.scope == "public": 29*7594170eSAndroid Build Coastguard Worker from_deps = [d[JavaSdkLibraryInfo].public for d in ctx.attr.deps] 30*7594170eSAndroid Build Coastguard Worker elif ctx.attr.scope == "system": 31*7594170eSAndroid Build Coastguard Worker from_deps = [d[JavaSdkLibraryInfo].system for d in ctx.attr.deps] 32*7594170eSAndroid Build Coastguard Worker elif ctx.attr.scope == "module-lib": 33*7594170eSAndroid Build Coastguard Worker from_deps = [d[JavaSdkLibraryInfo].module_lib for d in ctx.attr.deps] 34*7594170eSAndroid Build Coastguard Worker elif ctx.attr.scope == "system-server": 35*7594170eSAndroid Build Coastguard Worker from_deps = [d[JavaSdkLibraryInfo].system_server for d in ctx.attr.deps] 36*7594170eSAndroid Build Coastguard Worker inputs.extend(from_deps) 37*7594170eSAndroid Build Coastguard Worker return depset(inputs) 38*7594170eSAndroid Build Coastguard Worker 39*7594170eSAndroid Build Coastguard Workerdef _get_output_name(ctx): 40*7594170eSAndroid Build Coastguard Worker output_name = "current.txt" 41*7594170eSAndroid Build Coastguard Worker if ctx.attr.scope != "public": 42*7594170eSAndroid Build Coastguard Worker output_name = ctx.attr.scope + "-" + output_name 43*7594170eSAndroid Build Coastguard Worker return output_name 44*7594170eSAndroid Build Coastguard Worker 45*7594170eSAndroid Build Coastguard Workerdef _merged_txts_impl(ctx): 46*7594170eSAndroid Build Coastguard Worker output = ctx.actions.declare_file(_get_output_name(ctx)) 47*7594170eSAndroid Build Coastguard Worker inputs = _get_inputs(ctx) 48*7594170eSAndroid Build Coastguard Worker args = ctx.actions.args() 49*7594170eSAndroid Build Coastguard Worker args.add_all(METALAVA_ARGS) 50*7594170eSAndroid Build Coastguard Worker args.add_all(inputs) 51*7594170eSAndroid Build Coastguard Worker args.add("--api", output) 52*7594170eSAndroid Build Coastguard Worker ctx.actions.run( 53*7594170eSAndroid Build Coastguard Worker outputs = [output], 54*7594170eSAndroid Build Coastguard Worker inputs = inputs, 55*7594170eSAndroid Build Coastguard Worker executable = ctx.executable._metalava, 56*7594170eSAndroid Build Coastguard Worker arguments = [args], 57*7594170eSAndroid Build Coastguard Worker ) 58*7594170eSAndroid Build Coastguard Worker return [DefaultInfo(files = depset([output]))] 59*7594170eSAndroid Build Coastguard Worker 60*7594170eSAndroid Build Coastguard Workermerged_txts = rule( 61*7594170eSAndroid Build Coastguard Worker implementation = _merged_txts_impl, 62*7594170eSAndroid Build Coastguard Worker attrs = { 63*7594170eSAndroid Build Coastguard Worker "scope": attr.string( 64*7594170eSAndroid Build Coastguard Worker doc = "api scope", 65*7594170eSAndroid Build Coastguard Worker ), 66*7594170eSAndroid Build Coastguard Worker "base": attr.label( 67*7594170eSAndroid Build Coastguard Worker mandatory = True, 68*7594170eSAndroid Build Coastguard Worker allow_single_file = True, 69*7594170eSAndroid Build Coastguard Worker doc = "the target used to get the checked-in base current.txt", 70*7594170eSAndroid Build Coastguard Worker ), 71*7594170eSAndroid Build Coastguard Worker "deps": attr.label_list( 72*7594170eSAndroid Build Coastguard Worker mandatory = True, 73*7594170eSAndroid Build Coastguard Worker allow_empty = False, 74*7594170eSAndroid Build Coastguard Worker providers = [JavaSdkLibraryInfo], 75*7594170eSAndroid Build Coastguard Worker ), 76*7594170eSAndroid Build Coastguard Worker "_metalava": attr.label( 77*7594170eSAndroid Build Coastguard Worker default = "//tools/metalava/metalava:metalava", 78*7594170eSAndroid Build Coastguard Worker executable = True, 79*7594170eSAndroid Build Coastguard Worker cfg = "exec", 80*7594170eSAndroid Build Coastguard Worker ), 81*7594170eSAndroid Build Coastguard Worker }, 82*7594170eSAndroid Build Coastguard Worker) 83