Create one instance of StandardIdeScriptDefinition per project

ScriptModuleInfo for scripts outside source roots in compared by virtualFile and script definition.
So when we use ScriptDefinitionsManaged.getDefaultScriptDefinition we shouldn't create a new one on each call

EA-132810 - assert: DiagnoseUnknownModuleInfoReporter.report
This commit is contained in:
Natalia Selezneva
2018-12-14 12:44:49 +03:00
parent ba2f211384
commit 4e6fb84bae
@@ -141,7 +141,9 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit
}
override fun getDefaultScriptDefinition(): KotlinScriptDefinition {
return StandardIdeScriptDefinition(project)
val standardScriptDefinitionContributor = ScriptDefinitionContributor.find<StandardScriptDefinitionContributor>(project)
?: error("StandardScriptDefinitionContributor should be registered is plugin.xml")
return standardScriptDefinitionContributor.getDefinitions().last()
}
private fun updateDefinitions() {
@@ -276,14 +278,16 @@ interface ScriptDefinitionContributor {
}
class StandardScriptDefinitionContributor(private val project: Project) : ScriptDefinitionContributor {
override fun getDefinitions() = listOf(StandardIdeScriptDefinition(project))
class StandardScriptDefinitionContributor(project: Project) : ScriptDefinitionContributor {
private val standardIdeScriptDefinition = StandardIdeScriptDefinition(project)
override fun getDefinitions() = listOf(standardIdeScriptDefinition)
override val id: String = "StandardKotlinScript"
}
class StandardIdeScriptDefinition(project: Project) : KotlinScriptDefinition(ScriptTemplateWithArgs::class) {
class StandardIdeScriptDefinition internal constructor(project: Project) : KotlinScriptDefinition(ScriptTemplateWithArgs::class) {
override val dependencyResolver = BundledKotlinScriptDependenciesResolver(project)
}