gradle.kts importing: move code to dedicated package

This commit is contained in:
Sergey Rostov
2019-12-09 10:58:53 +03:00
parent 6e3e65c490
commit c0690ff5f6
10 changed files with 38 additions and 37 deletions
@@ -3,7 +3,7 @@
* 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.configuration
package org.jetbrains.kotlin.idea.scripting.gradle.importing
import com.intellij.openapi.externalSystem.model.DataNode
import com.intellij.openapi.externalSystem.model.project.ProjectData
@@ -12,16 +12,15 @@ import org.gradle.tooling.model.kotlin.dsl.EditorReportSeverity
import org.gradle.tooling.model.kotlin.dsl.KotlinDslScriptsModel
import org.jetbrains.kotlin.idea.util.NotNullableCopyableDataNodeUserDataProperty
var DataNode<out ProjectData>.gradleKotlinBuildScripts
var DataNode<out ProjectData>.KOTLIN_DSL_SCRIPT_IDEA_MODELS: MutableList<KotlinDslScriptIdeaModel>
by NotNullableCopyableDataNodeUserDataProperty(
Key.create<MutableList<GradleKotlinBuildScriptData>>(
Key.create<MutableList<KotlinDslScriptIdeaModel>>(
"GRADLE_KOTLIN_BUILD_SCRIPTS"
),
mutableListOf()
)
data class GradleKotlinBuildScriptData(
data class KotlinDslScriptIdeaModel(
val file: String,
val classPath: List<String>,
val sourcePath: List<String>,
@@ -40,30 +39,33 @@ data class GradleKotlinBuildScriptData(
}
@Suppress("unused")
fun KotlinGradleBuildScriptsResolver.copy(model: KotlinDslScriptsModel): List<GradleKotlinBuildScriptData> {
fun KotlinDslScriptModelResolver.copy(model: KotlinDslScriptsModel): List<KotlinDslScriptIdeaModel> {
return model.scriptModels.map { (file, model) ->
val messages = mutableListOf<GradleKotlinBuildScriptData.Message>()
val messages = mutableListOf<KotlinDslScriptIdeaModel.Message>()
model.exceptions.forEach {
messages.add(
GradleKotlinBuildScriptData.Message(GradleKotlinBuildScriptData.Severity.ERROR, it)
KotlinDslScriptIdeaModel.Message(
KotlinDslScriptIdeaModel.Severity.ERROR, it
)
)
}
model.editorReports.forEach {
messages.add(GradleKotlinBuildScriptData.Message(
messages.add(KotlinDslScriptIdeaModel.Message(
when (it.severity) {
EditorReportSeverity.WARNING -> GradleKotlinBuildScriptData.Severity.WARNING
else -> GradleKotlinBuildScriptData.Severity.ERROR
EditorReportSeverity.WARNING -> KotlinDslScriptIdeaModel.Severity.WARNING
else -> KotlinDslScriptIdeaModel.Severity.ERROR
},
it.message,
it.position?.let { position ->
GradleKotlinBuildScriptData.Position(position.line, position.column)
KotlinDslScriptIdeaModel
.Position(position.line, position.column)
}
))
}
GradleKotlinBuildScriptData(
KotlinDslScriptIdeaModel(
file.absolutePath,
model.classPath.map { it.absolutePath },
model.sourcePath.map { it.absolutePath },
@@ -3,7 +3,7 @@
* 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.configuration
package org.jetbrains.kotlin.idea.scripting.gradle.importing
import com.intellij.openapi.components.service
import com.intellij.openapi.externalSystem.model.DataNode
@@ -30,8 +30,6 @@ import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
import org.jetbrains.kotlin.scripting.resolve.VirtualFileScriptSource
import org.jetbrains.kotlin.scripting.resolve.adjustByDefinition
import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData
import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings
import org.jetbrains.plugins.gradle.util.GradleConstants
import java.io.File
@@ -40,7 +38,7 @@ import kotlin.script.experimental.jvm.JvmDependency
import kotlin.script.experimental.jvm.jdkHome
import kotlin.script.experimental.jvm.jvm
class KotlinGradleBuildScriptsDataService : AbstractProjectDataService<ProjectData, Void>() {
class KotlinDslScriptModelDataService : AbstractProjectDataService<ProjectData, Void>() {
override fun getTargetDataKey(): Key<ProjectData> = ProjectKeys.PROJECT
override fun onSuccessImport(
@@ -52,7 +50,7 @@ class KotlinGradleBuildScriptsDataService : AbstractProjectDataService<ProjectDa
super.onSuccessImport(imported, projectData, project, modelsProvider)
val projectDataNode = imported.singleOrNull() ?: return
val gradleKotlinBuildScripts = projectDataNode.gradleKotlinBuildScripts
val gradleKotlinBuildScripts = projectDataNode.KOTLIN_DSL_SCRIPT_IDEA_MODELS
val buildScripts = gradleKotlinBuildScripts.toList()
gradleKotlinBuildScripts.clear()
@@ -107,7 +105,7 @@ class KotlinGradleBuildScriptsDataService : AbstractProjectDataService<ProjectDa
}
private fun addBuildScriptDiagnosticMessage(
message: GradleKotlinBuildScriptData.Message,
message: KotlinDslScriptIdeaModel.Message,
virtualFile: VirtualFile,
project: Project
) {
@@ -115,17 +113,18 @@ class KotlinGradleBuildScriptsDataService : AbstractProjectDataService<ProjectDa
"Kotlin Build Script",
message.text,
when (message.severity) {
GradleKotlinBuildScriptData.Severity.WARNING -> NotificationCategory.WARNING
GradleKotlinBuildScriptData.Severity.ERROR -> NotificationCategory.ERROR
KotlinDslScriptIdeaModel.Severity.WARNING -> NotificationCategory.WARNING
KotlinDslScriptIdeaModel.Severity.ERROR -> NotificationCategory.ERROR
},
NotificationSource.PROJECT_SYNC
)
notification.navigatable = LazyNavigatable(
virtualFile,
project,
message.position
)
notification.navigatable =
LazyNavigatable(
virtualFile,
project,
message.position
)
ExternalSystemNotificationManager.getInstance(project).showNotification(
GradleConstants.SYSTEM_ID,
@@ -136,7 +135,7 @@ class KotlinGradleBuildScriptsDataService : AbstractProjectDataService<ProjectDa
class LazyNavigatable internal constructor(
private val virtualFile: VirtualFile,
private val project: Project,
val position: GradleKotlinBuildScriptData.Position?
val position: KotlinDslScriptIdeaModel.Position?
) : Navigatable {
private val openFileDescriptor: Navigatable by lazy {
if (position != null) OpenFileDescriptor(project, virtualFile, position.line, position.column)
@@ -3,7 +3,7 @@
* 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.configuration
package org.jetbrains.kotlin.idea.scripting.gradle.importing
import org.gradle.tooling.BuildController
import org.gradle.tooling.model.Model
@@ -19,11 +19,11 @@ class KotlinDslScriptModelProvider : ProjectImportModelProvider {
buildModel: GradleBuild,
consumer: ProjectImportModelProvider.BuildModelConsumer
) {
project.modules.forEach { module ->
if (module.gradleProject.parent == null) {
val model = controller.findModel(module.gradleProject, kotlinDslScriptModelClass)
buildModel.projects.forEach {
if (it.parent == null) {
val model = controller.findModel(it, kotlinDslScriptModelClass)
if (model != null) {
consumer.consume(module, model, kotlinDslScriptModelClass)
consumer.consumeProjectModel(it, model, kotlinDslScriptModelClass)
}
}
}
@@ -3,7 +3,7 @@
* 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.configuration
package org.jetbrains.kotlin.idea.scripting.gradle.importing
import com.intellij.openapi.externalSystem.model.DataNode
import com.intellij.openapi.externalSystem.model.project.ProjectData
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.idea.scripting.gradle.minimal_gradle_version_support
import org.jetbrains.plugins.gradle.model.ProjectImportModelProvider
import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension
class KotlinGradleBuildScriptsResolver : AbstractProjectResolverExtension() {
class KotlinDslScriptModelResolver : AbstractProjectResolverExtension() {
override fun getExtraProjectModelClasses(): Set<Class<out Any>> {
return setOf(KotlinDslScriptsModel::class.java)
}
@@ -61,7 +61,7 @@ class KotlinGradleBuildScriptsResolver : AbstractProjectResolverExtension() {
if (it.gradleProject.parent == null) {
resolverCtx.getExtraProject(it, KotlinDslScriptsModel::class.java)?.let { model ->
// we need a copy to avoid memory leak, as model is java rmi proxy object
ideProject.gradleKotlinBuildScripts.addAll(copy(model))
ideProject.KOTLIN_DSL_SCRIPT_IDEA_MODELS.addAll(copy(model))
}
}
}
+1 -1
View File
@@ -10,7 +10,7 @@
<kotlinDslFrameworkSupport implementation="org.jetbrains.kotlin.idea.configuration.KotlinDslGradleKotlinJSNodeFrameworkSupportProvider"/>
<pluginDescriptions implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradlePluginDescription"/>
<projectResolve implementation="org.jetbrains.kotlin.idea.configuration.KotlinNonJvmGutterConfigurator" />
<projectResolve implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradleBuildScriptsResolver" order="first"/>
<projectResolve implementation="org.jetbrains.kotlin.idea.scripting.gradle.importing.KotlinDslScriptModelResolver" order="first"/>
<projectResolve implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradleProjectResolverExtension" order="first"/>
<projectResolve implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradleCoroutineDebugProjectResolver" order="last"/>
<projectResolve implementation="org.jetbrains.kotlin.kapt.idea.KaptProjectResolverExtension" order="last"/>
+1 -1
View File
@@ -28,7 +28,7 @@
<projectTaskRunner implementation="org.jetbrains.kotlin.idea.gradle.execution.KotlinMPPGradleProjectTaskRunner" order="first, before gradle"/>
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.configuration.KotlinSourceSetDataService"/>
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradleProjectSettingsDataService"/>
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradleBuildScriptsDataService"/>
<externalProjectDataService implementation="org.jetbrains.kotlin.idea.scripting.gradle.importing.KotlinDslScriptModelDataService"/>
<registryKey key="kotlin.mpp.tests.force.gradle"
description="Run multi-platform tests with Gradle runner even if the platform runner is used by default.
This setting currently affects only HMPP projects. You may need to delete existing test configurations for the change to take place."