Fixed
Status Update
Comments
as...@google.com <as...@google.com>
ap...@google.com <ap...@google.com> #2
I simpler example would be appreciated. I tried to download the pull request and build it but it relies on, for example, `rustc` to be installed which I don't have installed on my compose development machine.
Does the program work without the compiler switch. That is, is `"-P", "plugin:androidx.compose.compiler.plugins.kotlin:experimentalStrongSkipping=true",` required to reproduce or is just changing the runtime enough?
Does the program work without the compiler switch. That is, is `"-P", "plugin:androidx.compose.compiler.plugins.kotlin:experimentalStrongSkipping=true",` required to reproduce or is just changing the runtime enough?
am...@gmail.com <am...@gmail.com> #3
Yeah, changing compiler switch(enable/disable StrongSkipping, enable/disable nonSkippingGroup) has no effect, only changing runtime make sense.
Sorry for that, I will try to extract an example when I'm free.
Sorry for that, I will try to extract an example when I'm free.
as...@google.com <as...@google.com> #4
Comment has been deleted.
as...@google.com <as...@google.com> #5
Let me sort it out
The first crash
Reproduce: navigate to a gallery and navigate back
The reason is we have some code assume the forget order of RememberObserver(DisposableEffect), and 52835066c9044647a65dfb566f03131aab46e793
changed the order. Seems this is a intended behaviour.
I will fix it from my side. My bad
The second crash
Reproduce: #4 comment
StackTrace:
We got a wrong object from SlotTable during recompose
Description
Jetpack Compose compiler version: 1.5.4 Android Studio Build: #AI-223.8836.35.2231.11090377, built on November 13, 2023 Kotlin version: 1.9.20
The change introduced by commit
22421ef1f3aab2bb317e164845bf1630606a099c
usescurrentFile.fileEntry.name
field to generate keys to be passed tostartReplaceableGroup
call. I discovered that this field contains the absolute file path, not just the part relative to the project root.In practice that results in binary different artifacts being produced for binary equivalent sources stored under different paths. E.g. builds under
/tmp/ci-build-42/
will always produce binary equal artifacts for a given source code revision, but these artifacts will be different from the ones produced from the same revision under/tmp/ci-build-43/
.Steps to Reproduce or Code Sample to Reproduce:
./gradlew clean build --no-daemon
, store./app/build/intermediates/compile_app_classes_jar/release/classes.jar
ReproducerComposableKt.class
will be the only file different between the resulting jars. By applyingjavap -c
and comparing the output for these classes, you'll see the only difference there is a value for a constant used instartReplaceableGroup
call.For your convenience I also provide projects for compiler versions 1.5.4 and 1.5.3 I used to verify my findings (see
reproducer.tgz
). Also, thefileName
value I extracted with a debugger from 1.5.4 project looks like this: