From 2a22cc23e9ea71230c67f1610d1fa01c26d30388 Mon Sep 17 00:00:00 2001 From: Natalia Selezneva Date: Thu, 31 Oct 2019 13:04:48 +0300 Subject: [PATCH] KotlinGradleBuildScriptsResolver: update to new API from IDEA Gradle plugin --- .../KotlinDslScriptModelProvider.kt.193 | 33 ++++++++++++ .../KotlinGradleBuildScriptsResolver.kt.193 | 50 +++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinDslScriptModelProvider.kt.193 create mode 100644 idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleBuildScriptsResolver.kt.193 diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinDslScriptModelProvider.kt.193 b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinDslScriptModelProvider.kt.193 new file mode 100644 index 00000000000..24d752d3167 --- /dev/null +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinDslScriptModelProvider.kt.193 @@ -0,0 +1,33 @@ +/* + * 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.configuration + +import org.gradle.tooling.BuildController +import org.gradle.tooling.model.Model +import org.gradle.tooling.model.gradle.GradleBuild +import org.gradle.tooling.model.kotlin.dsl.KotlinDslScriptsModel +import org.jetbrains.plugins.gradle.model.ProjectImportModelProvider + +class KotlinDslScriptModelProvider : ProjectImportModelProvider { + private val kotlinDslScriptModelClass: Class<*> = KotlinDslScriptsModel::class.java + + override fun populateBuildModels( + controller: BuildController, + buildModel: GradleBuild, + consumer: ProjectImportModelProvider.BuildModelConsumer + ) { + val model = controller.findModel(kotlinDslScriptModelClass) + if (model != null) { + consumer.consume(buildModel, model, kotlinDslScriptModelClass) + } + } + + override fun populateProjectModels( + controller: BuildController, + projectModel: Model, + modelConsumer: ProjectImportModelProvider.ProjectModelConsumer + ) = Unit +} \ No newline at end of file diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleBuildScriptsResolver.kt.193 b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleBuildScriptsResolver.kt.193 new file mode 100644 index 00000000000..51f94fde06d --- /dev/null +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleBuildScriptsResolver.kt.193 @@ -0,0 +1,50 @@ +/* + * 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.configuration + +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.idea.IdeaProject +import org.gradle.tooling.model.kotlin.dsl.KotlinDslModelsParameters.* +import org.gradle.tooling.model.kotlin.dsl.KotlinDslScriptsModel +import org.jetbrains.plugins.gradle.model.ProjectImportModelProvider +import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension + +class KotlinGradleBuildScriptsResolver : AbstractProjectResolverExtension() { + override fun getExtraProjectModelClasses(): Set> { + return setOf(KotlinDslScriptsModel::class.java) + } + + override fun getExtraJvmArgs(): List> { + return listOf( + Pair( + "-D$PROVIDER_MODE_SYSTEM_PROPERTY_NAME", + STRICT_CLASSPATH_MODE_SYSTEM_PROPERTY_VALUE + ) + ) + } + + override fun enhanceTaskProcessing(taskNames: MutableList, jvmParametersSetup: String?, initScriptConsumer: Consumer) { + initScriptConsumer.consume("startParameter.taskNames += [\"${PREPARATION_TASK_NAME}\"]") + } + + override fun getModelProvider(): ProjectImportModelProvider { + return KotlinDslScriptModelProvider() + } + + override fun populateProjectExtraModels(gradleProject: IdeaProject, ideProject: DataNode) { + super.populateProjectExtraModels(gradleProject, ideProject) + + resolverCtx.getExtraProject(null, KotlinDslScriptsModel::class.java)?.let { model -> + // we need a copy to avoid memory leak, as model is java rmi proxy object + ideProject.gradleKotlinBuildScripts = copy(model) + } + } + + override fun requiresTaskRunning() = true +} \ No newline at end of file