Skip to content

Commit b32783b

Browse files
committed
Removed afterEvaluate from AsmTaskRegistration, and added lazyTaskLookup utility function
1 parent c80fb55 commit b32783b

File tree

4 files changed

+37
-31
lines changed

4 files changed

+37
-31
lines changed

embrace-gradle-plugin/src/main/java/io/embrace/android/gradle/plugin/gradle/TaskRegistrationUtils.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package io.embrace.android.gradle.plugin.gradle
33
import io.embrace.android.gradle.plugin.util.capitalizedString
44
import org.gradle.api.Project
55
import org.gradle.api.Task
6+
import org.gradle.api.provider.Provider
67
import org.gradle.api.tasks.TaskContainer
78
import org.gradle.api.tasks.TaskProvider
89

@@ -45,3 +46,17 @@ fun <T : Task> Project.tryGetTaskProvider(taskName: String, taskType: Class<T>):
4546
null
4647
}
4748
}
49+
50+
/**
51+
* Lazily looks up a task by name and type, returning a [Provider] that yields the task if it exists,
52+
* or `null` if not found. Useful for wiring optional tasks into the task graph without realizing them early.
53+
*
54+
* @param T The expected type of the task.
55+
* @param name The name of the task to look up.
56+
* @return A [Provider] of the task, or `provider { null }` if the task is not present.
57+
*/
58+
inline fun <reified T : Task> Project.lazyTaskLookup(name: String): Provider<T?> {
59+
return provider {
60+
tryGetTaskProvider(name, T::class.java)
61+
}.safeFlatMap { it as Provider<T?> }
62+
}

embrace-gradle-plugin/src/main/java/io/embrace/android/gradle/plugin/instrumentation/AsmTaskRegistration.kt

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ package io.embrace.android.gradle.plugin.instrumentation
22

