KotlinDslScriptsModel: import models in case when script contains errors

^KT-37237 Fixed
This commit is contained in:
Natalia Selezneva
2020-03-19 15:10:39 +03:00
parent 73ca9d1b54
commit 47d97902c1
3 changed files with 30 additions and 2 deletions
@@ -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.EditorReportSeverity
import org.gradle.tooling.model.kotlin.dsl.KotlinDslModelsParameters.* import org.gradle.tooling.model.kotlin.dsl.KotlinDslModelsParameters.*
import org.gradle.tooling.model.kotlin.dsl.KotlinDslScriptsModel import org.gradle.tooling.model.kotlin.dsl.KotlinDslScriptsModel
import org.jetbrains.kotlin.idea.KotlinIdeaGradleBundle
import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension
internal val LOG = Logger.getInstance(KotlinDslScriptModelResolverCommon::class.java) internal val LOG = Logger.getInstance(KotlinDslScriptModelResolverCommon::class.java)
@@ -27,7 +28,7 @@ abstract class KotlinDslScriptModelResolverCommon : AbstractProjectResolverExten
return listOf( return listOf(
Pair( Pair(
PROVIDER_MODE_SYSTEM_PROPERTY_NAME, 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() val models = model.toListOfScriptModels()
saveScriptModels(resolverCtx, models) saveScriptModels(resolverCtx, models)
if (models.containsErrors()) {
throw IllegalStateException(KotlinIdeaGradleBundle.message("title.kotlin.build.script"))
}
} }
} }
private fun Collection<KotlinDslScriptModel>.containsErrors(): Boolean {
return any { it.messages.any { it.severity == KotlinDslScriptModel.Severity.ERROR } }
}
} }
@@ -6,6 +6,8 @@
package org.jetbrains.kotlin.idea.codeInsight.gradle package org.jetbrains.kotlin.idea.codeInsight.gradle
import com.intellij.openapi.vfs.LocalFileSystem 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.ScriptConfigurationManager
import org.jetbrains.kotlin.idea.core.script.applySuggestedScriptConfiguration import org.jetbrains.kotlin.idea.core.script.applySuggestedScriptConfiguration
import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationCacheScope import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationCacheScope
@@ -48,6 +50,22 @@ class GradleKtsImportTest : GradleImportingTestCase() {
checkConfiguration("build.gradle.kts") 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 @Test
@TargetVersions("6.0.1+") @TargetVersions("6.0.1+")
fun testCompositeBuild() { fun testCompositeBuild() {
@@ -70,7 +88,7 @@ class GradleKtsImportTest : GradleImportingTestCase() {
private fun checkConfiguration(vararg files: String) { private fun checkConfiguration(vararg files: String) {
val scripts = files.map { val scripts = files.map {
KtsFixture(it).also { kts -> 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)!! kts.imported = scriptConfigurationManager.getConfiguration(kts.psiFile)!!
} }
} }
@@ -0,0 +1 @@
unresolved