gradle.kts importing: reduce bunch files

This commit is contained in:
Sergey Rostov
2019-12-13 10:07:24 +03:00
parent c0690ff5f6
commit 1930ab7c38
11 changed files with 224 additions and 177 deletions
Generated
+6
View File
@@ -1,5 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<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">
<option name="links">
<list>
@@ -24,5 +29,6 @@
</component>
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
<mapping directory="$PROJECT_DIR$/kotlin-ultimate" vcs="Git" />
</component>
</project>
@@ -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
)
}
}
@@ -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 }
}
@@ -50,7 +50,7 @@ class KotlinDslScriptModelDataService : AbstractProjectDataService<ProjectData,
super.onSuccessImport(imported, projectData, project, modelsProvider)
val projectDataNode = imported.singleOrNull() ?: return
val gradleKotlinBuildScripts = projectDataNode.KOTLIN_DSL_SCRIPT_IDEA_MODELS
val gradleKotlinBuildScripts = projectDataNode.KOTLIN_DSL_SCRIPT_MODELS
val buildScripts = gradleKotlinBuildScripts.toList()
gradleKotlinBuildScripts.clear()
@@ -105,7 +105,7 @@ class KotlinDslScriptModelDataService : AbstractProjectDataService<ProjectData,
}
private fun addBuildScriptDiagnosticMessage(
message: KotlinDslScriptIdeaModel.Message,
message: KotlinDslScriptModel.Message,
virtualFile: VirtualFile,
project: Project
) {
@@ -113,8 +113,8 @@ class KotlinDslScriptModelDataService : AbstractProjectDataService<ProjectData,
"Kotlin Build Script",
message.text,
when (message.severity) {
KotlinDslScriptIdeaModel.Severity.WARNING -> 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<ProjectData,
class LazyNavigatable internal constructor(
private val virtualFile: VirtualFile,
private val project: Project,
val position: KotlinDslScriptIdeaModel.Position?
val position: KotlinDslScriptModel.Position?
) : Navigatable {
private val openFileDescriptor: Navigatable by lazy {
if (position != null) OpenFileDescriptor(project, virtualFile, position.line, position.column)
@@ -19,9 +19,13 @@ class KotlinDslScriptModelProvider : ProjectImportExtraModelProvider {
project: IdeaProject,
consumer: ProjectImportExtraModelProvider.BuildModelConsumer
) {
val model = controller.findModel(kotlinDslScriptModelClass)
if (model != null) {
consumer.consume(null, model, kotlinDslScriptModelClass)
project.modules.forEach { module ->
if (module.gradleProject.parent == null) {
val model = controller.findModel(module.gradleProject, kotlinDslScriptModelClass)
if (model != null) {
consumer.consume(module, model, kotlinDslScriptModelClass)
}
}
}
}
@@ -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,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<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 getModelProvider(): ProjectImportModelProvider {
return KotlinDslScriptModelProvider()
}
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)) {
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<ProjectData>
) {
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
}
@@ -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
@@ -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())
}
}
}
}
}
@@ -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())
}
}
}
}
}
@@ -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
)
}
}