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