1 /*
2  * Copyright 2023 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.baselineprofile.gradle.utils
18 
19 import org.gradle.api.Task
20 import org.gradle.api.UnknownTaskException
21 import org.gradle.api.tasks.TaskContainer
22 import org.gradle.api.tasks.TaskProvider
23 
maybeRegisternull24 internal inline fun <reified T : Task?> TaskContainer.maybeRegister(
25     vararg nameParts: String,
26     noinline configureBlock: ((T) -> (Unit))? = null
27 ): TaskProvider<T> {
28     val name = camelCase(*nameParts)
29     return try {
30         val task = named(name, T::class.java)
31         if (configureBlock != null) task.configure(configureBlock)
32         task
33     } catch (e: UnknownTaskException) {
34         register(name, T::class.java, configureBlock!!)
35     }
36 }
37 
namedOrNullnull38 internal inline fun <reified T : Task?> TaskContainer.namedOrNull(
39     vararg nameParts: String,
40     noinline configureBlock: ((T) -> (Unit))? = null
41 ): TaskProvider<T>? {
42     val name = camelCase(*nameParts)
43     return try {
44         val task = named(name, T::class.java)
45         if (configureBlock != null) task.configure(configureBlock)
46         task
47     } catch (e: UnknownTaskException) {
48         return null
49     }
50 }
51