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.
This commit is contained in:
Yan Zhulanow
2017-03-28 22:04:01 +03:00
committed by Yan Zhulanow
parent 9fa16364e1
commit 21da11fe18
5 changed files with 31 additions and 5 deletions
@@ -42,6 +42,7 @@ class AllOpenGradleSubplugin : Plugin<Project> {
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<Project> {
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"
})
}
@@ -43,6 +43,7 @@ class NoArgGradleSubplugin : Plugin<Project> {
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> {
project.tasks.add(project.tasks.create("noArgDataStorageTask", TaskForNoArg::class.java).apply {
isEnabled = false
description = "Supported annotations: " + fqNamesAsString +
"; Presets: $presetsAsString" +
"; Compiler plugin classpath: $noArgCompilerPluginFile"
})
}
@@ -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<String> {
for ((name, annotations) in AllOpenCommandLineProcessor.SUPPORTED_PRESETS.entries) {
if (presetName == name) {
return annotations
}
}
return super.getAnnotationsForPreset(presetName)
}
}
@@ -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<String> = emptyList()
private fun getPluginSetupByModule(
moduleNode: DataNode<ModuleData>
): 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.
@@ -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<String> {
for ((name, annotations) in NoArgCommandLineProcessor.SUPPORTED_PRESETS.entries) {
if (presetName == name) {
return annotations
}
}
return super.getAnnotationsForPreset(presetName)
}
}