diff --git a/build.gradle.kts b/build.gradle.kts index 1333446c2f..7daa812c1c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,18 +1,5 @@ -import org.gradle.api.tasks.testing.logging.TestExceptionFormat -import org.gradle.api.tasks.testing.logging.TestLogEvent -import org.gradle.jvm.tasks.Jar -import org.jetbrains.intellij.platform.gradle.Constants.Sandbox.Plugin.LIB -import org.jetbrains.intellij.platform.gradle.Constants.Sandbox.Plugin.LIB_MODULES -import org.jetbrains.intellij.platform.gradle.Constants.Tasks.INSTRUMENT_CODE -import org.jetbrains.intellij.platform.gradle.TestFrameworkType -import org.jetbrains.intellij.platform.gradle.tasks.InstrumentCodeTask -import org.jetbrains.intellij.platform.gradle.tasks.PrepareSandboxTask -import org.kt3k.gradle.plugin.coveralls.CoverallsTask -import java.nio.file.Files -import kotlin.io.path.moveTo - /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,6 +13,20 @@ import kotlin.io.path.moveTo * See the License for the specific language governing permissions and * limitations under the License. */ +import org.gradle.api.tasks.testing.logging.TestExceptionFormat +import org.gradle.api.tasks.testing.logging.TestLogEvent +import org.gradle.jvm.tasks.Jar +import org.jetbrains.intellij.platform.gradle.Constants.Sandbox.Plugin.LIB +import org.jetbrains.intellij.platform.gradle.Constants.Sandbox.Plugin.LIB_MODULES +import org.jetbrains.intellij.platform.gradle.Constants.Tasks.INSTRUMENT_CODE +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType +import org.jetbrains.intellij.platform.gradle.TestFrameworkType +import org.jetbrains.intellij.platform.gradle.tasks.InstrumentCodeTask +import org.jetbrains.intellij.platform.gradle.tasks.PrepareSandboxTask +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.kt3k.gradle.plugin.coveralls.CoverallsTask +import java.nio.file.Files +import kotlin.io.path.moveTo fun properties(key: String) = providers.gradleProperty(key) fun environment(key: String) = providers.environmentVariable(key) @@ -42,7 +43,7 @@ plugins { id("com.hurricup.gradle.fixcompress") id("idea") id("jacoco") - id("org.jetbrains.intellij.platform") version "2.6.0" + id("org.jetbrains.intellij.platform") version "2.6.1-SNAPSHOT" id("org.jetbrains.grammarkit") version "2022.3.2.2" id("com.github.kt3k.coveralls") version "2.12.2" id("org.sonarqube") version "6.2.0.5505" @@ -116,7 +117,7 @@ allprojects { kotlin { compilerOptions { - jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.fromTarget(properties("javaTargetVersion").get())) + jvmTarget = properties("javaTargetVersion").map { JvmTarget.fromTarget(it) } } } @@ -188,84 +189,14 @@ allprojects { if (isCI.get()) { testLogging { events.addAll( - listOf( - TestLogEvent.PASSED, TestLogEvent.SKIPPED, TestLogEvent.FAILED, TestLogEvent.STANDARD_OUT, TestLogEvent.STANDARD_ERROR - ) + listOf(TestLogEvent.PASSED, TestLogEvent.SKIPPED, TestLogEvent.FAILED, TestLogEvent.STANDARD_OUT, TestLogEvent.STANDARD_ERROR) ) exceptionFormat = TestExceptionFormat.FULL } } } - val isRoot = project == rootProject - - listOf( - "composedJar", - "instrumentedJar", - "jar", - ).forEach { - project.tasks.named(it).configure { - archiveVersion = "" - archiveBaseName = archiveBaseName(project.name) - } - } - - if (isRoot || isPlugin) { - project.tasks.register("normalizeSandbox") { - dependsOn(project.tasks.named("prepareSandbox")) - doLast { - normalizeSandbox(project, "prepareSandbox") - } - } - listOf( - "buildSearchableOptions", - "runIde", - "buildPlugin", - ).forEach { - project.tasks.named(it).configure { dependsOn(project.tasks.named("normalizeSandbox")) } - } - } - - if (isRoot) { - listOf( - "buildPlugin", - "buildSearchableOptions", - "classes", - "compileJava", - "compileKotlin", -// "composedJar", // disabling these tasks fails the build, because preparesandbox wants jar anyways -// "generateManifest", - "instrumentCode", -// "instrumentedJar", -// "jar", - "patchPluginXml", - "prepareJarSearchableOptions", - "processResources", - "publishPlugin", - "verifyPlugin", - "verifyPluginProjectConfiguration", - ).forEach { - project.tasks.named(it).configure { enabled = false } - } - } - if (isPlugin) { - jarSearchableOptions { - archiveVersion = "" - } - - project.tasks.register("normalizeTestSandbox") { - dependsOn(project.tasks.named("prepareTestSandbox")) - doLast { - normalizeSandbox(project, "prepareTestSandbox") - } - } - - listOf( - "test", - ).forEach { - project.tasks.named(it).configure { dependsOn(project.tasks.named("normalizeTestSandbox")) } - } publishPlugin { if (project.hasProperty("eap")) { channels.set(listOf("EAP")) @@ -274,20 +205,26 @@ allprojects { } patchPluginXml { - pluginDescription.set(properties("descriptionFile").flatMap { + pluginDescription = properties("descriptionFile").flatMap { providers.fileContents(layout.projectDirectory.file(it)).asText - }) + } - changeNotes.set(properties("changesFile").flatMap { + changeNotes = properties("changesFile").flatMap { providers.fileContents(layout.projectDirectory.file(it)).asText - }) + } + } + } + + if (!isPlugin) { + composedJar { + archiveBaseName = "${project.rootProject.name}.${project.name}.main" } } } } tasks { - val jacocoRootReport = register("jacocoRootReport") { + val jacocoRootReport by registering(JacocoReport::class) { group = "verification" description = "Generates an aggregate report from all projects" @@ -326,9 +263,9 @@ tasks { classDirectories.from(classDirs) reports { - html.required.set(true) // human readable - xml.required.set(true) // required by coveralls - csv.required.set(false) + html.required = true // human readable + xml.required = true // required by coveralls + csv.required = false } } @@ -338,7 +275,7 @@ tasks { dependsOn(jacocoRootReport) } - register("generateLexers") { } + val generateLexers by registering runIde { project.properties.forEach { (key, value) -> @@ -354,7 +291,7 @@ tasks { } -val coverageReportFile = project.buildDir.resolve("reports/jacoco/jacocoRootReport/jacocoRootReport.xml") +val coverageReportFile = project.layout.buildDirectory.file("reports/jacoco/jacocoRootReport/jacocoRootReport.xml") sonar { properties { property("sonar.projectKey", "Camelcade_Perl5-IDEA") @@ -372,36 +309,56 @@ coveralls { } intellijPlatform { - val pluginList = mutableListOf() - val bundledPluginList = mutableListOf(properties("intelliLangPlugin").get(),) + val ideType = properties("runWith") + .map { IntelliJPlatformType.fromCode(it) } + .orElse(IntelliJPlatformType.IntellijIdeaUltimate) - if (!isCI.get()) { - pluginList.add("PsiViewer:${properties("psiViewerVersion").get()}") - } + val ideVersion = ideType.flatMap { type -> + when (type) { + IntelliJPlatformType.CLion -> properties("clionVersion") - val runWith = properties("runWith").orElse("") - val (ideType, ideVersion) = when (runWith.get()) { - "CL" -> { - "CL" to properties("clionVersion").get() - } - "PC" -> { - "PC" to properties("pycharmVersion").get() + IntelliJPlatformType.PyCharmCommunity, + IntelliJPlatformType.PyCharmProfessional -> properties("pycharmVersion") + + else -> platformVersionProvider } - "PY" -> { - bundledPluginList.add("Docker") - bundledPluginList.add(properties("remoteRunPlugin").get()) - "PY" to properties("pycharmVersion").get() + } + + val pluginList = isCI.map { isCI -> + val psiViewerVersion = properties("psiViewerVersion") + when (isCI) { + true -> listOf("PsiViewer:${psiViewerVersion.get()}") + false -> emptyList() } - else -> { - bundledPluginList.add("Docker") - bundledPluginList.add(properties("coveragePlugin").get()) - bundledPluginList.add(properties("remoteRunPlugin").get()) - "IU" to platformVersionProvider.get() + } + + val bundledPluginList = ideType.map { type -> + when (type) { + IntelliJPlatformType.CLion -> emptyList() + + IntelliJPlatformType.PyCharmCommunity -> emptyList() + + IntelliJPlatformType.PyCharmProfessional -> listOf( + "Docker", + properties("remoteRunPlugin").get(), + ) + + else -> listOf( + "Docker", + properties("coveragePlugin").get(), + properties("remoteRunPlugin").get(), + ) } } + dependencies { intellijPlatform { - create(ideType, ideVersion, useInstaller = properties("useInstaller").get().toBoolean()) + create( + type = ideType, + version = ideVersion, + useInstaller = properties("useInstaller").map { it.toBoolean() }, + ) + listOf( project(":plugin"), project(":lang.tt2"), @@ -411,7 +368,9 @@ intellijPlatform { project(":lang.mason.htmlmason"), project(":lang.mason.mason2"), ).forEach { localPlugin(it) } + plugins(pluginList) + bundledPlugin(properties("intelliLangPlugin")) bundledPlugins(bundledPluginList) } } @@ -420,35 +379,3 @@ intellijPlatform { configurations.all { resolutionStrategy.cacheDynamicVersionsFor(7, "days") } - -fun normalizeSandbox(project: Project, taskName: String) { - project.logger.info("Normalizing $taskName results for ${project.name}") - val pluginsRootPath = project.tasks.named(taskName).get().defaultDestinationDirectory.get().asFile.toPath() - project.logger.info("\tPlugins root $pluginsRootPath") - for (pluginName in pluginProjectsNames) { - val pluginRootPath = pluginsRootPath.resolve(pluginName) - if (!Files.exists(pluginRootPath)) { - continue - } - project.logger.info("\tProcessing $pluginRootPath") - val mainJarName = "${archiveBaseName(pluginName)}.jar" - val pluginLibPath = pluginRootPath.resolve(LIB) - val pluginLibModulesPath = pluginRootPath.resolve(LIB_MODULES) - Files.createDirectories(pluginLibModulesPath) - Files.list(pluginLibPath).use { - it.filter { - val fileName = it.fileName.toString() - fileName.endsWith(".jar") && - fileName.startsWith(archiveBasePrefix(pluginName)) && - fileName != mainJarName && - !fileName.contains("searchableOptions") - }.forEach { - project.logger.info("\t\tMoving $it to $pluginLibModulesPath") - it.moveTo(pluginLibModulesPath.resolve(it.fileName)) - } - } - } -} - -fun archiveBasePrefix(projectName: String) = "${rootProject.name}.${projectName}" -fun archiveBaseName(projectName: String) = "${archiveBasePrefix(projectName)}.main" diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index a6a4ba7ed6..8009e5c2e0 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -1,7 +1,6 @@ /** - * Hack plugin to put a proper version of commons-compress into the classpath of the gradle process + * Hack plugin to put a proper version of commons-compress into the classpath of the Gradle process. */ - plugins { `kotlin-dsl` `java-gradle-plugin` @@ -22,4 +21,4 @@ gradlePlugin { implementationClass = "com.hurricup.gradle.FixCompressPlugin" } } -} \ No newline at end of file +} diff --git a/embedded/build.gradle.kts b/embedded/build.gradle.kts index 59758a9c08..19f910135b 100644 --- a/embedded/build.gradle.kts +++ b/embedded/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,20 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -fun properties(key: String) = providers.gradleProperty(key) +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - // packaging, which modules to include into this one - listOf( - ":lang.embedded.common", - ":lang.embedded.core", - ":lang.embedded.frontend", - ":lang.embedded.frontend.split", - ).forEach { - runtimeOnly(project(it)) - testCompileOnly(project(it)) - } - // additional compilation dependencies listOf( ":plugin.core", @@ -41,11 +30,26 @@ dependencies { // Plugin dependencies intellijPlatform { localPlugin(project(":plugin")) + + // packaging, which modules to include into this one + listOf( + ":lang.embedded.common", + ":lang.embedded.core", + ":lang.embedded.frontend", + ":lang.embedded.frontend.split", + ).forEach { + pluginModule(project(it)) + testCompileOnly(project(it)) + } } - // Useinstaller handling - intellijPlatform{ + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = properties("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } -} \ No newline at end of file +} diff --git a/embedded/common/build.gradle.kts b/embedded/common/build.gradle.kts index 688b423c0f..83843cadb0 100644 --- a/embedded/common/build.gradle.kts +++ b/embedded/common/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { listOf( @@ -20,8 +21,14 @@ dependencies { ).forEach { compileOnly(project(it)) } + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } } diff --git a/embedded/core/build.gradle.kts b/embedded/core/build.gradle.kts index 8270debb01..c89811b107 100644 --- a/embedded/core/build.gradle.kts +++ b/embedded/core/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,11 +14,9 @@ * limitations under the License. */ import org.jetbrains.grammarkit.tasks.GenerateLexerTask +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -fun properties(key: String) = providers.gradleProperty(key) - - project.file("src/main/gen").let { genRoot -> sourceSets { main { @@ -39,28 +37,33 @@ dependencies { ).forEach { compileOnly(project(it)) } - intellijPlatform{ + + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = properties("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } } tasks { - val generateLexerTask = register("generateEmbeddedPerlLexer") { - sourceFile.set(file("grammar/EmbeddedPerl.flex")) - targetOutputDir.set(file("src/main/gen/com/perl5/lang/embedded/lexer/")) - skeleton.set(rootProject.file(properties("templating_lexer_skeleton").get())) - purgeOldFiles.set(true) + val generateEmbeddedPerlLexer by registering(GenerateLexerTask::class) { + sourceFile = file("grammar/EmbeddedPerl.flex") + targetOutputDir = file("src/main/gen/com/perl5/lang/embedded/lexer/") + skeleton = providers.gradleProperty("templating_lexer_skeleton").map { rootProject.file(it) } + purgeOldFiles = true } - rootProject.tasks.findByName("generateLexers")?.dependsOn( - generateLexerTask - ) - + rootProject.tasks.named { it == "generateLexers" }.configureEach { + dependsOn(generateEmbeddedPerlLexer) + } withType { - dependsOn(generateLexerTask) + dependsOn(generateEmbeddedPerlLexer) } - withType{ - dependsOn(generateLexerTask) + withType { + dependsOn(generateEmbeddedPerlLexer) } } diff --git a/embedded/frontend/build.gradle.kts b/embedded/frontend/build.gradle.kts index aad08e1927..e964f7aa45 100644 --- a/embedded/frontend/build.gradle.kts +++ b/embedded/frontend/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { listOf( @@ -21,8 +22,14 @@ dependencies { ).forEach { compileOnly(project(it)) } + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } } diff --git a/embedded/frontend/split/build.gradle.kts b/embedded/frontend/split/build.gradle.kts index 921a947cdd..5fe15fafb2 100644 --- a/embedded/frontend/split/build.gradle.kts +++ b/embedded/frontend/split/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { listOf( @@ -23,8 +24,14 @@ dependencies { ).forEach { compileOnly(project(it)) } + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } } diff --git a/mason/framework/build.gradle.kts b/mason/framework/build.gradle.kts index 68c14e441e..553d07ed69 100644 --- a/mason/framework/build.gradle.kts +++ b/mason/framework/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -fun properties(key: String) = providers.gradleProperty(key) +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { listOf(":plugin.core").forEach { @@ -22,11 +22,16 @@ dependencies { testRuntimeOnly(project(it)) } testImplementation(testFixtures(project(":plugin.testFixtures"))) + intellijPlatform { - intellijPlatform{ - val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = properties("useInstaller").get().toBoolean()) - } + val platformVersionProvider: Provider by rootProject.extra + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + localPlugin(project(":plugin")) } } diff --git a/mason/htmlmason/build.gradle.kts b/mason/htmlmason/build.gradle.kts index bbf6b609b9..e790879349 100644 --- a/mason/htmlmason/build.gradle.kts +++ b/mason/htmlmason/build.gradle.kts @@ -1,6 +1,5 @@ - /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,19 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -fun properties(key: String) = providers.gradleProperty(key) +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - // packaging, which modules to include into this one - listOf( - ":lang.mason.htmlmason.common", - ":lang.mason.htmlmason.core", - ":lang.mason.htmlmason.frontend", - ":lang.mason.htmlmason.frontend.split", - ).forEach { - runtimeOnly(project(it)) - } - // compilation dependencies listOf( ":plugin.core", @@ -40,10 +29,26 @@ dependencies { intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = properties("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + listOf( ":plugin", ":lang.mason.framework" ).forEach { localPlugin(project(it)) } + + // packaging, which modules to include into this one + listOf( + ":lang.mason.htmlmason.common", + ":lang.mason.htmlmason.core", + ":lang.mason.htmlmason.frontend", + ":lang.mason.htmlmason.frontend.split", + ).forEach { + pluginModule(project(it)) + } } } diff --git a/mason/htmlmason/common/build.gradle.kts b/mason/htmlmason/common/build.gradle.kts index 688b423c0f..83843cadb0 100644 --- a/mason/htmlmason/common/build.gradle.kts +++ b/mason/htmlmason/common/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { listOf( @@ -20,8 +21,14 @@ dependencies { ).forEach { compileOnly(project(it)) } + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } } diff --git a/mason/htmlmason/core/build.gradle.kts b/mason/htmlmason/core/build.gradle.kts index 75a369b970..0ca9dc723c 100644 --- a/mason/htmlmason/core/build.gradle.kts +++ b/mason/htmlmason/core/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,10 +14,9 @@ * limitations under the License. */ import org.jetbrains.grammarkit.tasks.GenerateLexerTask +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -fun properties(key: String) = providers.gradleProperty(key) - project.file("src/main/gen").let { genRoot -> sourceSets { main { @@ -39,27 +38,33 @@ dependencies { ).forEach { compileOnly(project(it)) } + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = properties("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } } tasks { - val generateLexerTask = register("generateHTMLMasonLexer") { - sourceFile.set(file("grammar/HTMLMason.flex")) - targetOutputDir.set(file("src/main/gen/com/perl5/lang/htmlmason/lexer/")) - skeleton.set(rootProject.file(properties("templating_lexer_skeleton").get())) - purgeOldFiles.set(true) + val generateHTMLMasonLexer by registering(GenerateLexerTask::class) { + sourceFile = file("grammar/HTMLMason.flex") + targetOutputDir = file("src/main/gen/com/perl5/lang/htmlmason/lexer/") + skeleton = providers.gradleProperty("templating_lexer_skeleton").map { rootProject.file(it) } + purgeOldFiles = true } - rootProject.tasks.findByName("generateLexers")?.dependsOn( - generateLexerTask - ) + rootProject.tasks.named { it == "generateLexers" }.configureEach { + dependsOn(generateHTMLMasonLexer) + } withType { - dependsOn(generateLexerTask) + dependsOn(generateHTMLMasonLexer) } - withType{ - dependsOn(generateLexerTask) + withType { + dependsOn(generateHTMLMasonLexer) } } diff --git a/mason/htmlmason/frontend/build.gradle.kts b/mason/htmlmason/frontend/build.gradle.kts index 4b4776d71c..2aa27fb80e 100644 --- a/mason/htmlmason/frontend/build.gradle.kts +++ b/mason/htmlmason/frontend/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { listOf( @@ -21,8 +22,14 @@ dependencies { ).forEach { compileOnly(project(it)) } + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } } diff --git a/mason/htmlmason/frontend/split/build.gradle.kts b/mason/htmlmason/frontend/split/build.gradle.kts index 0eb5f5e3f2..d37a96f067 100644 --- a/mason/htmlmason/frontend/split/build.gradle.kts +++ b/mason/htmlmason/frontend/split/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { listOf( @@ -23,8 +24,14 @@ dependencies { ).forEach { compileOnly(project(it)) } + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } } diff --git a/mason/mason2/build.gradle.kts b/mason/mason2/build.gradle.kts index 37f6241cc1..9c2757503d 100644 --- a/mason/mason2/build.gradle.kts +++ b/mason/mason2/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,19 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -fun properties(key: String) = providers.gradleProperty(key) +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - // packaging, which modules to include into this one - listOf( - ":lang.mason.mason2.common", - ":lang.mason.mason2.core", - ":lang.mason.mason2.frontend", - ":lang.mason.mason2.frontend.split", - ).forEach { - runtimeOnly(project(it)) - } - // compilation dependencies listOf( ":plugin.core", @@ -39,10 +29,26 @@ dependencies { intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = properties("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + listOf( ":plugin", ":lang.mason.framework" ).forEach { localPlugin(project(it)) } + + // packaging, which modules to include into this one + listOf( + ":lang.mason.mason2.common", + ":lang.mason.mason2.core", + ":lang.mason.mason2.frontend", + ":lang.mason.mason2.frontend.split", + ).forEach { + pluginModule(project(it)) + } } } diff --git a/mason/mason2/common/build.gradle.kts b/mason/mason2/common/build.gradle.kts index 688b423c0f..83843cadb0 100644 --- a/mason/mason2/common/build.gradle.kts +++ b/mason/mason2/common/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { listOf( @@ -20,8 +21,14 @@ dependencies { ).forEach { compileOnly(project(it)) } + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } } diff --git a/mason/mason2/core/build.gradle.kts b/mason/mason2/core/build.gradle.kts index 1c70aaeae3..6a9be28fb7 100644 --- a/mason/mason2/core/build.gradle.kts +++ b/mason/mason2/core/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,10 +14,9 @@ * limitations under the License. */ import org.jetbrains.grammarkit.tasks.GenerateLexerTask +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -fun properties(key: String) = providers.gradleProperty(key) - project.file("src/main/gen").let { genRoot -> sourceSets { main { @@ -39,29 +38,33 @@ dependencies { ).forEach { compileOnly(project(it)) } + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = properties("useInstaller").get().toBoolean()) - } + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + } } tasks { - val generateLexerTask = register("generateMason2Lexer") { - sourceFile.set(file("grammar/Mason2.flex")) - targetOutputDir.set(file("src/main/gen/com/perl5/lang/mason2/lexer/")) - skeleton.set(rootProject.file(properties("templating_lexer_skeleton").get())) - purgeOldFiles.set(true) + val generateMason2Lexer by registering(GenerateLexerTask::class) { + sourceFile = file("grammar/Mason2.flex") + targetOutputDir = file("src/main/gen/com/perl5/lang/mason2/lexer/") + skeleton = providers.gradleProperty("templating_lexer_skeleton").map { rootProject.file(it) } + purgeOldFiles = true } - rootProject.tasks.findByName("generateLexers")?.dependsOn( - generateLexerTask - ) - + rootProject.tasks.named { it == "generateLexers" }.configureEach { + dependsOn(generateMason2Lexer) + } withType { - dependsOn(generateLexerTask) + dependsOn(generateMason2Lexer) } - withType{ - dependsOn(generateLexerTask) + withType { + dependsOn(generateMason2Lexer) } } diff --git a/mason/mason2/frontend/build.gradle.kts b/mason/mason2/frontend/build.gradle.kts index ff7acb5a40..b9116e3626 100644 --- a/mason/mason2/frontend/build.gradle.kts +++ b/mason/mason2/frontend/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { listOf( @@ -21,8 +22,14 @@ dependencies { ).forEach { compileOnly(project(it)) } + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } } diff --git a/mason/mason2/frontend/split/build.gradle.kts b/mason/mason2/frontend/split/build.gradle.kts index 89c2cc17c8..8db9b99cc2 100644 --- a/mason/mason2/frontend/split/build.gradle.kts +++ b/mason/mason2/frontend/split/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { listOf( @@ -23,8 +24,14 @@ dependencies { ).forEach { compileOnly(project(it)) } + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } } diff --git a/mojo/build.gradle.kts b/mojo/build.gradle.kts index 739c57168d..9afdf6f896 100644 --- a/mojo/build.gradle.kts +++ b/mojo/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,19 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -fun properties(key: String) = providers.gradleProperty(key) +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - // packaging, which modules to include into this one - listOf( - ":lang.mojo.common", - ":lang.mojo.core", - ":lang.mojo.frontend", - ":lang.mojo.frontend.split", - ).forEach { - runtimeOnly(project(it)) - } - // dependencies listOf( ":plugin.core", @@ -37,12 +27,26 @@ dependencies { intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IU", platformVersionProvider.get(), useInstaller = properties("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaUltimate }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + localPlugin(project(":plugin")) - bundledPlugins(properties("remoteRunPlugin").get()) + bundledPlugin(providers.gradleProperty("remoteRunPlugin")) + + // packaging, which modules to include into this one + listOf( + ":lang.mojo.common", + ":lang.mojo.core", + ":lang.mojo.frontend", + ":lang.mojo.frontend.split", + ).forEach { + pluginModule(project(it)) + } } testImplementation(testFixtures(project(":plugin.testFixtures"))) } - - diff --git a/mojo/common/build.gradle.kts b/mojo/common/build.gradle.kts index 688b423c0f..83843cadb0 100644 --- a/mojo/common/build.gradle.kts +++ b/mojo/common/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { listOf( @@ -20,8 +21,14 @@ dependencies { ).forEach { compileOnly(project(it)) } + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } } diff --git a/mojo/core/build.gradle.kts b/mojo/core/build.gradle.kts index 24847429c0..6a58fc2666 100644 --- a/mojo/core/build.gradle.kts +++ b/mojo/core/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,12 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - import org.jetbrains.grammarkit.tasks.GenerateLexerTask +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -fun properties(key: String) = providers.gradleProperty(key) - project.file("src/main/gen").let { genRoot -> sourceSets { main { @@ -33,33 +31,38 @@ project.file("src/main/gen").let { genRoot -> } } - dependencies { listOf(":plugin.core").forEach { compileOnly(project(it)) testCompileOnly(project(it)) } + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = properties("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } } tasks { - val generateLexerTask = register("generateMojoliciousLexer") { - sourceFile.set(file("grammar/Mojolicious.flex")) - targetOutputDir.set(file("src/main/gen/com/perl5/lang/mojolicious/lexer/")) - skeleton.set(rootProject.file(properties("templating_lexer_skeleton").get())) - purgeOldFiles.set(true) + val generateMojoliciousLexer by registering(GenerateLexerTask::class) { + sourceFile = file("grammar/Mojolicious.flex") + targetOutputDir = file("src/main/gen/com/perl5/lang/mojolicious/lexer/") + skeleton = providers.gradleProperty("templating_lexer_skeleton").map { rootProject.file(it) } + purgeOldFiles = true } - rootProject.tasks.findByName("generateLexers")?.dependsOn( - generateLexerTask - ) + rootProject.tasks.named { it == "generateLexers" }.configureEach { + dependsOn(generateMojoliciousLexer) + } withType { - dependsOn(generateLexerTask) + dependsOn(generateMojoliciousLexer) } withType { - dependsOn(generateLexerTask) + dependsOn(generateMojoliciousLexer) } } diff --git a/mojo/frontend/build.gradle.kts b/mojo/frontend/build.gradle.kts index ac8cf9f0d6..b4149decd8 100644 --- a/mojo/frontend/build.gradle.kts +++ b/mojo/frontend/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { listOf( @@ -21,8 +22,14 @@ dependencies { ).forEach { compileOnly(project(it)) } + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } } diff --git a/mojo/frontend/split/build.gradle.kts b/mojo/frontend/split/build.gradle.kts index f17aabdb1e..5606189b0d 100644 --- a/mojo/frontend/split/build.gradle.kts +++ b/mojo/frontend/split/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { listOf( @@ -23,8 +24,14 @@ dependencies { ).forEach { compileOnly(project(it)) } + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } } diff --git a/plugin/asdf/build.gradle.kts b/plugin/asdf/build.gradle.kts index 655b87b2ea..731f7aeb8c 100644 --- a/plugin/asdf/build.gradle.kts +++ b/plugin/asdf/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,18 +13,25 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - listOf( - ":plugin.core", - ":plugin.perlInstall", - ).forEach { - compileOnly(project(it)) - testCompileOnly(project(it)) - runtimeOnly(project(it)) - } intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + + listOf( + ":plugin.core", + ":plugin.perlInstall", + ).forEach { + compileOnly(project(it)) + testCompileOnly(project(it)) + pluginModule(project(it)) + } } } diff --git a/plugin/berrybrew/build.gradle.kts b/plugin/berrybrew/build.gradle.kts index 1d075b2bd1..525056dda2 100644 --- a/plugin/berrybrew/build.gradle.kts +++ b/plugin/berrybrew/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,17 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - listOf( - ":plugin.core", - ).forEach { - compileOnly(project(it)) - testCompileOnly(project(it)) - runtimeOnly(project(it)) - } intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + + listOf( + ":plugin.core", + ).forEach { + compileOnly(project(it)) + testCompileOnly(project(it)) + pluginModule(project(it)) + } } } diff --git a/plugin/build.gradle.kts b/plugin/build.gradle.kts index a47c99d661..1d8fe05b91 100644 --- a/plugin/build.gradle.kts +++ b/plugin/build.gradle.kts @@ -1,7 +1,5 @@ -import org.jetbrains.intellij.platform.gradle.tasks.PrepareSandboxTask - /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,55 +13,69 @@ import org.jetbrains.intellij.platform.gradle.tasks.PrepareSandboxTask * See the License for the specific language governing permissions and * limitations under the License. */ - -fun properties(key: String) = providers.gradleProperty(key) +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType +import org.jetbrains.intellij.platform.gradle.tasks.PrepareSandboxTask dependencies { - listOf( - ":plugin.asdf", - ":plugin.berrybrew", - ":plugin.carton", - ":plugin.common", - ":plugin.copyright", - ":plugin.core", - ":plugin.coverage", - ":plugin.cpan", - ":plugin.cpanminus", - ":plugin.debugger", - ":plugin.docker", - ":plugin.frontend", - ":plugin.frontend.split", - ":plugin.idea", - ":plugin.intelliLang", - ":plugin.makeMaker", - ":plugin.moduleBuild", - ":plugin.perlInstall", - ":plugin.perlbrew", - ":plugin.plenv", - ":plugin.profiler", - ":plugin.terminal", - ":plugin.wsl", - ).forEach { - runtimeOnly(project(it)) - testCompileOnly(project(it)) - } testImplementation(testFixtures(project(":plugin.testFixtures"))) intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IU", platformVersionProvider.get(), useInstaller = properties("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaUltimate }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + bundledPlugins( "com.intellij.copyright", - properties("intelliLangPlugin").get(), - properties("remoteRunPlugin").get(), - properties("coveragePlugin").get(), "XPathView", "org.jetbrains.plugins.terminal", + "com.intellij.css", + "com.intellij.database", + "com.intellij.java", + "org.intellij.plugins.markdown", ) - } -} + bundledPlugin(providers.gradleProperty("intelliLangPlugin")) + bundledPlugin(providers.gradleProperty("remoteRunPlugin")) + bundledPlugin(providers.gradleProperty("coveragePlugin")) + bundledModules( + "intellij.platform.coverage.agent", + "intellij.profiler.common", + ) + listOf( + ":plugin.asdf", + ":plugin.berrybrew", + ":plugin.carton", + ":plugin.common", + ":plugin.copyright", + ":plugin.core", + ":plugin.coverage", + ":plugin.cpan", + ":plugin.cpanminus", + ":plugin.debugger", + ":plugin.docker", + ":plugin.frontend", + ":plugin.frontend.split", + ":plugin.idea", + ":plugin.intelliLang", + ":plugin.makeMaker", + ":plugin.moduleBuild", + ":plugin.perlInstall", + ":plugin.perlbrew", + ":plugin.plenv", + ":plugin.profiler", + ":plugin.terminal", + ":plugin.wsl", + ).forEach { + testCompileOnly(project(it)) + pluginModule(project(it)) + } + } +} tasks { withType { @@ -72,21 +84,4 @@ tasks { intoChild(intellijPlatform.projectName.map { projectName -> "$projectName/perl" }) .from(file("scripts")) } - - test { - dependencies { - intellijPlatform { - listOf( - "com.intellij.css", - "com.intellij.database", - "com.intellij.java", - "org.intellij.plugins.markdown", - ).forEach { bundledPlugin(it) } - listOf( - "intellij.platform.coverage.agent", - "intellij.profiler.common", - ).forEach { bundledModule(it) } - } - } - } } diff --git a/plugin/carton/build.gradle.kts b/plugin/carton/build.gradle.kts index a8178224d6..525056dda2 100644 --- a/plugin/carton/build.gradle.kts +++ b/plugin/carton/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,18 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - listOf( - ":plugin.core", - ).forEach { - compileOnly(project(it)) - testCompileOnly(project(it)) - runtimeOnly(project(it)) - } intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + + listOf( + ":plugin.core", + ).forEach { + compileOnly(project(it)) + testCompileOnly(project(it)) + pluginModule(project(it)) + } } } - diff --git a/plugin/common/build.gradle.kts b/plugin/common/build.gradle.kts index c2d2675940..2742c73297 100644 --- a/plugin/common/build.gradle.kts +++ b/plugin/common/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,10 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } } diff --git a/plugin/copyright/build.gradle.kts b/plugin/copyright/build.gradle.kts index 9408828fb6..245c891ccb 100644 --- a/plugin/copyright/build.gradle.kts +++ b/plugin/copyright/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,20 +13,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -fun properties(key: String) = providers.gradleProperty(key) +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - listOf( - ":plugin.core", - ).forEach { - compileOnly(project(it)) - testCompileOnly(project(it)) - runtimeOnly(project(it)) - } intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = properties("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + bundledPlugins("com.intellij.copyright") + + listOf( + ":plugin.core", + ).forEach { + compileOnly(project(it)) + testCompileOnly(project(it)) + pluginModule(project(it)) + } } } - diff --git a/plugin/core/build.gradle.kts b/plugin/core/build.gradle.kts index 24e170757a..5ee295c4e6 100644 --- a/plugin/core/build.gradle.kts +++ b/plugin/core/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,13 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - import org.jetbrains.grammarkit.tasks.GenerateLexerTask import org.jetbrains.grammarkit.tasks.GenerateParserTask +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -fun properties(key: String) = providers.gradleProperty(key) - val genRoot = project.file("src/main/gen").also { genRoot -> sourceSets { main { @@ -44,63 +42,70 @@ dependencies { intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = properties("useInstaller").get().toBoolean()) - bundledModules( - "intellij.spellchecker" + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, ) + + bundledModule("intellij.spellchecker") } } tasks { - val generatePerlParserTask = register("generatePerl5Parser") { - sourceFile.set(file("grammar/Perl5.bnf")) - pathToParser.set("/com/perl5/lang/perl/parser/PerlParserGenerated.java") - pathToPsiRoot.set("/com/perl5/lang/perl/psi") + val generatePerl5Parser by registering(GenerateParserTask::class) { + sourceFile = file("grammar/Perl5.bnf") + pathToParser = "/com/perl5/lang/perl/parser/PerlParserGenerated.java" + pathToPsiRoot = "/com/perl5/lang/perl/psi" } - val generatePodParserTask = register("generatePodParser") { - sourceFile.set(file("grammar/Pod.bnf")) - pathToParser.set("/com/perl5/lang/pod/parser/PodParserGenerated.java") - pathToPsiRoot.set("/com/perl5/lang/pod/psi") + val generatePodParser by registering(GenerateParserTask::class) { + sourceFile = file("grammar/Pod.bnf") + pathToParser = "/com/perl5/lang/pod/parser/PodParserGenerated.java" + pathToPsiRoot = "/com/perl5/lang/pod/psi" } - val generatePerlLexerTask = register("generatePerlLexer") { - sourceFile.set(file("grammar/Perl.flex")) - targetOutputDir.set(file("src/main/gen/com/perl5/lang/perl/lexer/")) + val generatePerlLexer by registering(GenerateLexerTask::class) { + sourceFile = file("grammar/Perl.flex") + targetOutputDir = file("src/main/gen/com/perl5/lang/perl/lexer/") - dependsOn(generatePerlParserTask) + dependsOn(generatePerl5Parser) } - val generatePodLexerTask = register("generatePodLexer") { - sourceFile.set(file("grammar/Pod.flex")) - targetOutputDir.set(file("src/main/gen/com/perl5/lang/pod/lexer/")) + val generatePodLexer by registering(GenerateLexerTask::class) { + sourceFile = file("grammar/Pod.flex") + targetOutputDir = file("src/main/gen/com/perl5/lang/pod/lexer/") - dependsOn(generatePodParserTask) + dependsOn(generatePodParser) + } + + rootProject.tasks.named { it == "generateLexers" }.configureEach { + dependsOn( + generatePerlLexer, + generatePodLexer, + ) } - rootProject.tasks.findByName("generateLexers")?.dependsOn( - generatePerlLexerTask, - generatePodLexerTask - ) withType { - skeleton.set(rootProject.file(properties("lexer_skeleton").get())) - purgeOldFiles.set(true) + skeleton = providers.gradleProperty("lexer_skeleton").map { rootProject.file(it) } + purgeOldFiles = true } withType { - targetRootOutputDir.set(genRoot) - purgeOldFiles.set(true) + targetRootOutputDir = genRoot + purgeOldFiles = true } withType { dependsOn( - generatePerlLexerTask, - generatePodLexerTask + generatePerlLexer, + generatePodLexer ) } withType { dependsOn( - generatePerlLexerTask, - generatePodLexerTask + generatePerlLexer, + generatePodLexer ) } } diff --git a/plugin/coverage/build.gradle.kts b/plugin/coverage/build.gradle.kts index a1ee584b9c..cf26fa9304 100644 --- a/plugin/coverage/build.gradle.kts +++ b/plugin/coverage/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,19 +13,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - listOf( - ":plugin.core", - ).forEach { - compileOnly(project(it)) - testCompileOnly(project(it)) - runtimeOnly(project(it)) - } intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) - bundledPlugins(providers.gradleProperty("coveragePlugin").get()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + bundledPlugin(providers.gradleProperty("coveragePlugin")) bundledModule("intellij.platform.coverage.agent") + + listOf( + ":plugin.core", + ).forEach { + compileOnly(project(it)) + testCompileOnly(project(it)) + pluginModule(project(it)) + } } } diff --git a/plugin/cpan/build.gradle.kts b/plugin/cpan/build.gradle.kts index 1d075b2bd1..525056dda2 100644 --- a/plugin/cpan/build.gradle.kts +++ b/plugin/cpan/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,17 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - listOf( - ":plugin.core", - ).forEach { - compileOnly(project(it)) - testCompileOnly(project(it)) - runtimeOnly(project(it)) - } intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + + listOf( + ":plugin.core", + ).forEach { + compileOnly(project(it)) + testCompileOnly(project(it)) + pluginModule(project(it)) + } } } diff --git a/plugin/cpanminus/build.gradle.kts b/plugin/cpanminus/build.gradle.kts index 1d075b2bd1..525056dda2 100644 --- a/plugin/cpanminus/build.gradle.kts +++ b/plugin/cpanminus/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,17 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - listOf( - ":plugin.core", - ).forEach { - compileOnly(project(it)) - testCompileOnly(project(it)) - runtimeOnly(project(it)) - } intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + + listOf( + ":plugin.core", + ).forEach { + compileOnly(project(it)) + testCompileOnly(project(it)) + pluginModule(project(it)) + } } } diff --git a/plugin/debugger/build.gradle.kts b/plugin/debugger/build.gradle.kts index a8178224d6..525056dda2 100644 --- a/plugin/debugger/build.gradle.kts +++ b/plugin/debugger/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,18 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - listOf( - ":plugin.core", - ).forEach { - compileOnly(project(it)) - testCompileOnly(project(it)) - runtimeOnly(project(it)) - } intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + + listOf( + ":plugin.core", + ).forEach { + compileOnly(project(it)) + testCompileOnly(project(it)) + pluginModule(project(it)) + } } } - diff --git a/plugin/docker/build.gradle.kts b/plugin/docker/build.gradle.kts index 2a8d5d5590..8a7abc14b3 100644 --- a/plugin/docker/build.gradle.kts +++ b/plugin/docker/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,21 +13,27 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -fun properties(key: String) = providers.gradleProperty(key) +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - listOf( - ":plugin.core", - ).forEach { - compileOnly(project(it)) - testCompileOnly(project(it)) - runtimeOnly(project(it)) - } intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IU", platformVersionProvider.get(), useInstaller = properties("useInstaller").get().toBoolean()) - bundledPlugins(properties("remoteRunPlugin").get(), "Docker") + + create( + type = provider { IntelliJPlatformType.IntellijIdeaUltimate }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + + bundledPlugin("Docker") + bundledPlugin(providers.gradleProperty("remoteRunPlugin")) + + listOf( + ":plugin.core", + ).forEach { + compileOnly(project(it)) + testCompileOnly(project(it)) + pluginModule(project(it)) + } } } - diff --git a/plugin/frontend/build.gradle.kts b/plugin/frontend/build.gradle.kts index 688b423c0f..83843cadb0 100644 --- a/plugin/frontend/build.gradle.kts +++ b/plugin/frontend/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { listOf( @@ -20,8 +21,14 @@ dependencies { ).forEach { compileOnly(project(it)) } + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } } diff --git a/plugin/frontend/split/build.gradle.kts b/plugin/frontend/split/build.gradle.kts index 0ee5770935..697f37c0cf 100644 --- a/plugin/frontend/split/build.gradle.kts +++ b/plugin/frontend/split/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { listOf( @@ -21,8 +22,14 @@ dependencies { ).forEach { compileOnly(project(it)) } + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } } diff --git a/plugin/idea/build.gradle.kts b/plugin/idea/build.gradle.kts index 89db212ca0..bfb43a8b9a 100644 --- a/plugin/idea/build.gradle.kts +++ b/plugin/idea/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,19 +13,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - listOf( - ":plugin.core", - ).forEach { - compileOnly(project(it)) - testCompileOnly(project(it)) - runtimeOnly(project(it)) - } intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) - bundledPlugins("com.intellij.java") + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + + bundledPlugin("com.intellij.java") + + listOf( + ":plugin.core", + ).forEach { + compileOnly(project(it)) + testCompileOnly(project(it)) + pluginModule(project(it)) + } } } - diff --git a/plugin/intelliLang/build.gradle.kts b/plugin/intelliLang/build.gradle.kts index a494b051e2..f02361f82d 100644 --- a/plugin/intelliLang/build.gradle.kts +++ b/plugin/intelliLang/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,21 +13,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -fun properties(key: String) = providers.gradleProperty(key) +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - listOf( - ":plugin.core", - ).forEach { - compileOnly(project(it)) - testCompileOnly(project(it)) - runtimeOnly(project(it)) - } intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) - bundledPlugins(properties("intelliLangPlugin").get()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + + bundledPlugin(providers.gradleProperty("intelliLangPlugin")) + + listOf( + ":plugin.core", + ).forEach { + compileOnly(project(it)) + testCompileOnly(project(it)) + pluginModule(project(it)) + } } } - diff --git a/plugin/makeMaker/build.gradle.kts b/plugin/makeMaker/build.gradle.kts index a8178224d6..525056dda2 100644 --- a/plugin/makeMaker/build.gradle.kts +++ b/plugin/makeMaker/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,18 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - listOf( - ":plugin.core", - ).forEach { - compileOnly(project(it)) - testCompileOnly(project(it)) - runtimeOnly(project(it)) - } intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + + listOf( + ":plugin.core", + ).forEach { + compileOnly(project(it)) + testCompileOnly(project(it)) + pluginModule(project(it)) + } } } - diff --git a/plugin/moduleBuild/build.gradle.kts b/plugin/moduleBuild/build.gradle.kts index a8178224d6..525056dda2 100644 --- a/plugin/moduleBuild/build.gradle.kts +++ b/plugin/moduleBuild/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,18 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - listOf( - ":plugin.core", - ).forEach { - compileOnly(project(it)) - testCompileOnly(project(it)) - runtimeOnly(project(it)) - } intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + + listOf( + ":plugin.core", + ).forEach { + compileOnly(project(it)) + testCompileOnly(project(it)) + pluginModule(project(it)) + } } } - diff --git a/plugin/perlInstall/build.gradle.kts b/plugin/perlInstall/build.gradle.kts index f262b7c2cb..525056dda2 100644 --- a/plugin/perlInstall/build.gradle.kts +++ b/plugin/perlInstall/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,16 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType + dependencies { - listOf( - ":plugin.core", - ).forEach { - compileOnly(project(it)) - testCompileOnly(project(it)) - runtimeOnly(project(it)) - } intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + + listOf( + ":plugin.core", + ).forEach { + compileOnly(project(it)) + testCompileOnly(project(it)) + pluginModule(project(it)) + } } } diff --git a/plugin/perlbrew/build.gradle.kts b/plugin/perlbrew/build.gradle.kts index 1d075b2bd1..525056dda2 100644 --- a/plugin/perlbrew/build.gradle.kts +++ b/plugin/perlbrew/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,17 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - listOf( - ":plugin.core", - ).forEach { - compileOnly(project(it)) - testCompileOnly(project(it)) - runtimeOnly(project(it)) - } intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + + listOf( + ":plugin.core", + ).forEach { + compileOnly(project(it)) + testCompileOnly(project(it)) + pluginModule(project(it)) + } } } diff --git a/plugin/plenv/build.gradle.kts b/plugin/plenv/build.gradle.kts index 655b87b2ea..731f7aeb8c 100644 --- a/plugin/plenv/build.gradle.kts +++ b/plugin/plenv/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,18 +13,25 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - listOf( - ":plugin.core", - ":plugin.perlInstall", - ).forEach { - compileOnly(project(it)) - testCompileOnly(project(it)) - runtimeOnly(project(it)) - } intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + + listOf( + ":plugin.core", + ":plugin.perlInstall", + ).forEach { + compileOnly(project(it)) + testCompileOnly(project(it)) + pluginModule(project(it)) + } } } diff --git a/plugin/profiler/build.gradle.kts b/plugin/profiler/build.gradle.kts index c18270a78e..d9cc3df0b5 100644 --- a/plugin/profiler/build.gradle.kts +++ b/plugin/profiler/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,20 +13,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -fun properties(key: String) = providers.gradleProperty(key) +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - listOf( - ":plugin.core", - ).forEach { - compileOnly(project(it)) - testCompileOnly(project(it)) - runtimeOnly(project(it)) - } intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IU", platformVersionProvider.get(), useInstaller = properties("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaUltimate }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + bundledModule("intellij.profiler.common") + + listOf( + ":plugin.core", + ).forEach { + compileOnly(project(it)) + testCompileOnly(project(it)) + pluginModule(project(it)) + } } } - diff --git a/plugin/terminal/build.gradle.kts b/plugin/terminal/build.gradle.kts index 5d8c9631f1..fcc6d58e48 100644 --- a/plugin/terminal/build.gradle.kts +++ b/plugin/terminal/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,19 +13,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - listOf( - ":plugin.core", - ).forEach { - compileOnly(project(it)) - testCompileOnly(project(it)) - runtimeOnly(project(it)) - } intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) - bundledPlugins("org.jetbrains.plugins.terminal") + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + + bundledPlugin("org.jetbrains.plugins.terminal") + + listOf( + ":plugin.core", + ).forEach { + compileOnly(project(it)) + testCompileOnly(project(it)) + pluginModule(project(it)) + } } } - diff --git a/plugin/testFixtures/build.gradle.kts b/plugin/testFixtures/build.gradle.kts index ddf3162233..702f5da1a4 100644 --- a/plugin/testFixtures/build.gradle.kts +++ b/plugin/testFixtures/build.gradle.kts @@ -1,4 +1,19 @@ -fun properties(key: String) = providers.gradleProperty(key) +/* + * Copyright 2015-2025 Alexandr Evstigneev + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType plugins { id("java-test-fixtures") @@ -25,10 +40,14 @@ dependencies { intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) - bundledPlugins( - properties("intelliLangPlugin").get(), - "org.jetbrains.plugins.terminal", + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, ) + + bundledPlugin("org.jetbrains.plugins.terminal") + bundledPlugin(providers.gradleProperty("intelliLangPlugin")) } } diff --git a/plugin/wsl/build.gradle.kts b/plugin/wsl/build.gradle.kts index e0a22919fb..8ce6803492 100644 --- a/plugin/wsl/build.gradle.kts +++ b/plugin/wsl/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,21 +13,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -fun properties(key: String) = providers.gradleProperty(key) +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - listOf( - ":plugin.core", - ).forEach { - compileOnly(project(it)) - testCompileOnly(project(it)) - runtimeOnly(project(it)) - } intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IU", platformVersionProvider.get(), useInstaller = properties("useInstaller").get().toBoolean()) - bundledPlugins(properties("remoteRunPlugin").get()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaUltimate }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + + bundledPlugin(providers.gradleProperty("remoteRunPlugin")) + + listOf( + ":plugin.core", + ).forEach { + compileOnly(project(it)) + testCompileOnly(project(it)) + pluginModule(project(it)) + } } } - diff --git a/settings.gradle.kts b/settings.gradle.kts index 1ce11a8332..3433d5415f 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/tt2/build.gradle.kts b/tt2/build.gradle.kts index 8582427495..274819e874 100644 --- a/tt2/build.gradle.kts +++ b/tt2/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,19 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -fun properties(key: String) = providers.gradleProperty(key) +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { - // packaging, which modules to include into this one - listOf( - ":lang.tt2.common", - ":lang.tt2.core", - ":lang.tt2.frontend", - ":lang.tt2.frontend.split", - ).forEach { - runtimeOnly(project(it)) - } - // dependencies listOf( ":plugin.core", @@ -35,11 +25,26 @@ dependencies { testCompileOnly(project(it)) } testImplementation(testFixtures(project(":plugin.testFixtures"))) + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = properties("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + localPlugin(project(":plugin")) + + // packaging, which modules to include into this one + listOf( + ":lang.tt2.common", + ":lang.tt2.core", + ":lang.tt2.frontend", + ":lang.tt2.frontend.split", + ).forEach { + pluginModule(project(it)) + } } } - - diff --git a/tt2/common/build.gradle.kts b/tt2/common/build.gradle.kts index 688b423c0f..83843cadb0 100644 --- a/tt2/common/build.gradle.kts +++ b/tt2/common/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { listOf( @@ -20,8 +21,14 @@ dependencies { ).forEach { compileOnly(project(it)) } + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } } diff --git a/tt2/core/build.gradle.kts b/tt2/core/build.gradle.kts index 80ac1c5c8c..3b4510ec9d 100644 --- a/tt2/core/build.gradle.kts +++ b/tt2/core/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,13 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - import org.jetbrains.grammarkit.tasks.GenerateLexerTask import org.jetbrains.grammarkit.tasks.GenerateParserTask +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -fun properties(key: String) = providers.gradleProperty(key) - val genRoot = project.file("src/main/gen").also { genRoot -> sourceSets { main { @@ -41,39 +39,44 @@ dependencies { ).forEach { compileOnly(project(it)) } + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = properties("useInstaller").get().toBoolean()) - } + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) + } } tasks { - val generateParserTask = register("generateTT2Parser") { - sourceFile.set(file("grammar/TemplateToolkit.bnf")) - pathToParser.set("/com/perl5/lang/tt2/parser/TemplateToolkitParserGenerated.java") - pathToPsiRoot.set("/com/perl5/lang/tt2/psi") - targetRootOutputDir.set(genRoot) - purgeOldFiles.set(true) + val generateTT2Parser by registering(GenerateParserTask::class) { + sourceFile = file("grammar/TemplateToolkit.bnf") + pathToParser = "/com/perl5/lang/tt2/parser/TemplateToolkitParserGenerated.java" + pathToPsiRoot = "/com/perl5/lang/tt2/psi" + targetRootOutputDir = genRoot + purgeOldFiles = true } - val generateLexerTask = register("generateTT2Lexer") { - sourceFile.set(file("grammar/TemplateToolkit.flex")) - targetOutputDir.set(file("src/main/gen/com/perl5/lang/tt2/lexer/")) - skeleton.set(rootProject.file(properties("lexer_skeleton").get())) - purgeOldFiles.set(true) + val generateTT2Lexer by registering(GenerateLexerTask::class) { + sourceFile = file("grammar/TemplateToolkit.flex") + targetOutputDir = file("src/main/gen/com/perl5/lang/tt2/lexer/") + skeleton = providers.gradleProperty("lexer_skeleton").map { rootProject.file(it) } + purgeOldFiles = true - dependsOn(generateParserTask) + dependsOn(generateTT2Parser) } - rootProject.tasks.findByName("generateLexers")?.dependsOn( - generateLexerTask - ) + rootProject.tasks.named { it == "generateLexers" }.configureEach { + dependsOn(generateTT2Lexer) + } withType { - dependsOn(generateLexerTask) + dependsOn(generateTT2Lexer) } - withType{ - dependsOn(generateLexerTask) + withType { + dependsOn(generateTT2Lexer) } } diff --git a/tt2/frontend/build.gradle.kts b/tt2/frontend/build.gradle.kts index c180e000e6..53fda64f24 100644 --- a/tt2/frontend/build.gradle.kts +++ b/tt2/frontend/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { listOf( @@ -21,8 +22,14 @@ dependencies { ).forEach { compileOnly(project(it)) } + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } } diff --git a/tt2/frontend/split/build.gradle.kts b/tt2/frontend/split/build.gradle.kts index 5793553529..933316df60 100644 --- a/tt2/frontend/split/build.gradle.kts +++ b/tt2/frontend/split/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 Alexandr Evstigneev + * Copyright 2015-2025 Alexandr Evstigneev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType dependencies { listOf( @@ -23,8 +24,14 @@ dependencies { ).forEach { compileOnly(project(it)) } + intellijPlatform { val platformVersionProvider: Provider by rootProject.extra - create("IC", platformVersionProvider.get(), useInstaller = providers.gradleProperty("useInstaller").get().toBoolean()) + + create( + type = provider { IntelliJPlatformType.IntellijIdeaCommunity }, + version = platformVersionProvider, + useInstaller = providers.gradleProperty("useInstaller").map { it.toBoolean() }, + ) } }