Skip to content

fix(cache): rename LruCache → WeightedLruCache to work around K2 comp…#29

Open
richdr wants to merge 1 commit intomainfrom
fix/k2-lrucache-class-not-emitted
Open

fix(cache): rename LruCache → WeightedLruCache to work around K2 comp…#29
richdr wants to merge 1 commit intomainfrom
fix/k2-lrucache-class-not-emitted

Conversation

@richdr
Copy link
Copy Markdown
Collaborator

@richdr richdr commented Apr 24, 2026

…iler bug

The Kotlin K2 compiler (2.3.10) silently fails to emit the outer .class file for a commonMain class when a dependency JAR contains a class with the same simple name in a different package.

coil-core-jvm-3.2.0.jar ships coil3.util.LruCache<K,V> (also compiled from LruCache.kt). The K2 compiler de-duplicated by simple name and dropped dev.stapler.stelekit.cache.LruCache.class, leaving only the coroutine continuation inner classes (LruCache$get$1.class etc.). Result: ClassNotFoundException on app startup.

Fix: rename to WeightedLruCache, which has no clash in any classpath jar. The name also better documents the distinguishing behaviour (weight-based eviction) vs. the Android / Coil entry-count LRU caches.

Also fix PerformanceDashboard.kt which used Dispatchers.IO directly in commonMain (JVM-only); switched to PlatformDispatcher.IO. This was silently failing compileCommonMainKotlinMetadata and masking the root cause during diagnosis.

…iler bug

The Kotlin K2 compiler (2.3.10) silently fails to emit the outer .class
file for a commonMain class when a dependency JAR contains a class with
the same simple name in a different package.

coil-core-jvm-3.2.0.jar ships `coil3.util.LruCache<K,V>` (also compiled
from LruCache.kt). The K2 compiler de-duplicated by simple name and
dropped `dev.stapler.stelekit.cache.LruCache.class`, leaving only the
coroutine continuation inner classes (LruCache$get$1.class etc.).
Result: ClassNotFoundException on app startup.

Fix: rename to WeightedLruCache, which has no clash in any classpath jar.
The name also better documents the distinguishing behaviour (weight-based
eviction) vs. the Android / Coil entry-count LRU caches.

Also fix PerformanceDashboard.kt which used Dispatchers.IO directly in
commonMain (JVM-only); switched to PlatformDispatcher.IO. This was
silently failing compileCommonMainKotlinMetadata and masking the root
cause during diagnosis.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@tstapler
Copy link
Copy Markdown
Owner

@claude can you please resolve the merge conflicts on this? I believe that I fixed this a different way so we can clean up this Branch. But keep the unimplemented fixes.

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