From ed6f13cf5684db5a058e7902bf54b67646e25f88 Mon Sep 17 00:00:00 2001 From: Natalia Selezneva Date: Wed, 5 Feb 2020 12:52:16 +0300 Subject: [PATCH] KotlinDslScriptsModel: do not add prepare task for each gradle task invocation ^KT-36090 Fixed --- ...plugins.gradle.tooling.ModelBuilderService | 6 +++ ...ins.gradle.tooling.ModelBuilderService.191 | 0 .../importing/KotlinDslScriptModelResolver.kt | 11 +++++- .../KotlinDslScriptModelResolver.kt.192 | 9 ++++- .../KotlinDslScriptModelResolverCommon.kt | 8 ---- .../KotlinDslScriptTaskModelBuilder.kt | 37 +++++++++++++++++++ .../KotlinDslScriptTaskModelBuilder.kt.191 | 0 7 files changed, 60 insertions(+), 11 deletions(-) create mode 100644 idea/idea-gradle/res/META-INF/services/org.jetbrains.plugins.gradle.tooling.ModelBuilderService create mode 100644 idea/idea-gradle/res/META-INF/services/org.jetbrains.plugins.gradle.tooling.ModelBuilderService.191 create mode 100644 idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptTaskModelBuilder.kt create mode 100644 idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptTaskModelBuilder.kt.191 diff --git a/idea/idea-gradle/res/META-INF/services/org.jetbrains.plugins.gradle.tooling.ModelBuilderService b/idea/idea-gradle/res/META-INF/services/org.jetbrains.plugins.gradle.tooling.ModelBuilderService new file mode 100644 index 00000000000..8af31ecf6eb --- /dev/null +++ b/idea/idea-gradle/res/META-INF/services/org.jetbrains.plugins.gradle.tooling.ModelBuilderService @@ -0,0 +1,6 @@ +# +# Copyright 2010-2020 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. +# + +org.jetbrains.kotlin.idea.scripting.gradle.importing.KotlinDslScriptTaskModelBuilder \ No newline at end of file diff --git a/idea/idea-gradle/res/META-INF/services/org.jetbrains.plugins.gradle.tooling.ModelBuilderService.191 b/idea/idea-gradle/res/META-INF/services/org.jetbrains.plugins.gradle.tooling.ModelBuilderService.191 new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.kt index 9f75f71af97..9d71838dff0 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.kt @@ -7,15 +7,22 @@ package org.jetbrains.kotlin.idea.scripting.gradle.importing import com.intellij.openapi.externalSystem.model.DataNode import com.intellij.openapi.externalSystem.model.project.ProjectData -import org.gradle.tooling.model.GradleProject import org.gradle.tooling.model.idea.IdeaProject import org.gradle.tooling.model.kotlin.dsl.KotlinDslScriptsModel import org.jetbrains.kotlin.idea.scripting.gradle.kotlinDslScriptsModelImportSupported import org.jetbrains.plugins.gradle.model.Build +import org.jetbrains.plugins.gradle.model.ClassSetImportModelProvider +import org.jetbrains.plugins.gradle.model.ProjectImportModelProvider class KotlinDslScriptModelResolver : KotlinDslScriptModelResolverCommon() { override fun getModelProvider() = KotlinDslScriptModelProvider() - override fun requiresTaskRunning() = true + + override fun getProjectsLoadedModelProvider(): ProjectImportModelProvider? { + return ClassSetImportModelProvider( + emptySet(), + setOf(KotlinDslScriptAdditionalTask::class.java) + ) + } override fun populateProjectExtraModels(gradleProject: IdeaProject, ideProject: DataNode) { super.populateProjectExtraModels(gradleProject, ideProject) diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.kt.192 b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.kt.192 index 1b65b660092..7ed428f2dbd 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.kt.192 +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.kt.192 @@ -10,10 +10,17 @@ import com.intellij.openapi.externalSystem.model.project.ProjectData import org.gradle.tooling.model.idea.IdeaProject import org.gradle.tooling.model.kotlin.dsl.KotlinDslScriptsModel import org.jetbrains.kotlin.idea.scripting.gradle.kotlinDslScriptsModelImportSupported +import org.jetbrains.plugins.gradle.model.ProjectImportModelProvider +import org.jetbrains.plugins.gradle.model.ClassSetBuildImportModelProvider class KotlinDslScriptModelResolver : KotlinDslScriptModelResolverCommon() { override fun getModelProvider() = KotlinDslScriptModelProvider() - override fun requiresTaskRunning() = true + + override fun getProjectsLoadedModelProvider(): ProjectImportModelProvider? { + return ClassSetBuildImportModelProvider( + setOf(KotlinDslScriptAdditionalTask::class.java) + ) + } override fun populateProjectExtraModels(gradleProject: IdeaProject, ideProject: DataNode) { super.populateProjectExtraModels(gradleProject, ideProject) diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolverCommon.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolverCommon.kt index 8080d757ca8..885aa0cd652 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolverCommon.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolverCommon.kt @@ -9,11 +9,9 @@ import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.externalSystem.model.DataNode import com.intellij.openapi.externalSystem.model.project.ProjectData import com.intellij.openapi.util.Pair -import com.intellij.util.Consumer import org.gradle.tooling.model.kotlin.dsl.EditorReportSeverity import org.gradle.tooling.model.kotlin.dsl.KotlinDslModelsParameters.* import org.gradle.tooling.model.kotlin.dsl.KotlinDslScriptsModel -import org.jetbrains.kotlin.idea.scripting.gradle.minimal_gradle_version_supported import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension internal val LOG = Logger.getInstance(KotlinDslScriptModelResolverCommon::class.java) @@ -32,12 +30,6 @@ abstract class KotlinDslScriptModelResolverCommon : AbstractProjectResolverExten ) } - override fun enhanceTaskProcessing(taskNames: MutableList, jvmParametersSetup: String?, initScriptConsumer: Consumer) { - initScriptConsumer.consume( - "if (org.gradle.util.GradleVersion.current() >= org.gradle.util.GradleVersion.version(\"$minimal_gradle_version_supported\")) startParameter.taskNames += [\"${PREPARATION_TASK_NAME}\"]" - ) - } - override fun getExtraCommandLineArgs(): List { return listOf("-P$CORRELATION_ID_GRADLE_PROPERTY_NAME=${System.nanoTime()}") } diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptTaskModelBuilder.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptTaskModelBuilder.kt new file mode 100644 index 00000000000..1d9a0a9fde8 --- /dev/null +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptTaskModelBuilder.kt @@ -0,0 +1,37 @@ +/* + * Copyright 2010-2020 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.importing + +import org.gradle.api.Project +import org.gradle.tooling.model.kotlin.dsl.KotlinDslModelsParameters.PREPARATION_TASK_NAME +import org.jetbrains.kotlin.idea.scripting.gradle.kotlinDslScriptsModelImportSupported +import org.jetbrains.plugins.gradle.tooling.AbstractModelBuilderService +import org.jetbrains.plugins.gradle.tooling.ErrorMessageBuilder +import org.jetbrains.plugins.gradle.tooling.ModelBuilderContext + +interface KotlinDslScriptAdditionalTask + +class KotlinDslScriptTaskModelBuilder : AbstractModelBuilderService() { + override fun canBuild(modelName: String): Boolean { + return KotlinDslScriptAdditionalTask::class.java.name == modelName + } + + override fun buildAll(modelName: String, project: Project, context: ModelBuilderContext): Any? { + if (kotlinDslScriptsModelImportSupported(project.gradle.gradleVersion)) { + val startParameter = project.gradle.startParameter + + val tasks = HashSet(startParameter.taskNames) + tasks.add(PREPARATION_TASK_NAME) + startParameter.setTaskNames(tasks) + } + return null + } + + override fun getErrorMessageBuilder(project: Project, e: Exception): ErrorMessageBuilder { + return ErrorMessageBuilder.create( + project, e, "Kotlin DSL script model errors" + ).withDescription("Unable to set $PREPARATION_TASK_NAME sync task.") + } +} \ No newline at end of file diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptTaskModelBuilder.kt.191 b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptTaskModelBuilder.kt.191 new file mode 100644 index 00000000000..e69de29bb2d