Refactor script definition loading error handling
reenable logging of failures suppress loading from failed contributors
This commit is contained in:
+8
-5
@@ -69,6 +69,8 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit
|
||||
private var definitionsByContributor = mutableMapOf<ScriptDefinitionContributor, List<KotlinScriptDefinition>>()
|
||||
private var definitions: List<KotlinScriptDefinition>? = null
|
||||
|
||||
private val failedContributorsHashes = HashSet<Int>()
|
||||
|
||||
private val scriptDefinitionsCacheLock = ReentrantReadWriteLock()
|
||||
private val scriptDefinitionsCache = SLRUMap<String, KotlinScriptDefinition>(10, 10)
|
||||
|
||||
@@ -195,13 +197,14 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit
|
||||
}
|
||||
|
||||
private fun ScriptDefinitionContributor.safeGetDefinitions(): List<KotlinScriptDefinition> {
|
||||
return try {
|
||||
getDefinitions()
|
||||
if (!failedContributorsHashes.contains(this@safeGetDefinitions.hashCode())) try {
|
||||
return getDefinitions()
|
||||
} catch (t: Throwable) {
|
||||
// TODO: review exception handling
|
||||
// possibly log, see KT-19276
|
||||
emptyList()
|
||||
// reporting failed loading only once
|
||||
LOG.error("[kts] cannot load script definitions using $this", t)
|
||||
failedContributorsHashes.add(this@safeGetDefinitions.hashCode())
|
||||
}
|
||||
return emptyList()
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
+7
-1
@@ -17,6 +17,7 @@
|
||||
package org.jetbrains.kotlin.idea.core.script
|
||||
|
||||
import com.intellij.execution.configurations.CommandLineTokenizer
|
||||
import com.intellij.openapi.diagnostic.Logger
|
||||
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskId
|
||||
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskNotificationListenerAdapter
|
||||
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskType
|
||||
@@ -37,6 +38,7 @@ import org.jetbrains.plugins.gradle.settings.GradleProjectSettings
|
||||
import org.jetbrains.plugins.gradle.settings.GradleSettingsListener
|
||||
import org.jetbrains.plugins.gradle.util.GradleConstants
|
||||
import java.io.File
|
||||
import java.lang.IllegalStateException
|
||||
import java.util.*
|
||||
import java.util.concurrent.atomic.AtomicBoolean
|
||||
import kotlin.collections.LinkedHashSet
|
||||
@@ -157,6 +159,10 @@ class GradleScriptDefinitionsContributor(private val project: Project) : ScriptD
|
||||
} catch (t: Throwable) {
|
||||
// TODO: review exception handling
|
||||
failedToLoad.set(true)
|
||||
if (t is IllegalStateException) {
|
||||
Logger.getInstance(GradleScriptDefinitionsContributor::class.java)
|
||||
.info("[kts] error loading gradle script templates: ${t.message}")
|
||||
}
|
||||
listOf(ErrorGradleScriptDefinition(t.message))
|
||||
}
|
||||
|
||||
@@ -191,7 +197,7 @@ class GradleScriptDefinitionsContributor(private val project: Project) : ScriptD
|
||||
if (gradleSettings.getLinkedProjectsSettings().isEmpty()) error("Project '${project.name}' isn't linked with Gradle")
|
||||
|
||||
val projectSettings = gradleSettings.getLinkedProjectsSettings().filterIsInstance<GradleProjectSettings>().firstOrNull()
|
||||
?: error("Project '${project.name}' isn't linked with Gradle")
|
||||
?: error("Project '${project.name}' isn't linked with Gradle")
|
||||
|
||||
val gradleExeSettings = ExternalSystemApiUtil.getExecutionSettings<GradleExecutionSettings>(
|
||||
project,
|
||||
|
||||
Reference in New Issue
Block a user