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 { project.afterEvaluate {
val fqNamesAsString = allOpenExtension.myAnnotations.joinToString(",") val fqNamesAsString = allOpenExtension.myAnnotations.joinToString(",")
val presetsAsString = allOpenExtension.myPresets.joinToString(",")
project.extensions.extraProperties.set("kotlinAllOpenAnnotations", fqNamesAsString) project.extensions.extraProperties.set("kotlinAllOpenAnnotations", fqNamesAsString)
val allBuildscriptArtifacts = project.getBuildscriptArtifacts() + project.rootProject.getBuildscriptArtifacts() val allBuildscriptArtifacts = project.getBuildscriptArtifacts() + project.rootProject.getBuildscriptArtifacts()
@@ -54,7 +55,8 @@ class AllOpenGradleSubplugin : Plugin<Project> {
open class TaskForAllOpen : AbstractTask() open class TaskForAllOpen : AbstractTask()
project.tasks.add(project.tasks.create("allOpenDataStorageTask", TaskForAllOpen::class.java).apply { project.tasks.add(project.tasks.create("allOpenDataStorageTask", TaskForAllOpen::class.java).apply {
isEnabled = false isEnabled = false
description = "Supported annotations: " + fqNamesAsString + description = "Supported annotations: $fqNamesAsString" +
"; Presets: $presetsAsString" +
"; Compiler plugin classpath: $allOpenCompilerPluginFile" "; Compiler plugin classpath: $allOpenCompilerPluginFile"
}) })
} }
@@ -43,6 +43,7 @@ class NoArgGradleSubplugin : Plugin<Project> {
project.afterEvaluate { project.afterEvaluate {
val fqNamesAsString = noArgExtension.myAnnotations.joinToString(",") val fqNamesAsString = noArgExtension.myAnnotations.joinToString(",")
val presetsAsString = noArgExtension.myPresets.joinToString(",")
project.extensions.extraProperties.set("kotlinNoArgAnnotations", fqNamesAsString) project.extensions.extraProperties.set("kotlinNoArgAnnotations", fqNamesAsString)
val allBuildscriptArtifacts = project.getBuildscriptArtifacts() + project.rootProject.getBuildscriptArtifacts() 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 { project.tasks.add(project.tasks.create("noArgDataStorageTask", TaskForNoArg::class.java).apply {
isEnabled = false isEnabled = false
description = "Supported annotations: " + fqNamesAsString + description = "Supported annotations: " + fqNamesAsString +
"; Presets: $presetsAsString" +
"; Compiler plugin classpath: $noArgCompilerPluginFile" "; Compiler plugin classpath: $noArgCompilerPluginFile"
}) })
} }
@@ -26,4 +26,14 @@ class AllOpenGradleProjectImportHandler : AbstractGradleImportHandler() {
override val annotationOptionName = AllOpenCommandLineProcessor.ANNOTATION_OPTION.name override val annotationOptionName = AllOpenCommandLineProcessor.ANNOTATION_OPTION.name
override val dataStorageTaskName = "allOpenDataStorageTask" override val dataStorageTaskName = "allOpenDataStorageTask"
override val pluginJarFileFromIdea = PathUtil.getKotlinPathsForIdeaPlugin().allOpenPluginJarPath 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 { abstract class AbstractGradleImportHandler : GradleProjectImportHandler {
private companion object { 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 abstract val compilerPluginId: String
@@ -51,6 +51,8 @@ abstract class AbstractGradleImportHandler : GradleProjectImportHandler {
annotationOptionName = annotationOptionName) annotationOptionName = annotationOptionName)
} }
protected open fun getAnnotationsForPreset(presetName: String): List<String> = emptyList()
private fun getPluginSetupByModule( private fun getPluginSetupByModule(
moduleNode: DataNode<ModuleData> moduleNode: DataNode<ModuleData>
): AnnotationBasedCompilerPluginSetup? { ): AnnotationBasedCompilerPluginSetup? {
@@ -60,10 +62,10 @@ abstract class AbstractGradleImportHandler : GradleProjectImportHandler {
}?.data as? TaskData ?: return null }?.data as? TaskData ?: return null
val dataStorageTaskDescription = dataStorageTaskData.description ?: return null val dataStorageTaskDescription = dataStorageTaskData.description ?: return null
val (annotationFqNamesList, _) = TASK_DESCRIPTION_REGEX.matchEntire( val matchResult = TASK_DESCRIPTION_REGEX.matchEntire(dataStorageTaskDescription)?.groupValues?.drop(1) ?: return null
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. // 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. // So we use ones from the IDEA plugin.
@@ -26,4 +26,14 @@ class NoArgGradleProjectImportHandler : AbstractGradleImportHandler() {
override val annotationOptionName = NoArgCommandLineProcessor.ANNOTATION_OPTION.name override val annotationOptionName = NoArgCommandLineProcessor.ANNOTATION_OPTION.name
override val dataStorageTaskName = "noArgDataStorageTask" override val dataStorageTaskName = "noArgDataStorageTask"
override val pluginJarFileFromIdea = PathUtil.getKotlinPathsForIdeaPlugin().noArgPluginJarPath 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)
}
} }