Remove spread for varargs in restart lambda
The spread is invalid with default params (they are nullable) and it is more performant to pass args directly.
Test: Updated compiler test + bytecode test
diff --git a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/kotlin/androidx/compose/compiler/plugins/kotlin/ComposeBytecodeCodegenTest.kt b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/kotlin/androidx/compose/compiler/plugins/kotlin/ComposeBytecodeCodegenTest.kt
index c0e062a..64c4197 100644
--- a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/kotlin/androidx/compose/compiler/plugins/kotlin/ComposeBytecodeCodegenTest.kt
+++ b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/kotlin/androidx/compose/compiler/plugins/kotlin/ComposeBytecodeCodegenTest.kt
@@ -942,4 +942,23 @@
}
""",
)
+
+ @Test
+ fun testVarargRestartGroup() {
+ validateBytecode(
+ """
+ import androidx.compose.runtime.*
+
+ @Composable
+ fun Foo(vararg text: String) {
+ text.forEach { println(it) }
+ }
+ """,
+ validate = {
+ assertFalse {
+ it.contains("Arrays.copyOf")
+ }
+ }
+ )
+ }
}
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.ComposerParamTransformTests/testStableVarargParams\133useFir = false\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.ComposerParamTransformTests/testStableVarargParams\133useFir = false\135.txt"
index 4538294..4a7d912 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.ComposerParamTransformTests/testStableVarargParams\133useFir = false\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.ComposerParamTransformTests/testStableVarargParams\133useFir = false\135.txt"
@@ -56,7 +56,7 @@
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- B(*values, %composer, updateChangedFlags(%changed or 0b0001))
+ B(values, %composer, updateChangedFlags(%changed or 0b0001))
}
}
@NonRestartableComposable
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.ComposerParamTransformTests/testStableVarargParams\133useFir = true\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.ComposerParamTransformTests/testStableVarargParams\133useFir = true\135.txt"
index 4538294..4a7d912 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.ComposerParamTransformTests/testStableVarargParams\133useFir = true\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.ComposerParamTransformTests/testStableVarargParams\133useFir = true\135.txt"
@@ -56,7 +56,7 @@
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- B(*values, %composer, updateChangedFlags(%changed or 0b0001))
+ B(values, %composer, updateChangedFlags(%changed or 0b0001))
}
}
@NonRestartableComposable
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.ComposerParamTransformTests/testVarargWithNoArgs\133useFir = false\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.ComposerParamTransformTests/testVarargWithNoArgs\133useFir = false\135.txt"
index c02e59d..db9d749 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.ComposerParamTransformTests/testVarargWithNoArgs\133useFir = false\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.ComposerParamTransformTests/testVarargWithNoArgs\133useFir = false\135.txt"
@@ -55,7 +55,7 @@
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- VarArgsFirst(*foo, %composer, updateChangedFlags(%changed or 0b0001))
+ VarArgsFirst(foo, %composer, updateChangedFlags(%changed or 0b0001))
}
}
@Composable
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.ComposerParamTransformTests/testVarargWithNoArgs\133useFir = true\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.ComposerParamTransformTests/testVarargWithNoArgs\133useFir = true\135.txt"
index c02e59d..db9d749 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.ComposerParamTransformTests/testVarargWithNoArgs\133useFir = true\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.ComposerParamTransformTests/testVarargWithNoArgs\133useFir = true\135.txt"
@@ -55,7 +55,7 @@
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- VarArgsFirst(*foo, %composer, updateChangedFlags(%changed or 0b0001))
+ VarArgsFirst(foo, %composer, updateChangedFlags(%changed or 0b0001))
}
}
@Composable
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testArrayDefaultArgWithState\133useFir = false\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testArrayDefaultArgWithState\133useFir = false\135.txt"
index 1c3f685..0a4c81f 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testArrayDefaultArgWithState\133useFir = false\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testArrayDefaultArgWithState\133useFir = false\135.txt"
@@ -69,6 +69,6 @@
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- VarargComposable(state, *values, %composer, updateChangedFlags(%changed or 0b0001), %default)
+ VarargComposable(state, values, %composer, updateChangedFlags(%changed or 0b0001), %default)
}
}
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testArrayDefaultArgWithState\133useFir = true\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testArrayDefaultArgWithState\133useFir = true\135.txt"
index 1c3f685..0a4c81f 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testArrayDefaultArgWithState\133useFir = true\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testArrayDefaultArgWithState\133useFir = true\135.txt"
@@ -69,6 +69,6 @@
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- VarargComposable(state, *values, %composer, updateChangedFlags(%changed or 0b0001), %default)
+ VarargComposable(state, values, %composer, updateChangedFlags(%changed or 0b0001), %default)
}
}
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testPrimitiveVarargParams\133useFir = false\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testPrimitiveVarargParams\133useFir = false\135.txt"
index 852888f..412b79a 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testPrimitiveVarargParams\133useFir = false\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testPrimitiveVarargParams\133useFir = false\135.txt"
@@ -44,6 +44,6 @@
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- B(*values, %composer, updateChangedFlags(%changed or 0b0001))
+ B(values, %composer, updateChangedFlags(%changed or 0b0001))
}
}
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testPrimitiveVarargParams\133useFir = true\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testPrimitiveVarargParams\133useFir = true\135.txt"
index 852888f..412b79a 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testPrimitiveVarargParams\133useFir = true\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testPrimitiveVarargParams\133useFir = true\135.txt"
@@ -44,6 +44,6 @@
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- B(*values, %composer, updateChangedFlags(%changed or 0b0001))
+ B(values, %composer, updateChangedFlags(%changed or 0b0001))
}
}
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testStableVarargParams\133useFir = false\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testStableVarargParams\133useFir = false\135.txt"
index b85294c..2f202d0 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testStableVarargParams\133useFir = false\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testStableVarargParams\133useFir = false\135.txt"
@@ -44,6 +44,6 @@
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- B(*values, %composer, updateChangedFlags(%changed or 0b0001))
+ B(values, %composer, updateChangedFlags(%changed or 0b0001))
}
}
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testStableVarargParams\133useFir = true\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testStableVarargParams\133useFir = true\135.txt"
index b85294c..2f202d0 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testStableVarargParams\133useFir = true\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testStableVarargParams\133useFir = true\135.txt"
@@ -44,6 +44,6 @@
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- B(*values, %composer, updateChangedFlags(%changed or 0b0001))
+ B(values, %composer, updateChangedFlags(%changed or 0b0001))
}
}
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testUnstableVarargParams\133useFir = false\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testUnstableVarargParams\133useFir = false\135.txt"
index 5c211f3..3339116 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testUnstableVarargParams\133useFir = false\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testUnstableVarargParams\133useFir = false\135.txt"
@@ -44,6 +44,6 @@
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- B(*values, %composer, updateChangedFlags(%changed or 0b0001))
+ B(values, %composer, updateChangedFlags(%changed or 0b0001))
}
}
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testUnstableVarargParams\133useFir = true\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testUnstableVarargParams\133useFir = true\135.txt"
index 5c211f3..3339116 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testUnstableVarargParams\133useFir = true\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.FunctionBodySkippingTransformTests/testUnstableVarargParams\133useFir = true\135.txt"
@@ -44,6 +44,6 @@
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- B(*values, %composer, updateChangedFlags(%changed or 0b0001))
+ B(values, %composer, updateChangedFlags(%changed or 0b0001))
}
}
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTests/testVarargsIntrinsicRemember\133useFir = false\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTests/testVarargsIntrinsicRemember\133useFir = false\135.txt"
index 2576b60..23ae234 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTests/testVarargsIntrinsicRemember\133useFir = false\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTests/testVarargsIntrinsicRemember\133useFir = false\135.txt"
@@ -62,6 +62,6 @@
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- Test(*strings, %composer, updateChangedFlags(%changed or 0b0001))
+ Test(strings, %composer, updateChangedFlags(%changed or 0b0001))
}
}
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTests/testVarargsIntrinsicRemember\133useFir = true\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTests/testVarargsIntrinsicRemember\133useFir = true\135.txt"
index 2576b60..23ae234 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTests/testVarargsIntrinsicRemember\133useFir = true\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTests/testVarargsIntrinsicRemember\133useFir = true\135.txt"
@@ -62,6 +62,6 @@
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- Test(*strings, %composer, updateChangedFlags(%changed or 0b0001))
+ Test(strings, %composer, updateChangedFlags(%changed or 0b0001))
}
}
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testRuntimeStableVarArgs\133useFir = false, intrinsicRemember = false\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testRuntimeStableVarArgs\133useFir = false, intrinsicRemember = false\135.txt"
index 7931cd3..33d8635 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testRuntimeStableVarArgs\133useFir = false, intrinsicRemember = false\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testRuntimeStableVarArgs\133useFir = false, intrinsicRemember = false\135.txt"
@@ -53,7 +53,7 @@
}
val tmp0_rcvr = <this>
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- tmp0_rcvr.Test(*x, %composer, updateChangedFlags(%changed or 0b0001))
+ tmp0_rcvr.Test(x, %composer, updateChangedFlags(%changed or 0b0001))
}
}
static val %stable: Int = 0
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testRuntimeStableVarArgs\133useFir = false, intrinsicRemember = true\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testRuntimeStableVarArgs\133useFir = false, intrinsicRemember = true\135.txt"
index 7931cd3..33d8635 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testRuntimeStableVarArgs\133useFir = false, intrinsicRemember = true\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testRuntimeStableVarArgs\133useFir = false, intrinsicRemember = true\135.txt"
@@ -53,7 +53,7 @@
}
val tmp0_rcvr = <this>
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- tmp0_rcvr.Test(*x, %composer, updateChangedFlags(%changed or 0b0001))
+ tmp0_rcvr.Test(x, %composer, updateChangedFlags(%changed or 0b0001))
}
}
static val %stable: Int = 0
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testRuntimeStableVarArgs\133useFir = true, intrinsicRemember = false\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testRuntimeStableVarArgs\133useFir = true, intrinsicRemember = false\135.txt"
index 7931cd3..33d8635 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testRuntimeStableVarArgs\133useFir = true, intrinsicRemember = false\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testRuntimeStableVarArgs\133useFir = true, intrinsicRemember = false\135.txt"
@@ -53,7 +53,7 @@
}
val tmp0_rcvr = <this>
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- tmp0_rcvr.Test(*x, %composer, updateChangedFlags(%changed or 0b0001))
+ tmp0_rcvr.Test(x, %composer, updateChangedFlags(%changed or 0b0001))
}
}
static val %stable: Int = 0
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testRuntimeStableVarArgs\133useFir = true, intrinsicRemember = true\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testRuntimeStableVarArgs\133useFir = true, intrinsicRemember = true\135.txt"
index 7931cd3..33d8635 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testRuntimeStableVarArgs\133useFir = true, intrinsicRemember = true\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testRuntimeStableVarArgs\133useFir = true, intrinsicRemember = true\135.txt"
@@ -53,7 +53,7 @@
}
val tmp0_rcvr = <this>
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- tmp0_rcvr.Test(*x, %composer, updateChangedFlags(%changed or 0b0001))
+ tmp0_rcvr.Test(x, %composer, updateChangedFlags(%changed or 0b0001))
}
}
static val %stable: Int = 0
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testVarArgs\133useFir = false, intrinsicRemember = false\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testVarArgs\133useFir = false, intrinsicRemember = false\135.txt"
index 24eb092..0d2fd4a 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testVarArgs\133useFir = false, intrinsicRemember = false\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testVarArgs\133useFir = false, intrinsicRemember = false\135.txt"
@@ -43,7 +43,7 @@
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- Varargs(*ints, %composer, updateChangedFlags(%changed or 0b0001))
+ Varargs(ints, %composer, updateChangedFlags(%changed or 0b0001))
}
}
@Composable
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testVarArgs\133useFir = false, intrinsicRemember = true\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testVarArgs\133useFir = false, intrinsicRemember = true\135.txt"
index 24eb092..0d2fd4a 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testVarArgs\133useFir = false, intrinsicRemember = true\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testVarArgs\133useFir = false, intrinsicRemember = true\135.txt"
@@ -43,7 +43,7 @@
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- Varargs(*ints, %composer, updateChangedFlags(%changed or 0b0001))
+ Varargs(ints, %composer, updateChangedFlags(%changed or 0b0001))
}
}
@Composable
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testVarArgs\133useFir = true, intrinsicRemember = false\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testVarArgs\133useFir = true, intrinsicRemember = false\135.txt"
index 24eb092..0d2fd4a 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testVarArgs\133useFir = true, intrinsicRemember = false\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testVarArgs\133useFir = true, intrinsicRemember = false\135.txt"
@@ -43,7 +43,7 @@
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- Varargs(*ints, %composer, updateChangedFlags(%changed or 0b0001))
+ Varargs(ints, %composer, updateChangedFlags(%changed or 0b0001))
}
}
@Composable
diff --git "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testVarArgs\133useFir = true, intrinsicRemember = true\135.txt" "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testVarArgs\133useFir = true, intrinsicRemember = true\135.txt"
index 24eb092..0d2fd4a 100644
--- "a/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testVarArgs\133useFir = true, intrinsicRemember = true\135.txt"
+++ "b/plugins/compose/compiler-hosted/integration-tests/src/jvmTest/resources/golden/androidx.compose.compiler.plugins.kotlin.StrongSkippingModeTransformTests/testVarArgs\133useFir = true, intrinsicRemember = true\135.txt"
@@ -43,7 +43,7 @@
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
- Varargs(*ints, %composer, updateChangedFlags(%changed or 0b0001))
+ Varargs(ints, %composer, updateChangedFlags(%changed or 0b0001))
}
}
@Composable
diff --git a/plugins/compose/compiler-hosted/runtime-tests/src/commonTest/kotlin/androidx/compose/compiler/test/CompositionTests.kt b/plugins/compose/compiler-hosted/runtime-tests/src/commonTest/kotlin/androidx/compose/compiler/test/CompositionTests.kt
index 0a31162..126fa30 100644
--- a/plugins/compose/compiler-hosted/runtime-tests/src/commonTest/kotlin/androidx/compose/compiler/test/CompositionTests.kt
+++ b/plugins/compose/compiler-hosted/runtime-tests/src/commonTest/kotlin/androidx/compose/compiler/test/CompositionTests.kt
@@ -270,6 +270,21 @@
Text("c")
}
}
+
+ @Test
+ fun varargsInRestartableComposable() = compositionTest {
+ val state1 = mutableStateOf(Unit, neverEqualPolicy())
+ var counter = 0
+ compose {
+ RestartableVararg(state1) { counter++ }
+ }
+
+ assertEquals(1, counter)
+ state1.value = Unit
+ advance()
+
+ assertEquals(2, counter)
+ }
}
@Composable
@@ -337,4 +352,12 @@
@Composable
fun MultipleText(vararg strings: String = emptyArray()) {
strings.forEach { Text(it) }
+}
+
+@Composable
+fun RestartableVararg(vararg states: State<Unit> = emptyArray(), invoke: () -> Unit) {
+ invoke()
+ for (state in states) {
+ state.value
+ }
}
\ No newline at end of file
diff --git a/plugins/compose/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt b/plugins/compose/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
index c482475..7feb20f 100644
--- a/plugins/compose/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
+++ b/plugins/compose/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
@@ -1774,29 +1774,8 @@
irCall(function.symbol).apply {
symbol.owner
.valueParameters
- .fastForEachIndexed { index, param ->
- if (param.isVararg) {
- putValueArgument(
- index,
- IrVarargImpl(
- UNDEFINED_OFFSET,
- UNDEFINED_OFFSET,
- param.type,
- param.varargElementType!!,
- elements = listOf(
- IrSpreadElementImpl(
- UNDEFINED_OFFSET,
- UNDEFINED_OFFSET,
- irGet(param)
- )
- )
- )
- )
- } else {
- // NOTE(lmr): should we be using the parameter here, or the temporary
- // with the default value?
- putValueArgument(index, irGet(param))
- }
+ .fastForEach { param ->
+ arguments[param.indexInParameters] = irGet(param)
}
// new composer