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.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<KotlinDslScriptModel>.containsErrors(): Boolean {
return any { it.messages.any { it.severity == KotlinDslScriptModel.Severity.ERROR } }
}
}
@@ -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)!!
}
}
@@ -0,0 +1 @@
unresolved