diff --git a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/util/ApplicationUtils.kt b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/util/ApplicationUtils.kt index 77f9eb8dfc5..4d23a1b3a87 100644 --- a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/util/ApplicationUtils.kt +++ b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/util/ApplicationUtils.kt @@ -11,6 +11,7 @@ import com.intellij.openapi.components.ComponentManager import com.intellij.openapi.progress.impl.CancellationCheck import com.intellij.openapi.project.DumbService import com.intellij.openapi.project.Project +import com.intellij.openapi.util.Condition fun runReadAction(action: () -> T): T { return ApplicationManager.getApplication().runReadAction(action) @@ -52,6 +53,9 @@ inline fun executeOnPooledThread(crossinline action: () -> Unit) = inline fun invokeLater(crossinline action: () -> Unit) = ApplicationManager.getApplication().invokeLater { action() } +inline fun invokeLater(expired: Condition<*>, crossinline action: () -> Unit) = + ApplicationManager.getApplication().invokeLater({ action() }, expired) + inline fun isUnitTestMode(): Boolean = ApplicationManager.getApplication().isUnitTestMode inline fun ComponentManager.getServiceSafe(): T = diff --git a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/util/ApplicationUtils.kt.193 b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/util/ApplicationUtils.kt.193 index 39e98ebdfad..01f484152d8 100644 --- a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/util/ApplicationUtils.kt.193 +++ b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/util/ApplicationUtils.kt.193 @@ -11,6 +11,7 @@ import com.intellij.openapi.components.ComponentManager import com.intellij.openapi.project.Project import org.jetbrains.annotations.Nls import com.intellij.openapi.project.DumbService +import com.intellij.openapi.util.Condition fun runReadAction(action: () -> T): T { return ApplicationManager.getApplication().runReadAction(action) @@ -43,6 +44,9 @@ inline fun executeOnPooledThread(crossinline action: () -> Unit) = inline fun invokeLater(crossinline action: () -> Unit) = ApplicationManager.getApplication().invokeLater { action() } +inline fun invokeLater(expired: Condition<*>, crossinline action: () -> Unit) = + ApplicationManager.getApplication().invokeLater({ action() }, expired) + inline fun isUnitTestMode(): Boolean = ApplicationManager.getApplication().isUnitTestMode inline fun ComponentManager.getServiceSafe(): T = diff --git a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/util/ApplicationUtils.kt.as40 b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/util/ApplicationUtils.kt.as40 index aebd7211d12..af352d76fa1 100644 --- a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/util/ApplicationUtils.kt.as40 +++ b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/util/ApplicationUtils.kt.as40 @@ -25,6 +25,7 @@ import com.intellij.openapi.progress.ProgressIndicatorProvider import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.project.Project import com.intellij.openapi.project.DumbService +import com.intellij.openapi.util.Condition fun runReadAction(action: () -> T): T { return ApplicationManager.getApplication().runReadAction(action) @@ -57,6 +58,9 @@ inline fun executeOnPooledThread(crossinline action: () -> Unit) = inline fun invokeLater(crossinline action: () -> Unit) = ApplicationManager.getApplication().invokeLater { action() } +inline fun invokeLater(expired: Condition<*>, crossinline action: () -> Unit) = + ApplicationManager.getApplication().invokeLater({ action() }, expired) + inline fun isUnitTestMode(): Boolean = ApplicationManager.getApplication().isUnitTestMode inline fun ComponentManager.getServiceSafe(): T = diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelProcessor.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelProcessor.kt index 30017b9c4dd..3382f10964d 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelProcessor.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelProcessor.kt @@ -5,24 +5,23 @@ package org.jetbrains.kotlin.idea.scripting.gradle.importing +import com.intellij.build.BuildContentManager import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskId -import com.intellij.openapi.externalSystem.service.execution.ExternalSystemJdkUtil import com.intellij.openapi.project.Project -import com.intellij.openapi.projectRoots.JdkUtil import com.intellij.openapi.util.io.FileUtil.toSystemIndependentName import com.intellij.openapi.vfs.VfsUtil import org.gradle.tooling.model.kotlin.dsl.EditorReportSeverity import org.gradle.tooling.model.kotlin.dsl.KotlinDslScriptsModel import org.jetbrains.kotlin.gradle.BrokenKotlinDslScriptsModel -import org.jetbrains.kotlin.idea.KotlinIdeaGradleBundle import org.jetbrains.kotlin.idea.scripting.gradle.getGradleScriptInputsStamp import org.jetbrains.kotlin.idea.scripting.gradle.roots.GradleBuildRootsManager +import org.jetbrains.kotlin.idea.util.application.invokeLater import org.jetbrains.plugins.gradle.model.BuildScriptClasspathModel import org.jetbrains.plugins.gradle.service.project.DefaultProjectResolverContext import org.jetbrains.plugins.gradle.service.project.ProjectResolverContext -import org.jetbrains.plugins.gradle.settings.GradleSettings import java.io.File + fun saveGradleBuildEnvironment(resolverCtx: ProjectResolverContext) { val task = resolverCtx.externalSystemTaskId val tasks = KotlinDslSyncListener.instance.tasks @@ -49,14 +48,15 @@ fun processScriptModel( resolverCtx: ProjectResolverContext, model: KotlinDslScriptsModel, projectName: String -) { - if (model is BrokenKotlinDslScriptsModel) { +): Boolean { + return if (model is BrokenKotlinDslScriptsModel) { LOG.error( "Couldn't get KotlinDslScriptsModel for $projectName:\n${model.message}\n${model.stackTrace}" ) + false } else { val task = resolverCtx.externalSystemTaskId - val project = task.findProject() ?: return + val project = task.findProject() ?: return false val models = model.toListOfScriptModels(project) val tasks = KotlinDslSyncListener.instance.tasks @@ -69,17 +69,16 @@ fun processScriptModel( val errors = models.collectErrors() if (errors.isNotEmpty()) { - if (sync != null) { - synchronized(sync) { - sync.failed = true + sync?.let { + synchronized(it) { + it.failed = true } } - throw IllegalStateException( - KotlinIdeaGradleBundle.message("title.kotlin.build.script") - + ":\n" - + errors.joinToString("\n") { it.text + "\n" + it.details } - ) + invokeLater(project.disposed) { + BuildContentManager.getInstance(project).orCreateToolWindow.activate(null, false, false) + } } + errors.isEmpty() } } diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.kt index 1dad8d7effa..9d421f365b4 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.kt @@ -42,7 +42,9 @@ class KotlinDslScriptModelContributor : ProjectModelContributor { if (kotlinDslScriptsModelImportSupported(resolverCtx.projectGradleVersion)) { val model = toolingModelsProvider.getProjectModel(it, KotlinDslScriptsModel::class.java) if (model != null) { - processScriptModel(resolverCtx, model, projectIdentifier) + if (!processScriptModel(resolverCtx, model, projectIdentifier)) { + return@forEach + } } }