Skip to content

Support JetBrains 2026.1 builds#199

Open
urbanfreestyler wants to merge 2 commits into
ani-memes:mainfrom
urbanfreestyler:main
Open

Support JetBrains 2026.1 builds#199
urbanfreestyler wants to merge 2 commits into
ani-memes:mainfrom
urbanfreestyler:main

Conversation

@urbanfreestyler
Copy link
Copy Markdown

Updates Anime Memes for current JetBrains IDE builds, including Rider 261.*.

Changes:

  • Removes the 251.* upper build cap so the plugin publishes with since-build="251" only.
  • Bumps plugin version to 1.6.1.
  • Updates build tooling for 2026.1:
    • IntelliJ Platform Gradle Plugin 2.14.0
    • Kotlin 2.3.21
    • Gradle 9.0.0
    • MockK 1.14.9
  • Targets IntelliJ Platform 2026.1.
  • Fixes 2025.1 verifier compatibility issues from Kotlin-generated PluginId.Companion and DynamicPluginListener bytecode.
  • Adds a CI guard to fail if until-build is reintroduced.

Verification:

  • ./gradlew.bat --no-daemon --console=plain check
  • ./gradlew.bat --no-daemon --console=plain verifyPlugin
  • ./gradlew.bat --no-daemon --console=plain buildPlugin

Built plugin XML now contains:

<idea-version since-build="251" />

Copilot AI review requested due to automatic review settings May 6, 2026 07:50
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the AMII JetBrains plugin/tooling to publish and verify against 2026.1 IDE builds (including Rider 261.*), while refactoring several runtime paths to avoid blocking work on the UI thread and adding regression coverage for the new behaviors.

Changes:

  • Removes the until-build cap and adds CI enforcement to prevent reintroducing it; bumps toolchain and plugin versions to match 2026.1.
  • Refactors asset download/update, meme display, and project listener registration to be more EDT-safe and resilient (retries, bounded caches, duplicate-registration guards).
  • Adds targeted regression tests for settings parsing/bitmask updates, asset scanning/download behavior, and project lifecycle tracking.

Reviewed changes

