Open build tool window on Gradle DSL errors

^EA-236697 Fixed
This commit is contained in:
Vladimir Dolzhenko
2020-10-01 10:41:57 +02:00
committed by Vladimir Dolzhenko
parent e018f2bd3e
commit 741df42c18
5 changed files with 29 additions and 16 deletions
@@ -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()
}
}
@@ -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
}
}
}