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.ScriptDefinitionsManager
|
||||
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.ScriptDefinition
|
||||
import org.jetbrains.kotlin.scripting.definitions.getEnvironment
|
||||
@@ -127,7 +128,7 @@ class GradleScriptDefinitionsContributor(private val project: Project) : ScriptD
|
||||
return default.distinct().asSequence()
|
||||
}
|
||||
|
||||
return sequenceOf(ErrorGradleScriptDefinition())
|
||||
return sequenceOf(ErrorGradleScriptDefinition(project))
|
||||
}
|
||||
|
||||
private fun tryToLoadOldBuildScriptDefinition(): List<ScriptDefinition> {
|
||||
@@ -155,17 +156,14 @@ class GradleScriptDefinitionsContributor(private val project: Project) : ScriptD
|
||||
): List<ScriptDefinition> = try {
|
||||
doLoadGradleTemplates(templateClass, dependencySelector, additionalResolverClasspath)
|
||||
} catch (t: Throwable) {
|
||||
scriptingDebugLog { "error loading gradle script templates ${t.message}" }
|
||||
// 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
|
||||
)
|
||||
)
|
||||
listOf(ErrorGradleScriptDefinition(project, t.message))
|
||||
}
|
||||
|
||||
|
||||
@@ -225,6 +223,8 @@ class GradleScriptDefinitionsContributor(private val project: Project) : ScriptD
|
||||
dependencySelector.matches(it.name)
|
||||
}.takeIf { it.isNotEmpty() }?.asList() ?: error(KotlinIdeaGradleBundle.message("error.text.missing.jars.in.gradle.directory"))
|
||||
|
||||
scriptingDebugLog { "loading gradle script templates from $templateClasspath" }
|
||||
|
||||
return loadDefinitionsFromTemplates(
|
||||
listOf(templateClass),
|
||||
templateClasspath,
|
||||
@@ -258,15 +258,13 @@ class GradleScriptDefinitionsContributor(private val project: Project) : ScriptD
|
||||
}
|
||||
|
||||
// TODO: refactor - minimize
|
||||
private class ErrorGradleScriptDefinition(message: String? = null) :
|
||||
private class ErrorGradleScriptDefinition(project: Project, message: String? = null) :
|
||||
ScriptDefinition.FromLegacy(
|
||||
ScriptingHostConfiguration(defaultJvmScriptingHostConfiguration),
|
||||
LegacyDefinition(
|
||||
message
|
||||
)
|
||||
LegacyDefinition(project, message)
|
||||
) {
|
||||
|
||||
private class LegacyDefinition(message: String?) : KotlinScriptDefinitionAdapterFromNewAPIBase() {
|
||||
private class LegacyDefinition(project: Project, message: String?) : KotlinScriptDefinitionAdapterFromNewAPIBase() {
|
||||
companion object {
|
||||
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 dependencyResolver: DependenciesResolver =
|
||||
ErrorScriptDependenciesResolver(
|
||||
message
|
||||
)
|
||||
ErrorScriptDependenciesResolver(project, message)
|
||||
|
||||
override fun toString(): String = "ErrorGradleScriptDefinition"
|
||||
}
|
||||
@@ -290,9 +286,14 @@ class GradleScriptDefinitionsContributor(private val project: Project) : ScriptD
|
||||
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 {
|
||||
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")
|
||||
} else {
|
||||
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) {
|
||||
var project: Project? = null
|
||||
val projectRoots = mutableSetOf<String>()
|
||||
val models = mutableListOf<KotlinDslScriptModel>()
|
||||
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.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
|
||||
import org.jetbrains.kotlin.idea.scripting.gradle.GradleScriptDefinitionsContributor
|
||||
import org.jetbrains.kotlin.idea.scripting.gradle.roots.GradleBuildRootsManager
|
||||
import java.util.*
|
||||
|
||||
@@ -26,10 +28,12 @@ class KotlinDslSyncListener : ExternalSystemTaskNotificationListenerAdapter() {
|
||||
if (!isGradleProjectResolve(id)) 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
|
||||
val project = id.findProject() ?: return
|
||||
task.project = project
|
||||
GradleBuildRootsManager.getInstance(project).markImportingInProgress(workingDir)
|
||||
}
|
||||
|
||||
@@ -40,6 +44,10 @@ class KotlinDslSyncListener : ExternalSystemTaskNotificationListenerAdapter() {
|
||||
|
||||
// project may be null in case of new project
|
||||
val project = id.findProject() ?: return
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
ScriptDefinitionContributor.find<GradleScriptDefinitionsContributor>(project)?.reloadIfNecessary()
|
||||
|
||||
saveScriptModels(project, sync)
|
||||
}
|
||||
|
||||
|
||||
@@ -29,13 +29,8 @@
|
||||
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.configuration.KotlinTargetDataService"/>
|
||||
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.KotlinJavaMPPSourceSetDataService"/>
|
||||
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.configuration.klib.KotlinNativeLibraryDataService"/>
|
||||
<externalSystemTaskNotificationListener
|
||||
id="GradleScriptDefinitionsUpdater"
|
||||
implementation="org.jetbrains.kotlin.idea.scripting.gradle.GradleScriptDefinitionsUpdater"
|
||||
/>
|
||||
<externalSystemTaskNotificationListener
|
||||
implementation="org.jetbrains.kotlin.idea.scripting.gradle.importing.KotlinDslSyncListener"
|
||||
order="after GradleScriptDefinitionsUpdater"
|
||||
/>
|
||||
<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.configuration.klib.KotlinNativeLibraryDataService"/>
|
||||
<externalSystemTaskNotificationListener
|
||||
id="GradleScriptDefinitionsUpdater"
|
||||
implementation="org.jetbrains.kotlin.idea.scripting.gradle.GradleScriptDefinitionsUpdater"
|
||||
implementation="org.jetbrains.kotlin.idea.scripting.gradle.importing.KotlinDslSyncListener"
|
||||
/>
|
||||
<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.KotlinJavaMPPSourceSetDataService"/>
|
||||
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.configuration.klib.KotlinNativeLibraryDataService"/>
|
||||
<externalSystemTaskNotificationListener
|
||||
id="GradleScriptDefinitionsUpdater"
|
||||
implementation="org.jetbrains.kotlin.idea.scripting.gradle.GradleScriptDefinitionsUpdater"
|
||||
/>
|
||||
<externalSystemTaskNotificationListener
|
||||
implementation="org.jetbrains.kotlin.idea.scripting.gradle.importing.KotlinDslSyncListener"
|
||||
order="after GradleScriptDefinitionsUpdater"
|
||||
/>
|
||||
<editorNotificationProvider implementation="org.jetbrains.kotlin.idea.scripting.gradle.MissingGradleScriptConfigurationNotificationProvider"/>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user