Status Update
Comments
gr...@google.com <gr...@google.com> #2
val textAlign: TextAlign get() = this.paragraphStyle.textAlign
@Deprecated("Kept for backwards compatibility.", level = DeprecationLevel.WARNING)
@get:JvmName("getTextAlign")
@Suppress("unused")
val deprecated_boxing_textAlign: TextAlign? get() = this.textAlign
and the bytecode that studio shows me:
// access flags 0x11
public final getTextAlign-e0LSkKk()I
L0
LINENUMBER 1405 L0
ALOAD 0
GETFIELD androidx/compose/ui/text/TextStyle.paragraphStyle : Landroidx/compose/ui/text/ParagraphStyle;
INVOKEVIRTUAL androidx/compose/ui/text/ParagraphStyle.getTextAlign-e0LSkKk ()I
IRETURN
L1
LOCALVARIABLE this Landroidx/compose/ui/text/TextStyle; L0 L1 0
MAXSTACK = 1
MAXLOCALS = 1
// DEPRECATED
// access flags 0x20011
public final getTextAlign()Landroidx/compose/ui/text/style/TextAlign;
@Lkotlin/jvm/JvmName;(name="getTextAlign") // invisible
@Lorg/jetbrains/annotations/Nullable;() // invisible
L0
LINENUMBER 1410 L0
ALOAD 0
INVOKEVIRTUAL androidx/compose/ui/text/TextStyle.getTextAlign-e0LSkKk ()I
INVOKESTATIC androidx/compose/ui/text/style/TextAlign.box-impl (I)Landroidx/compose/ui/text/style/TextAlign;
ARETURN
L1
LOCALVARIABLE this Landroidx/compose/ui/text/TextStyle; L0 L1 0
MAXSTACK = 1
MAXLOCALS = 1
gr...@google.com <gr...@google.com> #3
Inspected the JARs
❯ javap -cp 1.6.0-rc01-classes.jar androidx.compose.ui.text.TextStyle | grep getTextAlign
public final int getTextAlign-e0LSkKk();
public final androidx.compose.ui.text.style.TextAlign getTextAlign();
public static void getTextAlign$annotations();
❯ javap -cp 1.5.4-classes.jar androidx.compose.ui.text.TextStyle | grep getTextAlign
public final androidx.compose.ui.text.style.TextAlign getTextAlign-buA522U();
gr...@google.com <gr...@google.com> #4
1.5.4
, but a non-null type in 1.6.0-rc01
. The rest of the contents of the hash are the same.
gr...@google.com <gr...@google.com> #5
Possible fix looks like it would be to include the hash in JvmName
annotation.
@get:JvmName("getTextAlign-buA522U")
gr...@google.com <gr...@google.com>
so...@google.com <so...@google.com> #6
In addition to TextAlign, we've changed TextDirection, Hyphens and LineBreak at the same time. So let's update all of them at once.
gr...@google.com <gr...@google.com> #7
Created
gr...@google.com <gr...@google.com> #8
minimal repro attached
gr...@google.com <gr...@google.com> #9
Verified the fix in
In Android Studio I built aosp/2918751 by running the demo app.
Then, I found the jar file used in the build at:
~/workspace/androidx-main/out/androidx/compose/ui/ui-text/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar
I modified the repro project build.gradle
(project, not library) to remove the module being changed via adding the following above dependencies
at the top level:
configurations.all {
exclude(group = "androidx.compose.ui", module = "ui-text")
}
and then adding it back in to the project via the following inside the dependencies
:
dependencies {
...
implementation(files("~/workspace/androidx-main/out/androidx/compose/ui/ui-text/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar"))
}
By this not immediately crashing on start up, it verifies that the currently incompatible methods have been made compatible with the change in aosp/2918751.
ap...@google.com <ap...@google.com> #10
Branch: androidx-main
commit 9ed6b9a2f42e3a1f0c4c5e123f0e2c703b7d4fed
Author: Grant Toepfer <grantapher@google.com>
Date: Fri Jan 19 12:36:15 2024
Fix binary backwards compatibility in Text/ParagraphStyle
go/mangling-binary-compat
Since the properties introduced for binary backwards compatibility didn't include the inline class mangling in their jvm name, the changes were not truly backwards compatible. This change adds the correct inline class mangling to the jvm names of the getter methods.
Relnote: Fixed backwards binary incompatibility in TextStyle and ParagraphStyle
Test: Manually verified (see
Fixes:
Change-Id: I179f0ff77b3b85a05d98a28405ad936d2e9413cf
M compose/ui/ui-text/api/current.ignore
M compose/ui/ui-text/api/current.txt
M compose/ui/ui-text/api/restricted_current.ignore
M compose/ui/ui-text/api/restricted_current.txt
M compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/ParagraphStyle.kt
M compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/TextStyle.kt
gr...@google.com <gr...@google.com> #11
Expect the fix in the next compose release.
na...@google.com <na...@google.com> #12
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.compose.ui:ui-text:1.6.0
androidx.compose.ui:ui-text-android:1.6.0
androidx.compose.ui:ui-text-desktop:1.6.0
Description
Jetpack Compose version: 1.6.0-rc01
Jetpack Compose component(s) used: ui
Android Studio Build: 2023.2.1 Beta 2
Kotlin version: 1.9.20
Steps to Reproduce or Code Sample to Reproduce:
Compile a module with Compose 1.5.x, that has code reading a TextStyle.textAlign property
consume that module in another project that is using compose 1.6
at runtime crashes
Stack trace (if applicable):
I see in 1.6 there is an attempt to handle this incompatibility by adding this method, but its not working: