Skip to content

Commit 2580165

Browse files
udalovSpace Team
authored andcommitted
IR interpreter: do not interpret absence of argument as empty array
#KT-72881 Fixed
1 parent 32261b2 commit 2580165

File tree

17 files changed

+167
-7
lines changed

17 files changed

+167
-7
lines changed

analysis/low-level-api-fir/tests-gen/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLBlackBoxTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

analysis/low-level-api-fir/tests-gen/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLReversedBlackBoxTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrTreeBuildUtils.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,8 +234,8 @@ internal fun IrElement.toConstantValueOrNull(): ConstantValue<*>? {
234234
val classId = this.symbol.owner.constructedClass.classId ?: return null
235235
val rawArguments = this.getAllArgumentsWithIr()
236236
val argumentMapping = rawArguments
237-
.filter { it.second != null || it.first.type.isArray() }
238-
.associate { (parameter, expression) -> parameter.name to (expression?.toConstantValue() ?: ArrayValue(emptyList())) }
237+
.filter { it.second != null }
238+
.associate { (parameter, expression) -> parameter.name to expression!!.toConstantValue() }
239239
AnnotationValue.create(classId, argumentMapping)
240240
}
241241
is IrGetEnumValue -> {
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
MODULE main
2+
CLASS test/A.class
3+
CLASS METADATA
4+
CONSTRUCTOR <init>(Lkotlin/Array;)V
5+
Property: class.metadata.constructor.valueParameters
6+
K1
7+
(values: kotlin/Array<kotlin/String> /* = ... */)
8+
K2
9+
(values: kotlin/Array<kotlin/String> = ["Fail"])
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// TARGET_BACKEND: JVM
2+
// WITH_REFLECT
3+
// JVM_ABI_K1_K2_DIFF: K2 serializes annotation parameter default values (KT-59526).
4+
5+
package test
6+
7+
import kotlin.test.assertEquals
8+
9+
@Target(AnnotationTarget.TYPE)
10+
annotation class A(val values: Array<String> = ["Fail"])
11+
12+
fun f(): @A Unit {}
13+
14+
fun box(): String {
15+
assertEquals("@test.A()", ::f.returnType.annotations.single().toString())
16+
return "OK"
17+
}

compiler/testData/loadJava/compiledKotlin/annotations/packageMembers/StringArrayArgument.fir.k2.klib.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
field:@FIELD:R|test/Anno|(t = <implicitArrayOf>(String(prosper))) public final val bar: R|kotlin/Int|
22
public get(): R|kotlin/Int|
33

4-
@R|test/Anno|(t = <implicitArrayOf>()) @R|test/Anno2|(t = <implicitArrayOf>()) @R|test/Anno3|(t = <implicitArrayOf>()) @R|test/Anno4|(t = <implicitArrayOf>()) @R|test/Anno5|(t = <implicitArrayOf>()) @R|test/Anno6|(t = <implicitArrayOf>()) public final fun baz(): R|kotlin/Unit|
4+
@R|test/Anno|(t = <implicitArrayOf>()) @R|test/Anno2|() @R|test/Anno3|() @R|test/Anno4|(t = <implicitArrayOf>()) @R|test/Anno5|() @R|test/Anno6|() public final fun baz(): R|kotlin/Unit|
55

66
@R|test/Anno|(t = <implicitArrayOf>(String(live), String(long))) public final fun foo(): R|kotlin/Unit|
77

compiler/testData/loadJava/compiledKotlin/annotations/packageMembers/StringArrayArgument.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,6 @@
55
// LANGUAGE: +MultiPlatformProjects
66
// K1/K2 difference: KT-60820
77

8-
// IGNORE_FIR_METADATA_LOADING_K2_WITH_ANNOTATIONS_IN_METADATA
9-
// ^ With annotations in metadata, compiler also loads `t = <implicitArrayOf>()` in some annotation classes.
10-
// Once AnnotationsInMetadata is enabled by default, this directive can be removed and the txt dump can be updated.
11-
128
// MODULE: common
139
// FILE: common.kt
1410
package test

compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/JvmAbiConsistencyTestBoxGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)