1 /*
2  * Copyright 2020 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package androidx.build.resources
18 
19 import androidx.build.checkapi.ApiLocation
20 import java.io.File
21 import org.gradle.api.DefaultTask
22 import org.gradle.api.provider.ListProperty
23 import org.gradle.api.provider.Property
24 import org.gradle.api.tasks.CacheableTask
25 import org.gradle.api.tasks.InputFile
26 import org.gradle.api.tasks.InputFiles
27 import org.gradle.api.tasks.Internal
28 import org.gradle.api.tasks.PathSensitive
29 import org.gradle.api.tasks.PathSensitivity
30 import org.gradle.api.tasks.TaskAction
31 
32 /** Task for detecting changes in the public Android resource surface, e.g. `public.xml`. */
33 @CacheableTask
34 abstract class CheckResourceApiTask : DefaultTask() {
35     /** Checked in resource API files (in source control). */
36     @get:InputFiles
37     @get:PathSensitive(PathSensitivity.RELATIVE)
38     abstract val checkedInApiFiles: ListProperty<File>
39 
40     /** Generated resource API file (in build output). */
41     @get:Internal abstract val apiLocation: Property<ApiLocation>
42 
43     @InputFile
44     @PathSensitive(PathSensitivity.RELATIVE)
getTaskInputnull45     fun getTaskInput(): File {
46         return apiLocation.get().resourceFile
47     }
48 
49     @TaskAction
checkResourceApinull50     fun checkResourceApi() {
51         val builtApi = apiLocation.get().resourceFile
52 
53         for (checkedInApi in checkedInApiFiles.get()) {
54             androidx.build.metalava.checkEqual(checkedInApi, builtApi)
55         }
56     }
57 }
58