Copilot reviewed 34 out of 36 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
src/test/kotlin/io/unthrottled/amii/ProjectLifecycleRegistryTest.kt Adds coverage for the new project open/close registry behavior.
src/test/kotlin/io/unthrottled/amii/config/ui/PluginSettingsUIRegressionTest.kt Adds regression tests for exit-code parsing and bitmask updates.
src/test/kotlin/io/unthrottled/amii/assets/LocalVisualContentManagerRegressionTest.kt Adds regression tests for custom-asset directory scanning behavior.
src/test/kotlin/io/unthrottled/amii/assets/ContentAssetManagerRegressionTest.kt Adds regression test ensuring asset resolution doesn’t do network synchronously on EDT.
src/main/resources/messages/AMII.properties Updates user-facing messages to instruct “Synchronize Assets” instead of restart.
src/main/resources/messages/AMII_zh.properties Chinese translations aligned with the updated messaging.
src/main/kotlin/io/unthrottled/amii/tools/AssetTools.kt Switches MD5 calculation to streaming to avoid loading whole files into memory.
src/main/kotlin/io/unthrottled/amii/services/WelcomeService.kt Defers greeting until asset metadata readiness (with retry/backoff).
src/main/kotlin/io/unthrottled/amii/services/GifService.kt Adds cache bounding and ensures ImageReader disposal.
src/main/kotlin/io/unthrottled/amii/promotion/PluginService.kt Routes PluginId creation through a Java helper to avoid verifier/bytecode issues.
src/main/kotlin/io/unthrottled/amii/promotion/MemePromotionDialog.kt Uses the PluginIds wrapper for plugin install/enable flow.
src/main/kotlin/io/unthrottled/amii/PluginMaster.kt Adds project lifecycle registry and synchronizes listener registration; disposes on close safely.
src/main/kotlin/io/unthrottled/amii/onboarding/UserOnBoarding.kt Uses PluginIds wrapper for plugin version lookup.
src/main/kotlin/io/unthrottled/amii/memes/MemeService.kt Ensures meme display/clear always executes on the EDT.
src/main/kotlin/io/unthrottled/amii/memes/Meme.kt Simplifies meme display scheduling and adds EDT guard in display path.
src/main/kotlin/io/unthrottled/amii/listeners/ProjectListener.kt Migrates startup hook to ProjectActivity.execute only.
src/main/kotlin/io/unthrottled/amii/listeners/IDEPluginInstallListener.kt Removes Kotlin listener implementation (replaced by Java).
src/main/kotlin/io/unthrottled/amii/integrations/RestClient.kt Simplifies REST calls to avoid unnecessary pooled-thread hopping.
src/main/kotlin/io/unthrottled/amii/core/MIKU.kt Adds delayed retry for message bus subscriptions with clearer logging.
src/main/kotlin/io/unthrottled/amii/assets/LocalVisualContentManager.kt Introduces scanner wrapper that guarantees closing Files.walk streams.
src/main/kotlin/io/unthrottled/amii/assets/ContentAssetManager.kt Changes download behavior to avoid synchronous network on EDT.
src/main/kotlin/io/unthrottled/amii/assets/AssetAPI.kt Removes pooled-thread wrapper, delegating request execution to callers.
src/main/kotlin/io/unthrottled/amii/assets/APIAssetManager.kt Makes API asset download/update non-blocking on EDT and refactors update flow.
src/main/java/io/unthrottled/amii/tools/PluginIds.java New Java wrapper around PluginId.getId for verifier compatibility.
src/main/java/io/unthrottled/amii/listeners/IDEPluginInstallListener.java Reintroduces dynamic plugin listener in Java for verifier compatibility.
src/main/java/io/unthrottled/amii/config/ui/PluginSettingsUI.java Refactors exit-code parsing, bitmask updates, and settings UI disposal; removes settings “meme” HTML.
src/main/java/io/unthrottled/amii/config/ui/CustomMemeList.java Replaces “one panel per asset” UI with async-scanned list + editor split-pane.
src/main/java/io/unthrottled/amii/config/ui/CustomMemeList.form Adjusts layout constraints to allow the new browser to fill available space.
gradle/wrapper/gradle-wrapper.properties Updates Gradle wrapper to 9.0.0.
gradle/libs.versions.toml Updates IntelliJ Platform Gradle plugin + Kotlin versions.
gradle.properties Bumps plugin version, targets 2026.1, and removes until-build property.
docs/RELEASE-NOTES.md Updates release notes content for the new behavior/tooling.
CHANGELOG.md Adds an Unreleased section documenting the 2026.1-related changes.
build.gradle.kts Makes untilBuild optional and updates plugin verification IDE matrix.
.gitignore Ignores additional Gradle/Kotlin cache directories.
.github/workflows/build.yml Adds CI guard to fail if until-build is reintroduced into generated plugin.xml.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +102 to +111
if (isDispatchThread()) {
executeInBackground {
download()
}
).get()
return if (Files.exists(localAssetPath)) {
localAssetPath.toUri().toOptional()
} else {
Optional.empty()
}
}
Comment on lines +140 to +147
ApplicationManager.getApplication().executeOnPooledThread {
download()
}
return if (Files.exists(localAssetPath)) {
localAssetPath.toUri().toOptional()
} else {
Optional.empty()
}
Comment on lines +165 to +166
assetConverter(Files.newInputStream(localAssetPath))
.map { existingAssets -> newAssets to existingAssets }
Comment thread docs/RELEASE-NOTES.md
Comment on lines +10 to +12
Build Support

- 2025.2 Build Support
localAssetPath.toUri()
if (ApplicationManager.getApplication().isDispatchThread) {
ApplicationManager.getApplication().executeOnPooledThread {
update()
Comment on lines +17 to +21
if (Files.exists(testDirectory)) {
Files.walk(testDirectory)
.sorted(Comparator.reverseOrder())
.forEach { Files.deleteIfExists(it) }
}
Comment on lines +47 to +51
if (Files.exists(testDirectory)) {
Files.walk(testDirectory)
.sorted(Comparator.reverseOrder())
.forEach { Files.deleteIfExists(it) }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants