From 21da11fe1886b23684725c59355038cd66a6df54 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Tue, 28 Mar 2017 22:04:01 +0300 Subject: [PATCH] Fix 'kotlin-spring' and 'kotlin-noarg' Gradle plugin importing (KT-17049) Allopen and Noarg plugins now use 'presets' that should be handled in the Gradle importer as well. --- .../kotlin/allopen/gradle/AllOpenSubplugin.kt | 4 +++- .../jetbrains/kotlin/noarg/gradle/NoArgSubplugin.kt | 2 ++ .../src/AllOpenGradleProjectImportHandler.kt | 10 ++++++++++ .../src/AbstractGradleImportHandler.kt | 10 ++++++---- .../noarg-ide/src/NoArgGradleProjectImportHandler.kt | 10 ++++++++++ 5 files changed, 31 insertions(+), 5 deletions(-) diff --git a/libraries/tools/kotlin-allopen/src/main/kotlin/org/jetbrains/kotlin/allopen/gradle/AllOpenSubplugin.kt b/libraries/tools/kotlin-allopen/src/main/kotlin/org/jetbrains/kotlin/allopen/gradle/AllOpenSubplugin.kt index d7333f12509..f216feb91a6 100644 --- a/libraries/tools/kotlin-allopen/src/main/kotlin/org/jetbrains/kotlin/allopen/gradle/AllOpenSubplugin.kt +++ b/libraries/tools/kotlin-allopen/src/main/kotlin/org/jetbrains/kotlin/allopen/gradle/AllOpenSubplugin.kt @@ -42,6 +42,7 @@ class AllOpenGradleSubplugin : Plugin { project.afterEvaluate { val fqNamesAsString = allOpenExtension.myAnnotations.joinToString(",") + val presetsAsString = allOpenExtension.myPresets.joinToString(",") project.extensions.extraProperties.set("kotlinAllOpenAnnotations", fqNamesAsString) val allBuildscriptArtifacts = project.getBuildscriptArtifacts() + project.rootProject.getBuildscriptArtifacts() @@ -54,7 +55,8 @@ class AllOpenGradleSubplugin : Plugin { open class TaskForAllOpen : AbstractTask() project.tasks.add(project.tasks.create("allOpenDataStorageTask", TaskForAllOpen::class.java).apply { isEnabled = false - description = "Supported annotations: " + fqNamesAsString + + description = "Supported annotations: $fqNamesAsString" + + "; Presets: $presetsAsString" + "; Compiler plugin classpath: $allOpenCompilerPluginFile" }) } diff --git a/libraries/tools/kotlin-noarg/src/main/kotlin/org/jetbrains/kotlin/noarg/gradle/NoArgSubplugin.kt b/libraries/tools/kotlin-noarg/src/main/kotlin/org/jetbrains/kotlin/noarg/gradle/NoArgSubplugin.kt index 6e4737b9d8e..af2956c6019 100644 --- a/libraries/tools/kotlin-noarg/src/main/kotlin/org/jetbrains/kotlin/noarg/gradle/NoArgSubplugin.kt +++ b/libraries/tools/kotlin-noarg/src/main/kotlin/org/jetbrains/kotlin/noarg/gradle/NoArgSubplugin.kt @@ -43,6 +43,7 @@ class NoArgGradleSubplugin : Plugin { project.afterEvaluate { val fqNamesAsString = noArgExtension.myAnnotations.joinToString(",") + val presetsAsString = noArgExtension.myPresets.joinToString(",") project.extensions.extraProperties.set("kotlinNoArgAnnotations", fqNamesAsString) val allBuildscriptArtifacts = project.getBuildscriptArtifacts() + project.rootProject.getBuildscriptArtifacts() @@ -56,6 +57,7 @@ class NoArgGradleSubplugin : Plugin { project.tasks.add(project.tasks.create("noArgDataStorageTask", TaskForNoArg::class.java).apply { isEnabled = false description = "Supported annotations: " + fqNamesAsString + + "; Presets: $presetsAsString" + "; Compiler plugin classpath: $noArgCompilerPluginFile" }) } diff --git a/plugins/allopen/allopen-ide/src/AllOpenGradleProjectImportHandler.kt b/plugins/allopen/allopen-ide/src/AllOpenGradleProjectImportHandler.kt index 17f9ab344a2..9c5a752776d 100644 --- a/plugins/allopen/allopen-ide/src/AllOpenGradleProjectImportHandler.kt +++ b/plugins/allopen/allopen-ide/src/AllOpenGradleProjectImportHandler.kt @@ -26,4 +26,14 @@ class AllOpenGradleProjectImportHandler : AbstractGradleImportHandler() { override val annotationOptionName = AllOpenCommandLineProcessor.ANNOTATION_OPTION.name override val dataStorageTaskName = "allOpenDataStorageTask" override val pluginJarFileFromIdea = PathUtil.getKotlinPathsForIdeaPlugin().allOpenPluginJarPath + + override fun getAnnotationsForPreset(presetName: String): List { + for ((name, annotations) in AllOpenCommandLineProcessor.SUPPORTED_PRESETS.entries) { + if (presetName == name) { + return annotations + } + } + + return super.getAnnotationsForPreset(presetName) + } } \ No newline at end of file diff --git a/plugins/annotation-based-compiler-plugins-ide-support/src/AbstractGradleImportHandler.kt b/plugins/annotation-based-compiler-plugins-ide-support/src/AbstractGradleImportHandler.kt index 343a80c9eb1..d0a3edeff43 100644 --- a/plugins/annotation-based-compiler-plugins-ide-support/src/AbstractGradleImportHandler.kt +++ b/plugins/annotation-based-compiler-plugins-ide-support/src/AbstractGradleImportHandler.kt @@ -28,7 +28,7 @@ import java.io.File abstract class AbstractGradleImportHandler : GradleProjectImportHandler { private companion object { - private val TASK_DESCRIPTION_REGEX = "Supported annotations: (.*?); Compiler plugin classpath: (.*)".toRegex() + private val TASK_DESCRIPTION_REGEX = "Supported annotations: ([^; ]*); (?:Presets: (.*?); )?Compiler plugin classpath: (.*?)".toRegex() } abstract val compilerPluginId: String @@ -51,6 +51,8 @@ abstract class AbstractGradleImportHandler : GradleProjectImportHandler { annotationOptionName = annotationOptionName) } + protected open fun getAnnotationsForPreset(presetName: String): List = emptyList() + private fun getPluginSetupByModule( moduleNode: DataNode ): AnnotationBasedCompilerPluginSetup? { @@ -60,10 +62,10 @@ abstract class AbstractGradleImportHandler : GradleProjectImportHandler { }?.data as? TaskData ?: return null val dataStorageTaskDescription = dataStorageTaskData.description ?: return null - val (annotationFqNamesList, _) = TASK_DESCRIPTION_REGEX.matchEntire( - dataStorageTaskDescription)?.groupValues?.drop(1) ?: return null + val matchResult = TASK_DESCRIPTION_REGEX.matchEntire(dataStorageTaskDescription)?.groupValues?.drop(1) ?: return null + val (annotationFqNamesList, presets) = matchResult - val annotationFqNames = annotationFqNamesList.split(',') + val annotationFqNames = annotationFqNamesList.split(',') + presets.split(',').flatMap { getAnnotationsForPreset(it) } // For now we can't use plugins from Gradle cause they're shaded and may have an incompatible version. // So we use ones from the IDEA plugin. diff --git a/plugins/noarg/noarg-ide/src/NoArgGradleProjectImportHandler.kt b/plugins/noarg/noarg-ide/src/NoArgGradleProjectImportHandler.kt index ef60c31a576..1a820204fd3 100644 --- a/plugins/noarg/noarg-ide/src/NoArgGradleProjectImportHandler.kt +++ b/plugins/noarg/noarg-ide/src/NoArgGradleProjectImportHandler.kt @@ -26,4 +26,14 @@ class NoArgGradleProjectImportHandler : AbstractGradleImportHandler() { override val annotationOptionName = NoArgCommandLineProcessor.ANNOTATION_OPTION.name override val dataStorageTaskName = "noArgDataStorageTask" override val pluginJarFileFromIdea = PathUtil.getKotlinPathsForIdeaPlugin().noArgPluginJarPath + + override fun getAnnotationsForPreset(presetName: String): List { + for ((name, annotations) in NoArgCommandLineProcessor.SUPPORTED_PRESETS.entries) { + if (presetName == name) { + return annotations + } + } + + return super.getAnnotationsForPreset(presetName) + } } \ No newline at end of file