Modernize toolchain: Kotlin 2.3.10 + KSP2, sora-editor 0.24.6, drop abandoned deps#59
Conversation
…bandoned deps
Toolchain (Kotlin 2.1.21 -> 2.3.10, KSP 2.1.21-2.0.2 -> 2.3.9):
- KSP 2.3.x is KSP2-only; migrated Helpers.kt off the removed
kotlinOptions/KotlinJvmOptions API to the compilerOptions DSL
(jvmTarget = JvmTarget.JVM_17), which is a hard error under Kotlin 2.3.
- Moved the `ksp { }` room schema config to a top-level block (it is a
project-level extension, not part of the Android DSL).
- AGP stays 8.13.2, Gradle stays 8.14.5 (verified compatible in practice).
sora-editor: editor-bom 0.23.7 -> 0.24.6 (now unblocked by Kotlin 2.3).
Remove Roomigrant (com.github.MatrixDev.Roomigrant, abandoned JitPack):
- It was already dead code: the only consumer of its generated migrations
was a commented-out addMigrations() call. Real migration strategy is
Room-native autoMigrations + fallbackToDestructiveMigration(), unchanged.
- Dropped both deps, the @GenerateRoomMigrations annotations/imports, and the
now-unused jitpack repository. Room codegen verified under KSP2 (DAO/db/
auto-migration impls still generated; schemas intact).
Replace recyclerview-fastscroll (com.simplecityapps, abandoned) with
me.zhanghai.android.fastscroll:library:1.3.0 (AndroidX-native):
- 6 layouts: FastScrollRecyclerView -> RecyclerView.
- Attach FastScrollerBuilder(...).useMd2Style().build() per list.
- App list/manager: SectionedAdapter.getSectionName -> PopupTextProvider.getPopupText.
- Dropped unused app: namespaces; removed a pre-existing no-op
app:layout_behavior on the chain settings list (LinearLayout parent).
Verified locally on JDK 17: oss debug compile + full assembleOssRelease
(R8/minify, lintVital, desugaring) pass.
📝 WalkthroughWalkthroughThe PR migrates the fast-scroll library from ChangesDependency & Toolchain Modernization
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
Comment |
…XML trailing newline
- Helpers.kt: move tasks.withType<KotlinCompile> (a project-level call) out of the
android.apply {} block to make scope explicit, matching the top-level ksp{} block.
- layout_chain_settings.xml: restore trailing newline.
Summary
Lifts the toolchain to the current Kotlin/KSP line, moves the code editor to the latest sora-editor, and removes two abandoned dependencies. All changes verified locally on JDK 17 (oss debug compile + full minified release build).
Changes
Toolchain: Kotlin 2.1.21 → 2.3.10, KSP 2.1.21-2.0.2 → 2.3.9
buildSrc/Helpers.ktoff the now-removedkotlinOptions/KotlinJvmOptionsAPI (a hard compile error under Kotlin 2.3) to thecompilerOptionsDSL:jvmTarget = JvmTarget.JVM_17.ksp { }Room schema config to a top-level block — it's a project-level extension registered by the KSP plugin, not part of the Android DSL.kotlin-androidunder Kotlin 2.3).sora-editor: editor-bom 0.23.7 → 0.24.6
Previously pinned to 0.23.7 because 0.24.x ships Kotlin 2.3 metadata the old toolchain couldn't read. The Kotlin bump unblocks it. (0.24.6 is the current release; verified resolved + built under R8.)
Remove Roomigrant (abandoned JitPack dep)
Investigation showed it was already dead code: the only consumer of its generated migrations was a commented-out
addMigrations(*SagerDatabase_Migrations.build())call. The real migration strategy is Room-nativeautoMigrations+fallbackToDestructiveMigration(), which is unchanged.RoomigrantLib+RoomigrantCompiler, the@GenerateRoomMigrationsannotations/imports, and the now-unusedjitpack.iorepository (it was the only JitPack consumer).app/schemas/*.jsonintact.Replace recyclerview-fastscroll (abandoned) → me.zhanghai.android.fastscroll 1.3.0
AndroidX-native, Apache-2.0 (Google-authored), de-facto standard. No old transitive excludes needed.
FastScrollRecyclerView→androidx.recyclerview.widget.RecyclerView.FastScrollerBuilder(...).useMd2Style().build()per list (app list, app manager, groups, routes, chain settings, profile list).FastScrollRecyclerView.SectionedAdapter.getSectionName→PopupTextProvider.getPopupText(keeps the section-index popup).app:namespaces; removed a pre-existing no-opapp:layout_behavioron the chain-settings list (its parent is aLinearLayout, notCoordinatorLayout).Dependency audit notes
Testing
:app:compileOssDebugKotlin(KSP2 + Room codegen) ✅:app:assembleOssRelease— full minified build incl.minifyOssReleaseWithR8,lintVitalOssRelease,l8DexDesugarLib✅ (validates R8/ProGuard against sora's TextMate reflection + the new fastscroll lib)Not merging until verified end-to-end on device.
Greptile Summary
This PR modernizes the toolchain to Kotlin 2.3.10 + KSP 2.3.9 (KSP2-only), bumps sora-editor to 0.24.6, removes the abandoned Roomigrant annotation processor (which was already dead code), and swaps the archived
recyclerview-fastscrollforme.zhanghai.android.fastscroll 1.3.0.kotlinOptions/KotlinJvmOptions(removed in Kotlin 2.3) to thecompilerOptionsDSL and relocates theksp {}Room schema config from inside the Android DSL to the correct project-level scope.FastScrollRecyclerViewtoRecyclerView,FastScrollerBuilder(...).useMd2Style().build()is added programmatically in each activity/fragment, and the two app-list adapters migrateSectionedAdapter.getSectionName→PopupTextProvider.getPopupText.Roomigrant), the@GenerateRoomMigrationsannotations, and a pre-existing no-opapp:layout_behavioron the chain-settings list whose parent is aLinearLayout.Confidence Score: 5/5
Clean toolchain upgrade and library swap with no functional regressions; safe to merge pending the noted on-device smoke test.
Every changed file was verified: KSP 2.3.9 is correct under KSP2's new independent versioning, the ksp{} relocation and compilerOptions migration are textbook Kotlin 2.3 adaptations, Roomigrant removal touches only dead code, and the fastscroll migration correctly sets LayoutManager before FastScrollerBuilder in all six sites with PopupTextProvider properly implemented in the two adapters that need it. Layout namespace handling is accurate for each parent container type. No logic errors, missing guards, or data-path changes found.
No files require special attention.
Important Files Changed
Class Diagram
%%{init: {'theme': 'neutral'}}%% classDiagram class RecyclerView { +adapter: Adapter +layoutManager: LayoutManager } class FastScrollerBuilder { +FastScrollerBuilder(recyclerView) +useMd2Style() +build() } class PopupTextProvider { <<interface>> +getPopupText(view: View, position: Int): CharSequence } class AppsAdapter_AppList { +filteredApps: List +getPopupText(view, position): CharSequence } class AppsAdapter_AppManager { +filteredApps: List +getPopupText(view, position): CharSequence } class RecyclerView_Adapter { <<abstract>> } FastScrollerBuilder --> RecyclerView : wraps FastScrollerBuilder ..> PopupTextProvider : detects on adapter AppsAdapter_AppList --|> RecyclerView_Adapter AppsAdapter_AppList ..|> PopupTextProvider AppsAdapter_AppManager --|> RecyclerView_Adapter AppsAdapter_AppManager ..|> PopupTextProvider RecyclerView o-- RecyclerView_Adapter%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%% classDiagram class RecyclerView { +adapter: Adapter +layoutManager: LayoutManager } class FastScrollerBuilder { +FastScrollerBuilder(recyclerView) +useMd2Style() +build() } class PopupTextProvider { <<interface>> +getPopupText(view: View, position: Int): CharSequence } class AppsAdapter_AppList { +filteredApps: List +getPopupText(view, position): CharSequence } class AppsAdapter_AppManager { +filteredApps: List +getPopupText(view, position): CharSequence } class RecyclerView_Adapter { <<abstract>> } FastScrollerBuilder --> RecyclerView : wraps FastScrollerBuilder ..> PopupTextProvider : detects on adapter AppsAdapter_AppList --|> RecyclerView_Adapter AppsAdapter_AppList ..|> PopupTextProvider AppsAdapter_AppManager --|> RecyclerView_Adapter AppsAdapter_AppManager ..|> PopupTextProvider RecyclerView o-- RecyclerView_AdapterReviews (2): Last reviewed commit: "Address Greptile review: move jvmTarget ..." | Re-trigger Greptile