From c3c545377eb41fa49aa0257387497388fe07a55d Mon Sep 17 00:00:00 2001 From: Artyom Gornostayev Date: Tue, 16 Apr 2024 16:51:46 +0200 Subject: [PATCH 1/3] KSP: Fix computation of Kotlin Defaults Mask in Data Classes with 32+ parameters. (#10704) --- .../micronaut/inject/writer/WriterUtils.java | 2 +- .../core/beans/KotlinBeanIntrospectionSpec.kt | 63 +++++++++++++++++++ .../io/micronaut/core/beans/TestEntity7.kt | 48 ++++++++++++++ 3 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 test-suite-kotlin-ksp/src/test/kotlin/io/micronaut/core/beans/TestEntity7.kt diff --git a/core-processor/src/main/java/io/micronaut/inject/writer/WriterUtils.java b/core-processor/src/main/java/io/micronaut/inject/writer/WriterUtils.java index 8383ae73974..1348f35b383 100644 --- a/core-processor/src/main/java/io/micronaut/inject/writer/WriterUtils.java +++ b/core-processor/src/main/java/io/micronaut/inject/writer/WriterUtils.java @@ -261,7 +261,7 @@ public static int[] computeKotlinDefaultsMask(GeneratorAdapter writer, writer.push(0); writer.storeLocal(maskLocal); int maskIndex = 1; - int paramIndex = 0; + int paramIndex = fromIndex; for (ParameterElement parameter : params) { if (parameter instanceof KotlinParameterElement kp && kp.hasDefault()) { writeMask(writer, argumentValuePusher, argumentValueIsPresentPusher, kp, paramIndex, maskIndex, maskLocal); diff --git a/test-suite-kotlin-ksp/src/test/kotlin/io/micronaut/core/beans/KotlinBeanIntrospectionSpec.kt b/test-suite-kotlin-ksp/src/test/kotlin/io/micronaut/core/beans/KotlinBeanIntrospectionSpec.kt index 775684f7065..6738dbc57eb 100644 --- a/test-suite-kotlin-ksp/src/test/kotlin/io/micronaut/core/beans/KotlinBeanIntrospectionSpec.kt +++ b/test-suite-kotlin-ksp/src/test/kotlin/io/micronaut/core/beans/KotlinBeanIntrospectionSpec.kt @@ -2,6 +2,7 @@ package io.micronaut.core.beans import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test +import java.time.LocalDate.now import kotlin.test.assertFails import kotlin.test.assertFalse import kotlin.test.assertTrue @@ -170,4 +171,66 @@ class KotlinBeanIntrospectionSpec { assertEquals("s5", bean.s5) assertEquals("s32", bean.s32) } + + @Test + fun `Should create a bean with correct attributes`() { + val introspection = BeanIntrospection.getIntrospection(TestEntity7::class.java) + val attributes = arrayOf( + "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", + "a10", "a11", "a12", "a13", "a14", "a15", "a16", "a17", "a18", "a19", + "a20", "a21", "a22", "a23", "a24", "a25", "a26", "a27", "a28", "a29", + "a30", "a31", + now().plusDays(32), + now().plusDays(33), + now().plusDays(34), + now().plusDays(35), + now().plusDays(36), + now().plusDays(37), + now().plusDays(38), + now().plusDays(39), + ) + + val bean = introspection.instantiate(*attributes) + + assertEquals(bean.a0, attributes[0]) + assertEquals(bean.a1, attributes[1]) + assertEquals(bean.a2, attributes[2]) + assertEquals(bean.a3, attributes[3]) + assertEquals(bean.a4, attributes[4]) + assertEquals(bean.a5, attributes[5]) + assertEquals(bean.a6, attributes[6]) + assertEquals(bean.a7, attributes[7]) + assertEquals(bean.a8, attributes[8]) + assertEquals(bean.a9, attributes[9]) + assertEquals(bean.a10, attributes[10]) + assertEquals(bean.a11, attributes[11]) + assertEquals(bean.a12, attributes[12]) + assertEquals(bean.a13, attributes[13]) + assertEquals(bean.a14, attributes[14]) + assertEquals(bean.a15, attributes[15]) + assertEquals(bean.a16, attributes[16]) + assertEquals(bean.a17, attributes[17]) + assertEquals(bean.a18, attributes[18]) + assertEquals(bean.a19, attributes[19]) + assertEquals(bean.a20, attributes[20]) + assertEquals(bean.a21, attributes[21]) + assertEquals(bean.a22, attributes[22]) + assertEquals(bean.a23, attributes[23]) + assertEquals(bean.a24, attributes[24]) + assertEquals(bean.a25, attributes[25]) + assertEquals(bean.a26, attributes[26]) + assertEquals(bean.a27, attributes[27]) + assertEquals(bean.a28, attributes[28]) + assertEquals(bean.a29, attributes[29]) + assertEquals(bean.a30, attributes[30]) + assertEquals(bean.a31, attributes[31]) + assertEquals(bean.a32, attributes[32]) + assertEquals(bean.a33, attributes[33]) + assertEquals(bean.a34, attributes[34]) + assertEquals(bean.a35, attributes[35]) + assertEquals(bean.a36, attributes[36]) + assertEquals(bean.a37, attributes[37]) + assertEquals(bean.a38, attributes[38]) + assertEquals(bean.a39, attributes[39]) + } } diff --git a/test-suite-kotlin-ksp/src/test/kotlin/io/micronaut/core/beans/TestEntity7.kt b/test-suite-kotlin-ksp/src/test/kotlin/io/micronaut/core/beans/TestEntity7.kt new file mode 100644 index 00000000000..9f7dcb5b0ca --- /dev/null +++ b/test-suite-kotlin-ksp/src/test/kotlin/io/micronaut/core/beans/TestEntity7.kt @@ -0,0 +1,48 @@ +package io.micronaut.core.beans + +import io.micronaut.core.annotation.Introspected +import java.time.LocalDate + +@Introspected +class TestEntity7( + val a0: String, + val a1: String, + val a2: String, + val a3: String, + val a4: String, + val a5: String, + val a6: String, + val a7: String, + val a8: String, + val a9: String, + val a10: String, + val a11: String, + val a12: String, + val a13: String, + val a14: String, + val a15: String, + val a16: String, + val a17: String, + val a18: String, + val a19: String, + val a20: String, + val a21: String, + val a22: String, + val a23: String, + val a24: String, + val a25: String, + val a26: String, + val a27: String, + val a28: String, + val a29: String, + val a30: String, + val a31: String = "a31", + val a32: LocalDate = LocalDate.now(), + val a33: LocalDate, + val a34: LocalDate, + val a35: LocalDate, + val a36: LocalDate, + val a37: LocalDate, + val a38: LocalDate, + val a39: LocalDate, +) From 4103ba937d3af15b0087c358b72994b6cbdc0939 Mon Sep 17 00:00:00 2001 From: micronaut-build Date: Tue, 16 Apr 2024 19:41:59 +0000 Subject: [PATCH 2/3] [skip ci] Release v4.3.15 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 7d082e94e78..40535e78d59 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -projectVersion=4.3.15-SNAPSHOT +projectVersion=4.3.15 projectGroupId=io.micronaut projectDesc=Core components supporting the Micronaut Framework title=Micronaut Core From 932ad74a7f9329d5c969e1d88f853f99223d5371 Mon Sep 17 00:00:00 2001 From: micronaut-build Date: Tue, 16 Apr 2024 19:57:40 +0000 Subject: [PATCH 3/3] chore: Bump version to 4.3.16-SNAPSHOT --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 40535e78d59..b9321ced495 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -projectVersion=4.3.15 +projectVersion=4.3.16-SNAPSHOT projectGroupId=io.micronaut projectDesc=Core components supporting the Micronaut Framework title=Micronaut Core