diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolverCommon.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolverCommon.kt index 93abd2baab3..a7b3d27f2ae 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolverCommon.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolverCommon.kt @@ -13,6 +13,7 @@ import com.intellij.openapi.util.Pair import org.gradle.tooling.model.kotlin.dsl.EditorReportSeverity import org.gradle.tooling.model.kotlin.dsl.KotlinDslModelsParameters.* import org.gradle.tooling.model.kotlin.dsl.KotlinDslScriptsModel +import org.jetbrains.kotlin.idea.KotlinIdeaGradleBundle import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension internal val LOG = Logger.getInstance(KotlinDslScriptModelResolverCommon::class.java) @@ -27,7 +28,7 @@ abstract class KotlinDslScriptModelResolverCommon : AbstractProjectResolverExten return listOf( Pair( PROVIDER_MODE_SYSTEM_PROPERTY_NAME, - STRICT_CLASSPATH_MODE_SYSTEM_PROPERTY_VALUE + CLASSPATH_MODE_SYSTEM_PROPERTY_VALUE ) ) } @@ -94,6 +95,14 @@ abstract class KotlinDslScriptModelResolverCommon : AbstractProjectResolverExten val models = model.toListOfScriptModels() saveScriptModels(resolverCtx, models) + + if (models.containsErrors()) { + throw IllegalStateException(KotlinIdeaGradleBundle.message("title.kotlin.build.script")) + } } } + + private fun Collection.containsErrors(): Boolean { + return any { it.messages.any { it.severity == KotlinDslScriptModel.Severity.ERROR } } + } } \ No newline at end of file diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleKtsImportTest.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleKtsImportTest.kt index 43d149b35ac..6d3d0e40d8b 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleKtsImportTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleKtsImportTest.kt @@ -6,6 +6,8 @@ package org.jetbrains.kotlin.idea.codeInsight.gradle import com.intellij.openapi.vfs.LocalFileSystem +import junit.framework.AssertionFailedError +import org.jetbrains.kotlin.idea.KotlinIdeaGradleBundle import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager import org.jetbrains.kotlin.idea.core.script.applySuggestedScriptConfiguration import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationCacheScope @@ -48,6 +50,22 @@ class GradleKtsImportTest : GradleImportingTestCase() { checkConfiguration("build.gradle.kts") } + @Test + @TargetVersions("6.0.1+") + fun testError() { + configureByFiles() + + val result = try { + importProject() + } catch (e: AssertionFailedError) { + e + } + + assert(result is AssertionFailedError) { "Exception should be thrown" } + assert((result as AssertionFailedError).message?.contains(KotlinIdeaGradleBundle.message("title.kotlin.build.script")) == true) + checkConfiguration("build.gradle.kts") + } + @Test @TargetVersions("6.0.1+") fun testCompositeBuild() { @@ -70,7 +88,7 @@ class GradleKtsImportTest : GradleImportingTestCase() { private fun checkConfiguration(vararg files: String) { val scripts = files.map { KtsFixture(it).also { kts -> - assertTrue(scriptConfigurationManager.hasConfiguration(kts.psiFile)) + assertTrue("Configuration for ${kts.file.path} is missing", scriptConfigurationManager.hasConfiguration(kts.psiFile)) kts.imported = scriptConfigurationManager.getConfiguration(kts.psiFile)!! } } diff --git a/idea/testData/gradle/gradleKtsImportTest/error/build.gradle.kts b/idea/testData/gradle/gradleKtsImportTest/error/build.gradle.kts new file mode 100644 index 00000000000..492c98236bb --- /dev/null +++ b/idea/testData/gradle/gradleKtsImportTest/error/build.gradle.kts @@ -0,0 +1 @@ +unresolved \ No newline at end of file