User: rednesto Date: 04 Sep 24 17:28 Revision: 5fa4f4eccc0a293abae706332f9aa1e09687d237 Summary: Migrate to the IntelliJ Gradle Plugin 2.0 TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=9643&personal=false Index: build.gradle.kts =================================================================== --- build.gradle.kts (revision fa9b07fdaebe50b4400d2c9cbda0b700ec545f2a) +++ build.gradle.kts (revision 5fa4f4eccc0a293abae706332f9aa1e09687d237) @@ -22,17 +22,19 @@ import org.jetbrains.changelog.Changelog import org.jetbrains.gradle.ext.settings import org.jetbrains.gradle.ext.taskTriggers -import org.jetbrains.intellij.tasks.PrepareSandboxTask +import org.jetbrains.intellij.platform.gradle.TestFrameworkType +import org.jetbrains.intellij.platform.gradle.tasks.PrepareSandboxTask plugins { java groovy idea id(libs.plugins.kotlin.get().pluginId) - id(libs.plugins.intellij.get().pluginId) + id(libs.plugins.intellij.platform.get().pluginId) id(libs.plugins.licenser.get().pluginId) id(libs.plugins.ktlint.get().pluginId) id(libs.plugins.changelog.get().pluginId) + alias(libs.plugins.idea.ext) `mcdev-core` `mcdev-parsing` `mcdev-publishing` @@ -57,6 +59,7 @@ val gradleToolingExtensionJar = tasks.register(gradleToolingExtensionSourceSet.jarTaskName) { from(gradleToolingExtensionSourceSet.output) archiveClassifier.set("gradle-tooling-extension") + exclude("META-INF/plugin.xml") } val templatesSourceSet: SourceSet = sourceSets.create("templates") { @@ -99,6 +102,29 @@ implementation(libs.bundles.fuel) + intellijPlatform { + intellijIdeaCommunity(ideaVersionName) + + // Bundled plugin dependencies + bundledPlugin("com.intellij.java") + bundledPlugin("org.jetbrains.idea.maven") + bundledPlugin("com.intellij.gradle") + bundledPlugin("org.intellij.groovy") + bundledPlugin("ByteCodeViewer") + bundledPlugin("org.intellij.intelliLang") + bundledPlugin("com.intellij.properties") + + // Optional dependencies + bundledPlugin("org.jetbrains.kotlin") + bundledPlugin("org.toml.lang") + bundledPlugin("org.jetbrains.plugins.yaml") + + testFramework(TestFrameworkType.JUnit5) + testFramework(TestFrameworkType.Plugin.Java) + + pluginVerifier() + } + testLibs(libs.test.mockJdk) testLibs(libs.test.mixin) testLibs(libs.test.spigotapi) @@ -123,6 +149,7 @@ gradleToolingExtension(libs.annotations) testImplementation(libs.junit.api) + testCompileOnly(libs.junit.vintage) // Hack to get tests to compile testRuntimeOnly(libs.junit.entine) testRuntimeOnly(libs.junit.platform.launcher) } @@ -160,35 +187,21 @@ path = "changelog.md" } -intellij { - // Bundled plugin dependencies - plugins.addAll( - "java", - "maven", - "gradle", - "Groovy", - "Kotlin", - "ByteCodeViewer", - "org.intellij.intelliLang", - "properties", - "org.jetbrains.plugins.yaml", - // needed dependencies for unit tests - "junit" - ) - plugins.addProvider(libs.versions.pluginToml.map { "org.toml.lang:$it" }) +intellijPlatform { + projectName = "Minecraft Development" - pluginName.set("Minecraft Development") + pluginVerification { + ides { + recommended() -} + } + } +} tasks.patchPluginXml { val changelog = project.changelog changeNotes = changelog.render(Changelog.OutputType.HTML) } -tasks.runPluginVerifier { - ideVersions.addAll("IC-$ideaVersionName") -} - // Compile classes to be loaded into the Gradle VM to Java 5 to match Groovy // This is for maximum compatibility, these classes will be loaded into every Gradle import on all // projects (not just Minecraft), so we don't want to break that with an incompatible class version. @@ -355,16 +368,3 @@ // systemProperty("user.language", "fr") // systemProperty("user.country", "FR") } - -tasks.buildSearchableOptions { - // not working atm - enabled = false -} - -tasks.instrumentCode { - enabled = false -} - -tasks.instrumentedJar { - enabled = false -} Index: buildSrc/src/main/kotlin/mcdev-core.gradle.kts =================================================================== --- buildSrc/src/main/kotlin/mcdev-core.gradle.kts (revision fa9b07fdaebe50b4400d2c9cbda0b700ec545f2a) +++ buildSrc/src/main/kotlin/mcdev-core.gradle.kts (revision 5fa4f4eccc0a293abae706332f9aa1e09687d237) @@ -25,20 +25,20 @@ import java.util.Properties import java.util.zip.ZipFile import org.cadixdev.gradle.licenser.header.HeaderStyle +import org.gradle.accessors.dm.LibrariesForLibs import org.gradle.kotlin.dsl.maven import org.gradle.kotlin.dsl.repositories import org.gradle.kotlin.dsl.withType -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -import org.gradle.accessors.dm.LibrariesForLibs import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinVersion +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jlleitschuh.gradle.ktlint.tasks.BaseKtLintCheckTask plugins { java idea id("org.jetbrains.kotlin.jvm") - id("org.jetbrains.intellij") + id("org.jetbrains.intellij.platform") id("org.cadixdev.licenser") id("org.jlleitschuh.gradle.ktlint") } @@ -95,7 +95,11 @@ includeGroup("net.md-5") } } + + intellijPlatform { + defaultRepositories() -} + } +} val libs = the() dependencies { @@ -108,14 +112,11 @@ testRuntimeOnly(libs.junit.platform.launcher) } -intellij { - // IntelliJ IDEA dependency - version.set(libs.versions.intellij.ide) +intellijPlatform { + sandboxContainer = layout.projectDirectory.dir(".sandbox") - updateSinceUntilBuild.set(true) - downloadSources.set(providers.gradleProperty("downloadIdeaSources").map { it.toBoolean() }) - - sandboxDir.set(layout.projectDirectory.dir(".sandbox").toString()) + instrumentCode = false + buildSearchableOptions = false } license { @@ -129,7 +130,7 @@ idea { module { - excludeDirs.add(file(intellij.sandboxDir.get())) + excludeDirs.add(file(intellijPlatform.sandboxContainer.get())) } } Index: buildSrc/src/main/kotlin/mcdev-publishing.gradle.kts =================================================================== --- buildSrc/src/main/kotlin/mcdev-publishing.gradle.kts (revision fa9b07fdaebe50b4400d2c9cbda0b700ec545f2a) +++ buildSrc/src/main/kotlin/mcdev-publishing.gradle.kts (revision 5fa4f4eccc0a293abae706332f9aa1e09687d237) @@ -19,7 +19,7 @@ */ plugins { - id("org.jetbrains.intellij") + id("org.jetbrains.intellij.platform") } tasks.publishPlugin { Index: gradle/libs.versions.toml =================================================================== --- gradle/libs.versions.toml (revision fa9b07fdaebe50b4400d2c9cbda0b700ec545f2a) +++ gradle/libs.versions.toml (revision 5fa4f4eccc0a293abae706332f9aa1e09687d237) @@ -8,14 +8,15 @@ licenser = "0.6.1" ktlint = "10.3.0" changelog = "2.2.0" -intellij-plugin = "1.17.2" +intellij-plugin = "2.0.1" intellij-ide = "2023.2.2" -pluginToml = "232.8660.88" +idea-ext = "1.1.8" psiPlugin = "232.2-SNAPSHOT" [plugins] kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } -intellij = { id = "org.jetbrains.intellij", version.ref = "intellij-plugin" } +intellij-platform = { id = "org.jetbrains.intellij.platform", version.ref = "intellij-plugin" } +idea-ext = { id = "org.jetbrains.gradle.plugin.idea-ext", version.ref = "idea-ext" } licenser = { id = "org.cadixdev.licenser", version.ref = "licenser" } ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint" } changelog = { id = "org.jetbrains.changelog", version.ref = "changelog" } @@ -25,7 +26,7 @@ kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" } kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" } -intellij-plugin = { module = "org.jetbrains.intellij:org.jetbrains.intellij.gradle.plugin", version.ref = "intellij-plugin" } +intellij-plugin = { module = "org.jetbrains.intellij.platform:org.jetbrains.intellij.platform.gradle.plugin", version.ref = "intellij-plugin" } licenser-plugin = { module = "org.cadixdev.licenser:org.cadixdev.licenser.gradle.plugin", version.ref = "licenser" } ktlint-plugin = { module = "org.jlleitschuh.gradle.ktlint:org.jlleitschuh.gradle.ktlint.gradle.plugin", version.ref = "ktlint" } changelog-plugin = { module = "org.jetbrains.changelog:org.jetbrains.changelog.gradle.plugin", version.ref = "changelog" } @@ -68,6 +69,7 @@ junit-api = { module = "org.junit.jupiter:junit-jupiter-api", version.ref = "junit" } junit-entine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "junit" } +junit-vintage = { module = "org.junit.vintage:junit-vintage-engine", version.ref = "junit" } junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher", version.ref = "junit-platform" } mixinExtras-common = "io.github.llamalad7:mixinextras-common:0.5.0-beta.1" Index: obfuscation-explorer/build.gradle.kts =================================================================== --- obfuscation-explorer/build.gradle.kts (revision fa9b07fdaebe50b4400d2c9cbda0b700ec545f2a) +++ obfuscation-explorer/build.gradle.kts (revision 5fa4f4eccc0a293abae706332f9aa1e09687d237) @@ -18,12 +18,14 @@ * along with this program. If not, see . */ +import org.jetbrains.intellij.platform.gradle.TestFrameworkType + plugins { java groovy idea id(libs.plugins.kotlin.get().pluginId) - id(libs.plugins.intellij.get().pluginId) + id(libs.plugins.intellij.platform.get().pluginId) id(libs.plugins.licenser.get().pluginId) id(libs.plugins.ktlint.get().pluginId) `mcdev-core` @@ -43,12 +45,23 @@ group = "io.mcdev.obfex" version = "$ideaVersionName-$coreVersion" -intellij { - plugins.addProvider(libs.versions.psiPlugin.map { "PsiViewer:$it" }) +intellijPlatform { + projectName = "Obfuscation Explorer" +} - pluginName.set("Obfuscation Explorer") +dependencies { + intellijPlatform { + intellijIdeaCommunity(ideaVersionName) + + plugin(libs.versions.psiPlugin.map { "PsiViewer:$it" }) + + testFramework(TestFrameworkType.JUnit5) + testFramework(TestFrameworkType.Platform) -} + } + testCompileOnly(libs.junit.vintage) // Hack to get tests to compile and run +} + val generateSrgLexer by lexer("SrgLexer", "io/mcdev/obfex/formats/srg/gen") val generateSrgParser by parser("SrgParser", "io/mcdev/obfex/formats/srg/gen") @@ -107,10 +120,6 @@ // Remove gen directory on clean tasks.clean { delete(generate) } -tasks.buildSearchableOptions { - enabled = false -} - license { tasks { register("gradle") { Index: src/main/kotlin/creator/custom/ResourceBundleTranslator.kt =================================================================== --- src/main/kotlin/creator/custom/ResourceBundleTranslator.kt (revision fa9b07fdaebe50b4400d2c9cbda0b700ec545f2a) +++ src/main/kotlin/creator/custom/ResourceBundleTranslator.kt (revision 5fa4f4eccc0a293abae706332f9aa1e09687d237) @@ -31,11 +31,13 @@ abstract val bundle: ResourceBundle? - fun translate(key: @NonNls String): @Nls String { + @Nls + fun translate(@NonNls key: String): String { return translateOrNull(key) ?: StringUtil.escapeMnemonics(key) } - fun translateOrNull(key: @NonNls String): @Nls String? { + @Nls + fun translateOrNull(@NonNls key: String): String? { if (bundle != null) { try { return bundle!!.getString(key) Index: src/main/kotlin/facet/MinecraftFacet.kt =================================================================== --- src/main/kotlin/facet/MinecraftFacet.kt (revision fa9b07fdaebe50b4400d2c9cbda0b700ec545f2a) +++ src/main/kotlin/facet/MinecraftFacet.kt (revision 5fa4f4eccc0a293abae706332f9aa1e09687d237) @@ -28,6 +28,7 @@ import com.demonwav.mcdev.util.SourceType import com.demonwav.mcdev.util.filterNotNull import com.demonwav.mcdev.util.mapFirstNotNull +import com.demonwav.mcdev.util.runWriteActionAndWait import com.google.common.collect.HashMultimap import com.intellij.facet.Facet import com.intellij.facet.FacetManager @@ -36,7 +37,6 @@ import com.intellij.ide.projectView.ProjectView import com.intellij.openapi.application.runReadAction import com.intellij.openapi.application.runWriteAction -import com.intellij.openapi.application.runWriteActionAndWait import com.intellij.openapi.module.Module import com.intellij.openapi.module.ModuleGrouper import com.intellij.openapi.module.ModuleManager Index: src/main/kotlin/platform/mcp/fabricloom/FabricLoomDecompileSourceProvider.kt =================================================================== --- src/main/kotlin/platform/mcp/fabricloom/FabricLoomDecompileSourceProvider.kt (revision fa9b07fdaebe50b4400d2c9cbda0b700ec545f2a) +++ src/main/kotlin/platform/mcp/fabricloom/FabricLoomDecompileSourceProvider.kt (revision 5fa4f4eccc0a293abae706332f9aa1e09687d237) @@ -24,8 +24,8 @@ import com.demonwav.mcdev.platform.forge.inspections.sideonly.SideOnlyUtil import com.demonwav.mcdev.util.findModule import com.demonwav.mcdev.util.runGradleTaskWithCallback +import com.demonwav.mcdev.util.runWriteActionAndWait import com.intellij.codeInsight.AttachSourcesProvider -import com.intellij.openapi.application.runWriteActionAndWait import com.intellij.openapi.externalSystem.task.TaskCallback import com.intellij.openapi.roots.LibraryOrderEntry import com.intellij.openapi.roots.OrderRootType Index: src/main/kotlin/util/utils.kt =================================================================== --- src/main/kotlin/util/utils.kt (revision fa9b07fdaebe50b4400d2c9cbda0b700ec545f2a) +++ src/main/kotlin/util/utils.kt (revision 5fa4f4eccc0a293abae706332f9aa1e09687d237) @@ -27,6 +27,7 @@ import com.intellij.openapi.application.AppUIExecutor import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ModalityState +import com.intellij.openapi.application.WriteAction import com.intellij.openapi.application.runReadAction import com.intellij.openapi.command.WriteCommandAction import com.intellij.openapi.diagnostic.Logger @@ -41,6 +42,7 @@ import com.intellij.openapi.util.Computable import com.intellij.openapi.util.Condition import com.intellij.openapi.util.Ref +import com.intellij.openapi.util.ThrowableComputable import com.intellij.openapi.util.text.StringUtil import com.intellij.pom.java.LanguageLevel import com.intellij.profile.codeInspection.InspectionProfileManager @@ -109,6 +111,10 @@ return AppUIExecutor.onUiThread().submit(block).get() } +inline fun runWriteActionAndWait(crossinline action: () -> T): T { + return WriteAction.computeAndWait(ThrowableComputable { action() }) +} + inline fun PsiFile.runWriteAction(crossinline func: () -> T) = applyWriteAction { func() } Index: src/main/kotlin/yaml/PluginYmlInspection.kt =================================================================== --- src/main/kotlin/yaml/PluginYmlInspection.kt (revision fa9b07fdaebe50b4400d2c9cbda0b700ec545f2a) +++ src/main/kotlin/yaml/PluginYmlInspection.kt (revision 5fa4f4eccc0a293abae706332f9aa1e09687d237) @@ -39,7 +39,8 @@ class PluginYmlInspection : LocalInspectionTool() { - override fun getStaticDescription(): @Nls String? = "Reports issues in Bukkit-like plugin.yml files" + @Nls + override fun getStaticDescription(): String? = "Reports issues in Bukkit-like plugin.yml files" override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor { val module = holder.file.findModule() ?: return PsiElementVisitor.EMPTY_VISITOR