gradle.kts importing: reduce bunch files
This commit is contained in:
Generated
+6
@@ -1,5 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
|
<component name="CommitMessageInspectionProfile">
|
||||||
|
<profile version="1.0">
|
||||||
|
<inspection_tool class="GrazieCommit" enabled="true" level="TYPO" enabled_by_default="true" />
|
||||||
|
</profile>
|
||||||
|
</component>
|
||||||
<component name="IssueNavigationConfiguration">
|
<component name="IssueNavigationConfiguration">
|
||||||
<option name="links">
|
<option name="links">
|
||||||
<list>
|
<list>
|
||||||
@@ -24,5 +29,6 @@
|
|||||||
</component>
|
</component>
|
||||||
<component name="VcsDirectoryMappings">
|
<component name="VcsDirectoryMappings">
|
||||||
<mapping directory="" vcs="Git" />
|
<mapping directory="" vcs="Git" />
|
||||||
|
<mapping directory="$PROJECT_DIR$/kotlin-ultimate" vcs="Git" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
-76
@@ -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<out ProjectData>.KOTLIN_DSL_SCRIPT_IDEA_MODELS: MutableList<KotlinDslScriptIdeaModel>
|
|
||||||
by NotNullableCopyableDataNodeUserDataProperty(
|
|
||||||
Key.create<MutableList<KotlinDslScriptIdeaModel>>(
|
|
||||||
"GRADLE_KOTLIN_BUILD_SCRIPTS"
|
|
||||||
),
|
|
||||||
mutableListOf()
|
|
||||||
)
|
|
||||||
|
|
||||||
data class KotlinDslScriptIdeaModel(
|
|
||||||
val file: String,
|
|
||||||
val classPath: List<String>,
|
|
||||||
val sourcePath: List<String>,
|
|
||||||
val imports: List<String>,
|
|
||||||
val messages: List<Message>
|
|
||||||
) {
|
|
||||||
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<KotlinDslScriptIdeaModel> {
|
|
||||||
return model.scriptModels.map { (file, model) ->
|
|
||||||
val messages = mutableListOf<KotlinDslScriptIdeaModel.Message>()
|
|
||||||
|
|
||||||
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
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+39
@@ -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<out ProjectData>.KOTLIN_DSL_SCRIPT_MODELS: MutableList<KotlinDslScriptModel>
|
||||||
|
by NotNullableCopyableDataNodeUserDataProperty(
|
||||||
|
Key.create<MutableList<KotlinDslScriptModel>>(
|
||||||
|
"GRADLE_KOTLIN_BUILD_SCRIPTS"
|
||||||
|
),
|
||||||
|
mutableListOf()
|
||||||
|
)
|
||||||
|
|
||||||
|
data class KotlinDslScriptModel(
|
||||||
|
val file: String,
|
||||||
|
val classPath: List<String>,
|
||||||
|
val sourcePath: List<String>,
|
||||||
|
val imports: List<String>,
|
||||||
|
val messages: List<Message>
|
||||||
|
) {
|
||||||
|
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 }
|
||||||
|
}
|
||||||
+5
-5
@@ -50,7 +50,7 @@ class KotlinDslScriptModelDataService : AbstractProjectDataService<ProjectData,
|
|||||||
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.KOTLIN_DSL_SCRIPT_IDEA_MODELS
|
val gradleKotlinBuildScripts = projectDataNode.KOTLIN_DSL_SCRIPT_MODELS
|
||||||
val buildScripts = gradleKotlinBuildScripts.toList()
|
val buildScripts = gradleKotlinBuildScripts.toList()
|
||||||
gradleKotlinBuildScripts.clear()
|
gradleKotlinBuildScripts.clear()
|
||||||
|
|
||||||
@@ -105,7 +105,7 @@ class KotlinDslScriptModelDataService : AbstractProjectDataService<ProjectData,
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun addBuildScriptDiagnosticMessage(
|
private fun addBuildScriptDiagnosticMessage(
|
||||||
message: KotlinDslScriptIdeaModel.Message,
|
message: KotlinDslScriptModel.Message,
|
||||||
virtualFile: VirtualFile,
|
virtualFile: VirtualFile,
|
||||||
project: Project
|
project: Project
|
||||||
) {
|
) {
|
||||||
@@ -113,8 +113,8 @@ class KotlinDslScriptModelDataService : AbstractProjectDataService<ProjectData,
|
|||||||
"Kotlin Build Script",
|
"Kotlin Build Script",
|
||||||
message.text,
|
message.text,
|
||||||
when (message.severity) {
|
when (message.severity) {
|
||||||
KotlinDslScriptIdeaModel.Severity.WARNING -> NotificationCategory.WARNING
|
KotlinDslScriptModel.Severity.WARNING -> NotificationCategory.WARNING
|
||||||
KotlinDslScriptIdeaModel.Severity.ERROR -> NotificationCategory.ERROR
|
KotlinDslScriptModel.Severity.ERROR -> NotificationCategory.ERROR
|
||||||
},
|
},
|
||||||
NotificationSource.PROJECT_SYNC
|
NotificationSource.PROJECT_SYNC
|
||||||
)
|
)
|
||||||
@@ -135,7 +135,7 @@ class KotlinDslScriptModelDataService : AbstractProjectDataService<ProjectData,
|
|||||||
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: KotlinDslScriptIdeaModel.Position?
|
val position: KotlinDslScriptModel.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)
|
||||||
|
|||||||
+7
-3
@@ -19,9 +19,13 @@ class KotlinDslScriptModelProvider : ProjectImportExtraModelProvider {
|
|||||||
project: IdeaProject,
|
project: IdeaProject,
|
||||||
consumer: ProjectImportExtraModelProvider.BuildModelConsumer
|
consumer: ProjectImportExtraModelProvider.BuildModelConsumer
|
||||||
) {
|
) {
|
||||||
val model = controller.findModel(kotlinDslScriptModelClass)
|
project.modules.forEach { module ->
|
||||||
if (model != null) {
|
if (module.gradleProject.parent == null) {
|
||||||
consumer.consume(null, model, kotlinDslScriptModelClass)
|
val model = controller.findModel(module.gradleProject, kotlinDslScriptModelClass)
|
||||||
|
if (model != null) {
|
||||||
|
consumer.consume(module, model, kotlinDslScriptModelClass)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
-56
@@ -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<Class<out Any>> {
|
|
||||||
return setOf(KotlinDslScriptsModel::class.java)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getExtraJvmArgs(): List<Pair<String, String>> {
|
|
||||||
return listOf(
|
|
||||||
Pair(
|
|
||||||
"-D$PROVIDER_MODE_SYSTEM_PROPERTY_NAME",
|
|
||||||
STRICT_CLASSPATH_MODE_SYSTEM_PROPERTY_VALUE
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun enhanceTaskProcessing(taskNames: MutableList<String>, jvmParametersSetup: String?, initScriptConsumer: Consumer<String>) {
|
|
||||||
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<ProjectData>) {
|
|
||||||
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
|
|
||||||
}
|
|
||||||
+7
-36
@@ -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.DataNode
|
||||||
import com.intellij.openapi.externalSystem.model.project.ProjectData
|
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.idea.IdeaProject
|
||||||
import org.gradle.tooling.model.kotlin.dsl.KotlinDslModelsParameters.*
|
|
||||||
import org.gradle.tooling.model.kotlin.dsl.KotlinDslScriptsModel
|
import org.gradle.tooling.model.kotlin.dsl.KotlinDslScriptsModel
|
||||||
import org.jetbrains.kotlin.idea.scripting.gradle.kotlinDslScriptsModelImportSupported
|
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() {
|
class KotlinDslScriptModelResolver : KotlinDslScriptModelResolverCommon() {
|
||||||
override fun getExtraProjectModelClasses(): Set<Class<out Any>> {
|
override fun getModelProvider() = KotlinDslScriptModelProvider()
|
||||||
return setOf(KotlinDslScriptsModel::class.java)
|
override fun requiresTaskRunning() = true
|
||||||
}
|
|
||||||
|
|
||||||
override fun getExtraJvmArgs(): List<Pair<String, String>> {
|
|
||||||
return listOf(
|
|
||||||
Pair(
|
|
||||||
"-D$PROVIDER_MODE_SYSTEM_PROPERTY_NAME",
|
|
||||||
STRICT_CLASSPATH_MODE_SYSTEM_PROPERTY_VALUE
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun enhanceTaskProcessing(taskNames: MutableList<String>, jvmParametersSetup: String?, initScriptConsumer: Consumer<String>) {
|
|
||||||
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()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun populateProjectExtraModels(gradleProject: IdeaProject, ideProject: DataNode<ProjectData>) {
|
override fun populateProjectExtraModels(gradleProject: IdeaProject, ideProject: DataNode<ProjectData>) {
|
||||||
super.populateProjectExtraModels(gradleProject, ideProject)
|
super.populateProjectExtraModels(gradleProject, ideProject)
|
||||||
|
|
||||||
if (kotlinDslScriptsModelImportSupported(resolverCtx.projectGradleVersion)) {
|
if (kotlinDslScriptsModelImportSupported(resolverCtx.projectGradleVersion)) {
|
||||||
pupulateBuildModels(gradleProject, ideProject)
|
populateBuildModels(gradleProject, ideProject)
|
||||||
|
|
||||||
resolverCtx.models.includedBuilds.forEach { includedRoot ->
|
resolverCtx.models.includedBuilds.forEach { includedRoot ->
|
||||||
pupulateBuildModels(includedRoot, ideProject)
|
populateBuildModels(includedRoot, ideProject)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun pupulateBuildModels(
|
private fun populateBuildModels(
|
||||||
root: IdeaProject,
|
root: IdeaProject,
|
||||||
ideProject: DataNode<ProjectData>
|
ideProject: DataNode<ProjectData>
|
||||||
) {
|
) {
|
||||||
root.modules.forEach {
|
root.modules.forEach {
|
||||||
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
|
ideProject.KOTLIN_DSL_SCRIPT_MODELS.addAll(model.toListOfScriptModels())
|
||||||
ideProject.KOTLIN_DSL_SCRIPT_IDEA_MODELS.addAll(copy(model))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun requiresTaskRunning() = true
|
|
||||||
}
|
}
|
||||||
+1
-1
@@ -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.
|
* 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
|
class KotlinGradleBuildScriptsResolver
|
||||||
+44
@@ -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<ProjectData>) {
|
||||||
|
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<ProjectData>
|
||||||
|
) {
|
||||||
|
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())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+43
@@ -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<ProjectData>) {
|
||||||
|
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<ProjectData>
|
||||||
|
) {
|
||||||
|
root.modules.forEach {
|
||||||
|
if (it.gradleProject.parent == null) {
|
||||||
|
resolverCtx.getExtraProject(it, KotlinDslScriptsModel::class.java)?.let { model ->
|
||||||
|
ideProject.KOTLIN_DSL_SCRIPT_MODELS.addAll(model.toListOfScriptModels())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+72
@@ -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<Class<out Any>> {
|
||||||
|
return setOf(KotlinDslScriptsModel::class.java)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getExtraJvmArgs(): List<Pair<String, String>> {
|
||||||
|
return listOf(
|
||||||
|
Pair(
|
||||||
|
"-D$PROVIDER_MODE_SYSTEM_PROPERTY_NAME",
|
||||||
|
STRICT_CLASSPATH_MODE_SYSTEM_PROPERTY_VALUE
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun enhanceTaskProcessing(taskNames: MutableList<String>, jvmParametersSetup: String?, initScriptConsumer: Consumer<String>) {
|
||||||
|
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<KotlinDslScriptModel> =
|
||||||
|
scriptModels.map { (file, model) ->
|
||||||
|
val messages = mutableListOf<KotlinDslScriptModel.Message>()
|
||||||
|
|
||||||
|
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
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user