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