From a86eff7b369a458e666a8de6086d91e40c384e06 Mon Sep 17 00:00:00 2001 From: Sebastiano Poggi Date: Mon, 27 May 2024 12:44:29 +0200 Subject: [PATCH] Switch to IJP 242 EAP This in turn requires: 1. Updating the IJP Gradle plugin to 2.0 (beta) 2. Reworking the IDE sample build.gradle.kts in the new 2.0 syntax 3. Bumping the JBR version to 21 --- .github/workflows/build.yml | 8 ++--- .github/workflows/check-ide-version.yml | 2 +- .github/workflows/codeql.yml | 15 +++------ .github/workflows/publish.yml | 2 +- .gitignore | 5 +++ buildSrc/settings.gradle.kts | 1 + buildSrc/src/main/kotlin/jewel.gradle.kts | 4 +-- .../jetbrains/jewel/window/utils/macos/ID.kt | 1 + gradle.properties | 4 ++- gradle/libs.versions.toml | 14 +++------ ide-laf-bridge/build.gradle.kts | 17 +++++++++- .../ide-laf-bridge-styling/build.gradle.kts | 18 ++++++++++- samples/ide-plugin/build.gradle.kts | 31 ++++++++++--------- .../ideplugin/releasessample/DetailsPanel.kt | 5 ++- samples/standalone/build.gradle.kts | 2 +- .../samples/standalone/reflection/Views.kt | 1 + settings.gradle.kts | 6 ++-- 17 files changed, 83 insertions(+), 53 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 433b2655f..48a4a8626 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,10 +11,10 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up JDK 17 + - name: Set up JDK 21 uses: actions/setup-java@v4 with: - java-version: 17 + java-version: 21 distribution: zulu cache: gradle @@ -30,10 +30,10 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up JDK 17 + - name: Set up JDK 21 uses: actions/setup-java@v4 with: - java-version: 17 + java-version: 21 distribution: zulu cache: gradle diff --git a/.github/workflows/check-ide-version.yml b/.github/workflows/check-ide-version.yml index 5ca8896c5..e75e2dc1d 100644 --- a/.github/workflows/check-ide-version.yml +++ b/.github/workflows/check-ide-version.yml @@ -25,7 +25,7 @@ jobs: - uses: actions/setup-java@v4 with: distribution: zulu - java-version: 17 + java-version: 21 cache: gradle - name: Setup Gradle diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index c981a3f3a..3f6ab2adc 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -44,6 +44,7 @@ jobs: uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} + build-mode: manual # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. @@ -51,21 +52,15 @@ jobs: # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs # queries: security-extended,security-and-quality - - # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v3 - - # ℹ️ Command-line programs to run using the OS shell. + # ℹ️ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun # If the Autobuild fails above, remove it and uncomment the following three lines. # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. - # - run: | - # echo "Run, Build Application using script" - # ./location_of_script_within_repo/buildscript.sh + - run: | + echo "Run, Build Application using script" + ./gradlew clean --no-daemon -S - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v3 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 70fe4e9fc..293952544 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -20,7 +20,7 @@ jobs: - uses: actions/setup-java@v4 with: distribution: zulu - java-version: 17 + java-version: 21 cache: gradle - name: Setup Gradle diff --git a/.gitignore b/.gitignore index d65c52797..78f9e2088 100644 --- a/.gitignore +++ b/.gitignore @@ -94,5 +94,10 @@ $RECYCLE.BIN/ # Windows shortcuts *.lnk +### Misc + # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) !gradle-wrapper.jar + +# Ignore IJP temp folder +/.intellijPlatform diff --git a/buildSrc/settings.gradle.kts b/buildSrc/settings.gradle.kts index f8d784c5b..795ab6646 100644 --- a/buildSrc/settings.gradle.kts +++ b/buildSrc/settings.gradle.kts @@ -7,6 +7,7 @@ rootProject.name = "buildSrc" dependencyResolutionManagement { repositories { google() + maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") gradlePluginPortal() mavenCentral() } diff --git a/buildSrc/src/main/kotlin/jewel.gradle.kts b/buildSrc/src/main/kotlin/jewel.gradle.kts index 715f9e220..e081d37c5 100644 --- a/buildSrc/src/main/kotlin/jewel.gradle.kts +++ b/buildSrc/src/main/kotlin/jewel.gradle.kts @@ -19,14 +19,14 @@ version = when { java { toolchain { vendor = JvmVendorSpec.JETBRAINS - languageVersion = JavaLanguageVersion.of(17) + languageVersion = JavaLanguageVersion.of(21) } } kotlin { jvmToolchain { vendor = JvmVendorSpec.JETBRAINS - languageVersion = JavaLanguageVersion.of(17) + languageVersion = JavaLanguageVersion.of(21) } target { diff --git a/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/utils/macos/ID.kt b/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/utils/macos/ID.kt index 434817538..80ebd59c3 100644 --- a/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/utils/macos/ID.kt +++ b/decorated-window/src/main/kotlin/org/jetbrains/jewel/window/utils/macos/ID.kt @@ -6,6 +6,7 @@ import com.sun.jna.NativeLong * Could be an address in memory (if pointer to a class or method) or a * value (like 0 or 1) */ +@Suppress("OVERRIDE_DEPRECATION") // Copied code internal class ID : NativeLong { constructor() constructor(peer: Long) : super(peer) diff --git a/gradle.properties b/gradle.properties index 82d8cb4b2..ac0ae76d1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,5 +6,7 @@ kotlin.stdlib.default.dependency=false # See https://jb.gg/intellij-platform-kotlin-oom kotlin.incremental.useClasspathSnapshot=false -ijp.target=241 +org.jetbrains.intellij.platform.buildFeature.useBinaryReleases=false + +ijp.target=242 jewel.release.version=0.19.7 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 71d1f1d18..2f5e72a96 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,8 +3,8 @@ commonmark = "0.22.0" composeDesktop = "1.7.0-dev1703" detekt = "1.23.6" dokka = "1.9.20" -idea = "241.17890.1" -ideaGradlePlugin = "1.17.3" +idea = "242.19533.56-EAP-SNAPSHOT" +ideaPlugin = "2.0.0-beta8" jna = "5.14.0" kotlin = "1.9.24" kotlinSarif = "0.5.0" @@ -24,10 +24,6 @@ kotlinSarif = { module = "io.github.detekt.sarif4k:sarif4k", version.ref = "kotl kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" } kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerialization" } -ij-platform-ide-core = { module = "com.jetbrains.intellij.platform:ide-core", version.ref = "idea" } -ij-platform-ide-impl = { module = "com.jetbrains.intellij.platform:ide-impl", version.ref = "idea" } -ij-platform-core-ui = { module = "com.jetbrains.intellij.platform:core-ui", version.ref = "idea" } - jna-core = { module = "net.java.dev.jna:jna", version.ref = "jna" } # Plugin libraries for build-logic's convention plugins to use to resolve the types/tasks coming from these plugins @@ -39,14 +35,12 @@ kotlinter-gradlePlugin = { module = "org.jmailen.gradle:kotlinter-gradle", versi kotlinx-binaryCompatValidator-gradlePlugin = { module = "org.jetbrains.kotlinx:binary-compatibility-validator", version.ref = "kotlinxBinaryCompat" } poko-gradlePlugin = { module = "dev.drewhamilton.poko:poko-gradle-plugin", version.ref = "poko" } -[bundles] -idea = ["ij-platform-ide-core", "ij-platform-ide-impl", "ij-platform-core-ui"] - [plugins] composeDesktop = { id = "org.jetbrains.compose", version.ref = "composeDesktop" } detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } -ideaGradlePlugin = { id = "org.jetbrains.intellij", version.ref = "ideaGradlePlugin" } +ideaPlugin = { id = "org.jetbrains.intellij.platform", version.ref = "ideaPlugin" } +ideaPluginModule = { id = "org.jetbrains.intellij.platform.base", version.ref = "ideaPlugin" } kotlinJvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlinx-binaryCompatValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "kotlinxBinaryCompat" } kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } diff --git a/ide-laf-bridge/build.gradle.kts b/ide-laf-bridge/build.gradle.kts index d2fc3ab3c..c7a63b4c6 100644 --- a/ide-laf-bridge/build.gradle.kts +++ b/ide-laf-bridge/build.gradle.kts @@ -4,6 +4,19 @@ plugins { `jewel-check-public-api` `ide-version-checker` alias(libs.plugins.composeDesktop) + alias(libs.plugins.ideaPluginModule) +} + +// Because we need to define IJP dependencies, the dependencyResolutionManagement +// from settings.gradle.kts is overridden and we have to redeclare everything here. +repositories { + google() + maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") + mavenCentral() + + intellijPlatform { + defaultRepositories() + } } dependencies { @@ -11,7 +24,9 @@ dependencies { exclude(group = "org.jetbrains.kotlinx") } - compileOnly(libs.bundles.idea) + intellijPlatform { + intellijIdeaCommunity(libs.versions.idea) + } testImplementation(compose.desktop.uiTestJUnit4) testImplementation(compose.desktop.currentOs) { diff --git a/markdown/ide-laf-bridge-styling/build.gradle.kts b/markdown/ide-laf-bridge-styling/build.gradle.kts index 0e7c019fb..0dea0e440 100644 --- a/markdown/ide-laf-bridge-styling/build.gradle.kts +++ b/markdown/ide-laf-bridge-styling/build.gradle.kts @@ -3,13 +3,29 @@ plugins { `jewel-publish` `jewel-check-public-api` alias(libs.plugins.composeDesktop) + alias(libs.plugins.ideaPluginModule) +} + +// Because we need to define IJP dependencies, the dependencyResolutionManagement +// from settings.gradle.kts is overridden and we have to redeclare everything here. +repositories { + google() + maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") + mavenCentral() + + intellijPlatform { + defaultRepositories() + } } dependencies { api(projects.markdown.core) api(projects.ideLafBridge) compileOnly(projects.markdown.extension.gfmAlerts) - compileOnly(libs.bundles.idea) + + intellijPlatform { + intellijIdeaCommunity(libs.versions.idea) + } testImplementation(compose.desktop.uiTestJUnit4) } diff --git a/samples/ide-plugin/build.gradle.kts b/samples/ide-plugin/build.gradle.kts index 8bc029650..0e03f103b 100644 --- a/samples/ide-plugin/build.gradle.kts +++ b/samples/ide-plugin/build.gradle.kts @@ -1,28 +1,27 @@ plugins { jewel alias(libs.plugins.composeDesktop) - alias(libs.plugins.ideaGradlePlugin) + alias(libs.plugins.ideaPlugin) `android-studio-releases-generator` } - -intellij { - pluginName = "Jewel Demo" - plugins = listOf("org.jetbrains.kotlin") - version = libs.versions.idea.get() -} - -// TODO remove this once the IJ Gradle plugin fixes their repositories bug -// See https://github.com/JetBrains/gradle-intellij-plugin/issues/776 +// Because we need to define IJP dependencies, the dependencyResolutionManagement +// from settings.gradle.kts is overridden and we have to redeclare everything here. repositories { - maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") - maven("https://www.jetbrains.com/intellij-repository/releases") - maven("https://cache-redirector.jetbrains.com/intellij-dependencies") google() + maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") mavenCentral() - + + intellijPlatform { + defaultRepositories() + } } dependencies { + intellijPlatform { + intellijIdeaCommunity(libs.versions.idea) + instrumentationTools() + } + implementation(projects.ideLafBridge) { exclude(group = "org.jetbrains.kotlinx") } @@ -37,6 +36,10 @@ dependencies { } } +intellijPlatform { + pluginConfiguration { name = "Jewel Demo" } +} + tasks { // We don't have any settings in the demo plugin buildSearchableOptions { diff --git a/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/releasessample/DetailsPanel.kt b/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/releasessample/DetailsPanel.kt index 4e0268129..82aa50ee1 100644 --- a/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/releasessample/DetailsPanel.kt +++ b/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/releasessample/DetailsPanel.kt @@ -5,11 +5,10 @@ import com.intellij.ui.components.JBScrollPane import com.intellij.ui.dsl.builder.BottomGap import com.intellij.ui.dsl.builder.Panel import com.intellij.ui.dsl.builder.panel -import com.intellij.ui.scale.JBUIScale.scale -import com.intellij.ui.util.maximumHeight import com.intellij.util.ImageLoader import com.intellij.util.ui.ComponentWithEmptyText import com.intellij.util.ui.ImageUtil +import com.intellij.util.ui.JBDimension import com.intellij.util.ui.JBFont import com.intellij.util.ui.JBUI import com.intellij.util.ui.components.BorderLayoutPanel @@ -49,7 +48,7 @@ private class ItemDetailsPanel( if (bufferedImage != null) { val imageContainer = ImageComponent(scope).apply { - maximumHeight = scale(200) + maximumSize = JBDimension(Int.MAX_VALUE, 200) image = bufferedImage } diff --git a/samples/standalone/build.gradle.kts b/samples/standalone/build.gradle.kts index 2d8714780..fd1c5032d 100644 --- a/samples/standalone/build.gradle.kts +++ b/samples/standalone/build.gradle.kts @@ -49,7 +49,7 @@ tasks { // register the task in the afterEvaluate block afterEvaluate { javaLauncher = project.javaToolchains.launcherFor { - languageVersion = JavaLanguageVersion.of(17) + languageVersion = JavaLanguageVersion.of(21) vendor = JvmVendorSpec.JETBRAINS } setExecutable(javaLauncher.map { it.executablePath.asFile.absolutePath }.get()) diff --git a/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/reflection/Views.kt b/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/reflection/Views.kt index 26ecf1d6f..2bc4aa185 100644 --- a/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/reflection/Views.kt +++ b/samples/standalone/src/main/kotlin/org/jetbrains/jewel/samples/standalone/reflection/Views.kt @@ -49,6 +49,7 @@ internal fun findViews(packageName: String): List { val kFunc = it.kotlinFunction ?: return@mapNotNull null if (kFunc.parameters.isNotEmpty() || kFunc.returnType.classifier != Unit::class) return@mapNotNull null + @Suppress("UNCHECKED_CAST") ViewInfo( title = annotation.title, position = annotation.position, diff --git a/settings.gradle.kts b/settings.gradle.kts index 69a2b6a3e..504a8b9f5 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -6,9 +6,10 @@ rootProject.name = "jewel" pluginManagement { repositories { - gradlePluginPortal() maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/dev/") maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") + maven("https://oss.sonatype.org/content/repositories/snapshots/") + gradlePluginPortal() mavenCentral() } } @@ -17,9 +18,6 @@ dependencyResolutionManagement { repositories { google() maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") - maven("https://www.jetbrains.com/intellij-repository/releases") - maven("https://www.jetbrains.com/intellij-repository/snapshots") - maven("https://cache-redirector.jetbrains.com/intellij-dependencies") mavenCentral() } }