From f4767f8d9d42a4c7aaa2cd67dbb546332d50e9f8 Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Wed, 8 Apr 2020 22:09:13 +0700 Subject: [PATCH] Gradle: Fix NPE when Native binary does not have a non-null runTaskName --- .../src/KotlinMPPGradleModelBuilder.kt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt index 13b85061249..f7b25e30dde 100644 --- a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt +++ b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt @@ -426,15 +426,20 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService { private fun buildNativeMainRunTasks(gradleTarget: Named): Collection { val executableBinaries = (gradleTarget::class.java.getMethodOrNull("getBinaries")?.invoke(gradleTarget) as? Collection) ?.filter { it.javaClass.name == "org.jetbrains.kotlin.gradle.plugin.mpp.Executable" } ?: return emptyList() - return executableBinaries.map { binary -> + return executableBinaries.mapNotNull { binary -> + val runTaskName = binary::class.java.getMethod("getRunTaskName").invoke(binary) as String? ?: return@mapNotNull null + val entryPoint = binary::class.java.getMethod("getEntryPoint").invoke(binary) as String? ?: return@mapNotNull null + val debuggable = binary::class.java.getMethod("getDebuggable").invoke(binary) as Boolean + val compilationName = binary.javaClass.getMethodOrNull("getCompilation")?.invoke(binary)?.let { it.javaClass.getMethodOrNull("getCompilationName")?.invoke(it)?.toString() } ?: KotlinCompilation.MAIN_COMPILATION_NAME + KotlinNativeMainRunTaskImpl( - binary::class.java.getMethod("getRunTaskName").invoke(binary) as String, + runTaskName, compilationName, - binary::class.java.getMethod("getEntryPoint").invoke(binary) as String, - binary::class.java.getMethod("getDebuggable").invoke(binary) as Boolean + entryPoint, + debuggable ) } }