Fix order of ExternalSystemListeners
This commit is contained in:
+17
-16
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionContributor
|
|||||||
import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionSourceAsContributor
|
import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionSourceAsContributor
|
||||||
import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionsManager
|
import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionsManager
|
||||||
import org.jetbrains.kotlin.idea.core.script.loadDefinitionsFromTemplates
|
import org.jetbrains.kotlin.idea.core.script.loadDefinitionsFromTemplates
|
||||||
|
import org.jetbrains.kotlin.idea.scripting.gradle.importing.KotlinDslSyncListener
|
||||||
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinitionAdapterFromNewAPIBase
|
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinitionAdapterFromNewAPIBase
|
||||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
||||||
import org.jetbrains.kotlin.scripting.definitions.getEnvironment
|
import org.jetbrains.kotlin.scripting.definitions.getEnvironment
|
||||||
@@ -127,7 +128,7 @@ class GradleScriptDefinitionsContributor(private val project: Project) : ScriptD
|
|||||||
return default.distinct().asSequence()
|
return default.distinct().asSequence()
|
||||||
}
|
}
|
||||||
|
|
||||||
return sequenceOf(ErrorGradleScriptDefinition())
|
return sequenceOf(ErrorGradleScriptDefinition(project))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun tryToLoadOldBuildScriptDefinition(): List<ScriptDefinition> {
|
private fun tryToLoadOldBuildScriptDefinition(): List<ScriptDefinition> {
|
||||||
@@ -155,17 +156,14 @@ class GradleScriptDefinitionsContributor(private val project: Project) : ScriptD
|
|||||||
): List<ScriptDefinition> = try {
|
): List<ScriptDefinition> = try {
|
||||||
doLoadGradleTemplates(templateClass, dependencySelector, additionalResolverClasspath)
|
doLoadGradleTemplates(templateClass, dependencySelector, additionalResolverClasspath)
|
||||||
} catch (t: Throwable) {
|
} catch (t: Throwable) {
|
||||||
|
scriptingDebugLog { "error loading gradle script templates ${t.message}" }
|
||||||
// TODO: review exception handling
|
// TODO: review exception handling
|
||||||
failedToLoad.set(true)
|
failedToLoad.set(true)
|
||||||
if (t is IllegalStateException) {
|
if (t is IllegalStateException) {
|
||||||
Logger.getInstance(GradleScriptDefinitionsContributor::class.java)
|
Logger.getInstance(GradleScriptDefinitionsContributor::class.java)
|
||||||
.info("[kts] error loading gradle script templates: ${t.message}")
|
.info("[kts] error loading gradle script templates: ${t.message}")
|
||||||
}
|
}
|
||||||
listOf(
|
listOf(ErrorGradleScriptDefinition(project, t.message))
|
||||||
ErrorGradleScriptDefinition(
|
|
||||||
t.message
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -225,6 +223,8 @@ class GradleScriptDefinitionsContributor(private val project: Project) : ScriptD
|
|||||||
dependencySelector.matches(it.name)
|
dependencySelector.matches(it.name)
|
||||||
}.takeIf { it.isNotEmpty() }?.asList() ?: error(KotlinIdeaGradleBundle.message("error.text.missing.jars.in.gradle.directory"))
|
}.takeIf { it.isNotEmpty() }?.asList() ?: error(KotlinIdeaGradleBundle.message("error.text.missing.jars.in.gradle.directory"))
|
||||||
|
|
||||||
|
scriptingDebugLog { "loading gradle script templates from $templateClasspath" }
|
||||||
|
|
||||||
return loadDefinitionsFromTemplates(
|
return loadDefinitionsFromTemplates(
|
||||||
listOf(templateClass),
|
listOf(templateClass),
|
||||||
templateClasspath,
|
templateClasspath,
|
||||||
@@ -258,15 +258,13 @@ class GradleScriptDefinitionsContributor(private val project: Project) : ScriptD
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: refactor - minimize
|
// TODO: refactor - minimize
|
||||||
private class ErrorGradleScriptDefinition(message: String? = null) :
|
private class ErrorGradleScriptDefinition(project: Project, message: String? = null) :
|
||||||
ScriptDefinition.FromLegacy(
|
ScriptDefinition.FromLegacy(
|
||||||
ScriptingHostConfiguration(defaultJvmScriptingHostConfiguration),
|
ScriptingHostConfiguration(defaultJvmScriptingHostConfiguration),
|
||||||
LegacyDefinition(
|
LegacyDefinition(project, message)
|
||||||
message
|
|
||||||
)
|
|
||||||
) {
|
) {
|
||||||
|
|
||||||
private class LegacyDefinition(message: String?) : KotlinScriptDefinitionAdapterFromNewAPIBase() {
|
private class LegacyDefinition(project: Project, message: String?) : KotlinScriptDefinitionAdapterFromNewAPIBase() {
|
||||||
companion object {
|
companion object {
|
||||||
private const val KOTLIN_DSL_SCRIPT_EXTENSION = "gradle.kts"
|
private const val KOTLIN_DSL_SCRIPT_EXTENSION = "gradle.kts"
|
||||||
}
|
}
|
||||||
@@ -279,9 +277,7 @@ class GradleScriptDefinitionsContributor(private val project: Project) : ScriptD
|
|||||||
override val baseClass: KClass<*> = ScriptTemplateWithArgs::class
|
override val baseClass: KClass<*> = ScriptTemplateWithArgs::class
|
||||||
|
|
||||||
override val dependencyResolver: DependenciesResolver =
|
override val dependencyResolver: DependenciesResolver =
|
||||||
ErrorScriptDependenciesResolver(
|
ErrorScriptDependenciesResolver(project, message)
|
||||||
message
|
|
||||||
)
|
|
||||||
|
|
||||||
override fun toString(): String = "ErrorGradleScriptDefinition"
|
override fun toString(): String = "ErrorGradleScriptDefinition"
|
||||||
}
|
}
|
||||||
@@ -290,9 +286,14 @@ class GradleScriptDefinitionsContributor(private val project: Project) : ScriptD
|
|||||||
override fun hashCode(): Int = name.hashCode()
|
override fun hashCode(): Int = name.hashCode()
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ErrorScriptDependenciesResolver(private val message: String? = null) : DependenciesResolver {
|
private class ErrorScriptDependenciesResolver(
|
||||||
|
private val project: Project,
|
||||||
|
private val message: String? = null
|
||||||
|
) : DependenciesResolver {
|
||||||
override fun resolve(scriptContents: ScriptContents, environment: Environment): ResolveResult {
|
override fun resolve(scriptContents: ScriptContents, environment: Environment): ResolveResult {
|
||||||
val failureMessage = if (GradleScriptDefinitionsUpdater.gradleState.isSyncInProgress) {
|
val importTasks = KotlinDslSyncListener.instance.tasks
|
||||||
|
val importInProgress = synchronized(importTasks) { importTasks.values.any { it.project == project } }
|
||||||
|
val failureMessage = if (importInProgress) {
|
||||||
KotlinIdeaGradleBundle.message("error.text.highlighting.is.impossible.during.gradle.import")
|
KotlinIdeaGradleBundle.message("error.text.highlighting.is.impossible.during.gradle.import")
|
||||||
} else {
|
} else {
|
||||||
message ?: KotlinIdeaGradleBundle.message(
|
message ?: KotlinIdeaGradleBundle.message(
|
||||||
|
|||||||
-41
@@ -1,41 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.idea.scripting.gradle
|
|
||||||
|
|
||||||
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskId
|
|
||||||
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskNotificationListenerAdapter
|
|
||||||
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskType
|
|
||||||
import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionContributor
|
|
||||||
import org.jetbrains.kotlin.idea.framework.GRADLE_SYSTEM_ID
|
|
||||||
|
|
||||||
class GradleScriptDefinitionsUpdater : ExternalSystemTaskNotificationListenerAdapter() {
|
|
||||||
companion object {
|
|
||||||
internal val gradleState = GradleSyncState()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onStart(id: ExternalSystemTaskId, workingDir: String?) {
|
|
||||||
if (id.type == ExternalSystemTaskType.RESOLVE_PROJECT && id.projectSystemId == GRADLE_SYSTEM_ID) {
|
|
||||||
gradleState.isSyncInProgress = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onEnd(id: ExternalSystemTaskId) {
|
|
||||||
if (id.type == ExternalSystemTaskType.RESOLVE_PROJECT && id.projectSystemId == GRADLE_SYSTEM_ID) {
|
|
||||||
gradleState.isSyncInProgress = false
|
|
||||||
|
|
||||||
val project = id.findProject() ?: return
|
|
||||||
val gradleDefinitionsContributor =
|
|
||||||
ScriptDefinitionContributor.find<GradleScriptDefinitionsContributor>(
|
|
||||||
project
|
|
||||||
)
|
|
||||||
gradleDefinitionsContributor?.reloadIfNecessary()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal class GradleSyncState {
|
|
||||||
var isSyncInProgress: Boolean = false
|
|
||||||
}
|
|
||||||
+1
@@ -101,6 +101,7 @@ private fun KotlinDslScriptsModel.toListOfScriptModels(project: Project): List<K
|
|||||||
}
|
}
|
||||||
|
|
||||||
class KotlinDslGradleBuildSync(val workingDir: String, val taskId: ExternalSystemTaskId) {
|
class KotlinDslGradleBuildSync(val workingDir: String, val taskId: ExternalSystemTaskId) {
|
||||||
|
var project: Project? = null
|
||||||
val projectRoots = mutableSetOf<String>()
|
val projectRoots = mutableSetOf<String>()
|
||||||
val models = mutableListOf<KotlinDslScriptModel>()
|
val models = mutableListOf<KotlinDslScriptModel>()
|
||||||
var failed = false
|
var failed = false
|
||||||
|
|||||||
+9
-1
@@ -9,7 +9,9 @@ import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskId
|
|||||||
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskNotificationListener
|
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskNotificationListener
|
||||||
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
|
||||||
|
import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionContributor
|
||||||
import org.jetbrains.kotlin.idea.framework.GRADLE_SYSTEM_ID
|
import org.jetbrains.kotlin.idea.framework.GRADLE_SYSTEM_ID
|
||||||
|
import org.jetbrains.kotlin.idea.scripting.gradle.GradleScriptDefinitionsContributor
|
||||||
import org.jetbrains.kotlin.idea.scripting.gradle.roots.GradleBuildRootsManager
|
import org.jetbrains.kotlin.idea.scripting.gradle.roots.GradleBuildRootsManager
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@@ -26,10 +28,12 @@ class KotlinDslSyncListener : ExternalSystemTaskNotificationListenerAdapter() {
|
|||||||
if (!isGradleProjectResolve(id)) return
|
if (!isGradleProjectResolve(id)) return
|
||||||
|
|
||||||
if (workingDir == null) return
|
if (workingDir == null) return
|
||||||
synchronized(tasks) { tasks[id] = KotlinDslGradleBuildSync(workingDir, id) }
|
val task = KotlinDslGradleBuildSync(workingDir, id)
|
||||||
|
synchronized(tasks) { tasks[id] = task }
|
||||||
|
|
||||||
// project may be null in case of new project
|
// project may be null in case of new project
|
||||||
val project = id.findProject() ?: return
|
val project = id.findProject() ?: return
|
||||||
|
task.project = project
|
||||||
GradleBuildRootsManager.getInstance(project).markImportingInProgress(workingDir)
|
GradleBuildRootsManager.getInstance(project).markImportingInProgress(workingDir)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,6 +44,10 @@ class KotlinDslSyncListener : ExternalSystemTaskNotificationListenerAdapter() {
|
|||||||
|
|
||||||
// project may be null in case of new project
|
// project may be null in case of new project
|
||||||
val project = id.findProject() ?: return
|
val project = id.findProject() ?: return
|
||||||
|
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
|
ScriptDefinitionContributor.find<GradleScriptDefinitionsContributor>(project)?.reloadIfNecessary()
|
||||||
|
|
||||||
saveScriptModels(project, sync)
|
saveScriptModels(project, sync)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,13 +29,8 @@
|
|||||||
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.configuration.KotlinTargetDataService"/>
|
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.configuration.KotlinTargetDataService"/>
|
||||||
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.KotlinJavaMPPSourceSetDataService"/>
|
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.KotlinJavaMPPSourceSetDataService"/>
|
||||||
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.configuration.klib.KotlinNativeLibraryDataService"/>
|
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.configuration.klib.KotlinNativeLibraryDataService"/>
|
||||||
<externalSystemTaskNotificationListener
|
|
||||||
id="GradleScriptDefinitionsUpdater"
|
|
||||||
implementation="org.jetbrains.kotlin.idea.scripting.gradle.GradleScriptDefinitionsUpdater"
|
|
||||||
/>
|
|
||||||
<externalSystemTaskNotificationListener
|
<externalSystemTaskNotificationListener
|
||||||
implementation="org.jetbrains.kotlin.idea.scripting.gradle.importing.KotlinDslSyncListener"
|
implementation="org.jetbrains.kotlin.idea.scripting.gradle.importing.KotlinDslSyncListener"
|
||||||
order="after GradleScriptDefinitionsUpdater"
|
|
||||||
/>
|
/>
|
||||||
<editorNotificationProvider implementation="org.jetbrains.kotlin.idea.scripting.gradle.MissingGradleScriptConfigurationNotificationProvider"/>
|
<editorNotificationProvider implementation="org.jetbrains.kotlin.idea.scripting.gradle.MissingGradleScriptConfigurationNotificationProvider"/>
|
||||||
|
|
||||||
|
|||||||
@@ -24,8 +24,7 @@
|
|||||||
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.KotlinJavaMPPSourceSetDataService"/>
|
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.KotlinJavaMPPSourceSetDataService"/>
|
||||||
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.configuration.klib.KotlinNativeLibraryDataService"/>
|
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.configuration.klib.KotlinNativeLibraryDataService"/>
|
||||||
<externalSystemTaskNotificationListener
|
<externalSystemTaskNotificationListener
|
||||||
id="GradleScriptDefinitionsUpdater"
|
implementation="org.jetbrains.kotlin.idea.scripting.gradle.importing.KotlinDslSyncListener"
|
||||||
implementation="org.jetbrains.kotlin.idea.scripting.gradle.GradleScriptDefinitionsUpdater"
|
|
||||||
/>
|
/>
|
||||||
<editorNotificationProvider implementation="org.jetbrains.kotlin.idea.scripting.gradle.MissingGradleScriptConfigurationNotificationProvider"/>
|
<editorNotificationProvider implementation="org.jetbrains.kotlin.idea.scripting.gradle.MissingGradleScriptConfigurationNotificationProvider"/>
|
||||||
|
|
||||||
|
|||||||
@@ -25,13 +25,8 @@
|
|||||||
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.configuration.KotlinTargetDataService"/>
|
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.configuration.KotlinTargetDataService"/>
|
||||||
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.KotlinJavaMPPSourceSetDataService"/>
|
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.KotlinJavaMPPSourceSetDataService"/>
|
||||||
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.configuration.klib.KotlinNativeLibraryDataService"/>
|
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.configuration.klib.KotlinNativeLibraryDataService"/>
|
||||||
<externalSystemTaskNotificationListener
|
|
||||||
id="GradleScriptDefinitionsUpdater"
|
|
||||||
implementation="org.jetbrains.kotlin.idea.scripting.gradle.GradleScriptDefinitionsUpdater"
|
|
||||||
/>
|
|
||||||
<externalSystemTaskNotificationListener
|
<externalSystemTaskNotificationListener
|
||||||
implementation="org.jetbrains.kotlin.idea.scripting.gradle.importing.KotlinDslSyncListener"
|
implementation="org.jetbrains.kotlin.idea.scripting.gradle.importing.KotlinDslSyncListener"
|
||||||
order="after GradleScriptDefinitionsUpdater"
|
|
||||||
/>
|
/>
|
||||||
<editorNotificationProvider implementation="org.jetbrains.kotlin.idea.scripting.gradle.MissingGradleScriptConfigurationNotificationProvider"/>
|
<editorNotificationProvider implementation="org.jetbrains.kotlin.idea.scripting.gradle.MissingGradleScriptConfigurationNotificationProvider"/>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user