From 1af8ec14aba618e246be1a8304404b56ca0b59bf Mon Sep 17 00:00:00 2001 From: Sascha Lisson Date: Sat, 25 Oct 2025 18:15:10 +0200 Subject: [PATCH 01/11] feat: migration to MPS 2025.2 --- .github/workflows/build.yaml | 2 +- .github/workflows/mps-compatibility.yaml | 4 +- .github/workflows/publish.yml | 2 +- README.md | 2 +- build.gradle.kts | 11 +- buildSrc/build.gradle.kts | 1 + .../src/main/kotlin/org/modelix/CopyMps.kt | 28 ++++- editor-common-mps/build.gradle.kts | 55 ++++---- gradle/libs.versions.toml | 8 +- gradle/wrapper/gradle-wrapper.jar | Bin 43705 -> 43764 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 4 +- gradlew.bat | 4 +- interpreter-vm/build.gradle.kts | 2 +- kernelf-editor/build.gradle.kts | 4 +- kernelf-ssr-demo/build.gradle.kts | 2 +- mps-image-editor-server/build.gradle.kts | 67 +++++----- .../main/kotlin/svg/plugin/RenderSession.kt | 18 +-- parser/build.gradle.kts | 2 +- .../build.gradle.kts | 2 +- .../build.gradle.kts | 117 +++++------------- projectional-editor-ssr-mps/build.gradle.kts | 59 ++++----- .../build.gradle.kts | 2 +- projectional-editor/build.gradle.kts | 2 +- react-ssr-mps/build.gradle.kts | 65 +++++----- react-ssr-server/build.gradle.kts | 2 +- reverse-mpsadapters/build.gradle.kts | 2 +- 27 files changed, 223 insertions(+), 246 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 081a09bf..4318f326 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -31,7 +31,7 @@ jobs: - name: Build env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: ./gradlew build -PciBuild=true -Pgpr.token=${{ secrets.GITHUB_TOKEN }} -Pmps.version.major=2023.3 + run: ./gradlew build -PciBuild=true -Pgpr.token=${{ secrets.GITHUB_TOKEN }} -Pmps.version.major=2025.2 - name: Upload artifact uses: actions/upload-pages-artifact@v4 with: diff --git a/.github/workflows/mps-compatibility.yaml b/.github/workflows/mps-compatibility.yaml index 40b322f6..1e52c432 100644 --- a/.github/workflows/mps-compatibility.yaml +++ b/.github/workflows/mps-compatibility.yaml @@ -16,9 +16,7 @@ jobs: matrix: version: # also adjust the compatibility version range of the MPS plugin - - "2023.2" - - "2023.3" -# - "2024.1" + - "2025.2" steps: - uses: actions/checkout@v5 # - uses: actions/setup-node@v3 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index bf9c7b92..5a61ec50 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -41,4 +41,4 @@ jobs: -Pgpr.key=${{ secrets.GITHUB_TOKEN }} -Pgpr.token=${{ secrets.GITHUB_TOKEN }} -Pgpr.universalkey=${{ secrets.GHP_UNIVERSAL_PUBLISH_TOKEN }} - -Pmps.version.major=2023.3 + -Pmps.version.major=2025.2 diff --git a/README.md b/README.md index 9e23ea04..e01af824 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ See also https://www.jetbrains.com/help/idea/directories-used-by-the-ide-to-stor You may have to create the plugins folder if it doesn't exist yet. -Currently, these MPS versions are supported: 2023.2, 2023.3 +Currently, these MPS versions are supported: 2025.2 # Usage diff --git a/build.gradle.kts b/build.gradle.kts index 652e8caa..56aeacd7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,4 +1,4 @@ -import org.jetbrains.intellij.tasks.BuildPluginTask +import org.jetbrains.intellij.platform.gradle.tasks.BuildPluginTask import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformPluginWrapper @@ -21,7 +21,8 @@ plugins { id("com.dorongold.task-tree") version "4.0.1" alias(libs.plugins.kotlin.multiplatform) apply false alias(libs.plugins.kotlin.serialization) apply false - id("org.jetbrains.intellij") version "1.17.4" apply false + alias(libs.plugins.intellij2) apply false + alias(libs.plugins.intellij2.migration) apply false alias(libs.plugins.npm.publish) apply false } @@ -116,7 +117,7 @@ subprojects { plugins.withType { extensions.configure { - jvmToolchain(17) + jvmToolchain(21) sourceSets.all { if (!name.lowercase().contains("test")) { languageSettings { @@ -129,7 +130,7 @@ subprojects { plugins.withType { extensions.configure { - jvmToolchain(17) + jvmToolchain(21) sourceSets.all { if (!name.lowercase().contains("test")) { languageSettings { @@ -151,7 +152,7 @@ rootProject.plugins.withType(org.jetbrains.kotlin.gradle.targets.js.yarn.YarnPlu copyMps() // make all 'packJsPackage' tasks depend on all 'kotlinNodeJsSetup' tasks, because gradle complained about this being missing -tasks.register("setupNodeEverywhere") { +tasks.register("setupNodeEverywhere") { dependsOn(":kernelf-apigen:kotlinNodeJsSetup") dependsOn(":kernelf-editor:kotlinNodeJsSetup") dependsOn(":parser:kotlinNodeJsSetup") diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 80bf5350..b42f081d 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -4,6 +4,7 @@ plugins { dependencies { implementation(kotlin("stdlib")) + implementation("com.google.code.gson:gson:2.13.2") } repositories { diff --git a/buildSrc/src/main/kotlin/org/modelix/CopyMps.kt b/buildSrc/src/main/kotlin/org/modelix/CopyMps.kt index 24ecb435..049ef729 100644 --- a/buildSrc/src/main/kotlin/org/modelix/CopyMps.kt +++ b/buildSrc/src/main/kotlin/org/modelix/CopyMps.kt @@ -16,6 +16,8 @@ package org.modelix +import com.google.gson.JsonArray +import com.google.gson.JsonParser import org.gradle.api.Project import org.gradle.api.artifacts.ModuleDependency import org.gradle.api.file.Directory @@ -24,12 +26,13 @@ import org.gradle.kotlin.dsl.dependencies import org.gradle.kotlin.dsl.exclude import java.io.File import java.util.zip.ZipInputStream +import java.util.zip.ZipOutputStream val Project.mpsMajorVersion: String get() { if (project != rootProject) return rootProject.mpsMajorVersion return project.findProperty("mps.version.major")?.toString()?.takeIf { it.isNotEmpty() } ?: project.findProperty("mps.version")?.toString()?.takeIf { it.isNotEmpty() }?.replace(Regex("""(20\d\d\.\d+).*"""), "$1") - ?: "2023.2" + ?: "2025.2" } val Project.mpsVersion: String get() { @@ -48,6 +51,8 @@ val Project.mpsVersion: String get() { "2023.2" to "2023.2.2", "2023.3" to "2023.3.2", "2024.1" to "2024.1.1", + "2025.1" to "2025.1.1", + "2025.2" to "2025.2.1", )[it], ) { "Unknown MPS version: $it" } } @@ -136,6 +141,27 @@ fun Project.copyMps(): File { buildTxt.writeText("$prefix$buildNumber") } + // fix product-info.json + val productInfoFile = mpsHomeDir.get().asFile.resolve("product-info.json") + val productInfo = productInfoFile.takeIf { it.exists() }?.reader()?.use { reader -> + JsonParser.parseReader(reader) + }?.asJsonObject + if (productInfo != null) { + if (!productInfo.has("bundledPlugins")) productInfo.add("bundledPlugins", JsonArray()) + if (!productInfo.has("modules")) productInfo.add("modules", JsonArray()) + if (!productInfo.has("layout")) productInfo.add("layout", JsonArray()) + productInfoFile.writeText(productInfo.toString()) + } + + // add missing module-descriptors.jar + val moduleDescriptorsFile = mpsHomeDir.get().asFile.resolve("modules").resolve("module-descriptors.jar") + if (!moduleDescriptorsFile.exists()) { + moduleDescriptorsFile.parentFile.mkdirs() + moduleDescriptorsFile.outputStream().use { fos -> + ZipOutputStream(fos).use {} + } + } + println("Extracting MPS done.") return mpsHome } diff --git a/editor-common-mps/build.gradle.kts b/editor-common-mps/build.gradle.kts index 994ac194..95be9907 100644 --- a/editor-common-mps/build.gradle.kts +++ b/editor-common-mps/build.gradle.kts @@ -1,4 +1,4 @@ -import org.jetbrains.intellij.tasks.PrepareSandboxTask +import org.jetbrains.intellij.platform.gradle.tasks.PrepareSandboxTask import org.jetbrains.kotlin.gradle.dsl.KotlinVersion import org.modelix.buildtools.KnownModuleIds import org.modelix.buildtools.buildStubsSolutionJar @@ -8,11 +8,17 @@ import org.modelix.mpsPluginsDir plugins { kotlin("jvm") - id("org.jetbrains.intellij") + alias(libs.plugins.intellij2) } kotlin { - jvmToolchain(17) + jvmToolchain(21) +} + +repositories { + intellijPlatform { + defaultRepositories() + } } dependencies { @@ -32,13 +38,23 @@ dependencies { api(libs.modelix.mps.model.adapters, excludeMPSLibraries) api(libs.modelix.model.api.gen.runtime, excludeMPSLibraries) api(project(":reverse-mpsadapters"), excludeMPSLibraries) + + intellijPlatform { + local(mpsHomeDir) + } } -// Configure Gradle IntelliJ Plugin -// Read more: https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html -intellij { - localPath = mpsHomeDir.map { it.asFile.absolutePath } +intellijPlatform { instrumentCode = false + buildSearchableOptions = false + pluginConfiguration { + id = "org.modelix.mps.editor.common" + name = "Shared Libraries for Other Modelix Plugins" +// ideaVersion { +// sinceBuild = "$mpsPlatformVersion" +// untilBuild = "$mpsPlatformVersion.*" +// } + } } kotlin { @@ -49,19 +65,6 @@ kotlin { } tasks { - patchPluginXml { - sinceBuild.set("232") - untilBuild.set("233.*") - } - - buildSearchableOptions { - enabled = false - } - - runIde { - autoReloadPlugins.set(true) - } - val pluginDir = mpsPluginsDir if (pluginDir != null) { val installMpsPlugin = register("installMpsPlugin") { @@ -69,25 +72,25 @@ tasks { from(project.layout.buildDirectory.dir("idea-sandbox/plugins/${project.name}")) into(pluginDir.resolve(project.name)) } - register("installMpsDevPlugins") { + register("installMpsDevPlugins") { dependsOn(installMpsPlugin) } } withType(PrepareSandboxTask::class.java) { - intoChild(pluginName.map { "$it/META-INF" }) + rootSpec.addChild().into(pluginName.map { "$it/META-INF" }) .from(project.layout.projectDirectory.file("src/main/resources/META-INF")) .exclude("plugin.xml") - intoChild(pluginName.map { "$it/META-INF" }) - .from(patchPluginXml.flatMap { it.outputFiles }) + rootSpec.addChild().into(pluginName.map { "$it/META-INF" }) + .from(patchPluginXml.flatMap { it.outputFile }) doLast { val ownJar: File = pluginJar.get().asFile - val runtimeJars = configurations.getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME).resolvedConfiguration.files + ownJar + val runtimeJars = configurations.getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME).incoming.files + ownJar buildStubsSolutionJar { solutionName("org.modelix.mps.editor.common.stubs") solutionId("208eaf68-fd3a-497a-a4b6-4923ff457c3b") - outputFolder(defaultDestinationDir.get().resolve(project.name).resolve("languages")) + outputFolder(defaultDestinationDirectory.get().asFile.resolve(project.name).resolve("languages")) runtimeJars.forEach { javaJar(it.name) // kotlinJar(it.name) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5468377c..e1131c32 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,11 +7,15 @@ modelix-mps-buildtools = { id = "org.modelix.mps.build-tools", version.ref = "mo kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } +intellij1 = { id = "org.jetbrains.intellij", version = "1.17.4" } +intellij2 = { id = "org.jetbrains.intellij.platform", version.ref = "intellijGradle" } +intellij2-migration = { id = "org.jetbrains.intellij.platform.migration", version.ref = "intellijGradle" } [versions] -modelixCore = "16.3.0" +modelixCore = "16.4.0" modelixBuildtools="2.0.1" kotlin = "2.2.21" +intellijGradle = "2.10.2" [libraries] modelix-model-api = { group = "org.modelix", name = "model-api", version.ref = "modelixCore" } @@ -27,3 +31,5 @@ modelix-build-tools-lib = { group = "org.modelix.mps", name = "build-tools-lib", kotlin-logging = { group = "io.github.oshai", name = "kotlin-logging", version = "7.0.13" } slf4j-api = { group = "org.slf4j", name = "slf4j-api", version = "2.0.17" } kotlin-collections-immutable = { group = "org.jetbrains.kotlinx", name = "kotlinx-collections-immutable", version = "0.4.0" } +mps = { group = "com.jetbrains", name = "mps", version = "2025.2.1" } + diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 9bbc975c742b298b441bfb90dbc124400a3751b9..1b33c55baabb587c669f562ae36f953de2481846 100644 GIT binary patch delta 642 zcmdmamFde>rVZJA^}0Q$xegf!xPEW^+5YDM%iT2bEgct9o+jH~+sJas#HZ=szO|** z=Pj=X_vx?W&DSwKck|WWn~hffsvnQ+42*W$b7b0$SCcOoZ`{W{^$^pk;4>8-A*-)$ z?n(Po`1$6Jn_u?t-L+tsPyZ2#X}8T6OS8pAU;kdgd+_Hw4z4TW0p9E!T+=f7-c&O% zFic^X{7^$?^Ho04eona9n#mGMxKhA=~8B%JN`M zMhm5wc-2v)$``sY$!Q`9xiU@DhI73ZxiGEKg>yIPs)NmWwMdF-ngLXpZSqV5ez36n zVkxF2rjrjWR+_xr6e6@_u@s~2uv{9vi*1pj2)BjFD+-%@&pRVP1f{O1glxTOp2-62Ph;v z`N1+vCd)9ea)af*Ol1*JCfnp$%Uu}%OuoN7g2}3C@`L5FlP#(sA=|h@iixuZC?qp^ z=L$=v$ZoI}|87Wh=&h7udff{aieKr*l+zDp?pf)_bbRvUf>kn;HCDMXNlgbbo!QRK I1x7am0No)LiU0rr delta 584 zcmexzm1*ZyrVZJAexH5Moc8h7)w{^+t*dqJ%=yhh23L$9JpFV=_k`zJ-?Q4DI*eSe z+ES)HSrVnWLtJ&)lO%hRkV9zl5qqWRt0e;bb zPPo`)y?HTAyZI&u&X<|2$FDHCf4;!v8}p=?Tm`^F0`u(|1ttf~&t$qP3KUSD>@TJQ zRwJ}Pim6NzEc8KA6)e;S6gs8=7IIL8sQL*MYEuRYO;Uj<%3UbMbV&^&!Zvx+LKmjT z8Zch6rYP7Tw?$Hn(UTJwWiS=$f{lB(C=e*%usDV})0AQIK~sat=ND@+Gg*Pyij!rR z*fa02W|%BsV++>4W{DKDGSIUEHd2$P+8ct!RF+CHDowUuTEZOZ%rJSQv*qOXOSPDN zT|sP-$p*_3ncsWB*qoD7JQcyZ9xan%cJP6Tb4-?AZpr*F6v98hoNaPJm@HV`yya5N z))6pqFXn@}P(3T0nEzM8*c_9KtE9o|_pFd&K35GBXP^9Kg(b6GH-z8S4GDzIl~T+b zdLd#meKKHu$5u))8cu$=GKINkGDPOUD)!0$C(BH(U!}!-e;Q0ok8Sc?V1zRO04>ts AA^-pY diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d4081da4..a35649f5 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index faf93008..23d15a93 100755 --- a/gradlew +++ b/gradlew @@ -114,7 +114,7 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar +CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -213,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index 9d21a218..db3a6ac2 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -70,11 +70,11 @@ goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar +set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell diff --git a/interpreter-vm/build.gradle.kts b/interpreter-vm/build.gradle.kts index f1026fd7..155b9e4c 100644 --- a/interpreter-vm/build.gradle.kts +++ b/interpreter-vm/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } kotlin { - jvmToolchain(17) + jvmToolchain(21) jvm() js(IR) { browser {} diff --git a/kernelf-editor/build.gradle.kts b/kernelf-editor/build.gradle.kts index 3bc3f597..bb33d31b 100644 --- a/kernelf-editor/build.gradle.kts +++ b/kernelf-editor/build.gradle.kts @@ -20,7 +20,7 @@ val generatorOutputDir = file("src/commonMain/kotlin_gen") val tsGeneratorOutputDir = file("../kernelf-angular-demo/src/gen") kotlin { - jvmToolchain(17) + jvmToolchain(21) jvm() js(IR) { browser { @@ -153,7 +153,7 @@ tasks.named("packJsPackage") { val productionLibraryByKotlinOutputDirectory = layout.buildDirectory.dir("compileSync/js/main/productionLibrary/kotlin") val preparedProductionLibraryOutputDirectory = layout.buildDirectory.dir("npmPublication") -val patchTypesScriptInProductionLibrary = tasks.register("patchTypesScriptInProductionLibrary") { +val patchTypesScriptInProductionLibrary = tasks.register("patchTypesScriptInProductionLibrary") { dependsOn("compileProductionLibraryKotlinJs") inputs.dir(productionLibraryByKotlinOutputDirectory) outputs.dir(preparedProductionLibraryOutputDirectory) diff --git a/kernelf-ssr-demo/build.gradle.kts b/kernelf-ssr-demo/build.gradle.kts index a6608ff0..e0fc777e 100644 --- a/kernelf-ssr-demo/build.gradle.kts +++ b/kernelf-ssr-demo/build.gradle.kts @@ -23,5 +23,5 @@ application { } kotlin { - jvmToolchain(17) + jvmToolchain(21) } diff --git a/mps-image-editor-server/build.gradle.kts b/mps-image-editor-server/build.gradle.kts index e5081a8d..12019717 100644 --- a/mps-image-editor-server/build.gradle.kts +++ b/mps-image-editor-server/build.gradle.kts @@ -1,4 +1,4 @@ -import org.jetbrains.intellij.tasks.PrepareSandboxTask +import org.jetbrains.intellij.platform.gradle.tasks.PrepareSandboxTask import org.jetbrains.kotlin.gradle.dsl.KotlinVersion import org.modelix.excludeMPSLibraries import org.modelix.mpsHomeDir @@ -6,11 +6,17 @@ import org.modelix.mpsPluginsDir plugins { kotlin("jvm") - id("org.jetbrains.intellij") + alias(libs.plugins.intellij2) +} + +repositories { + intellijPlatform { + defaultRepositories() + } } kotlin { - jvmToolchain(17) + jvmToolchain(21) compilerOptions { apiVersion = KotlinVersion.KOTLIN_1_8 } @@ -20,40 +26,27 @@ dependencies { compileOnly(kotlin("stdlib")) compileOnly(project(":editor-common-mps")) implementation(libs.slf4j.api, excludeMPSLibraries) + intellijPlatform { + local(mpsHomeDir) + localPlugin(project(":editor-common-mps")) + } + compileOnly( + fileTree(mpsHomeDir).matching { + include("lib/*.jar") + }, + ) } -// Configure Gradle IntelliJ Plugin -// Read more: https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html -intellij { - localPath = mpsHomeDir.map { it.asFile.absolutePath } +intellijPlatform { instrumentCode = false - plugins.set(listOf(project(":editor-common-mps"))) + buildSearchableOptions = false + pluginConfiguration { + id = "org.modelix.mps.editor.image" + name = "Image Based Web Editor for MPS" + } } tasks { - patchPluginXml { - sinceBuild.set("232") - untilBuild.set("233.*") - } - - buildSearchableOptions { - enabled = false - } - -// signPlugin { -// certificateChain.set(System.getenv("CERTIFICATE_CHAIN")) -// privateKey.set(System.getenv("PRIVATE_KEY")) -// password.set(System.getenv("PRIVATE_KEY_PASSWORD")) -// } -// -// publishPlugin { -// token.set(System.getenv("PUBLISH_TOKEN")) -// } - - runIde { - autoReloadPlugins.set(true) - } - val pluginDir = mpsPluginsDir if (pluginDir != null) { val installMpsPlugin = register("installMpsPlugin") { @@ -61,21 +54,21 @@ tasks { from(project.layout.buildDirectory.dir("idea-sandbox/plugins/${project.name}")) into(pluginDir.resolve(project.name)) } - register("installMpsDevPlugins") { + register("installMpsDevPlugins") { dependsOn(installMpsPlugin) } } withType(PrepareSandboxTask::class.java) { - intoChild(pluginName.map { "$it/META-INF" }) + rootSpec.addChild().into(pluginName.map { "$it/META-INF" }) .from(project.layout.projectDirectory.file("src/main/resources/META-INF")) .exclude("plugin.xml") - intoChild(pluginName.map { "$it/META-INF" }) - .from(patchPluginXml.flatMap { it.outputFiles }) + rootSpec.addChild().into(pluginName.map { "$it/META-INF" }) + .from(patchPluginXml.flatMap { it.outputFile }) doLast { - val jarsInBasePlugin = defaultDestinationDir.get().resolve(project(":editor-common-mps").name).resolve("lib").list()?.toHashSet() ?: emptySet() - defaultDestinationDir.get().resolve(project.name).resolve("lib").listFiles()?.forEach { + val jarsInBasePlugin = defaultDestinationDirectory.get().asFile.resolve(project(":editor-common-mps").name).resolve("lib").list()?.toHashSet() ?: emptySet() + defaultDestinationDirectory.get().asFile.resolve(project.name).resolve("lib").listFiles()?.forEach { if (jarsInBasePlugin.contains(it.name)) it.delete() } } diff --git a/mps-image-editor-server/src/main/kotlin/svg/plugin/RenderSession.kt b/mps-image-editor-server/src/main/kotlin/svg/plugin/RenderSession.kt index 442caf98..82177b14 100644 --- a/mps-image-editor-server/src/main/kotlin/svg/plugin/RenderSession.kt +++ b/mps-image-editor-server/src/main/kotlin/svg/plugin/RenderSession.kt @@ -1,11 +1,9 @@ package svg.plugin -/*Generated by MPS */ - import com.intellij.ide.ProhibitAWTEvents import com.intellij.openapi.actionSystem.ActionPlaces +import com.intellij.openapi.actionSystem.ActionUiKind import com.intellij.openapi.actionSystem.AnActionEvent -import com.intellij.openapi.actionSystem.AnActionResult import com.intellij.openapi.actionSystem.DataContext import com.intellij.openapi.actionSystem.ex.ActionManagerEx import com.intellij.openapi.actionSystem.ex.ActionUtil @@ -13,6 +11,7 @@ import com.intellij.openapi.application.EDT import com.intellij.openapi.application.TransactionGuard import com.intellij.openapi.application.TransactionGuardImpl import com.intellij.openapi.keymap.KeymapManager +import com.intellij.openapi.util.SystemInfo import io.ktor.server.websocket.DefaultWebSocketServerSession import io.ktor.websocket.send import jetbrains.mps.intentions.IntentionsManager @@ -28,7 +27,6 @@ import jetbrains.mps.openapi.editor.update.UpdaterListenerAdapter import jetbrains.mps.openapi.intentions.IntentionExecutable import jetbrains.mps.project.Project import jetbrains.mps.util.Pair -import jetbrains.mps.util.SystemInfo import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.cancel @@ -70,6 +68,7 @@ import kotlin.math.roundToInt private val LOG = io.github.oshai.kotlinlogging.KotlinLogging.logger { } +@Suppress("UnstableApiUsage") class RenderSession @JvmOverloads constructor( private val project: Project, private val websocketSession: DefaultWebSocketServerSession, @@ -564,7 +563,7 @@ class RenderSession @JvmOverloads constructor( for (actionId in actionIds) { val action = actionManager.getAction(actionId) ?: continue val actionEvent = - AnActionEvent.createFromAnAction(action, keyEvent, ActionPlaces.MAIN_MENU, dataContext) + AnActionEvent.createEvent(action, dataContext, null, ActionPlaces.MAIN_MENU, ActionUiKind.NONE, keyEvent) ProhibitAWTEvents.start("update").use { token -> (TransactionGuard.getInstance() as TransactionGuardImpl).performUserActivity { @Suppress("removal") @@ -580,14 +579,7 @@ class RenderSession @JvmOverloads constructor( continue } - actionManager.fireBeforeActionPerformed(action, actionEvent) - (TransactionGuard.getInstance() as TransactionGuardImpl).performUserActivity { -// AuthorOverride.AUTHOR.runWith( -// user, -// Runnable { action.actionPerformed(actionEvent) }) - action.actionPerformed(actionEvent) - } - actionManager.fireAfterActionPerformed(action, actionEvent, AnActionResult.PERFORMED) + actionManager.performWithActionCallbacks(action, actionEvent) {} keyEvent.consume() LOG.debug { "processed by " + actionEvent.presentation.text } break diff --git a/parser/build.gradle.kts b/parser/build.gradle.kts index dc0968f4..3122ce45 100644 --- a/parser/build.gradle.kts +++ b/parser/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } kotlin { - jvmToolchain(17) + jvmToolchain(21) jvm() js(IR) { browser {} diff --git a/projectional-editor-ssr-common/build.gradle.kts b/projectional-editor-ssr-common/build.gradle.kts index 05b5d32d..ac032e2a 100644 --- a/projectional-editor-ssr-common/build.gradle.kts +++ b/projectional-editor-ssr-common/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } kotlin { - jvmToolchain(17) + jvmToolchain(21) jvm() js(IR) { browser {} diff --git a/projectional-editor-ssr-mps-languages/build.gradle.kts b/projectional-editor-ssr-mps-languages/build.gradle.kts index b2b47a4f..83562e8e 100644 --- a/projectional-editor-ssr-mps-languages/build.gradle.kts +++ b/projectional-editor-ssr-mps-languages/build.gradle.kts @@ -1,3 +1,4 @@ +import org.jetbrains.intellij.platform.gradle.tasks.PrepareSandboxTask import org.jetbrains.kotlin.gradle.dsl.KotlinVersion import org.modelix.excludeMPSLibraries import org.modelix.mpsHomeDir @@ -5,11 +6,17 @@ import org.modelix.mpsPluginsDir plugins { kotlin("jvm") - id("org.jetbrains.intellij") + alias(libs.plugins.intellij2) +} + +repositories { + intellijPlatform { + defaultRepositories() + } } kotlin { - jvmToolchain(17) + jvmToolchain(21) compilerOptions { apiVersion = KotlinVersion.KOTLIN_1_8 } @@ -19,90 +26,30 @@ dependencies { testImplementation(project(":projectional-editor-ssr-mps"), excludeMPSLibraries) testImplementation(project(":projectional-editor"), excludeMPSLibraries) testImplementation(libs.modelix.mps.model.adapters, excludeMPSLibraries) + intellijPlatform { + local(mpsHomeDir) +// bundledPlugin("jetbrains.mps.core") +// bundledPlugin("jetbrains.mps.kotlin") + localPlugin(project(":editor-common-mps")) + localPlugin(project(":projectional-editor-ssr-mps")) + } + compileOnly( + fileTree(mpsHomeDir).matching { + include("lib/*.jar") + }, + ) } -intellij { - localPath = mpsHomeDir.map { it.asFile.absolutePath } +intellijPlatform { instrumentCode = false - plugins = listOf( - project(":projectional-editor-ssr-mps"), - project(":editor-common-mps"), - ) + listOf( -// "Git4Idea", -// "Subversion", -// "com.intellij.copyright", -// "com.intellij.laf.macos", -// "com.intellij.platform.images", -// "com.intellij.properties", -// "com.intellij.properties.bundle.editor", -// "com.intellij.tasks", -// "com.jetbrains.changeReminder", -// "jetbrains.jetpad", -// "jetbrains.mps.build", -// "jetbrains.mps.build.ui", -// "jetbrains.mps.console", - "jetbrains.mps.core", -// "jetbrains.mps.debugger.api", -// "jetbrains.mps.debugger.java", -// "jetbrains.mps.editor.contextActions", -// "jetbrains.mps.editor.diagram", -// "jetbrains.mps.editor.spellcheck", -// "jetbrains.mps.editor.tooltips", -// "jetbrains.mps.execution.api", -// "jetbrains.mps.execution.configurations", -// "jetbrains.mps.execution.languages", -// "jetbrains.mps.git4idea.stubs", -// "jetbrains.mps.ide", -// "jetbrains.mps.ide.devkit", -// "jetbrains.mps.ide.httpsupport", -// "jetbrains.mps.ide.java", -// "jetbrains.mps.ide.make", -// "jetbrains.mps.ide.memtool", -// "jetbrains.mps.ide.migration.workbench", -// "jetbrains.mps.ide.modelchecker", -// "jetbrains.mps.ide.mpsmigration", - "jetbrains.mps.kotlin", -// "jetbrains.mps.navbar", -// "jetbrains.mps.rcp", -// "jetbrains.mps.samples", -// "jetbrains.mps.testing", -// "jetbrains.mps.tool.make", -// "jetbrains.mps.trove", -// "jetbrains.mps.vcs", -// "org.intellij.plugins.markdown", -// "org.jetbrains.plugins.github", -// "org.jetbrains.settingsRepository", - -// "com.intellij", -// "com.jetbrains.sh", -// "org.jetbrains.plugins.terminal", - ) + buildSearchableOptions = false + pluginConfiguration { + id = "org.modelix.mps.editor.languages" + name = "Notation Language for the Modelix Web Editor" + } } tasks { - patchPluginXml { - sinceBuild.set("232") - untilBuild.set("233.*") - } - - buildSearchableOptions { - enabled = false - } - -// signPlugin { -// certificateChain.set(System.getenv("CERTIFICATE_CHAIN")) -// privateKey.set(System.getenv("PRIVATE_KEY")) -// password.set(System.getenv("PRIVATE_KEY_PASSWORD")) -// } -// -// publishPlugin { -// token.set(System.getenv("PUBLISH_TOKEN")) -// } - - runIde { - autoReloadPlugins.set(true) - } - val pluginDir = mpsPluginsDir if (pluginDir != null) { register("installMpsPlugin") { @@ -112,17 +59,17 @@ tasks { } } - withType().configureEach { + withType().configureEach { dependsOn(project(":mps").tasks.named("packageMpsPublications")) - intoChild(pluginName.map { "$it/META-INF" }) + rootSpec.addChild().into(pluginName.map { "$it/META-INF" }) .from(project.layout.projectDirectory.file("src/main/resources/META-INF")) .exclude("plugin.xml") - intoChild(pluginName.map { "$it/META-INF" }) - .from(patchPluginXml.flatMap { it.outputFiles }) + rootSpec.addChild().into(pluginName.map { "$it/META-INF" }) + .from(patchPluginXml.flatMap { it.outputFile }) listOf("editor-languages", "baseLanguage-notation", "react").forEach { publicationName -> - intoChild(pluginName.map { "$it/languages" }) + rootSpec.addChild().into(pluginName.map { "$it/languages" }) .from(zipTree({ project(":mps").layout.buildDirectory.file("mpsbuild/publications/$publicationName.zip") })) .eachFile { path = path.replaceFirst("packaged-modules/", "") diff --git a/projectional-editor-ssr-mps/build.gradle.kts b/projectional-editor-ssr-mps/build.gradle.kts index 53a60e06..cc899799 100644 --- a/projectional-editor-ssr-mps/build.gradle.kts +++ b/projectional-editor-ssr-mps/build.gradle.kts @@ -1,4 +1,4 @@ -import org.jetbrains.intellij.tasks.PrepareSandboxTask +import org.jetbrains.intellij.platform.gradle.tasks.PrepareSandboxTask import org.jetbrains.kotlin.gradle.dsl.KotlinVersion import org.modelix.buildtools.KnownModuleIds import org.modelix.buildtools.ModuleId @@ -10,11 +10,17 @@ import org.modelix.mpsPluginsDir plugins { kotlin("jvm") - id("org.jetbrains.intellij") + alias(libs.plugins.intellij2) +} + +repositories { + intellijPlatform { + defaultRepositories() + } } kotlin { - jvmToolchain(17) + jvmToolchain(21) compilerOptions { apiVersion = KotlinVersion.KOTLIN_1_8 } @@ -26,6 +32,15 @@ dependencies { implementation(project(":projectional-editor"), excludeMPSLibraries) implementation(project(":projectional-editor-ssr-server"), excludeMPSLibraries) implementation(libs.slf4j.api, excludeMPSLibraries) + intellijPlatform { + local(mpsHomeDir) + localPlugin(project(":editor-common-mps")) + } + compileOnly( + fileTree(mpsHomeDir).matching { + include("lib/*.jar") + }, + ) } tasks.processResources { @@ -40,28 +55,16 @@ sourceSets { } } -// Configure Gradle IntelliJ Plugin -// Read more: https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html -intellij { - localPath = mpsHomeDir.map { it.asFile.absolutePath } +intellijPlatform { instrumentCode = false - plugins.set(listOf(project(":editor-common-mps"))) + buildSearchableOptions = false + pluginConfiguration { + id = "org.modelix.mps.editor" + name = "Modelix Projectional Text Editor for MPS" + } } tasks { - patchPluginXml { - sinceBuild.set("232") - untilBuild.set("233.*") - } - - buildSearchableOptions { - enabled = false - } - - runIde { - autoReloadPlugins.set(true) - } - val pluginDir = mpsPluginsDir if (pluginDir != null) { val installMpsPlugin = register("installMpsPlugin") { @@ -75,24 +78,24 @@ tasks { } withType(PrepareSandboxTask::class.java) { - intoChild(pluginName.map { "$it/META-INF" }) + rootSpec.addChild().into(pluginName.map { "$it/META-INF" }) .from(project.layout.projectDirectory.file("src/main/resources/META-INF")) .exclude("plugin.xml") - intoChild(pluginName.map { "$it/META-INF" }) - .from(patchPluginXml.flatMap { it.outputFiles }) + rootSpec.addChild().into(pluginName.map { "$it/META-INF" }) + .from(patchPluginXml.flatMap { it.outputFile }) doLast { - val jarsInBasePlugin = defaultDestinationDir.get().resolve(project(":editor-common-mps").name).resolve("lib").list()?.toHashSet() ?: emptySet() - defaultDestinationDir.get().resolve(project.name).resolve("lib").listFiles()?.forEach { + val jarsInBasePlugin = defaultDestinationDirectory.get().asFile.resolve(project(":editor-common-mps").name).resolve("lib").list()?.toHashSet() ?: emptySet() + defaultDestinationDirectory.get().asFile.resolve(project.name).resolve("lib").listFiles()?.forEach { if (jarsInBasePlugin.contains(it.name)) it.delete() } val ownJar: File = pluginJar.get().asFile - val runtimeJars = configurations.getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME).resolvedConfiguration.files + ownJar + val runtimeJars = configurations.getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME).incoming.files + ownJar buildStubsSolutionJar { solutionName("org.modelix.mps.editor.ssr.stubs") solutionId("771cf896-ab1b-409b-93b4-48c3bbb6b23f") - outputFolder(defaultDestinationDir.get().resolve(project.name).resolve("languages")) + outputFolder(defaultDestinationDirectory.get().asFile.resolve(project.name).resolve("languages")) runtimeJars.filterNot { jarsInBasePlugin.contains(it.name) }.forEach { javaJar(it.name) // kotlinJar(it.name) diff --git a/projectional-editor-ssr-server/build.gradle.kts b/projectional-editor-ssr-server/build.gradle.kts index dfa09a73..cb3f91b6 100644 --- a/projectional-editor-ssr-server/build.gradle.kts +++ b/projectional-editor-ssr-server/build.gradle.kts @@ -12,5 +12,5 @@ dependencies { } kotlin { - jvmToolchain(17) + jvmToolchain(21) } diff --git a/projectional-editor/build.gradle.kts b/projectional-editor/build.gradle.kts index b98dd651..30f2af02 100644 --- a/projectional-editor/build.gradle.kts +++ b/projectional-editor/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } kotlin { - jvmToolchain(17) + jvmToolchain(21) jvm() js(IR) { browser {} diff --git a/react-ssr-mps/build.gradle.kts b/react-ssr-mps/build.gradle.kts index 3d98e156..9d170318 100644 --- a/react-ssr-mps/build.gradle.kts +++ b/react-ssr-mps/build.gradle.kts @@ -1,4 +1,4 @@ -import org.jetbrains.intellij.tasks.PrepareSandboxTask +import org.jetbrains.intellij.platform.gradle.tasks.PrepareSandboxTask import org.jetbrains.kotlin.gradle.dsl.KotlinVersion import org.modelix.buildtools.KnownModuleIds import org.modelix.buildtools.ModuleId @@ -10,12 +10,19 @@ import org.modelix.mpsPluginsDir plugins { kotlin("jvm") - id("org.jetbrains.intellij") + alias(libs.plugins.intellij2) + alias(libs.plugins.intellij2.migration) alias(libs.plugins.modelix.model.api.gen) } kotlin { - jvmToolchain(17) + jvmToolchain(21) +} + +repositories { + intellijPlatform { + defaultRepositories() + } } dependencies { @@ -23,14 +30,27 @@ dependencies { compileOnly(project(":editor-common-mps")) implementation(project(":react-ssr-server"), excludeMPSLibraries) implementation(libs.slf4j.api, excludeMPSLibraries) + intellijPlatform { + local(mpsHomeDir) + localPlugin(project(":editor-common-mps")) + } + compileOnly( + fileTree(mpsHomeDir).matching { + include("lib/*.jar") + }, + ) } -// Configure Gradle IntelliJ Plugin -// Read more: https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html -intellij { - localPath = mpsHomeDir.map { it.asFile.absolutePath } +intellijPlatform { instrumentCode = false - plugins.set(listOf(project(":editor-common-mps"))) + buildSearchableOptions = false + pluginConfiguration { + name = "org.modelix.mps.react" +// ideaVersion { +// sinceBuild = "$mpsPlatformVersion" +// untilBuild = "$mpsPlatformVersion.*" +// } + } } kotlin { @@ -41,19 +61,6 @@ kotlin { } tasks { - patchPluginXml { - sinceBuild.set("232") - untilBuild.set("233.*") - } - - buildSearchableOptions { - enabled = false - } - - runIde { - autoReloadPlugins.set(true) - } - val pluginDir = mpsPluginsDir if (pluginDir != null) { val installMpsPlugin = register("installMpsPlugin") { @@ -61,30 +68,30 @@ tasks { from(project.layout.buildDirectory.dir("idea-sandbox/plugins/${project.name}")) into(pluginDir.resolve(project.name)) } - register("installMpsDevPlugins") { + register("installMpsDevPlugins") { dependsOn(installMpsPlugin) } } withType(PrepareSandboxTask::class.java) { - intoChild(pluginName.map { "$it/META-INF" }) + rootSpec.addChild().into(pluginName.map { "$it/META-INF" }) .from(project.layout.projectDirectory.file("src/main/resources/META-INF")) .exclude("plugin.xml") - intoChild(pluginName.map { "$it/META-INF" }) - .from(patchPluginXml.flatMap { it.outputFiles }) + rootSpec.addChild().into(pluginName.map { "$it/META-INF" }) + .from(patchPluginXml.flatMap { it.outputFile }) doLast { - val jarsInBasePlugin = defaultDestinationDir.get().resolve(project(":editor-common-mps").name).resolve("lib").list()?.toHashSet() ?: emptySet() - defaultDestinationDir.get().resolve(project.name).resolve("lib").listFiles()?.forEach { + val jarsInBasePlugin = defaultDestinationDirectory.get().asFile.resolve(project(":editor-common-mps").name).resolve("lib").list()?.toHashSet() ?: emptySet() + defaultDestinationDirectory.get().asFile.resolve(project.name).resolve("lib").listFiles()?.forEach { if (jarsInBasePlugin.contains(it.name)) it.delete() } val ownJar: File = pluginJar.get().asFile - val runtimeJars = configurations.getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME).resolvedConfiguration.files + ownJar + val runtimeJars = configurations.getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME).incoming.files + ownJar buildStubsSolutionJar { solutionName("org.modelix.mps.react.ssr.stubs") solutionId("83a7cbdc-dd9d-4dad-be97-957aa1b07375") - outputFolder(defaultDestinationDir.get().resolve(project.name).resolve("languages")) + outputFolder(defaultDestinationDirectory.get().asFile.resolve(project.name).resolve("languages")) runtimeJars.filterNot { jarsInBasePlugin.contains(it.name) }.forEach { javaJar(it.name) // kotlinJar(it.name) diff --git a/react-ssr-server/build.gradle.kts b/react-ssr-server/build.gradle.kts index 1c10fda8..3b0de64a 100644 --- a/react-ssr-server/build.gradle.kts +++ b/react-ssr-server/build.gradle.kts @@ -15,7 +15,7 @@ dependencies { } kotlin { - jvmToolchain(17) + jvmToolchain(21) } val copyClient = tasks.register("copyClient", Sync::class.java) { diff --git a/reverse-mpsadapters/build.gradle.kts b/reverse-mpsadapters/build.gradle.kts index 174a4a74..b6c4954f 100644 --- a/reverse-mpsadapters/build.gradle.kts +++ b/reverse-mpsadapters/build.gradle.kts @@ -6,7 +6,7 @@ plugins { } kotlin { - jvmToolchain(17) + jvmToolchain(21) compilerOptions { apiVersion = KotlinVersion.KOTLIN_1_8 } From 912a45d690783ce42f2e770f9f30bdc16e8000dd Mon Sep 17 00:00:00 2001 From: Sascha Lisson Date: Sun, 26 Oct 2025 08:37:18 +0100 Subject: [PATCH 02/11] feat: migration to MPS 2025.2 --- .github/workflows/mps-compatibility.yaml | 2 ++ build.gradle.kts | 1 - .../src/main/kotlin/org/modelix/CopyMps.kt | 18 +++++++++++++++++- .../build.gradle.kts | 12 +++++++++--- .../editor/ssr/mps/TestFrameworkSetupTest.kt | 4 ++-- react-ssr-mps/build.gradle.kts | 1 - 6 files changed, 30 insertions(+), 8 deletions(-) diff --git a/.github/workflows/mps-compatibility.yaml b/.github/workflows/mps-compatibility.yaml index 1e52c432..2669269b 100644 --- a/.github/workflows/mps-compatibility.yaml +++ b/.github/workflows/mps-compatibility.yaml @@ -16,6 +16,8 @@ jobs: matrix: version: # also adjust the compatibility version range of the MPS plugin + - "2024.3" + - "2025.1" - "2025.2" steps: - uses: actions/checkout@v5 diff --git a/build.gradle.kts b/build.gradle.kts index 56aeacd7..1ea618a8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -22,7 +22,6 @@ plugins { alias(libs.plugins.kotlin.multiplatform) apply false alias(libs.plugins.kotlin.serialization) apply false alias(libs.plugins.intellij2) apply false - alias(libs.plugins.intellij2.migration) apply false alias(libs.plugins.npm.publish) apply false } diff --git a/buildSrc/src/main/kotlin/org/modelix/CopyMps.kt b/buildSrc/src/main/kotlin/org/modelix/CopyMps.kt index 049ef729..73344598 100644 --- a/buildSrc/src/main/kotlin/org/modelix/CopyMps.kt +++ b/buildSrc/src/main/kotlin/org/modelix/CopyMps.kt @@ -50,7 +50,8 @@ val Project.mpsVersion: String get() { "2022.3" to "2022.3.3", "2023.2" to "2023.2.2", "2023.3" to "2023.3.2", - "2024.1" to "2024.1.1", + "2024.1" to "2024.1.5", + "2024.3" to "2024.3.2", "2025.1" to "2025.1.1", "2025.2" to "2025.2.1", )[it], @@ -150,6 +151,21 @@ fun Project.copyMps(): File { if (!productInfo.has("bundledPlugins")) productInfo.add("bundledPlugins", JsonArray()) if (!productInfo.has("modules")) productInfo.add("modules", JsonArray()) if (!productInfo.has("layout")) productInfo.add("layout", JsonArray()) + + val currentOS = org.gradle.internal.os.OperatingSystem.current() + val currentOSString = when { + currentOS.isMacOsX -> "macOS" + currentOS.isWindows -> "Windows" + else -> "Linux" + } + val launches = productInfo.getAsJsonArray("launch").asList() + if (!launches.any { it.asJsonObject.get("os").asString == currentOSString && it.asJsonObject.get("arch").asString == System.getProperty("os.arch") }) { + launches.add(launches.first().deepCopy().also { + it.asJsonObject.addProperty("os", currentOSString) + it.asJsonObject.addProperty("arch", System.getProperty("os.arch")) + }) + } + productInfoFile.writeText(productInfo.toString()) } diff --git a/projectional-editor-ssr-mps-languages/build.gradle.kts b/projectional-editor-ssr-mps-languages/build.gradle.kts index 83562e8e..bb4a6f1f 100644 --- a/projectional-editor-ssr-mps-languages/build.gradle.kts +++ b/projectional-editor-ssr-mps-languages/build.gradle.kts @@ -17,9 +17,9 @@ repositories { kotlin { jvmToolchain(21) - compilerOptions { - apiVersion = KotlinVersion.KOTLIN_1_8 - } +// compilerOptions { +// apiVersion = KotlinVersion.KOTLIN_1_8 +// } } dependencies { @@ -32,12 +32,18 @@ dependencies { // bundledPlugin("jetbrains.mps.kotlin") localPlugin(project(":editor-common-mps")) localPlugin(project(":projectional-editor-ssr-mps")) + testFramework(TestFrameworkType.Bundled) } compileOnly( fileTree(mpsHomeDir).matching { include("lib/*.jar") }, ) + testCompileOnly( + fileTree(mpsHomeDir).matching { + include("lib/*.jar") + }, + ) } intellijPlatform { diff --git a/projectional-editor-ssr-mps-languages/src/test/kotlin/org/modelix/editor/ssr/mps/TestFrameworkSetupTest.kt b/projectional-editor-ssr-mps-languages/src/test/kotlin/org/modelix/editor/ssr/mps/TestFrameworkSetupTest.kt index 05251c41..e65a769d 100644 --- a/projectional-editor-ssr-mps-languages/src/test/kotlin/org/modelix/editor/ssr/mps/TestFrameworkSetupTest.kt +++ b/projectional-editor-ssr-mps-languages/src/test/kotlin/org/modelix/editor/ssr/mps/TestFrameworkSetupTest.kt @@ -2,7 +2,7 @@ package org.modelix.editor.ssr.mps import com.intellij.ide.plugins.PluginManager import jetbrains.mps.classloading.ModuleClassLoader -import jetbrains.mps.module.ReloadableModuleBase +import jetbrains.mps.module.ReloadableModule /** * Check that the environment is initialized properly and all plugins and modules are loaded properly. @@ -28,7 +28,7 @@ class TestFrameworkSetupTest : TestBase("SimpleProject") { fun `test module is valid for classloading`() { readAction { - val module = mpsProject.repository.modules.filterIsInstance().first { it.moduleName == "org.modelix.mps.notation.impl.baseLanguage" } + val module = mpsProject.repository.modules.filterIsInstance().first { it.moduleName == "org.modelix.mps.notation.impl.baseLanguage" } assertInstanceOf(module.classLoader, ModuleClassLoader::class.java) } } diff --git a/react-ssr-mps/build.gradle.kts b/react-ssr-mps/build.gradle.kts index 9d170318..a503da01 100644 --- a/react-ssr-mps/build.gradle.kts +++ b/react-ssr-mps/build.gradle.kts @@ -11,7 +11,6 @@ import org.modelix.mpsPluginsDir plugins { kotlin("jvm") alias(libs.plugins.intellij2) - alias(libs.plugins.intellij2.migration) alias(libs.plugins.modelix.model.api.gen) } From ec956df234b90ab5f2f06172c4ee08189df83dfd Mon Sep 17 00:00:00 2001 From: Sascha Lisson Date: Sun, 26 Oct 2025 08:41:42 +0100 Subject: [PATCH 03/11] feat: migration to MPS 2025.2 --- buildSrc/src/main/kotlin/org/modelix/CopyMps.kt | 12 +++++++----- .../build.gradle.kts | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/buildSrc/src/main/kotlin/org/modelix/CopyMps.kt b/buildSrc/src/main/kotlin/org/modelix/CopyMps.kt index 73344598..d008c46f 100644 --- a/buildSrc/src/main/kotlin/org/modelix/CopyMps.kt +++ b/buildSrc/src/main/kotlin/org/modelix/CopyMps.kt @@ -153,17 +153,19 @@ fun Project.copyMps(): File { if (!productInfo.has("layout")) productInfo.add("layout", JsonArray()) val currentOS = org.gradle.internal.os.OperatingSystem.current() - val currentOSString = when { + val currentOSString = when { currentOS.isMacOsX -> "macOS" currentOS.isWindows -> "Windows" else -> "Linux" } val launches = productInfo.getAsJsonArray("launch").asList() if (!launches.any { it.asJsonObject.get("os").asString == currentOSString && it.asJsonObject.get("arch").asString == System.getProperty("os.arch") }) { - launches.add(launches.first().deepCopy().also { - it.asJsonObject.addProperty("os", currentOSString) - it.asJsonObject.addProperty("arch", System.getProperty("os.arch")) - }) + launches.add( + launches.first().deepCopy().also { + it.asJsonObject.addProperty("os", currentOSString) + it.asJsonObject.addProperty("arch", System.getProperty("os.arch")) + } + ) } productInfoFile.writeText(productInfo.toString()) diff --git a/projectional-editor-ssr-mps-languages/build.gradle.kts b/projectional-editor-ssr-mps-languages/build.gradle.kts index bb4a6f1f..23b087f2 100644 --- a/projectional-editor-ssr-mps-languages/build.gradle.kts +++ b/projectional-editor-ssr-mps-languages/build.gradle.kts @@ -1,5 +1,5 @@ +import org.jetbrains.intellij.platform.gradle.TestFrameworkType import org.jetbrains.intellij.platform.gradle.tasks.PrepareSandboxTask -import org.jetbrains.kotlin.gradle.dsl.KotlinVersion import org.modelix.excludeMPSLibraries import org.modelix.mpsHomeDir import org.modelix.mpsPluginsDir From 768032739b1f3219b616ed54c6c830d4df7475b1 Mon Sep 17 00:00:00 2001 From: Sascha Lisson Date: Sun, 26 Oct 2025 09:46:22 +0100 Subject: [PATCH 04/11] feat: migration to MPS 2025.2 --- mps/build.gradle.kts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mps/build.gradle.kts b/mps/build.gradle.kts index b5029547..1161f7b1 100644 --- a/mps/build.gradle.kts +++ b/mps/build.gradle.kts @@ -1,5 +1,6 @@ import org.gradle.internal.jvm.Jvm import org.modelix.mpsHomeDir +import org.modelix.mpsVersion plugins { base @@ -17,9 +18,9 @@ mpsBuild { javaHome = Jvm.current().javaHome disableParentPublication() - search("../editor-common-mps/build/idea-sandbox/plugins/editor-common-mps") - search("../projectional-editor-ssr-mps/build/idea-sandbox/plugins/projectional-editor-ssr-mps") - search("../react-ssr-mps/build/idea-sandbox/plugins/react-ssr-mps") + search("../editor-common-mps/build/idea-sandbox/MPS-${mpsVersion}/plugins/editor-common-mps") + search("../projectional-editor-ssr-mps/build/idea-sandbox/MPS-${mpsVersion}/plugins/projectional-editor-ssr-mps") + search("../react-ssr-mps/build/idea-sandbox/MPS-${mpsVersion}/plugins/react-ssr-mps") search("modules") publication("editor-languages") { module("org.modelix.mps.webaspect.devkit") From 6617ea2da1b149717b5677124807cc5910375a67 Mon Sep 17 00:00:00 2001 From: Sascha Lisson Date: Sun, 26 Oct 2025 09:54:52 +0100 Subject: [PATCH 05/11] feat: migration to MPS 2025.2 --- mps/build.gradle.kts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mps/build.gradle.kts b/mps/build.gradle.kts index 1161f7b1..1463cc1a 100644 --- a/mps/build.gradle.kts +++ b/mps/build.gradle.kts @@ -18,9 +18,9 @@ mpsBuild { javaHome = Jvm.current().javaHome disableParentPublication() - search("../editor-common-mps/build/idea-sandbox/MPS-${mpsVersion}/plugins/editor-common-mps") - search("../projectional-editor-ssr-mps/build/idea-sandbox/MPS-${mpsVersion}/plugins/projectional-editor-ssr-mps") - search("../react-ssr-mps/build/idea-sandbox/MPS-${mpsVersion}/plugins/react-ssr-mps") + search("../editor-common-mps/build/idea-sandbox/MPS-${project.mpsVersion}/plugins/editor-common-mps") + search("../projectional-editor-ssr-mps/build/idea-sandbox/MPS-${project.mpsVersion}/plugins/projectional-editor-ssr-mps") + search("../react-ssr-mps/build/idea-sandbox/MPS-${project.mpsVersion}/plugins/react-ssr-mps") search("modules") publication("editor-languages") { module("org.modelix.mps.webaspect.devkit") From 1af9130992d54958ca2c6ca76b8dc3112b7b9efd Mon Sep 17 00:00:00 2001 From: Sascha Lisson Date: Sun, 26 Oct 2025 10:00:34 +0100 Subject: [PATCH 06/11] feat: migration to MPS 2025.2 --- editor-common-mps/build.gradle.kts | 3 ++- mps-image-editor-server/build.gradle.kts | 3 ++- mps/build.gradle.kts | 6 +++--- projectional-editor-ssr-mps-languages/build.gradle.kts | 3 ++- projectional-editor-ssr-mps/build.gradle.kts | 5 +++-- react-ssr-mps/build.gradle.kts | 3 ++- 6 files changed, 14 insertions(+), 9 deletions(-) diff --git a/editor-common-mps/build.gradle.kts b/editor-common-mps/build.gradle.kts index 95be9907..d15882f4 100644 --- a/editor-common-mps/build.gradle.kts +++ b/editor-common-mps/build.gradle.kts @@ -5,6 +5,7 @@ import org.modelix.buildtools.buildStubsSolutionJar import org.modelix.excludeMPSLibraries import org.modelix.mpsHomeDir import org.modelix.mpsPluginsDir +import org.modelix.mpsVersion plugins { kotlin("jvm") @@ -69,7 +70,7 @@ tasks { if (pluginDir != null) { val installMpsPlugin = register("installMpsPlugin") { dependsOn(prepareSandbox) - from(project.layout.buildDirectory.dir("idea-sandbox/plugins/${project.name}")) + from(project.layout.buildDirectory.dir("idea-sandbox/MPS-${project.mpsVersion}/plugins/${project.name}")) into(pluginDir.resolve(project.name)) } register("installMpsDevPlugins") { diff --git a/mps-image-editor-server/build.gradle.kts b/mps-image-editor-server/build.gradle.kts index 12019717..b538dc86 100644 --- a/mps-image-editor-server/build.gradle.kts +++ b/mps-image-editor-server/build.gradle.kts @@ -3,6 +3,7 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinVersion import org.modelix.excludeMPSLibraries import org.modelix.mpsHomeDir import org.modelix.mpsPluginsDir +import org.modelix.mpsVersion plugins { kotlin("jvm") @@ -51,7 +52,7 @@ tasks { if (pluginDir != null) { val installMpsPlugin = register("installMpsPlugin") { dependsOn(prepareSandbox) - from(project.layout.buildDirectory.dir("idea-sandbox/plugins/${project.name}")) + from(project.layout.buildDirectory.dir("idea-sandbox/MPS-${project.mpsVersion}/plugins/${project.name}")) into(pluginDir.resolve(project.name)) } register("installMpsDevPlugins") { diff --git a/mps/build.gradle.kts b/mps/build.gradle.kts index 1463cc1a..f378c86a 100644 --- a/mps/build.gradle.kts +++ b/mps/build.gradle.kts @@ -41,9 +41,9 @@ mpsBuild { tasks.all { if (name in setOf("assembleMpsModules")) { inputs.dir(project.layout.projectDirectory.dir("modules")) - inputs.dir(project(":editor-common-mps").layout.buildDirectory.dir("idea-sandbox/plugins/editor-common-mps")) - inputs.dir(project(":projectional-editor-ssr-mps").layout.buildDirectory.dir("idea-sandbox/plugins/projectional-editor-ssr-mps")) - inputs.dir(project(":react-ssr-mps").layout.buildDirectory.dir("idea-sandbox/plugins/react-ssr-mps")) + inputs.dir(project(":editor-common-mps").layout.buildDirectory.dir("idea-sandbox/MPS-${project.mpsVersion}/plugins/editor-common-mps")) + inputs.dir(project(":projectional-editor-ssr-mps").layout.buildDirectory.dir("idea-sandbox/MPS-${project.mpsVersion}/plugins/projectional-editor-ssr-mps")) + inputs.dir(project(":react-ssr-mps").layout.buildDirectory.dir("idea-sandbox/MPS-${project.mpsVersion}/plugins/react-ssr-mps")) } if (name == "assembleMpsModules") { outputs.dir(project.layout.buildDirectory.dir("mpsbuild/packaged-modules")) diff --git a/projectional-editor-ssr-mps-languages/build.gradle.kts b/projectional-editor-ssr-mps-languages/build.gradle.kts index 23b087f2..c8fa126f 100644 --- a/projectional-editor-ssr-mps-languages/build.gradle.kts +++ b/projectional-editor-ssr-mps-languages/build.gradle.kts @@ -3,6 +3,7 @@ import org.jetbrains.intellij.platform.gradle.tasks.PrepareSandboxTask import org.modelix.excludeMPSLibraries import org.modelix.mpsHomeDir import org.modelix.mpsPluginsDir +import org.modelix.mpsVersion plugins { kotlin("jvm") @@ -60,7 +61,7 @@ tasks { if (pluginDir != null) { register("installMpsPlugin") { dependsOn(prepareSandbox) - from(project.layout.buildDirectory.dir("idea-sandbox/plugins/${project.name}")) + from(project.layout.buildDirectory.dir("idea-sandbox/MPS-${project.mpsVersion}/plugins/${project.name}")) into(pluginDir.resolve(project.name)) } } diff --git a/projectional-editor-ssr-mps/build.gradle.kts b/projectional-editor-ssr-mps/build.gradle.kts index cc899799..3c8aa0a7 100644 --- a/projectional-editor-ssr-mps/build.gradle.kts +++ b/projectional-editor-ssr-mps/build.gradle.kts @@ -7,6 +7,7 @@ import org.modelix.buildtools.buildStubsSolutionJar import org.modelix.excludeMPSLibraries import org.modelix.mpsHomeDir import org.modelix.mpsPluginsDir +import org.modelix.mpsVersion plugins { kotlin("jvm") @@ -69,10 +70,10 @@ tasks { if (pluginDir != null) { val installMpsPlugin = register("installMpsPlugin") { dependsOn(prepareSandbox) - from(project.layout.buildDirectory.dir("idea-sandbox/plugins/${project.name}")) + from(project.layout.buildDirectory.dir("idea-sandbox/MPS-${project.mpsVersion}/plugins/${project.name}")) into(pluginDir.resolve(project.name)) } - register("installMpsDevPlugins") { + register("installMpsDevPlugins") { dependsOn(installMpsPlugin) } } diff --git a/react-ssr-mps/build.gradle.kts b/react-ssr-mps/build.gradle.kts index a503da01..f73081d2 100644 --- a/react-ssr-mps/build.gradle.kts +++ b/react-ssr-mps/build.gradle.kts @@ -7,6 +7,7 @@ import org.modelix.buildtools.buildStubsSolutionJar import org.modelix.excludeMPSLibraries import org.modelix.mpsHomeDir import org.modelix.mpsPluginsDir +import org.modelix.mpsVersion plugins { kotlin("jvm") @@ -64,7 +65,7 @@ tasks { if (pluginDir != null) { val installMpsPlugin = register("installMpsPlugin") { dependsOn(prepareSandbox) - from(project.layout.buildDirectory.dir("idea-sandbox/plugins/${project.name}")) + from(project.layout.buildDirectory.dir("idea-sandbox/MPS-${project.mpsVersion}/plugins/${project.name}")) into(pluginDir.resolve(project.name)) } register("installMpsDevPlugins") { From 395ebdb04060659f20dd3b618823e2d038ef6375 Mon Sep 17 00:00:00 2001 From: Sascha Lisson Date: Sun, 26 Oct 2025 10:39:23 +0100 Subject: [PATCH 07/11] feat: migration to MPS 2025.2 --- editor-common-mps/build.gradle.kts | 2 +- mps-image-editor-server/build.gradle.kts | 2 +- projectional-editor-ssr-mps-languages/build.gradle.kts | 2 +- projectional-editor-ssr-mps/build.gradle.kts | 2 +- react-ssr-mps/build.gradle.kts | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/editor-common-mps/build.gradle.kts b/editor-common-mps/build.gradle.kts index d15882f4..f865c631 100644 --- a/editor-common-mps/build.gradle.kts +++ b/editor-common-mps/build.gradle.kts @@ -70,7 +70,7 @@ tasks { if (pluginDir != null) { val installMpsPlugin = register("installMpsPlugin") { dependsOn(prepareSandbox) - from(project.layout.buildDirectory.dir("idea-sandbox/MPS-${project.mpsVersion}/plugins/${project.name}")) + from(prepareSandbox.map { it.pluginDirectory.get() }) into(pluginDir.resolve(project.name)) } register("installMpsDevPlugins") { diff --git a/mps-image-editor-server/build.gradle.kts b/mps-image-editor-server/build.gradle.kts index b538dc86..333e7238 100644 --- a/mps-image-editor-server/build.gradle.kts +++ b/mps-image-editor-server/build.gradle.kts @@ -52,7 +52,7 @@ tasks { if (pluginDir != null) { val installMpsPlugin = register("installMpsPlugin") { dependsOn(prepareSandbox) - from(project.layout.buildDirectory.dir("idea-sandbox/MPS-${project.mpsVersion}/plugins/${project.name}")) + from(prepareSandbox.map { it.pluginDirectory.get() }) into(pluginDir.resolve(project.name)) } register("installMpsDevPlugins") { diff --git a/projectional-editor-ssr-mps-languages/build.gradle.kts b/projectional-editor-ssr-mps-languages/build.gradle.kts index c8fa126f..7f167035 100644 --- a/projectional-editor-ssr-mps-languages/build.gradle.kts +++ b/projectional-editor-ssr-mps-languages/build.gradle.kts @@ -61,7 +61,7 @@ tasks { if (pluginDir != null) { register("installMpsPlugin") { dependsOn(prepareSandbox) - from(project.layout.buildDirectory.dir("idea-sandbox/MPS-${project.mpsVersion}/plugins/${project.name}")) + from(prepareSandbox.map { it.pluginDirectory.get() }) into(pluginDir.resolve(project.name)) } } diff --git a/projectional-editor-ssr-mps/build.gradle.kts b/projectional-editor-ssr-mps/build.gradle.kts index 3c8aa0a7..2f3c3e51 100644 --- a/projectional-editor-ssr-mps/build.gradle.kts +++ b/projectional-editor-ssr-mps/build.gradle.kts @@ -70,7 +70,7 @@ tasks { if (pluginDir != null) { val installMpsPlugin = register("installMpsPlugin") { dependsOn(prepareSandbox) - from(project.layout.buildDirectory.dir("idea-sandbox/MPS-${project.mpsVersion}/plugins/${project.name}")) + from(prepareSandbox.map { it.pluginDirectory.get() }) into(pluginDir.resolve(project.name)) } register("installMpsDevPlugins") { diff --git a/react-ssr-mps/build.gradle.kts b/react-ssr-mps/build.gradle.kts index f73081d2..38d2c91e 100644 --- a/react-ssr-mps/build.gradle.kts +++ b/react-ssr-mps/build.gradle.kts @@ -65,7 +65,7 @@ tasks { if (pluginDir != null) { val installMpsPlugin = register("installMpsPlugin") { dependsOn(prepareSandbox) - from(project.layout.buildDirectory.dir("idea-sandbox/MPS-${project.mpsVersion}/plugins/${project.name}")) + from(prepareSandbox.map { it.pluginDirectory.get() }) into(pluginDir.resolve(project.name)) } register("installMpsDevPlugins") { From 3c40d2e11231d446228a24e69af56e55450bc826 Mon Sep 17 00:00:00 2001 From: Sascha Lisson Date: Sun, 26 Oct 2025 10:41:31 +0100 Subject: [PATCH 08/11] feat: migration to MPS 2025.2 --- editor-common-mps/build.gradle.kts | 1 - mps-image-editor-server/build.gradle.kts | 1 - projectional-editor-ssr-mps/build.gradle.kts | 1 - react-ssr-mps/build.gradle.kts | 1 - 4 files changed, 4 deletions(-) diff --git a/editor-common-mps/build.gradle.kts b/editor-common-mps/build.gradle.kts index f865c631..e38d0ee4 100644 --- a/editor-common-mps/build.gradle.kts +++ b/editor-common-mps/build.gradle.kts @@ -5,7 +5,6 @@ import org.modelix.buildtools.buildStubsSolutionJar import org.modelix.excludeMPSLibraries import org.modelix.mpsHomeDir import org.modelix.mpsPluginsDir -import org.modelix.mpsVersion plugins { kotlin("jvm") diff --git a/mps-image-editor-server/build.gradle.kts b/mps-image-editor-server/build.gradle.kts index 333e7238..431a459f 100644 --- a/mps-image-editor-server/build.gradle.kts +++ b/mps-image-editor-server/build.gradle.kts @@ -3,7 +3,6 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinVersion import org.modelix.excludeMPSLibraries import org.modelix.mpsHomeDir import org.modelix.mpsPluginsDir -import org.modelix.mpsVersion plugins { kotlin("jvm") diff --git a/projectional-editor-ssr-mps/build.gradle.kts b/projectional-editor-ssr-mps/build.gradle.kts index 2f3c3e51..e560a7c0 100644 --- a/projectional-editor-ssr-mps/build.gradle.kts +++ b/projectional-editor-ssr-mps/build.gradle.kts @@ -7,7 +7,6 @@ import org.modelix.buildtools.buildStubsSolutionJar import org.modelix.excludeMPSLibraries import org.modelix.mpsHomeDir import org.modelix.mpsPluginsDir -import org.modelix.mpsVersion plugins { kotlin("jvm") diff --git a/react-ssr-mps/build.gradle.kts b/react-ssr-mps/build.gradle.kts index 38d2c91e..cf338ba7 100644 --- a/react-ssr-mps/build.gradle.kts +++ b/react-ssr-mps/build.gradle.kts @@ -7,7 +7,6 @@ import org.modelix.buildtools.buildStubsSolutionJar import org.modelix.excludeMPSLibraries import org.modelix.mpsHomeDir import org.modelix.mpsPluginsDir -import org.modelix.mpsVersion plugins { kotlin("jvm") From 368249d3c445404961ba1afaac03c4546938fe6f Mon Sep 17 00:00:00 2001 From: Sascha Lisson Date: Sun, 26 Oct 2025 10:43:22 +0100 Subject: [PATCH 09/11] feat: migration to MPS 2025.2 --- projectional-editor-ssr-mps-languages/build.gradle.kts | 1 - 1 file changed, 1 deletion(-) diff --git a/projectional-editor-ssr-mps-languages/build.gradle.kts b/projectional-editor-ssr-mps-languages/build.gradle.kts index 7f167035..608e8366 100644 --- a/projectional-editor-ssr-mps-languages/build.gradle.kts +++ b/projectional-editor-ssr-mps-languages/build.gradle.kts @@ -3,7 +3,6 @@ import org.jetbrains.intellij.platform.gradle.tasks.PrepareSandboxTask import org.modelix.excludeMPSLibraries import org.modelix.mpsHomeDir import org.modelix.mpsPluginsDir -import org.modelix.mpsVersion plugins { kotlin("jvm") From 5cf377f60c8dc4f8cc356c3735aa851c8ab4fa17 Mon Sep 17 00:00:00 2001 From: Sascha Lisson Date: Sun, 26 Oct 2025 13:52:48 +0100 Subject: [PATCH 10/11] feat: migration to MPS 2025.2 --- buildSrc/src/main/kotlin/org/modelix/CopyMps.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/buildSrc/src/main/kotlin/org/modelix/CopyMps.kt b/buildSrc/src/main/kotlin/org/modelix/CopyMps.kt index d008c46f..854fd51c 100644 --- a/buildSrc/src/main/kotlin/org/modelix/CopyMps.kt +++ b/buildSrc/src/main/kotlin/org/modelix/CopyMps.kt @@ -180,6 +180,10 @@ fun Project.copyMps(): File { } } + // fix bin/mps64.vmoptions + val vmOptionsFile = mpsHome.resolve("bin").resolve("mps64.vmoptions") + vmOptionsFile.writeText(vmOptionsFile.readLines().filterNot { it.trim().startsWith("#") }.joinToString("n")) + println("Extracting MPS done.") return mpsHome } From 653b48824e3556e39cf43c52248bdc34cb7a90dc Mon Sep 17 00:00:00 2001 From: Sascha Lisson Date: Sun, 26 Oct 2025 14:17:42 +0100 Subject: [PATCH 11/11] feat: migration to MPS 2025.2 --- buildSrc/src/main/kotlin/org/modelix/CopyMps.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/kotlin/org/modelix/CopyMps.kt b/buildSrc/src/main/kotlin/org/modelix/CopyMps.kt index 854fd51c..1fdf2414 100644 --- a/buildSrc/src/main/kotlin/org/modelix/CopyMps.kt +++ b/buildSrc/src/main/kotlin/org/modelix/CopyMps.kt @@ -182,7 +182,7 @@ fun Project.copyMps(): File { // fix bin/mps64.vmoptions val vmOptionsFile = mpsHome.resolve("bin").resolve("mps64.vmoptions") - vmOptionsFile.writeText(vmOptionsFile.readLines().filterNot { it.trim().startsWith("#") }.joinToString("n")) + vmOptionsFile.writeText(vmOptionsFile.readLines().filterNot { it.trim().startsWith("#") }.joinToString("\n")) println("Extracting MPS done.") return mpsHome