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