From 98d3855fd8f20294bbab547455d03e453d3c8659 Mon Sep 17 00:00:00 2001 From: Natalia Selezneva Date: Thu, 30 Apr 2020 13:40:25 +0300 Subject: [PATCH] KotlinDslModels: project can be null in ExternalSystemTaskNotificationListener.onStart For example when project is created from sources --- .../gradle/importing/KotlinDslScrtiptModelProcessor.kt | 6 ++++-- .../scripting/gradle/importing/KotlinDslSyncListener.kt | 9 ++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScrtiptModelProcessor.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScrtiptModelProcessor.kt index 0e78d56a80f..6f0895ddd98 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScrtiptModelProcessor.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScrtiptModelProcessor.kt @@ -42,7 +42,7 @@ fun processScriptModel( val project = task.findProject() ?: return val models = model.toListOfScriptModels(project) - project.kotlinGradleDslSync[task]?.models?.addAll(models) + project.kotlinGradleDslSync.getOrPut(task) { KotlinDslGradleBuildSync(task) }.models.addAll(models) if (models.containsErrors()) { throw IllegalStateException(KotlinIdeaGradleBundle.message("title.kotlin.build.script")) @@ -102,7 +102,9 @@ private fun KotlinDslScriptsModel.toListOfScriptModels(project: Project): List() val models = mutableListOf() } diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslSyncListener.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslSyncListener.kt index 66e3fc3f47b..6ce4a2efd0a 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslSyncListener.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslSyncListener.kt @@ -13,15 +13,18 @@ import org.jetbrains.kotlin.idea.framework.GRADLE_SYSTEM_ID import org.jetbrains.kotlin.idea.scripting.gradle.GradleScriptDefinitionsContributor class KotlinDslSyncListener : ExternalSystemTaskNotificationListenerAdapter() { + private val workingDirs = hashMapOf() + override fun onStart(id: ExternalSystemTaskId, workingDir: String?) { if (!isGradleProjectImport(id)) return if (workingDir == null) return gradleState.isSyncInProgress = true + workingDirs[id] = workingDir val project = id.findProject() ?: return - project.kotlinGradleDslSync[id] = KotlinDslGradleBuildSync(workingDir, id) + project.kotlinGradleDslSync[id] = KotlinDslGradleBuildSync(id) } override fun onEnd(id: ExternalSystemTaskId) { @@ -29,6 +32,7 @@ class KotlinDslSyncListener : ExternalSystemTaskNotificationListenerAdapter() { gradleState.isSyncInProgress = false + val workingDir = workingDirs.remove(id) ?: return val project = id.findProject() ?: return @Suppress("DEPRECATION") @@ -37,6 +41,7 @@ class KotlinDslSyncListener : ExternalSystemTaskNotificationListenerAdapter() { val sync = project.kotlinGradleDslSync.remove(id) if (sync != null) { // For Gradle 6.0 or higher + sync.workingDir = workingDir saveScriptModels(project, sync) } } @@ -46,6 +51,8 @@ class KotlinDslSyncListener : ExternalSystemTaskNotificationListenerAdapter() { gradleState.isSyncInProgress = false + workingDirs.remove(id) + val project = id.findProject() ?: return project.kotlinGradleDslSync.remove(id)