33
import com.android.build.api.instrumentation.FramesComputationMode
44
import com.android.build.api.instrumentation.InstrumentationScope
5-
import io.embrace.android.gradle.plugin.gradle.tryGetTaskProvider
5+
import io.embrace.android.gradle.plugin.gradle.lazyTaskLookup
6+
import io.embrace.android.gradle.plugin.gradle.safeFlatMap
67
import io.embrace.android.gradle.plugin.tasks.ndk.EncodeFileToBase64Task
78
import io.embrace.android.gradle.plugin.tasks.reactnative.GenerateRnSourcemapTask
89
import io.embrace.android.gradle.plugin.tasks.registration.EmbraceTaskRegistration
@@ -41,33 +42,25 @@ class AsmTaskRegistration : EmbraceTaskRegistration {
4142
params.shouldInstrumentOnLongClick.set(behavior.instrumentation.onLongClickEnabled)
4243
params.shouldInstrumentOnClick.set(behavior.instrumentation.onClickEnabled)
4344

44-
project.afterEvaluate {
45-
// Find the Asm transformation task by name and make it depend on encodeSharedObjectFilesTask
46-
val encodeFileToBase64Task = project.tryGetTaskProvider(
47-
"${EncodeFileToBase64Task.NAME}${data.name.capitalizedString()}",
48-
EncodeFileToBase64Task::class.java
49-
) ?: return@afterEvaluate
50-
51-
val asmTransformationTask = project.tryGetTaskProvider(
52-
"transform${variant.name.capitalizedString()}ClassesWithAsm"
53-
) ?: error("Unable to find ASM transformation task for variant ${variant.name}.")
54-
asmTransformationTask.configure { it.dependsOn(encodeFileToBase64Task) }
55-
56-
params.encodedSharedObjectFilesMap.set(
57-
encodeFileToBase64Task.flatMap {
58-
it.outputFile
59-
}
60-
)
45+
val encodeFileToBase64Task = project.lazyTaskLookup<EncodeFileToBase64Task>(
46+
"${EncodeFileToBase64Task.NAME}${data.name.capitalizedString()}"
47+
)
6148

62-
val reactNativeTask = project.tryGetTaskProvider(
63-
"${GenerateRnSourcemapTask.NAME}${data.name.capitalizedString()}",
64-
GenerateRnSourcemapTask::class.java
65-
) ?: return@afterEvaluate
49+
params.encodedSharedObjectFilesMap.set(
50+
encodeFileToBase64Task.safeFlatMap {
51+
it?.outputFile ?: project.provider { null }
52+
}
53+
)
6654

67-
asmTransformationTask.configure { it.dependsOn(reactNativeTask) }
55+
val reactNativeTask = project.lazyTaskLookup<GenerateRnSourcemapTask>(
56+
"${GenerateRnSourcemapTask.NAME}${data.name.capitalizedString()}"
57+
)
6858

69-
params.reactNativeBundleId.set(reactNativeTask.flatMap { it.bundleIdOutputFile })
70-
}
59+
params.reactNativeBundleId.set(
60+
reactNativeTask.safeFlatMap {
61+
it?.bundleIdOutputFile ?: project.provider { null }
62+
}
63+
)
7164
}
7265
} catch (exception: Exception) {
7366
project.logger.error("An error has occurred while performing ASM bytecode transformation.", exception)

embrace-gradle-plugin/src/main/java/io/embrace/android/gradle/plugin/tasks/ndk/NdkUploadTasksRegistration.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.embrace.android.gradle.plugin.tasks.ndk
22

33
import io.embrace.android.gradle.plugin.config.PluginBehavior
4+
import io.embrace.android.gradle.plugin.gradle.lazyTaskLookup
45
import io.embrace.android.gradle.plugin.gradle.nullSafeMap
56
import io.embrace.android.gradle.plugin.gradle.registerTask
67
import io.embrace.android.gradle.plugin.gradle.safeFlatMap
@@ -37,9 +38,7 @@ class NdkUploadTasksRegistration(
3738
// Bail if ndk_enabled is not true.
3839
if (variantConfig.embraceConfig?.ndkEnabled != true) return
3940

40-
val mergeNativeLibsTaskProvider: Provider<Task?> = project.provider {
41-
project.tryGetTaskProvider("merge${variant.name.capitalizedString()}NativeLibs")
42-
}.safeFlatMap { it as Provider<Task?> }
41+
val mergeNativeLibsTaskProvider = project.lazyTaskLookup<Task>("merge${variant.name.capitalizedString()}NativeLibs")
4342

4443
val sharedObjectFilesProvider = getSharedObjectFilesProvider(project, mergeNativeLibsTaskProvider)
4544

embrace-gradle-plugin/src/main/java/io/embrace/android/gradle/plugin/tasks/reactnative/GenerateRnSourcemapTaskRegistration.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.embrace.android.gradle.plugin.tasks.reactnative
22

3+
import io.embrace.android.gradle.plugin.gradle.lazyTaskLookup
34
import io.embrace.android.gradle.plugin.gradle.nullSafeMap
45
import io.embrace.android.gradle.plugin.gradle.registerTask
56
import io.embrace.android.gradle.plugin.gradle.safeFlatMap
@@ -58,9 +59,7 @@ class GenerateRnSourcemapTaskRegistration : EmbraceTaskRegistration {
5859
)
5960

6061
val variantCapitalized = variant.name.capitalizedString()
61-
val generatorTaskProvider: Provider<Task?> = project.provider {
62-
project.tryGetTaskProvider("createBundle${variantCapitalized}JsAndAssets")
63-
}.safeFlatMap { it as Provider<Task?> }
62+
val generatorTaskProvider = project.lazyTaskLookup<Task>("createBundle${variantCapitalized}JsAndAssets")
6463

6564
rnTask.bundleFile.set(project.layout.file(getBundleFileProvider(generatorTaskProvider, project)))
6665
rnTask.sourcemap.set(project.layout.file(getSourcemapFileProvider(generatorTaskProvider, project, data)))

0 commit comments

Comments
 (0)