diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f8b44e2f5..de3e7e02b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,7 +12,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Setup JBR 21 - uses: gmitch215/setup-java@6d2c5e1f82f180ae79f799f0ed6e3e5efb4e664d + uses: actions/setup-java@v5 with: distribution: 'jetbrains' java-version: 21 @@ -41,7 +41,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Setup JBR 21 - uses: gmitch215/setup-java@6d2c5e1f82f180ae79f799f0ed6e3e5efb4e664d + uses: actions/setup-java@v5 with: distribution: 'jetbrains' java-version: 21 @@ -56,7 +56,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Setup JBR 21 - uses: gmitch215/setup-java@6d2c5e1f82f180ae79f799f0ed6e3e5efb4e664d + uses: actions/setup-java@v5 with: distribution: 'jetbrains' java-version: 21 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index cb0309fe3..18d4539ac 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,15 +12,17 @@ jobs: strategy: matrix: - ideaVersion: [ "2024.2.0.1" ] + ideaVersion: [ "2024.2.6", "2024.3.6", "2025.2.1" ] steps: - uses: actions/checkout@v2 - name: Setup JBR 21 - uses: gmitch215/setup-java@6d2c5e1f82f180ae79f799f0ed6e3e5efb4e664d + uses: actions/setup-java@v5 with: distribution: 'jetbrains' java-version: 21 + cache: 'gradle' + package-type: 'jdk+jcef' - name: Set up Elixir uses: erlef/setup-beam@v1 with: @@ -48,10 +50,12 @@ jobs: steps: - uses: actions/checkout@v2 - name: Setup JBR 21 - uses: gmitch215/setup-java@6d2c5e1f82f180ae79f799f0ed6e3e5efb4e664d + uses: actions/setup-java@v5 with: distribution: 'jetbrains' java-version: 21 + cache: 'gradle' + package-type: 'jdk+jcef' - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Run Plugin Verifier diff --git a/.gitignore b/.gitignore index 833cd8831..a526c5610 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,4 @@ jps-shared/build jps-shared/out libs/ .intellijPlatform +/.kotlin diff --git a/CHANGELOG.md b/CHANGELOG.md index 0cb26a9eb..6d0432a49 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## v22.0.0 (Unreleased) +### Enhancements +* [#3712](https://github.com/KronicDeth/intellij-elixir/pull/3712) - [@joshuataylor](https://github.com/joshuataylor) + * Upgrade Kotlin to 2.2.10, as it's deprecated in IntelliJ 2025.1+, various deprecations are also fixed. + * Fixed adding Erlang/Elixir SDKs in 2025.1+ IDEs. + ## v21.0.0 ### Enhancements * [#3651](https://github.com/KronicDeth/intellij-elixir/pull/3681) - [@joshuataylor](https://github.com/joshuataylor) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1b8f55f84..54ff95e1a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -31,7 +31,7 @@ 6. In "Import Project from Gradle" 1. Check "Use auto-import" 2. Check "Create separate module per source set" - 3. Ensure Gradle JVM is **AT LEAST** Java 1.7 / 7. (Java 1.8 / 8 is recommended.) + 3. Ensure Gradle JVM is **AT LEAST** Java 21+. Your import settings should look something like this:
![Gradle settings](/screenshots/contributing/gradle_settings.png?raw=true "Gradle settings") 4. Click Finish diff --git a/build.gradle b/build.gradle index 44b05514c..beb3db599 100644 --- a/build.gradle +++ b/build.gradle @@ -1,11 +1,14 @@ import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType import org.jetbrains.intellij.platform.gradle.TestFrameworkType import org.jetbrains.intellij.platform.gradle.tasks.RunIdeTask +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.dsl.KotlinVersion +import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile plugins { - id "org.jetbrains.intellij.platform" version "2.1.0" - id "org.jetbrains.kotlin.jvm" version "1.9.25" - id "de.undercouch.download" version "4.1.2" + id "org.jetbrains.intellij.platform" version "2.7.2" + id "org.jetbrains.kotlin.jvm" version "2.2.10" + id "de.undercouch.download" version "5.6.0" id 'com.adarshr.test-logger' version '4.0.0' } @@ -33,13 +36,17 @@ ext { channel = "canary" } - version "$pluginVersion$versionSuffix" + version = "$pluginVersion$versionSuffix" } allprojects { apply plugin: 'java' sourceCompatibility = javaVersion targetCompatibility = javaVersion + java { + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 + } tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } } subprojects { @@ -58,7 +65,6 @@ subprojects { create(providers.gradleProperty("platformType"), providers.gradleProperty("platformVersion")) bundledPlugins providers.gradleProperty("platformBundledPlugins").map { it.split(',').toList() } - plugins providers.gradleProperty("platformPlugins").map { it.split(',').toList() } instrumentationTools() pluginVerifier() @@ -88,10 +94,11 @@ sourceSets { } } intellijPlatform { + // buildSearchableOptions = false + // instrumentCode = false pluginConfiguration { def stripTag = { text, tag -> text.replace("<${tag}>", "").replace("", "") } - def bodyInnerHTML = { path -> - stripTag(stripTag(file(path).text, "html"), "body") + def bodyInnerHTML = { path -> stripTag(stripTag(file(path).text, "html"), "body") } id = providers.gradleProperty("pluginGroup") @@ -122,13 +129,17 @@ intellijPlatform { } pluginVerification { ides { - ide(IntelliJPlatformType.IntellijIdeaCommunity, "243.12818.47") + // https://www.jetbrains.com/idea/download/other.html +// ide(IntelliJPlatformType.IntellijIdeaCommunity, "2024.2.6") +// ide(IntelliJPlatformType.IntellijIdeaCommunity, "2024.3.6") + ide IntelliJPlatformType.IntellijIdeaCommunity, "2025.2.1" } } } apply plugin: "kotlin" -tasks.withType(RunIdeTask) { +// Configure all RunIdeTask instances (including the new platform-specific ones) +tasks.withType(RunIdeTask).configureEach { // Set JVM arguments jvmArguments.addAll(["-Didea.debug.mode=true", "-Didea.is.internal=true", "-Dlog4j2.debug=true", "-Dlogger.org=TRACE", "-XX:+AllowEnhancedClassRedefinition"]) @@ -142,19 +153,26 @@ tasks.withType(RunIdeTask) { if (project.hasProperty("runIdeWorkingDirectory") && !project.property("runIdeWorkingDirectory").isEmpty()) { workingDir = file(project.property("runIdeWorkingDirectory")) } + + def compatiblePluginsList = providers.gradleProperty("runIdeCompatiblePlugins").get().with { it.isEmpty() ? [] : it.split(",") } + if (compatiblePluginsList.size() > 0) { + dependencies { + intellijPlatform { + compatiblePlugins(compatiblePluginsList) + } + } + } } kotlin { jvmToolchain(21) } -//noinspection GroovyAssignabilityCheck,GrUnresolvedAccess -tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { - //noinspection GrUnresolvedAccess - kotlinOptions { - apiVersion = "1.7" - jvmTarget = "21" - freeCompilerArgs = ["-Xjvm-default=all"] +tasks.withType(KotlinJvmCompile).configureEach { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_21) + freeCompilerArgs.add("-Xjvm-default=all") + apiVersion.set(KotlinVersion.KOTLIN_2_2) } } @@ -176,50 +194,30 @@ test { } } +// Get the list of platforms from gradle.properties +def runIdePlatformsList = providers.gradleProperty("runIdePlatforms").get().split(",") + intellijPlatformTesting { - // Get the list of platforms from gradle.properties - def platformsList = providers.gradleProperty("platformsList").get().split(",") - - // Use providers.gradleProperty to get the 'runIdePlugins' property - def runIdePluginsProperty = providers.gradleProperty("runIdePlugins").getOrElse("") - def runIdePluginsList = runIdePluginsProperty.split(",") - - platformsList.each { platform -> - runIde.create("run${platform}") { - type = IntelliJPlatformType."${platform}" - version = providers.gradleProperty("platformVersion${platform}").get() - prepareSandboxTask { - sandboxDirectory = project.layout.buildDirectory.dir("${platform.toLowerCase()}-sandbox") - } + runIde { + runIdePlatformsList.each { platform -> + "run${platform}" { + type = IntelliJPlatformType."${platform}" + version = providers.gradleProperty("platformVersion${platform}").get() - // if runIdePluginsList is not empty, set the plugins - if (runIdePluginsList.size() > 0) { - plugins { - // Apply each plugin from the 'runIdePluginsList' - runIdePluginsList.each { plugin -> - plugins(plugin.trim()) - } + prepareSandboxTask { + sandboxDirectory = project.layout.buildDirectory.dir("${platform.toLowerCase()}-sandbox") } } - } - // if enableEAPIDEs is true, create an EAP instance - if (providers.gradleProperty("enableEAPIDEs").get().toLowerCase() == "true") { - runIde.create("run${platform}EAP") { - type = IntelliJPlatformType."${platform}" - version = providers.gradleProperty("platformVersion${platform}EAP").get() - prepareSandboxTask { - sandboxDirectory = project.layout.buildDirectory.dir("${platform.toLowerCase()}_eap-sandbox") - } - useInstaller = false - - // if runIdePluginsList is not empty, set the plugins - if (runIdePluginsList.size() > 0) { - plugins { - // Apply each plugin from the 'runIdePluginsList' - runIdePluginsList.each { plugin -> - plugins(plugin.trim()) - } + // if enableEAPIDEs is true, create an EAP instance + if (providers.gradleProperty("enableEAPIDEs").get().toLowerCase() == "true") { + "run${platform}EAP" { + type = IntelliJPlatformType."${platform}" + version = providers.gradleProperty("platformVersion${platform}EAP").get() + useInstaller = false + + prepareSandboxTask { + sandboxDirectory = project.layout.buildDirectory.dir("${platform.toLowerCase()}_eap-sandbox") } } } @@ -237,7 +235,7 @@ task testCompilation(type: Test, group: 'Verification', dependsOn: [classes, tes } repositories { - maven { url 'https://maven-central.storage.googleapis.com' } + maven { url = 'https://maven-central.storage.googleapis.com' } mavenCentral() intellijPlatform { defaultRepositories() @@ -248,9 +246,7 @@ dependencies { intellijPlatform { create(providers.gradleProperty("platformType"), providers.gradleProperty("platformVersion")) - bundledPlugins providers.gradleProperty("platformBundledPlugins").map { it.split(',').toList() } - plugins providers.gradleProperty("platformPlugins").map { it.split(',').toList() } - + bundledPlugins(providers.gradleProperty("platformBundledPlugins").map { it.split(',').toList() }) instrumentationTools() pluginVerifier() zipSigner() @@ -285,12 +281,12 @@ idea { } } -task getElixir { +tasks.register('getElixir') { doLast { - def folder = new File(elixirPath) + def folder = new File(elixirPath as String) if (!folder.isDirectory() || folder.list().size() == 0) { - download { + download.run { src "https://github.com/elixir-lang/elixir/archive/v${elixirVersion}.zip" dest "${rootDir}/cache/Elixir.${elixirVersion}.zip" overwrite false @@ -314,7 +310,7 @@ task getElixir { task getQuoter { doLast { - download { + download.run { src "https://github.com/KronicDeth/intellij_elixir/archive/v${quoterVersion}.zip" dest quoterZipPath overwrite false @@ -423,3 +419,11 @@ idea { generatedSourceDirs += file('gen') } } + +// Uncomment to allow using build-scan. +// if (hasProperty('buildScan')) { +// buildScan { +// termsOfServiceUrl = 'https://gradle.com/terms-of-service' +// termsOfServiceAgree = 'yes' +// } +// } diff --git a/gradle.properties b/gradle.properties index a4282d658..6c7776bb9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,58 +2,67 @@ pluginGroup=org.elixir_lang pluginName=Elixir pluginRepositoryUrl=https://github.com/KronicDeth/intellij-elixir/ -pluginVersion=21.0.0 +pluginVersion=22.0.0 vendorName=Elle Imhoff vendorEmail=Kronic.Deth@gmail.com # https://youtrack.jetbrains.com/articles/IDEA-A-2100661899/IntelliJ-IDEA-2024.1-241.14494.240-build-Release-Notes pluginSinceBuild=243.21565.180 pluginUntilBuild= +#pluginVerificationIDEAVersions="251.26927.53" +#pluginVerificationRubyMineVersions="251.26927.47" # Set this to open runIdeWorkingDirectory= # Define versions for running the IDEs, as each IDE can release at different release versions. -platformVersionIntellijIdeaCommunity=2024.3.2.2 -platformVersionIntellijIdeaUltimate=2024.3.2.2 -platformVersionRubyMine=2024.3 -platformVersionPyCharmCommunity=2024.3 -platformVersionPyCharmProfessional=2024.3 -platformVersionWebStorm=2024.3 +platformVersionIntellijIdeaCommunity=2025.2.1 +platformVersionIntellijIdeaUltimate=2025.2.1 +platformVersionRubyMine=2025.2 +platformVersionPyCharmCommunity=2025.2.1 +platformVersionPyCharmProfessional=2025.2.1 +platformVersionWebStorm=2025.2.1 -enableEAPIDEs=true -platformVersionIntellijIdeaCommunityEAP=251-EAP-SNAPSHOT -platformVersionIntellijIdeaUltimateEAP=251-EAP-SNAPSHOT -platformVersionPyCharmCommunityEAP=251-EAP-SNAPSHOT -platformVersionPyCharmProfessionalEAP=251-EAP-SNAPSHOT -platformVersionRubyMineEAP=251-EAP-SNAPSHOT -platformVersionWebStormEAP=251-EAP-SNAPSHOT +enableEAPIDEs=false +platformVersionIntellijIdeaCommunityEAP=252-EAP-SNAPSHOT +platformVersionIntellijIdeaUltimateEAP=252-EAP-SNAPSHOT +platformVersionPyCharmCommunityEAP=252-EAP-SNAPSHOT +platformVersionPyCharmProfessionalEAP=252-EAP-SNAPSHOT +platformVersionRubyMineEAP=252-EAP-SNAPSHOT +platformVersionWebStormEAP=252-EAP-SNAPSHOT # Comma-separated list of platforms to include -platformsList=IntellijIdeaCommunity,IntellijIdeaUltimate,RubyMine,PyCharmCommunity,PyCharmProfessional,WebStorm +runIdePlatforms=IntellijIdeaCommunity,IntellijIdeaUltimate,RubyMine,PyCharmCommunity,PyCharmProfessional,WebStorm # The versions we target, 21 is needed for IntelliJ Plugins javaVersion=21 javaTargetVersion=21 # Defined in `.tool-versions`, check via `elixir --version` elixirVersion=1.13.4 +quoterVersion=2.1.0 # IntelliJ Platform Properties -> https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html#configuration-intellij-extension # Target IntelliJ Community by default platformType=IC -platformVersion=2024.3 -# Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html -# Example: platformPlugins = com.jetbrains.php:203.4449.22, org.intellij.scala:2023.3.27@EAP -# https://plugins.jetbrains.com/plugin/24468-classic-ui -# https://plugins.jetbrains.com/plugin/7641-action-tracker - Act -# https://plugins.jetbrains.com/plugin/15104-ide-perf - IDE Performande -# https://plugins.jetbrains.com/plugin/227-psiviewer - View PSI -platformPlugins = PsiViewer:243.7768, com.google.ide-perf:1.3.2, org.jetbrains.action-tracker:0.3.3, com.intellij.classic.ui:243.21565.122,krasa.CpuUsageIndicator:1.18.0-IJ2023 -# Example: platformBundledPlugins = com.intellij.java +platformVersion=2025.2.1 + +# Plugins which will run ONLY when running `runIde` tasks, not for testing/release. +# +# Usage: +# When using `./gradlew runIde`, pass the Gradle Property: +# -PrunIdeCompatiblePlugins="PsiViewer,com.google.ide-perf,org.jetbrains.action-tracker,com.intellij.classic.ui,krasa.CpuUsageIndicator,IdeaVIM" +# +# Recommendations: +# https://plugins.jetbrains.com/plugin/24468-classic-ui - Classic UI (old UI) +# https://plugins.jetbrains.com/plugin/7641-action-tracker - Action Tracker (Allows to record actions performed by user in IntelliJ IDEs) +# https://plugins.jetbrains.com/plugin/15104-ide-perf - IDE Performance +# https://plugins.jetbrains.com/plugin/227-psiviewer - PSI Viewer (A Program Structure Interface (PSI) tree viewer) +# IdeaVIM +runIdeCompatiblePlugins= # We need com.intellij.java to compile JPS, and markdown. -platformBundledPlugins=org.intellij.plugins.markdown,com.intellij.java +platformBundledPlugins=org.intellij.plugins.markdown,com.intellij.java,org.intellij.intelliLang + # Gradle Releases -> https://github.com/gradle/gradle/releases # 8.5 is set because newer versions have weird run time caching issues, even with caching turned off. # See https://github.com/gradle/gradle/issues/28974 -gradleVersion=8.12.1 +gradleVersion=8.14.3 # Opt-out flag for bundling Kotlin standard library -> https://jb.gg/intellij-platform-kotlin-stdlib kotlin.stdlib.default.dependency=false publishChannels=canary -runIdePlugins=IdeaVim:2.16.0 # These must be set, or Out of Memory (OOM) errors will occur during compiling. org.gradle.jvmargs=-Xmx4096m kotlin.daemon.jvmargs=-Xmx4906m diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index a4b76b953..1b33c55ba 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e18bc253b..7705927e9 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.12.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index f3b75f3b0..23d15a936 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. @@ -205,7 +205,7 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. @@ -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 9b42019c7..5eed7ee84 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/jps-builder/build.gradle b/jps-builder/build.gradle index 1d22d5d1d..a08226d5f 100644 --- a/jps-builder/build.gradle +++ b/jps-builder/build.gradle @@ -8,6 +8,11 @@ compileTestJava { compileJava { dependsOn(":jps-shared:composedJar") } +java { + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 +} +tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } // Ensuring the necessary tasks are executed before tests test { @@ -30,4 +35,4 @@ test { dependencies { implementation project(':jps-shared') -} \ No newline at end of file +} diff --git a/jps-shared/build.gradle b/jps-shared/build.gradle index a869b0950..0854ee58f 100644 --- a/jps-shared/build.gradle +++ b/jps-shared/build.gradle @@ -1,2 +1,6 @@ jar.archiveFileName = "jps-shared.jar" -testClasses.enabled = false \ No newline at end of file +testClasses.enabled = false +java { + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 +} diff --git a/resources/META-INF/changelog.html b/resources/META-INF/changelog.html index 8f2f5b206..144f8221d 100644 --- a/resources/META-INF/changelog.html +++ b/resources/META-INF/changelog.html @@ -1,5 +1,21 @@ + +

v22.0.0-EAP

+ +

v21.0.0