diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 8c555bf894d..debcaae5dd3 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -1,5 +1,10 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptIdeaModel.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptIdeaModel.kt
deleted file mode 100644
index a64f65ac90f..00000000000
--- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptIdeaModel.kt
+++ /dev/null
@@ -1,76 +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.importing
-
-import com.intellij.openapi.externalSystem.model.DataNode
-import com.intellij.openapi.externalSystem.model.project.ProjectData
-import com.intellij.openapi.util.Key
-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.KOTLIN_DSL_SCRIPT_IDEA_MODELS: MutableList
- by NotNullableCopyableDataNodeUserDataProperty(
- Key.create>(
- "GRADLE_KOTLIN_BUILD_SCRIPTS"
- ),
- mutableListOf()
- )
-
-data class KotlinDslScriptIdeaModel(
- val file: String,
- val classPath: List,
- val sourcePath: List,
- val imports: List,
- val messages: List
-) {
- data class Message(
- val severity: Severity,
- val text: String,
- val position: Position? = null
- )
-
- data class Position(val line: Int, val column: Int)
-
- enum class Severity { WARNING, ERROR }
-}
-
-@Suppress("unused")
-fun KotlinDslScriptModelResolver.copy(model: KotlinDslScriptsModel): List {
- return model.scriptModels.map { (file, model) ->
- val messages = mutableListOf()
-
- model.exceptions.forEach {
- messages.add(
- KotlinDslScriptIdeaModel.Message(
- KotlinDslScriptIdeaModel.Severity.ERROR, it
- )
- )
- }
-
- model.editorReports.forEach {
- messages.add(KotlinDslScriptIdeaModel.Message(
- when (it.severity) {
- EditorReportSeverity.WARNING -> KotlinDslScriptIdeaModel.Severity.WARNING
- else -> KotlinDslScriptIdeaModel.Severity.ERROR
- },
- it.message,
- it.position?.let { position ->
- KotlinDslScriptIdeaModel
- .Position(position.line, position.column)
- }
- ))
- }
-
- KotlinDslScriptIdeaModel(
- file.absolutePath,
- model.classPath.map { it.absolutePath },
- model.sourcePath.map { it.absolutePath },
- model.implicitImports,
- messages
- )
- }
-}
\ No newline at end of file
diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModel.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModel.kt
new file mode 100644
index 00000000000..4319bcc0038
--- /dev/null
+++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModel.kt
@@ -0,0 +1,39 @@
+/*
+ * 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.importing
+
+import com.intellij.openapi.externalSystem.model.DataNode
+import com.intellij.openapi.externalSystem.model.project.ProjectData
+import com.intellij.openapi.util.Key
+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.KOTLIN_DSL_SCRIPT_MODELS: MutableList
+ by NotNullableCopyableDataNodeUserDataProperty(
+ Key.create>(
+ "GRADLE_KOTLIN_BUILD_SCRIPTS"
+ ),
+ mutableListOf()
+ )
+
+data class KotlinDslScriptModel(
+ val file: String,
+ val classPath: List,
+ val sourcePath: List,
+ val imports: List,
+ val messages: List
+) {
+ data class Message(
+ val severity: Severity,
+ val text: String,
+ val position: Position? = null
+ )
+
+ data class Position(val line: Int, val column: Int)
+
+ enum class Severity { WARNING, ERROR }
+}
\ No newline at end of file
diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelDataService.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelDataService.kt
index 10c62dbffdf..fdcf7f4912c 100644
--- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelDataService.kt
+++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelDataService.kt
@@ -50,7 +50,7 @@ class KotlinDslScriptModelDataService : AbstractProjectDataService NotificationCategory.WARNING
- KotlinDslScriptIdeaModel.Severity.ERROR -> NotificationCategory.ERROR
+ KotlinDslScriptModel.Severity.WARNING -> NotificationCategory.WARNING
+ KotlinDslScriptModel.Severity.ERROR -> NotificationCategory.ERROR
},
NotificationSource.PROJECT_SYNC
)
@@ -135,7 +135,7 @@ class KotlinDslScriptModelDataService : AbstractProjectDataService
+ if (module.gradleProject.parent == null) {
+ val model = controller.findModel(module.gradleProject, kotlinDslScriptModelClass)
+ if (model != null) {
+ consumer.consume(module, model, kotlinDslScriptModelClass)
+ }
+ }
}
}
diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.as36 b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.as36
deleted file mode 100644
index b197e09d428..00000000000
--- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.as36
+++ /dev/null
@@ -1,56 +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.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.kotlin.idea.scripting.gradle.kotlinDslScriptsModelImportSupported
-import org.jetbrains.kotlin.idea.scripting.gradle.minimal_gradle_version_supported
-import org.jetbrains.plugins.gradle.model.ProjectImportExtraModelProvider
-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(
- "if (org.gradle.util.GradleVersion.current() >= org.gradle.util.GradleVersion.version(\"$minimal_gradle_version_supported\")) startParameter.taskNames += [\"${PREPARATION_TASK_NAME}\"]"
- )
- }
-
- override fun getExtraModelProvider(): ProjectImportExtraModelProvider {
- return KotlinDslScriptModelProvider()
- }
-
- override fun populateProjectExtraModels(gradleProject: IdeaProject, ideProject: DataNode) {
- super.populateProjectExtraModels(gradleProject, ideProject)
-
- if (kotlinDslScriptsModelImportSupported(resolverCtx.projectGradleVersion)) {
- 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
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 9ba493c350c..0fe429786b3 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,65 +7,36 @@ package org.jetbrains.kotlin.idea.scripting.gradle.importing
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.kotlin.idea.scripting.gradle.kotlinDslScriptsModelImportSupported
-import org.jetbrains.kotlin.idea.scripting.gradle.minimal_gradle_version_supported
-import org.jetbrains.plugins.gradle.model.ProjectImportModelProvider
-import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension
-class KotlinDslScriptModelResolver : 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(
- "if (org.gradle.util.GradleVersion.current() >= org.gradle.util.GradleVersion.version(\"$minimal_gradle_version_supported\")) startParameter.taskNames += [\"${PREPARATION_TASK_NAME}\"]"
- )
- }
-
- override fun getModelProvider(): ProjectImportModelProvider {
- return KotlinDslScriptModelProvider()
- }
+class KotlinDslScriptModelResolver : KotlinDslScriptModelResolverCommon() {
+ override fun getModelProvider() = KotlinDslScriptModelProvider()
+ override fun requiresTaskRunning() = true
override fun populateProjectExtraModels(gradleProject: IdeaProject, ideProject: DataNode) {
super.populateProjectExtraModels(gradleProject, ideProject)
if (kotlinDslScriptsModelImportSupported(resolverCtx.projectGradleVersion)) {
- pupulateBuildModels(gradleProject, ideProject)
+ populateBuildModels(gradleProject, ideProject)
resolverCtx.models.includedBuilds.forEach { includedRoot ->
- pupulateBuildModels(includedRoot, ideProject)
+ populateBuildModels(includedRoot, ideProject)
}
}
}
- private fun pupulateBuildModels(
+ private fun populateBuildModels(
root: IdeaProject,
ideProject: DataNode
) {
root.modules.forEach {
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.KOTLIN_DSL_SCRIPT_IDEA_MODELS.addAll(copy(model))
+ ideProject.KOTLIN_DSL_SCRIPT_MODELS.addAll(model.toListOfScriptModels())
}
}
}
}
-
- override fun requiresTaskRunning() = true
}
\ No newline at end of file
diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.191 b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.kt.191
similarity index 81%
rename from idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.191
rename to idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.kt.191
index 964be1fd91f..f5df22edccc 100644
--- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.191
+++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.kt.191
@@ -3,6 +3,6 @@
* 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.configuration.importing
class KotlinGradleBuildScriptsResolver
\ No newline at end of file
diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.kt.193 b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.kt.193
new file mode 100644
index 00000000000..bf3e89c476a
--- /dev/null
+++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.kt.193
@@ -0,0 +1,44 @@
+/*
+ * 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.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
+
+class KotlinDslScriptModelResolver : KotlinDslScriptModelResolverCommon() {
+ override fun getModelProvider() = KotlinDslScriptModelProvider()
+ override fun requiresTaskRunning() = true
+
+ override fun populateProjectExtraModels(gradleProject: IdeaProject, ideProject: DataNode) {
+ super.populateProjectExtraModels(gradleProject, ideProject)
+
+ if (kotlinDslScriptsModelImportSupported(resolverCtx.projectGradleVersion)) {
+ populateBuildModels(resolverCtx.models.mainBuild, ideProject)
+
+ resolverCtx.models.includedBuilds.forEach { includedRoot ->
+ populateBuildModels(includedRoot, ideProject)
+ }
+ }
+ }
+
+ private fun populateBuildModels(
+ root: Build,
+ ideProject: DataNode
+ ) {
+ root.projects.forEach {
+ if ((it as? GradleProject)?.parent == null) {
+ resolverCtx.models.getModel(it, KotlinDslScriptsModel::class.java)?.let { model ->
+ ideProject.KOTLIN_DSL_SCRIPT_MODELS.addAll(model.toListOfScriptModels())
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.kt.as36 b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.kt.as36
new file mode 100644
index 00000000000..5f422832a17
--- /dev/null
+++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolver.kt.as36
@@ -0,0 +1,43 @@
+/*
+ * 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.importing
+
+import org.jetbrains.kotlin.idea.scripting.gradle.importing.KotlinDslScriptModelProvider
+import com.intellij.openapi.externalSystem.model.DataNode
+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
+
+class KotlinDslScriptModelResolver : KotlinDslScriptModelResolverCommon() {
+ override fun getModelProvider() = KotlinDslScriptModelProvider()
+ override fun requiresTaskRunning() = true
+
+ override fun populateProjectExtraModels(gradleProject: IdeaProject, ideProject: DataNode) {
+ super.populateProjectExtraModels(gradleProject, ideProject)
+
+ if (kotlinDslScriptsModelImportSupported(resolverCtx.projectGradleVersion)) {
+ populateBuildModels(gradleProject, ideProject)
+
+ resolverCtx.models.includedBuilds.forEach { includedRoot ->
+ populateBuildModels(includedRoot, ideProject)
+ }
+ }
+ }
+
+ private fun populateBuildModels(
+ root: IdeaProject,
+ ideProject: DataNode
+ ) {
+ root.modules.forEach {
+ if (it.gradleProject.parent == null) {
+ resolverCtx.getExtraProject(it, KotlinDslScriptsModel::class.java)?.let { model ->
+ ideProject.KOTLIN_DSL_SCRIPT_MODELS.addAll(model.toListOfScriptModels())
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
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
new file mode 100644
index 00000000000..86ed8605119
--- /dev/null
+++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/importing/KotlinDslScriptModelResolverCommon.kt
@@ -0,0 +1,72 @@
+/*
+ * 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.importing
+
+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
+
+abstract class KotlinDslScriptModelResolverCommon : 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(
+ "if (org.gradle.util.GradleVersion.current() >= org.gradle.util.GradleVersion.version(\"$minimal_gradle_version_supported\")) startParameter.taskNames += [\"${PREPARATION_TASK_NAME}\"]"
+ )
+ }
+
+ @Suppress("unused")
+ protected fun KotlinDslScriptsModel.toListOfScriptModels(): List =
+ scriptModels.map { (file, model) ->
+ val messages = mutableListOf()
+
+ model.exceptions.forEach {
+ messages.add(
+ KotlinDslScriptModel.Message(
+ KotlinDslScriptModel.Severity.ERROR, it
+ )
+ )
+ }
+
+ model.editorReports.forEach {
+ messages.add(
+ KotlinDslScriptModel.Message(
+ when (it.severity) {
+ EditorReportSeverity.WARNING -> KotlinDslScriptModel.Severity.WARNING
+ else -> KotlinDslScriptModel.Severity.ERROR
+ },
+ it.message,
+ it.position?.let { position ->
+ KotlinDslScriptModel
+ .Position(position.line, position.column)
+ }
+ ))
+ }
+
+ KotlinDslScriptModel(
+ file.absolutePath,
+ model.classPath.map { it.absolutePath },
+ model.sourcePath.map { it.absolutePath },
+ model.implicitImports,
+ messages
+ )
+ }
+}
\ No newline at end of file