blob: f021d5c2ea130047b4245283bcf1069e533c6229 [file] [log] [blame]
/*
* Copyright 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package androidx.compose.compiler.plugins.kotlin
import org.intellij.lang.annotations.Language
import org.junit.Test
class DefaultParamTransformTests : ComposeIrTransformTest() {
private fun defaultParams(
@Language("kotlin")
unchecked: String,
@Language("kotlin")
checked: String,
expectedTransformed: String,
dumpTree: Boolean = false
) = verifyComposeIrTransform(
"""
import androidx.compose.runtime.Composable
import androidx.compose.runtime.NonRestartableComposable
$checked
""".trimIndent(),
expectedTransformed,
"""
import androidx.compose.runtime.Composable
import androidx.compose.runtime.NonRestartableComposable
$unchecked
fun used(x: Any?) {}
""".trimIndent(),
dumpTree = dumpTree
)
@Test
fun testComposableWithAndWithoutDefaultParams(): Unit = defaultParams(
"""
@Composable fun A(x: Int) { }
@Composable fun B(x: Int = 1) { }
""",
"""
@Composable
fun Test() {
A(1)
B()
B(2)
}
""",
"""
@Composable
fun Test(%composer: Composer?, %changed: Int) {
%composer = %composer.startRestartGroup(<>)
sourceInformation(%composer, "C(Test)<A(1)>,<B()>,<B(2)>:Test.kt")
if (%changed !== 0 || !%composer.skipping) {
A(1, %composer, 0b0110)
B(0, %composer, 0, 0b0001)
B(2, %composer, 0b0110, 0)
} else {
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
Test(%composer, %changed or 0b0001)
}
}
"""
)
@Test
fun testInlineClassDefaultParameter(): Unit = defaultParams(
"""
inline class Foo(val value: Int)
""",
"""
@Composable
fun Example(foo: Foo = Foo(0)) {
print(foo)
}
@Composable
fun Test() {
Example()
}
""",
"""
@Composable
fun Example(foo: Foo, %composer: Composer?, %changed: Int, %default: Int) {
%composer = %composer.startRestartGroup(<>)
sourceInformation(%composer, "C(Example)P(0:Foo):Test.kt")
val %dirty = %changed
if (%default and 0b0001 !== 0) {
%dirty = %dirty or 0b0110
} else if (%changed and 0b1110 === 0) {
%dirty = %dirty or if (%composer.changed(<unsafe-coerce>(foo))) 0b0100 else 0b0010
}
if (%dirty and 0b1011 !== 0b0010 || !%composer.skipping) {
if (%default and 0b0001 !== 0) {
foo = Foo(0)
}
print(foo)
} else {
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
Example(foo, %composer, %changed or 0b0001, %default)
}
}
@Composable
fun Test(%composer: Composer?, %changed: Int) {
%composer = %composer.startRestartGroup(<>)
sourceInformation(%composer, "C(Test)<Exampl...>:Test.kt")
if (%changed !== 0 || !%composer.skipping) {
Example(<unsafe-coerce>(0), %composer, 0, 0b0001)
} else {
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
Test(%composer, %changed or 0b0001)
}
}
"""
)
@Test
fun testParameterHoles(): Unit = defaultParams(
"""
@Composable fun A(a: Int = 0, b: Int = 1, c: Int = 2, d: Int = 3, e: Int = 4) { }
""",
"""
@Composable
fun Test() {
A(0, 1, 2)
A(a = 0, c = 2)
}
""",
"""
@Composable
fun Test(%composer: Composer?, %changed: Int) {
%composer = %composer.startRestartGroup(<>)
sourceInformation(%composer, "C(Test)<A(0,>,<A(a>:Test.kt")
if (%changed !== 0 || !%composer.skipping) {
A(0, 1, 2, 0, 0, %composer, 0b000110110110, 0b00011000)
A(0, 0, 2, 0, 0, %composer, 0b000110000110, 0b00011010)
} else {
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
Test(%composer, %changed or 0b0001)
}
}
"""
)
@Test
fun testUnusedDefaultComposableLambda(): Unit = defaultParams(
"""
""",
"""
inline fun Bar(unused: @Composable () -> Unit = { }) {}
fun Foo() { Bar() }
""",
"""
fun Bar(unused: Function2<Composer, Int, Unit> = { %composer: Composer?, %changed: Int ->
%composer.startReplaceableGroup(<>)
sourceInformation(%composer, "C:Test.kt")
if (%changed and 0b1011 !== 0b0010 || !%composer.skipping) {
Unit
} else {
%composer.skipToGroupEnd()
}
%composer.endReplaceableGroup()
}
) { }
fun Foo() {
Bar()
}
"""
)
@Test
fun testNonStaticDefaultExpressions(): Unit = defaultParams(
"""
fun makeInt(): Int = 123
""",
"""
@Composable
fun Test(x: Int = makeInt()) {
used(x)
}
""",
"""
@Composable
fun Test(x: Int, %composer: Composer?, %changed: Int, %default: Int) {
%composer = %composer.startRestartGroup(<>)
sourceInformation(%composer, "C(Test):Test.kt")
val %dirty = %changed
if (%changed and 0b1110 === 0) {
%dirty = %dirty or if (%default and 0b0001 === 0 && %composer.changed(x)) 0b0100 else 0b0010
}
if (%dirty and 0b1011 !== 0b0010 || !%composer.skipping) {
%composer.startDefaults()
if (%changed and 0b0001 === 0 || %composer.defaultsInvalid) {
if (%default and 0b0001 !== 0) {
x = makeInt()
%dirty = %dirty and 0b1110.inv()
}
} else {
%composer.skipToGroupEnd()
if (%default and 0b0001 !== 0) {
%dirty = %dirty and 0b1110.inv()
}
}
%composer.endDefaults()
used(x)
} else {
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
Test(x, %composer, %changed or 0b0001, %default)
}
}
"""
)
@Test
fun testEarlierParameterReferences(): Unit = defaultParams(
"""
""",
"""
@Composable
fun A(a: Int = 0, b: Int = a + 1) {
print(a)
print(b)
}
""",
"""
@Composable
fun A(a: Int, b: Int, %composer: Composer?, %changed: Int, %default: Int) {
%composer = %composer.startRestartGroup(<>)
sourceInformation(%composer, "C(A):Test.kt")
val %dirty = %changed
if (%default and 0b0001 !== 0) {
%dirty = %dirty or 0b0110
} else if (%changed and 0b1110 === 0) {
%dirty = %dirty or if (%composer.changed(a)) 0b0100 else 0b0010
}
if (%changed and 0b01110000 === 0) {
%dirty = %dirty or if (%default and 0b0010 === 0 && %composer.changed(b)) 0b00100000 else 0b00010000
}
if (%dirty and 0b01011011 !== 0b00010010 || !%composer.skipping) {
%composer.startDefaults()
if (%changed and 0b0001 === 0 || %composer.defaultsInvalid) {
if (%default and 0b0001 !== 0) {
a = 0
}
if (%default and 0b0010 !== 0) {
b = a + 1
%dirty = %dirty and 0b01110000.inv()
}
} else {
%composer.skipToGroupEnd()
if (%default and 0b0010 !== 0) {
%dirty = %dirty and 0b01110000.inv()
}
}
%composer.endDefaults()
print(a)
print(b)
} else {
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
A(a, b, %composer, %changed or 0b0001, %default)
}
}
"""
)
@Test
fun test30Parameters(): Unit = defaultParams(
"""
""",
"""
@Composable
fun Example(
a00: Int = 0,
a01: Int = 0,
a02: Int = 0,
a03: Int = 0,
a04: Int = 0,
a05: Int = 0,
a06: Int = 0,
a07: Int = 0,
a08: Int = 0,
a09: Int = 0,
a10: Int = 0,
a11: Int = 0,
a12: Int = 0,
a13: Int = 0,
a14: Int = 0,
a15: Int = 0,
a16: Int = 0,
a17: Int = 0,
a18: Int = 0,
a19: Int = 0,
a20: Int = 0,
a21: Int = 0,
a22: Int = 0,
a23: Int = 0,
a24: Int = 0,
a25: Int = 0,
a26: Int = 0,
a27: Int = 0,
a28: Int = 0,
a29: Int = 0,
a30: Int = 0
) {
used(a00)
used(a01)
used(a02)
used(a03)
used(a04)
used(a05)
used(a06)
used(a07)
used(a08)
used(a09)
used(a10)
used(a11)
used(a12)
used(a13)
used(a14)
used(a15)
used(a16)
used(a17)
used(a18)
used(a19)
used(a20)
used(a21)
used(a22)
used(a23)
used(a24)
used(a25)
used(a26)
used(a27)
used(a28)
used(a29)
used(a30)
}
""",
"""
@Composable
fun Example(a00: Int, a01: Int, a02: Int, a03: Int, a04: Int, a05: Int, a06: Int, a07: Int, a08: Int, a09: Int, a10: Int, a11: Int, a12: Int, a13: Int, a14: Int, a15: Int, a16: Int, a17: Int, a18: Int, a19: Int, a20: Int, a21: Int, a22: Int, a23: Int, a24: Int, a25: Int, a26: Int, a27: Int, a28: Int, a29: Int, a30: Int, %composer: Composer?, %changed: Int, %changed1: Int, %changed2: Int, %changed3: Int, %default: Int) {
%composer = %composer.startRestartGroup(<>)
sourceInformation(%composer, "C(Example):Test.kt")
val %dirty = %changed
val %dirty1 = %changed1
val %dirty2 = %changed2
val %dirty3 = %changed3
if (%default and 0b0001 !== 0) {
%dirty = %dirty or 0b0110
} else if (%changed and 0b1110 === 0) {
%dirty = %dirty or if (%composer.changed(a00)) 0b0100 else 0b0010
}
if (%default and 0b0010 !== 0) {
%dirty = %dirty or 0b00110000
} else if (%changed and 0b01110000 === 0) {
%dirty = %dirty or if (%composer.changed(a01)) 0b00100000 else 0b00010000
}
if (%default and 0b0100 !== 0) {
%dirty = %dirty or 0b000110000000
} else if (%changed and 0b001110000000 === 0) {
%dirty = %dirty or if (%composer.changed(a02)) 0b000100000000 else 0b10000000
}
if (%default and 0b1000 !== 0) {
%dirty = %dirty or 0b110000000000
} else if (%changed and 0b0001110000000000 === 0) {
%dirty = %dirty or if (%composer.changed(a03)) 0b100000000000 else 0b010000000000
}
if (%default and 0b00010000 !== 0) {
%dirty = %dirty or 0b0110000000000000
} else if (%changed and 0b1110000000000000 === 0) {
%dirty = %dirty or if (%composer.changed(a04)) 0b0100000000000000 else 0b0010000000000000
}
if (%default and 0b00100000 !== 0) {
%dirty = %dirty or 0b00110000000000000000
} else if (%changed and 0b01110000000000000000 === 0) {
%dirty = %dirty or if (%composer.changed(a05)) 0b00100000000000000000 else 0b00010000000000000000
}
if (%default and 0b01000000 !== 0) {
%dirty = %dirty or 0b000110000000000000000000
} else if (%changed and 0b001110000000000000000000 === 0) {
%dirty = %dirty or if (%composer.changed(a06)) 0b000100000000000000000000 else 0b10000000000000000000
}
if (%default and 0b10000000 !== 0) {
%dirty = %dirty or 0b110000000000000000000000
} else if (%changed and 0b0001110000000000000000000000 === 0) {
%dirty = %dirty or if (%composer.changed(a07)) 0b100000000000000000000000 else 0b010000000000000000000000
}
if (%default and 0b000100000000 !== 0) {
%dirty = %dirty or 0b0110000000000000000000000000
} else if (%changed and 0b1110000000000000000000000000 === 0) {
%dirty = %dirty or if (%composer.changed(a08)) 0b0100000000000000000000000000 else 0b0010000000000000000000000000
}
if (%default and 0b001000000000 !== 0) {
%dirty = %dirty or 0b00110000000000000000000000000000
} else if (%changed and 0b01110000000000000000000000000000 === 0) {
%dirty = %dirty or if (%composer.changed(a09)) 0b00100000000000000000000000000000 else 0b00010000000000000000000000000000
}
if (%default and 0b010000000000 !== 0) {
%dirty1 = %dirty1 or 0b0110
} else if (%changed1 and 0b1110 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a10)) 0b0100 else 0b0010
}
if (%default and 0b100000000000 !== 0) {
%dirty1 = %dirty1 or 0b00110000
} else if (%changed1 and 0b01110000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a11)) 0b00100000 else 0b00010000
}
if (%default and 0b0001000000000000 !== 0) {
%dirty1 = %dirty1 or 0b000110000000
} else if (%changed1 and 0b001110000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a12)) 0b000100000000 else 0b10000000
}
if (%default and 0b0010000000000000 !== 0) {
%dirty1 = %dirty1 or 0b110000000000
} else if (%changed1 and 0b0001110000000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a13)) 0b100000000000 else 0b010000000000
}
if (%default and 0b0100000000000000 !== 0) {
%dirty1 = %dirty1 or 0b0110000000000000
} else if (%changed1 and 0b1110000000000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a14)) 0b0100000000000000 else 0b0010000000000000
}
if (%default and 0b1000000000000000 !== 0) {
%dirty1 = %dirty1 or 0b00110000000000000000
} else if (%changed1 and 0b01110000000000000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a15)) 0b00100000000000000000 else 0b00010000000000000000
}
if (%default and 0b00010000000000000000 !== 0) {
%dirty1 = %dirty1 or 0b000110000000000000000000
} else if (%changed1 and 0b001110000000000000000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a16)) 0b000100000000000000000000 else 0b10000000000000000000
}
if (%default and 0b00100000000000000000 !== 0) {
%dirty1 = %dirty1 or 0b110000000000000000000000
} else if (%changed1 and 0b0001110000000000000000000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a17)) 0b100000000000000000000000 else 0b010000000000000000000000
}
if (%default and 0b01000000000000000000 !== 0) {
%dirty1 = %dirty1 or 0b0110000000000000000000000000
} else if (%changed1 and 0b1110000000000000000000000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a18)) 0b0100000000000000000000000000 else 0b0010000000000000000000000000
}
if (%default and 0b10000000000000000000 !== 0) {
%dirty1 = %dirty1 or 0b00110000000000000000000000000000
} else if (%changed1 and 0b01110000000000000000000000000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a19)) 0b00100000000000000000000000000000 else 0b00010000000000000000000000000000
}
if (%default and 0b000100000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b0110
} else if (%changed2 and 0b1110 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a20)) 0b0100 else 0b0010
}
if (%default and 0b001000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b00110000
} else if (%changed2 and 0b01110000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a21)) 0b00100000 else 0b00010000
}
if (%default and 0b010000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b000110000000
} else if (%changed2 and 0b001110000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a22)) 0b000100000000 else 0b10000000
}
if (%default and 0b100000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b110000000000
} else if (%changed2 and 0b0001110000000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a23)) 0b100000000000 else 0b010000000000
}
if (%default and 0b0001000000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b0110000000000000
} else if (%changed2 and 0b1110000000000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a24)) 0b0100000000000000 else 0b0010000000000000
}
if (%default and 0b0010000000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b00110000000000000000
} else if (%changed2 and 0b01110000000000000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a25)) 0b00100000000000000000 else 0b00010000000000000000
}
if (%default and 0b0100000000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b000110000000000000000000
} else if (%changed2 and 0b001110000000000000000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a26)) 0b000100000000000000000000 else 0b10000000000000000000
}
if (%default and 0b1000000000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b110000000000000000000000
} else if (%changed2 and 0b0001110000000000000000000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a27)) 0b100000000000000000000000 else 0b010000000000000000000000
}
if (%default and 0b00010000000000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b0110000000000000000000000000
} else if (%changed2 and 0b1110000000000000000000000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a28)) 0b0100000000000000000000000000 else 0b0010000000000000000000000000
}
if (%default and 0b00100000000000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b00110000000000000000000000000000
} else if (%changed2 and 0b01110000000000000000000000000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a29)) 0b00100000000000000000000000000000 else 0b00010000000000000000000000000000
}
if (%default and 0b01000000000000000000000000000000 !== 0) {
%dirty3 = %dirty3 or 0b0110
} else if (%changed3 and 0b1110 === 0) {
%dirty3 = %dirty3 or if (%composer.changed(a30)) 0b0100 else 0b0010
}
if (%dirty and 0b01011011011011011011011011011011 !== 0b00010010010010010010010010010010 || %dirty1 and 0b01011011011011011011011011011011 !== 0b00010010010010010010010010010010 || %dirty2 and 0b01011011011011011011011011011011 !== 0b00010010010010010010010010010010 || %dirty3 and 0b1011 !== 0b0010 || !%composer.skipping) {
if (%default and 0b0001 !== 0) {
a00 = 0
}
if (%default and 0b0010 !== 0) {
a01 = 0
}
if (%default and 0b0100 !== 0) {
a02 = 0
}
if (%default and 0b1000 !== 0) {
a03 = 0
}
if (%default and 0b00010000 !== 0) {
a04 = 0
}
if (%default and 0b00100000 !== 0) {
a05 = 0
}
if (%default and 0b01000000 !== 0) {
a06 = 0
}
if (%default and 0b10000000 !== 0) {
a07 = 0
}
if (%default and 0b000100000000 !== 0) {
a08 = 0
}
if (%default and 0b001000000000 !== 0) {
a09 = 0
}
if (%default and 0b010000000000 !== 0) {
a10 = 0
}
if (%default and 0b100000000000 !== 0) {
a11 = 0
}
if (%default and 0b0001000000000000 !== 0) {
a12 = 0
}
if (%default and 0b0010000000000000 !== 0) {
a13 = 0
}
if (%default and 0b0100000000000000 !== 0) {
a14 = 0
}
if (%default and 0b1000000000000000 !== 0) {
a15 = 0
}
if (%default and 0b00010000000000000000 !== 0) {
a16 = 0
}
if (%default and 0b00100000000000000000 !== 0) {
a17 = 0
}
if (%default and 0b01000000000000000000 !== 0) {
a18 = 0
}
if (%default and 0b10000000000000000000 !== 0) {
a19 = 0
}
if (%default and 0b000100000000000000000000 !== 0) {
a20 = 0
}
if (%default and 0b001000000000000000000000 !== 0) {
a21 = 0
}
if (%default and 0b010000000000000000000000 !== 0) {
a22 = 0
}
if (%default and 0b100000000000000000000000 !== 0) {
a23 = 0
}
if (%default and 0b0001000000000000000000000000 !== 0) {
a24 = 0
}
if (%default and 0b0010000000000000000000000000 !== 0) {
a25 = 0
}
if (%default and 0b0100000000000000000000000000 !== 0) {
a26 = 0
}
if (%default and 0b1000000000000000000000000000 !== 0) {
a27 = 0
}
if (%default and 0b00010000000000000000000000000000 !== 0) {
a28 = 0
}
if (%default and 0b00100000000000000000000000000000 !== 0) {
a29 = 0
}
if (%default and 0b01000000000000000000000000000000 !== 0) {
a30 = 0
}
used(a00)
used(a01)
used(a02)
used(a03)
used(a04)
used(a05)
used(a06)
used(a07)
used(a08)
used(a09)
used(a10)
used(a11)
used(a12)
used(a13)
used(a14)
used(a15)
used(a16)
used(a17)
used(a18)
used(a19)
used(a20)
used(a21)
used(a22)
used(a23)
used(a24)
used(a25)
used(a26)
used(a27)
used(a28)
used(a29)
used(a30)
} else {
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
Example(a00, a01, a02, a03, a04, a05, a06, a07, a08, a09, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, %composer, %changed or 0b0001, %changed1, %changed2, %changed3, %default)
}
}
"""
)
@Test
fun test31Parameters(): Unit = defaultParams(
"""
""",
"""
@Composable
fun Example(
a00: Int = 0,
a01: Int = 0,
a02: Int = 0,
a03: Int = 0,
a04: Int = 0,
a05: Int = 0,
a06: Int = 0,
a07: Int = 0,
a08: Int = 0,
a09: Int = 0,
a10: Int = 0,
a11: Int = 0,
a12: Int = 0,
a13: Int = 0,
a14: Int = 0,
a15: Int = 0,
a16: Int = 0,
a17: Int = 0,
a18: Int = 0,
a19: Int = 0,
a20: Int = 0,
a21: Int = 0,
a22: Int = 0,
a23: Int = 0,
a24: Int = 0,
a25: Int = 0,
a26: Int = 0,
a27: Int = 0,
a28: Int = 0,
a29: Int = 0,
a30: Int = 0,
a31: Int = 0
) {
used(a00)
used(a01)
used(a02)
used(a03)
used(a04)
used(a05)
used(a06)
used(a07)
used(a08)
used(a09)
used(a10)
used(a11)
used(a12)
used(a13)
used(a14)
used(a15)
used(a16)
used(a17)
used(a18)
used(a19)
used(a20)
used(a21)
used(a22)
used(a23)
used(a24)
used(a25)
used(a26)
used(a27)
used(a28)
used(a29)
used(a30)
used(a31)
}
""",
"""
@Composable
fun Example(a00: Int, a01: Int, a02: Int, a03: Int, a04: Int, a05: Int, a06: Int, a07: Int, a08: Int, a09: Int, a10: Int, a11: Int, a12: Int, a13: Int, a14: Int, a15: Int, a16: Int, a17: Int, a18: Int, a19: Int, a20: Int, a21: Int, a22: Int, a23: Int, a24: Int, a25: Int, a26: Int, a27: Int, a28: Int, a29: Int, a30: Int, a31: Int, %composer: Composer?, %changed: Int, %changed1: Int, %changed2: Int, %changed3: Int, %default: Int, %default1: Int) {
%composer = %composer.startRestartGroup(<>)
sourceInformation(%composer, "C(Example):Test.kt")
val %dirty = %changed
val %dirty1 = %changed1
val %dirty2 = %changed2
val %dirty3 = %changed3
if (%default and 0b0001 !== 0) {
%dirty = %dirty or 0b0110
} else if (%changed and 0b1110 === 0) {
%dirty = %dirty or if (%composer.changed(a00)) 0b0100 else 0b0010
}
if (%default and 0b0010 !== 0) {
%dirty = %dirty or 0b00110000
} else if (%changed and 0b01110000 === 0) {
%dirty = %dirty or if (%composer.changed(a01)) 0b00100000 else 0b00010000
}
if (%default and 0b0100 !== 0) {
%dirty = %dirty or 0b000110000000
} else if (%changed and 0b001110000000 === 0) {
%dirty = %dirty or if (%composer.changed(a02)) 0b000100000000 else 0b10000000
}
if (%default and 0b1000 !== 0) {
%dirty = %dirty or 0b110000000000
} else if (%changed and 0b0001110000000000 === 0) {
%dirty = %dirty or if (%composer.changed(a03)) 0b100000000000 else 0b010000000000
}
if (%default and 0b00010000 !== 0) {
%dirty = %dirty or 0b0110000000000000
} else if (%changed and 0b1110000000000000 === 0) {
%dirty = %dirty or if (%composer.changed(a04)) 0b0100000000000000 else 0b0010000000000000
}
if (%default and 0b00100000 !== 0) {
%dirty = %dirty or 0b00110000000000000000
} else if (%changed and 0b01110000000000000000 === 0) {
%dirty = %dirty or if (%composer.changed(a05)) 0b00100000000000000000 else 0b00010000000000000000
}
if (%default and 0b01000000 !== 0) {
%dirty = %dirty or 0b000110000000000000000000
} else if (%changed and 0b001110000000000000000000 === 0) {
%dirty = %dirty or if (%composer.changed(a06)) 0b000100000000000000000000 else 0b10000000000000000000
}
if (%default and 0b10000000 !== 0) {
%dirty = %dirty or 0b110000000000000000000000
} else if (%changed and 0b0001110000000000000000000000 === 0) {
%dirty = %dirty or if (%composer.changed(a07)) 0b100000000000000000000000 else 0b010000000000000000000000
}
if (%default and 0b000100000000 !== 0) {
%dirty = %dirty or 0b0110000000000000000000000000
} else if (%changed and 0b1110000000000000000000000000 === 0) {
%dirty = %dirty or if (%composer.changed(a08)) 0b0100000000000000000000000000 else 0b0010000000000000000000000000
}
if (%default and 0b001000000000 !== 0) {
%dirty = %dirty or 0b00110000000000000000000000000000
} else if (%changed and 0b01110000000000000000000000000000 === 0) {
%dirty = %dirty or if (%composer.changed(a09)) 0b00100000000000000000000000000000 else 0b00010000000000000000000000000000
}
if (%default and 0b010000000000 !== 0) {
%dirty1 = %dirty1 or 0b0110
} else if (%changed1 and 0b1110 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a10)) 0b0100 else 0b0010
}
if (%default and 0b100000000000 !== 0) {
%dirty1 = %dirty1 or 0b00110000
} else if (%changed1 and 0b01110000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a11)) 0b00100000 else 0b00010000
}
if (%default and 0b0001000000000000 !== 0) {
%dirty1 = %dirty1 or 0b000110000000
} else if (%changed1 and 0b001110000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a12)) 0b000100000000 else 0b10000000
}
if (%default and 0b0010000000000000 !== 0) {
%dirty1 = %dirty1 or 0b110000000000
} else if (%changed1 and 0b0001110000000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a13)) 0b100000000000 else 0b010000000000
}
if (%default and 0b0100000000000000 !== 0) {
%dirty1 = %dirty1 or 0b0110000000000000
} else if (%changed1 and 0b1110000000000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a14)) 0b0100000000000000 else 0b0010000000000000
}
if (%default and 0b1000000000000000 !== 0) {
%dirty1 = %dirty1 or 0b00110000000000000000
} else if (%changed1 and 0b01110000000000000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a15)) 0b00100000000000000000 else 0b00010000000000000000
}
if (%default and 0b00010000000000000000 !== 0) {
%dirty1 = %dirty1 or 0b000110000000000000000000
} else if (%changed1 and 0b001110000000000000000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a16)) 0b000100000000000000000000 else 0b10000000000000000000
}
if (%default and 0b00100000000000000000 !== 0) {
%dirty1 = %dirty1 or 0b110000000000000000000000
} else if (%changed1 and 0b0001110000000000000000000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a17)) 0b100000000000000000000000 else 0b010000000000000000000000
}
if (%default and 0b01000000000000000000 !== 0) {
%dirty1 = %dirty1 or 0b0110000000000000000000000000
} else if (%changed1 and 0b1110000000000000000000000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a18)) 0b0100000000000000000000000000 else 0b0010000000000000000000000000
}
if (%default and 0b10000000000000000000 !== 0) {
%dirty1 = %dirty1 or 0b00110000000000000000000000000000
} else if (%changed1 and 0b01110000000000000000000000000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a19)) 0b00100000000000000000000000000000 else 0b00010000000000000000000000000000
}
if (%default and 0b000100000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b0110
} else if (%changed2 and 0b1110 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a20)) 0b0100 else 0b0010
}
if (%default and 0b001000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b00110000
} else if (%changed2 and 0b01110000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a21)) 0b00100000 else 0b00010000
}
if (%default and 0b010000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b000110000000
} else if (%changed2 and 0b001110000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a22)) 0b000100000000 else 0b10000000
}
if (%default and 0b100000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b110000000000
} else if (%changed2 and 0b0001110000000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a23)) 0b100000000000 else 0b010000000000
}
if (%default and 0b0001000000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b0110000000000000
} else if (%changed2 and 0b1110000000000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a24)) 0b0100000000000000 else 0b0010000000000000
}
if (%default and 0b0010000000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b00110000000000000000
} else if (%changed2 and 0b01110000000000000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a25)) 0b00100000000000000000 else 0b00010000000000000000
}
if (%default and 0b0100000000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b000110000000000000000000
} else if (%changed2 and 0b001110000000000000000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a26)) 0b000100000000000000000000 else 0b10000000000000000000
}
if (%default and 0b1000000000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b110000000000000000000000
} else if (%changed2 and 0b0001110000000000000000000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a27)) 0b100000000000000000000000 else 0b010000000000000000000000
}
if (%default and 0b00010000000000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b0110000000000000000000000000
} else if (%changed2 and 0b1110000000000000000000000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a28)) 0b0100000000000000000000000000 else 0b0010000000000000000000000000
}
if (%default and 0b00100000000000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b00110000000000000000000000000000
} else if (%changed2 and 0b01110000000000000000000000000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a29)) 0b00100000000000000000000000000000 else 0b00010000000000000000000000000000
}
if (%default and 0b01000000000000000000000000000000 !== 0) {
%dirty3 = %dirty3 or 0b0110
} else if (%changed3 and 0b1110 === 0) {
%dirty3 = %dirty3 or if (%composer.changed(a30)) 0b0100 else 0b0010
}
if (%default1 and 0b0001 !== 0) {
%dirty3 = %dirty3 or 0b00110000
} else if (%changed3 and 0b01110000 === 0) {
%dirty3 = %dirty3 or if (%composer.changed(a31)) 0b00100000 else 0b00010000
}
if (%dirty and 0b01011011011011011011011011011011 !== 0b00010010010010010010010010010010 || %dirty1 and 0b01011011011011011011011011011011 !== 0b00010010010010010010010010010010 || %dirty2 and 0b01011011011011011011011011011011 !== 0b00010010010010010010010010010010 || %dirty3 and 0b01011011 !== 0b00010010 || !%composer.skipping) {
if (%default and 0b0001 !== 0) {
a00 = 0
}
if (%default and 0b0010 !== 0) {
a01 = 0
}
if (%default and 0b0100 !== 0) {
a02 = 0
}
if (%default and 0b1000 !== 0) {
a03 = 0
}
if (%default and 0b00010000 !== 0) {
a04 = 0
}
if (%default and 0b00100000 !== 0) {
a05 = 0
}
if (%default and 0b01000000 !== 0) {
a06 = 0
}
if (%default and 0b10000000 !== 0) {
a07 = 0
}
if (%default and 0b000100000000 !== 0) {
a08 = 0
}
if (%default and 0b001000000000 !== 0) {
a09 = 0
}
if (%default and 0b010000000000 !== 0) {
a10 = 0
}
if (%default and 0b100000000000 !== 0) {
a11 = 0
}
if (%default and 0b0001000000000000 !== 0) {
a12 = 0
}
if (%default and 0b0010000000000000 !== 0) {
a13 = 0
}
if (%default and 0b0100000000000000 !== 0) {
a14 = 0
}
if (%default and 0b1000000000000000 !== 0) {
a15 = 0
}
if (%default and 0b00010000000000000000 !== 0) {
a16 = 0
}
if (%default and 0b00100000000000000000 !== 0) {
a17 = 0
}
if (%default and 0b01000000000000000000 !== 0) {
a18 = 0
}
if (%default and 0b10000000000000000000 !== 0) {
a19 = 0
}
if (%default and 0b000100000000000000000000 !== 0) {
a20 = 0
}
if (%default and 0b001000000000000000000000 !== 0) {
a21 = 0
}
if (%default and 0b010000000000000000000000 !== 0) {
a22 = 0
}
if (%default and 0b100000000000000000000000 !== 0) {
a23 = 0
}
if (%default and 0b0001000000000000000000000000 !== 0) {
a24 = 0
}
if (%default and 0b0010000000000000000000000000 !== 0) {
a25 = 0
}
if (%default and 0b0100000000000000000000000000 !== 0) {
a26 = 0
}
if (%default and 0b1000000000000000000000000000 !== 0) {
a27 = 0
}
if (%default and 0b00010000000000000000000000000000 !== 0) {
a28 = 0
}
if (%default and 0b00100000000000000000000000000000 !== 0) {
a29 = 0
}
if (%default and 0b01000000000000000000000000000000 !== 0) {
a30 = 0
}
if (%default1 and 0b0001 !== 0) {
a31 = 0
}
used(a00)
used(a01)
used(a02)
used(a03)
used(a04)
used(a05)
used(a06)
used(a07)
used(a08)
used(a09)
used(a10)
used(a11)
used(a12)
used(a13)
used(a14)
used(a15)
used(a16)
used(a17)
used(a18)
used(a19)
used(a20)
used(a21)
used(a22)
used(a23)
used(a24)
used(a25)
used(a26)
used(a27)
used(a28)
used(a29)
used(a30)
used(a31)
} else {
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
Example(a00, a01, a02, a03, a04, a05, a06, a07, a08, a09, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, %composer, %changed or 0b0001, %changed1, %changed2, %changed3, %default, %default1)
}
}
"""
)
@Test
fun test31ParametersWithSomeUnstable(): Unit = defaultParams(
"""
class Foo
""",
"""
@Composable
fun Example(
a00: Int = 0,
a01: Int = 0,
a02: Int = 0,
a03: Int = 0,
a04: Int = 0,
a05: Int = 0,
a06: Int = 0,
a07: Int = 0,
a08: Int = 0,
a09: Foo = Foo(),
a10: Int = 0,
a11: Int = 0,
a12: Int = 0,
a13: Int = 0,
a14: Int = 0,
a15: Int = 0,
a16: Int = 0,
a17: Int = 0,
a18: Int = 0,
a19: Int = 0,
a20: Int = 0,
a21: Int = 0,
a22: Int = 0,
a23: Int = 0,
a24: Int = 0,
a25: Int = 0,
a26: Int = 0,
a27: Int = 0,
a28: Int = 0,
a29: Int = 0,
a30: Int = 0,
a31: Foo = Foo()
) {
used(a00)
used(a01)
used(a02)
used(a03)
used(a04)
used(a05)
used(a06)
used(a07)
used(a08)
used(a09)
used(a10)
used(a11)
used(a12)
used(a13)
used(a14)
used(a15)
used(a16)
used(a17)
used(a18)
used(a19)
used(a20)
used(a21)
used(a22)
used(a23)
used(a24)
used(a25)
used(a26)
used(a27)
used(a28)
used(a29)
used(a30)
used(a31)
}
""",
"""
@Composable
fun Example(a00: Int, a01: Int, a02: Int, a03: Int, a04: Int, a05: Int, a06: Int, a07: Int, a08: Int, a09: Foo?, a10: Int, a11: Int, a12: Int, a13: Int, a14: Int, a15: Int, a16: Int, a17: Int, a18: Int, a19: Int, a20: Int, a21: Int, a22: Int, a23: Int, a24: Int, a25: Int, a26: Int, a27: Int, a28: Int, a29: Int, a30: Int, a31: Foo?, %composer: Composer?, %changed: Int, %changed1: Int, %changed2: Int, %changed3: Int, %default: Int, %default1: Int) {
%composer = %composer.startRestartGroup(<>)
sourceInformation(%composer, "C(Example):Test.kt")
val %dirty = %changed
val %dirty1 = %changed1
val %dirty2 = %changed2
val %dirty3 = %changed3
if (%default and 0b0001 !== 0) {
%dirty = %dirty or 0b0110
} else if (%changed and 0b1110 === 0) {
%dirty = %dirty or if (%composer.changed(a00)) 0b0100 else 0b0010
}
if (%default and 0b0010 !== 0) {
%dirty = %dirty or 0b00110000
} else if (%changed and 0b01110000 === 0) {
%dirty = %dirty or if (%composer.changed(a01)) 0b00100000 else 0b00010000
}
if (%default and 0b0100 !== 0) {
%dirty = %dirty or 0b000110000000
} else if (%changed and 0b001110000000 === 0) {
%dirty = %dirty or if (%composer.changed(a02)) 0b000100000000 else 0b10000000
}
if (%default and 0b1000 !== 0) {
%dirty = %dirty or 0b110000000000
} else if (%changed and 0b0001110000000000 === 0) {
%dirty = %dirty or if (%composer.changed(a03)) 0b100000000000 else 0b010000000000
}
if (%default and 0b00010000 !== 0) {
%dirty = %dirty or 0b0110000000000000
} else if (%changed and 0b1110000000000000 === 0) {
%dirty = %dirty or if (%composer.changed(a04)) 0b0100000000000000 else 0b0010000000000000
}
if (%default and 0b00100000 !== 0) {
%dirty = %dirty or 0b00110000000000000000
} else if (%changed and 0b01110000000000000000 === 0) {
%dirty = %dirty or if (%composer.changed(a05)) 0b00100000000000000000 else 0b00010000000000000000
}
if (%default and 0b01000000 !== 0) {
%dirty = %dirty or 0b000110000000000000000000
} else if (%changed and 0b001110000000000000000000 === 0) {
%dirty = %dirty or if (%composer.changed(a06)) 0b000100000000000000000000 else 0b10000000000000000000
}
if (%default and 0b10000000 !== 0) {
%dirty = %dirty or 0b110000000000000000000000
} else if (%changed and 0b0001110000000000000000000000 === 0) {
%dirty = %dirty or if (%composer.changed(a07)) 0b100000000000000000000000 else 0b010000000000000000000000
}
if (%default and 0b000100000000 !== 0) {
%dirty = %dirty or 0b0110000000000000000000000000
} else if (%changed and 0b1110000000000000000000000000 === 0) {
%dirty = %dirty or if (%composer.changed(a08)) 0b0100000000000000000000000000 else 0b0010000000000000000000000000
}
if (%changed and 0b01110000000000000000000000000000 === 0) {
%dirty = %dirty or if (%default and 0b001000000000 === 0 && %composer.changed(a09)) 0b00100000000000000000000000000000 else 0b00010000000000000000000000000000
}
if (%default and 0b010000000000 !== 0) {
%dirty1 = %dirty1 or 0b0110
} else if (%changed1 and 0b1110 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a10)) 0b0100 else 0b0010
}
if (%default and 0b100000000000 !== 0) {
%dirty1 = %dirty1 or 0b00110000
} else if (%changed1 and 0b01110000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a11)) 0b00100000 else 0b00010000
}
if (%default and 0b0001000000000000 !== 0) {
%dirty1 = %dirty1 or 0b000110000000
} else if (%changed1 and 0b001110000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a12)) 0b000100000000 else 0b10000000
}
if (%default and 0b0010000000000000 !== 0) {
%dirty1 = %dirty1 or 0b110000000000
} else if (%changed1 and 0b0001110000000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a13)) 0b100000000000 else 0b010000000000
}
if (%default and 0b0100000000000000 !== 0) {
%dirty1 = %dirty1 or 0b0110000000000000
} else if (%changed1 and 0b1110000000000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a14)) 0b0100000000000000 else 0b0010000000000000
}
if (%default and 0b1000000000000000 !== 0) {
%dirty1 = %dirty1 or 0b00110000000000000000
} else if (%changed1 and 0b01110000000000000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a15)) 0b00100000000000000000 else 0b00010000000000000000
}
if (%default and 0b00010000000000000000 !== 0) {
%dirty1 = %dirty1 or 0b000110000000000000000000
} else if (%changed1 and 0b001110000000000000000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a16)) 0b000100000000000000000000 else 0b10000000000000000000
}
if (%default and 0b00100000000000000000 !== 0) {
%dirty1 = %dirty1 or 0b110000000000000000000000
} else if (%changed1 and 0b0001110000000000000000000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a17)) 0b100000000000000000000000 else 0b010000000000000000000000
}
if (%default and 0b01000000000000000000 !== 0) {
%dirty1 = %dirty1 or 0b0110000000000000000000000000
} else if (%changed1 and 0b1110000000000000000000000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a18)) 0b0100000000000000000000000000 else 0b0010000000000000000000000000
}
if (%default and 0b10000000000000000000 !== 0) {
%dirty1 = %dirty1 or 0b00110000000000000000000000000000
} else if (%changed1 and 0b01110000000000000000000000000000 === 0) {
%dirty1 = %dirty1 or if (%composer.changed(a19)) 0b00100000000000000000000000000000 else 0b00010000000000000000000000000000
}
if (%default and 0b000100000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b0110
} else if (%changed2 and 0b1110 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a20)) 0b0100 else 0b0010
}
if (%default and 0b001000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b00110000
} else if (%changed2 and 0b01110000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a21)) 0b00100000 else 0b00010000
}
if (%default and 0b010000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b000110000000
} else if (%changed2 and 0b001110000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a22)) 0b000100000000 else 0b10000000
}
if (%default and 0b100000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b110000000000
} else if (%changed2 and 0b0001110000000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a23)) 0b100000000000 else 0b010000000000
}
if (%default and 0b0001000000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b0110000000000000
} else if (%changed2 and 0b1110000000000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a24)) 0b0100000000000000 else 0b0010000000000000
}
if (%default and 0b0010000000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b00110000000000000000
} else if (%changed2 and 0b01110000000000000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a25)) 0b00100000000000000000 else 0b00010000000000000000
}
if (%default and 0b0100000000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b000110000000000000000000
} else if (%changed2 and 0b001110000000000000000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a26)) 0b000100000000000000000000 else 0b10000000000000000000
}
if (%default and 0b1000000000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b110000000000000000000000
} else if (%changed2 and 0b0001110000000000000000000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a27)) 0b100000000000000000000000 else 0b010000000000000000000000
}
if (%default and 0b00010000000000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b0110000000000000000000000000
} else if (%changed2 and 0b1110000000000000000000000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a28)) 0b0100000000000000000000000000 else 0b0010000000000000000000000000
}
if (%default and 0b00100000000000000000000000000000 !== 0) {
%dirty2 = %dirty2 or 0b00110000000000000000000000000000
} else if (%changed2 and 0b01110000000000000000000000000000 === 0) {
%dirty2 = %dirty2 or if (%composer.changed(a29)) 0b00100000000000000000000000000000 else 0b00010000000000000000000000000000
}
if (%default and 0b01000000000000000000000000000000 !== 0) {
%dirty3 = %dirty3 or 0b0110
} else if (%changed3 and 0b1110 === 0) {
%dirty3 = %dirty3 or if (%composer.changed(a30)) 0b0100 else 0b0010
}
if (%changed3 and 0b01110000 === 0) {
%dirty3 = %dirty3 or if (%default1 and 0b0001 === 0 && %composer.changed(a31)) 0b00100000 else 0b00010000
}
if (%dirty and 0b01011011011011011011011011011011 !== 0b00010010010010010010010010010010 || %dirty1 and 0b01011011011011011011011011011011 !== 0b00010010010010010010010010010010 || %dirty2 and 0b01011011011011011011011011011011 !== 0b00010010010010010010010010010010 || %dirty3 and 0b01011011 !== 0b00010010 || !%composer.skipping) {
%composer.startDefaults()
if (%changed and 0b0001 === 0 || %composer.defaultsInvalid) {
if (%default and 0b0001 !== 0) {
a00 = 0
}
if (%default and 0b0010 !== 0) {
a01 = 0
}
if (%default and 0b0100 !== 0) {
a02 = 0
}
if (%default and 0b1000 !== 0) {
a03 = 0
}
if (%default and 0b00010000 !== 0) {
a04 = 0
}
if (%default and 0b00100000 !== 0) {
a05 = 0
}
if (%default and 0b01000000 !== 0) {
a06 = 0
}
if (%default and 0b10000000 !== 0) {
a07 = 0
}
if (%default and 0b000100000000 !== 0) {
a08 = 0
}
if (%default and 0b001000000000 !== 0) {
a09 = Foo()
%dirty = %dirty and 0b01110000000000000000000000000000.inv()
}
if (%default and 0b010000000000 !== 0) {
a10 = 0
}
if (%default and 0b100000000000 !== 0) {
a11 = 0
}
if (%default and 0b0001000000000000 !== 0) {
a12 = 0
}
if (%default and 0b0010000000000000 !== 0) {
a13 = 0
}
if (%default and 0b0100000000000000 !== 0) {
a14 = 0
}
if (%default and 0b1000000000000000 !== 0) {
a15 = 0
}
if (%default and 0b00010000000000000000 !== 0) {
a16 = 0
}
if (%default and 0b00100000000000000000 !== 0) {
a17 = 0
}
if (%default and 0b01000000000000000000 !== 0) {
a18 = 0
}
if (%default and 0b10000000000000000000 !== 0) {
a19 = 0
}
if (%default and 0b000100000000000000000000 !== 0) {
a20 = 0
}
if (%default and 0b001000000000000000000000 !== 0) {
a21 = 0
}
if (%default and 0b010000000000000000000000 !== 0) {
a22 = 0
}
if (%default and 0b100000000000000000000000 !== 0) {
a23 = 0
}
if (%default and 0b0001000000000000000000000000 !== 0) {
a24 = 0
}
if (%default and 0b0010000000000000000000000000 !== 0) {
a25 = 0
}
if (%default and 0b0100000000000000000000000000 !== 0) {
a26 = 0
}
if (%default and 0b1000000000000000000000000000 !== 0) {
a27 = 0
}
if (%default and 0b00010000000000000000000000000000 !== 0) {
a28 = 0
}
if (%default and 0b00100000000000000000000000000000 !== 0) {
a29 = 0
}
if (%default and 0b01000000000000000000000000000000 !== 0) {
a30 = 0
}
if (%default1 and 0b0001 !== 0) {
a31 = Foo()
%dirty3 = %dirty3 and 0b01110000.inv()
}
} else {
%composer.skipToGroupEnd()
if (%default and 0b001000000000 !== 0) {
%dirty = %dirty and 0b01110000000000000000000000000000.inv()
}
if (%default1 and 0b0001 !== 0) {
%dirty3 = %dirty3 and 0b01110000.inv()
}
}
%composer.endDefaults()
used(a00)
used(a01)
used(a02)
used(a03)
used(a04)
used(a05)
used(a06)
used(a07)
used(a08)
used(a09)
used(a10)
used(a11)
used(a12)
used(a13)
used(a14)
used(a15)
used(a16)
used(a17)
used(a18)
used(a19)
used(a20)
used(a21)
used(a22)
used(a23)
used(a24)
used(a25)
used(a26)
used(a27)
used(a28)
used(a29)
used(a30)
used(a31)
} else {
%composer.skipToGroupEnd()
}
%composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
Example(a00, a01, a02, a03, a04, a05, a06, a07, a08, a09, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, %composer, %changed or 0b0001, %changed1, %changed2, %changed3, %default, %default1)
}
}
"""
)
@Test
fun testDefaultArgsForFakeOverridesSuperMethods(): Unit = defaultParams(
"""
""",
"""
open class Foo {
@NonRestartableComposable @Composable fun foo(x: Int = 0) {}
}
class Bar: Foo() {
@NonRestartableComposable @Composable fun Example() {
foo()
}
}
""",
"""
@StabilityInferred(parameters = 0)
open class Foo {
@NonRestartableComposable
@Composable
fun foo(x: Int, %composer: Composer?, %changed: Int, %default: Int) {
%composer.startReplaceableGroup(<>)
sourceInformation(%composer, "C(foo):Test.kt")
if (%default and 0b0001 !== 0) {
x = 0
}
%composer.endReplaceableGroup()
}
static val %stable: Int = 0
}
@StabilityInferred(parameters = 0)
class Bar : Foo {
@NonRestartableComposable
@Composable
fun Example(%composer: Composer?, %changed: Int) {
%composer.startReplaceableGroup(<>)
sourceInformation(%composer, "C(Example)<foo()>:Test.kt")
foo(0, %composer, 0b01110000 and %changed shl 0b0011, 0b0001)
%composer.endReplaceableGroup()
}
static val %stable: Int = 0
}
"""
)
@Test
fun testDefaultArgsOnInvoke() = defaultParams(
"""
object HasDefault {
@Composable
operator fun invoke(text: String = "SomeText"){
println(text)
}
}
object NoDefault {
@Composable
operator fun invoke(text: String){
println(text)
}
}
object MultipleDefault {
@Composable
operator fun invoke(text: String = "SomeText", value: Int = 5){
println(text)
println(value)
}
}
""",
"""
@NonRestartableComposable
@Composable
fun Bar() {
HasDefault()
NoDefault("Some Text")
MultipleDefault()
}
""",
"""
@NonRestartableComposable
@Composable
fun Bar(%composer: Composer?, %changed: Int) {
%composer.startReplaceableGroup(<>)
sourceInformation(%composer, "C(Bar)<HasDef...>,<NoDefa...>,<Multip...>:Test.kt")
HasDefault(null, %composer, 0b00110000, 0b0001)
NoDefault("Some Text", %composer, 0b00110110)
MultipleDefault(null, 0, %composer, 0b000110000000, 0b0011)
%composer.endReplaceableGroup()
}
"""
)
}