From 326ed9e03435ffa0e808bf60d12c0102e4ac3151 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 4. Removing CodeQL (we're not using it, it's slow, and it won't pick up a JDK 21 no matter how much you want it to) --- .github/workflows/build.yml | 8 +- .github/workflows/check-ide-version.yml | 2 +- .github/workflows/codeql.yml | 73 ------------------- .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 | 37 +++++----- .../ideplugin/releasessample/DetailsPanel.kt | 5 +- samples/standalone/build.gradle.kts | 2 +- .../samples/standalone/reflection/Views.kt | 1 + settings.gradle.kts | 6 +- 17 files changed, 79 insertions(+), 121 deletions(-) delete mode 100644 .github/workflows/codeql.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c120c6699e..071d275e20 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,10 +13,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 @@ -32,10 +32,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 ecc9e4dfff..435f257bc3 100644 --- a/.github/workflows/check-ide-version.yml +++ b/.github/workflows/check-ide-version.yml @@ -26,7 +26,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 deleted file mode 100644 index 879fb10cfb..0000000000 --- a/.github/workflows/codeql.yml +++ /dev/null @@ -1,73 +0,0 @@ -name: "CodeQL" - -on: - push: - branches: [ "main" ] - pull_request: - branches: [ "main", "*" ] - schedule: - - cron: '21 15 * * 0' - -jobs: - analyze: - name: Analyze - # Runner size impacts CodeQL analysis time. To learn more, please see: - # - https://gh.io/recommended-hardware-resources-for-running-codeql - # - https://gh.io/supported-runners-and-hardware-resources - # - https://gh.io/using-larger-runners - # Consider using larger runners for possible analysis time improvements. - runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} - timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }} - permissions: - # required for all workflows - security-events: write - - # only required for workflows in private repositories - actions: read - contents: read - - strategy: - fail-fast: false - matrix: - language: [ 'java-kotlin' ] - # CodeQL supports [ 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' ] - # Use only 'java-kotlin' to analyze code written in Java, Kotlin or both - # Use only 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both - # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v3 - with: - languages: ${{ matrix.language }} - # 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. - - # 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. - # 📚 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 - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 - with: - category: "/language:${{matrix.language}}" diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 2608e55c0e..60b1976a3a 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 d65c52797f..78f9e20883 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 f8d784c5ba..795ab66462 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 715f9e2204..e081d37c50 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 4348175384..80ebd59c32 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 82d8cb4b20..ac0ae76d12 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 71d1f1d187..2f5e72a962 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 d2fc3ab3c0..c7a63b4c6d 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 0e7c019fbe..0dea0e440b 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 8bc0296505..6890f8ff4a 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,12 +36,12 @@ dependencies { } } -tasks { - // We don't have any settings in the demo plugin - buildSearchableOptions { - enabled = false - } +intellijPlatform { + pluginConfiguration { name = "Jewel Demo" } + buildSearchableOptions = false +} +tasks { runIde { systemProperties["org.jetbrains.jewel.debug"] = "true" } 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 4e02681294..82aa50ee1e 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 2d8714780d..fd1c5032db 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 26ecf1d6f1..2bc4aa1857 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 69a2b6a3e4..504a8b9f5d 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() } }