Skip to content

Commit 50280e3

Browse files
committed
Introduce DownloadIdeaProductReleasesXmlTask task class to avoid storing the task implementation directly in the IntelliJPlugin class
1 parent c8bb014 commit 50280e3

File tree

2 files changed

+40
-20
lines changed

2 files changed

+40
-20
lines changed

src/main/kotlin/org/jetbrains/intellij/IntelliJPlugin.kt

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ import org.gradle.api.plugins.ExtensionAware
2020
import org.gradle.api.plugins.JavaPlugin
2121
import org.gradle.api.plugins.JavaPlugin.*
2222
import org.gradle.api.provider.Provider
23-
import org.gradle.api.tasks.*
23+
import org.gradle.api.tasks.ClasspathNormalizer
24+
import org.gradle.api.tasks.PathSensitivity
25+
import org.gradle.api.tasks.SourceSetContainer
26+
import org.gradle.api.tasks.TaskProvider
2427
import org.gradle.api.tasks.bundling.Jar
2528
import org.gradle.api.tasks.bundling.Zip
2629
import org.gradle.api.tasks.compile.JavaCompile
@@ -51,7 +54,6 @@ import org.jetbrains.intellij.IntelliJPluginConstants.EXTENSION_NAME
5154
import org.jetbrains.intellij.IntelliJPluginConstants.IDEA_CONFIGURATION_NAME
5255
import org.jetbrains.intellij.IntelliJPluginConstants.IDEA_GRADLE_PLUGIN_ID
5356
import org.jetbrains.intellij.IntelliJPluginConstants.IDEA_PLUGINS_CONFIGURATION_NAME
54-
import org.jetbrains.intellij.IntelliJPluginConstants.IDEA_PRODUCTS_RELEASES_URL
5557
import org.jetbrains.intellij.IntelliJPluginConstants.INITIALIZE_INTELLIJ_PLUGIN_TASK_NAME
5658
import org.jetbrains.intellij.IntelliJPluginConstants.INSTRUMENTED_JAR_CONFIGURATION_NAME
5759
import org.jetbrains.intellij.IntelliJPluginConstants.INSTRUMENTED_JAR_PREFIX
@@ -74,7 +76,6 @@ import org.jetbrains.intellij.IntelliJPluginConstants.PLATFORM_TYPE_INTELLIJ_COM
7476
import org.jetbrains.intellij.IntelliJPluginConstants.PLATFORM_TYPE_PHPSTORM
7577
import org.jetbrains.intellij.IntelliJPluginConstants.PLATFORM_TYPE_PYCHARM
7678
import org.jetbrains.intellij.IntelliJPluginConstants.PLATFORM_TYPE_RIDER
77-
import org.jetbrains.intellij.IntelliJPluginConstants.PLUGIN_GROUP_NAME
7879
import org.jetbrains.intellij.IntelliJPluginConstants.PLUGIN_NAME
7980
import org.jetbrains.intellij.IntelliJPluginConstants.PLUGIN_VERIFIER_REPOSITORY
8081
import org.jetbrains.intellij.IntelliJPluginConstants.PLUGIN_XML_DIR_NAME
@@ -1442,28 +1443,13 @@ abstract class IntelliJPlugin : Plugin<Project> {
14421443
info(context, "Configuring list products task")
14431444

14441445
val patchPluginXmlTaskProvider = project.tasks.named<PatchPluginXmlTask>(PATCH_PLUGIN_XML_TASK_NAME)
1445-
1446-
val downloadIdeaProductReleasesXml = project.tasks.register<Sync>(DOWNLOAD_IDE_PRODUCT_RELEASES_XML_TASK_NAME) {
1447-
group = PLUGIN_GROUP_NAME
1448-
// TODO: migrate to `project.resources.binary` whenever it's available. Ref: https://github.com/gradle/gradle/issues/25237
1449-
from(
1450-
project.resources.text
1451-
.fromUri(IDEA_PRODUCTS_RELEASES_URL)
1452-
.runCatching { asFile("UTF-8") }
1453-
.onFailure { error(context, "Cannot resolve product releases", it) }
1454-
.getOrDefault("<products />")
1455-
) {
1456-
rename { "idea_product_releases.xml" }
1457-
}
1458-
into(temporaryDir)
1459-
}
1460-
1446+
val downloadIdeaProductReleasesXmlTaskProvider = project.tasks.register<DownloadIdeaProductReleasesXmlTask>(DOWNLOAD_IDE_PRODUCT_RELEASES_XML_TASK_NAME)
14611447
val listProductsReleasesTaskProvider = project.tasks.register<ListProductsReleasesTask>(LIST_PRODUCTS_RELEASES_TASK_NAME) {
14621448
val taskContext = logCategory()
14631449

14641450
productsReleasesUpdateFiles
14651451
.from(updatePaths)
1466-
.from(downloadIdeaProductReleasesXml.map {
1452+
.from(downloadIdeaProductReleasesXmlTaskProvider.map {
14671453
it.outputs.files.asFileTree
14681454
})
14691455
androidStudioUpdatePath.convention(project.provider {
@@ -1477,6 +1463,7 @@ abstract class IntelliJPlugin : Plugin<Project> {
14771463
untilBuild.convention(patchPluginXmlTaskProvider.flatMap { it.untilBuild })
14781464
releaseChannels.convention(EnumSet.allOf(ListProductsReleasesTask.Channel::class.java))
14791465

1466+
dependsOn(DOWNLOAD_IDE_PRODUCT_RELEASES_XML_TASK_NAME)
14801467
dependsOn(PATCH_PLUGIN_XML_TASK_NAME)
14811468
}
14821469

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Copyright 2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
2+
3+
package org.jetbrains.intellij.tasks
4+
5+
import org.gradle.api.tasks.CacheableTask
6+
import org.gradle.api.tasks.Sync
7+
import org.jetbrains.intellij.IntelliJPluginConstants
8+
import org.jetbrains.intellij.IntelliJPluginConstants.IDEA_PRODUCTS_RELEASES_URL
9+
import org.jetbrains.intellij.error
10+
import org.jetbrains.intellij.logCategory
11+
12+
@CacheableTask
13+
abstract class DownloadIdeaProductReleasesXmlTask : Sync() {
14+
15+
private val context = logCategory()
16+
17+
init {
18+
group = IntelliJPluginConstants.PLUGIN_GROUP_NAME
19+
description = "Downloads XML files containing the IntelliJ IDEA product release information."
20+
21+
// TODO: migrate to `project.resources.binary` whenever it's available. Ref: https://github.com/gradle/gradle/issues/25237
22+
from(
23+
project.resources.text
24+
.fromUri(IDEA_PRODUCTS_RELEASES_URL)
25+
.runCatching { asFile("UTF-8") }
26+
.onFailure { error(context, "Cannot resolve product releases", it) }
27+
.getOrDefault("<products />")
28+
) {
29+
rename { "idea_product_releases.xml" }
30+
}
31+
into(temporaryDir)
32+
}
33+
}

0 commit comments

Comments
 (0)