[FIR] Resolve array literal with non-primitive-array expected type as arrayOf call
This lets us properly complete the call which fixes some issues with false-positive type mismatches. This change doesn't apply to array literals in annotation calls yet because they are resolved as context-dependent. This will be adapted in a following commit. #KT-59581
This commit is contained in:
committed by
Space Team
parent
4ead02271b
commit
ff6b3350ae
+1
-1
@@ -6,7 +6,7 @@ fun test() {
|
||||
val b: Array<Int> = []
|
||||
val c = [1, 2]
|
||||
val d: Array<Int> = [1, 2]
|
||||
val e: Array<String> = <!INITIALIZER_TYPE_MISMATCH!>[1]<!>
|
||||
val e: Array<String> = <!TYPE_MISMATCH, TYPE_MISMATCH!>[1]<!>
|
||||
|
||||
val f: IntArray = [1, 2]
|
||||
val g = [f]
|
||||
|
||||
+7
-4
@@ -1,13 +1,16 @@
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
annotation class Foo(
|
||||
val a: Array<String> = ["/"],
|
||||
val b: Array<String> = [],
|
||||
val c: Array<String> = ["1", "2"]
|
||||
val c: Array<String> = ["1", "2"],
|
||||
val d: Array<KClass<*>> = [Int::class, Array<Int>::class],
|
||||
)
|
||||
|
||||
annotation class Bar(
|
||||
val a: Array<String> = <!INITIALIZER_TYPE_MISMATCH!>[' ']<!>,
|
||||
val a: Array<String> = <!TYPE_MISMATCH, TYPE_MISMATCH!>[' ']<!>,
|
||||
val b: Array<String> = ["", <!EMPTY_CHARACTER_LITERAL!>''<!>],
|
||||
val c: Array<String> = <!INITIALIZER_TYPE_MISMATCH!>[1]<!>
|
||||
val c: Array<String> = <!TYPE_MISMATCH, TYPE_MISMATCH!>[1]<!>
|
||||
)
|
||||
|
||||
annotation class Base(
|
||||
@@ -19,5 +22,5 @@ annotation class Base(
|
||||
|
||||
annotation class Err(
|
||||
val a: IntArray = <!INITIALIZER_TYPE_MISMATCH!>[1L]<!>,
|
||||
val b: Array<String> = <!INITIALIZER_TYPE_MISMATCH!>[1]<!>
|
||||
val b: Array<String> = <!TYPE_MISMATCH, TYPE_MISMATCH!>[1]<!>
|
||||
)
|
||||
|
||||
+4
-1
@@ -1,7 +1,10 @@
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
annotation class Foo(
|
||||
val a: Array<String> = ["/"],
|
||||
val b: Array<String> = [],
|
||||
val c: Array<String> = ["1", "2"]
|
||||
val c: Array<String> = ["1", "2"],
|
||||
val d: Array<KClass<*>> = [Int::class, Array<Int>::class],
|
||||
)
|
||||
|
||||
annotation class Bar(
|
||||
|
||||
+2
-1
@@ -31,10 +31,11 @@ public final annotation class Err : kotlin.Annotation {
|
||||
}
|
||||
|
||||
public final annotation class Foo : kotlin.Annotation {
|
||||
public constructor Foo(/*0*/ a: kotlin.Array<kotlin.String> = ..., /*1*/ b: kotlin.Array<kotlin.String> = ..., /*2*/ c: kotlin.Array<kotlin.String> = ...)
|
||||
public constructor Foo(/*0*/ a: kotlin.Array<kotlin.String> = ..., /*1*/ b: kotlin.Array<kotlin.String> = ..., /*2*/ c: kotlin.Array<kotlin.String> = ..., /*3*/ d: kotlin.Array<kotlin.reflect.KClass<*>> = ...)
|
||||
public final val a: kotlin.Array<kotlin.String>
|
||||
public final val b: kotlin.Array<kotlin.String>
|
||||
public final val c: kotlin.Array<kotlin.String>
|
||||
public final val d: kotlin.Array<kotlin.reflect.KClass<*>>
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
+1
-1
@@ -1,2 +1,2 @@
|
||||
annotation class A(val a: IntArray = <!INITIALIZER_TYPE_MISMATCH, TYPE_MISMATCH!>arrayOf(1)<!>)
|
||||
annotation class A(val a: IntArray = <!TYPE_MISMATCH!>arrayOf(1)<!>)
|
||||
annotation class B(val a: IntArray = intArrayOf(1))
|
||||
|
||||
compiler/testData/diagnostics/tests/multiplatform/defaultArguments/annotationArgumentEquality.fir.kt
Vendored
-88
@@ -1,88 +0,0 @@
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
expect annotation class Primitives(
|
||||
val z: Boolean = true,
|
||||
val c: Char = 'c',
|
||||
val b: Byte = 42.toByte(),
|
||||
val s: Short = (-1).toShort(),
|
||||
val i: Int = -42,
|
||||
val f: Float = 2.72f,
|
||||
val j: Long = 123456789123456789L,
|
||||
val d: Double = 3.14159265358979
|
||||
)
|
||||
|
||||
expect annotation class PrimitiveArrays(
|
||||
val z: BooleanArray = [true],
|
||||
val c: CharArray = ['c'],
|
||||
val b: ByteArray = [42.toByte()],
|
||||
val s: ShortArray = [(-1).toShort()],
|
||||
val i: IntArray = [-42],
|
||||
val f: FloatArray = [2.72f],
|
||||
val j: LongArray = [123456789123456789L],
|
||||
val d: DoubleArray = [3.14159265358979]
|
||||
)
|
||||
|
||||
enum class En { A, B }
|
||||
|
||||
annotation class Anno(val value: String = "Anno")
|
||||
|
||||
expect annotation class Classes(
|
||||
val s: String = "OK",
|
||||
val e: En = En.B,
|
||||
// TODO: this does not work at the moment because AnnotationDescriptor subclasses do not implement equals correctly
|
||||
// val a: Anno = Anno(),
|
||||
val k: KClass<*> = List::class
|
||||
)
|
||||
|
||||
expect annotation class ClassArrays(
|
||||
val s: Array<String> = ["OK"],
|
||||
val e: Array<En> = [En.B],
|
||||
// val a: Array<Anno> = [Anno()],
|
||||
val k: Array<KClass<*>> = <!INITIALIZER_TYPE_MISMATCH!>[List::class]<!>, // KT-59581
|
||||
vararg val v: Int = [42]
|
||||
)
|
||||
|
||||
// MODULE: m2-jvm()()(m1-common)
|
||||
// FILE: jvm.kt
|
||||
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
actual annotation class Primitives(
|
||||
actual val z: Boolean = true,
|
||||
actual val c: Char = 'c',
|
||||
actual val b: Byte = 42.toByte(),
|
||||
actual val s: Short = (-1).toShort(),
|
||||
actual val i: Int = -42,
|
||||
actual val f: Float = 2.72f,
|
||||
actual val j: Long = 123456789123456789L,
|
||||
actual val d: Double = 3.14159265358979
|
||||
)
|
||||
|
||||
actual annotation class PrimitiveArrays(
|
||||
actual val z: BooleanArray = [true],
|
||||
actual val c: CharArray = ['c'],
|
||||
actual val b: ByteArray = [42.toByte()],
|
||||
actual val s: ShortArray = [(-1).toShort()],
|
||||
actual val i: IntArray = [-42],
|
||||
actual val f: FloatArray = [2.72f],
|
||||
actual val j: LongArray = [123456789123456789L],
|
||||
actual val d: DoubleArray = [3.14159265358979]
|
||||
)
|
||||
|
||||
actual annotation class Classes(
|
||||
actual val s: String = "OK",
|
||||
actual val e: En = En.B,
|
||||
// actual val a: Anno = Anno(),
|
||||
actual val k: KClass<*> = List::class
|
||||
)
|
||||
|
||||
actual annotation class ClassArrays(
|
||||
actual val s: Array<String> = ["OK"],
|
||||
actual val e: Array<En> = [En.B],
|
||||
// actual val a: Array<Anno> = [Anno()],
|
||||
actual val k: Array<KClass<*>> = <!INITIALIZER_TYPE_MISMATCH!>[List::class]<!>,
|
||||
actual vararg val v: Int = [42]
|
||||
)
|
||||
Vendored
+2
-1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
@@ -41,7 +42,7 @@ expect annotation class ClassArrays(
|
||||
val s: Array<String> = ["OK"],
|
||||
val e: Array<En> = [En.B],
|
||||
// val a: Array<Anno> = [Anno()],
|
||||
val k: Array<KClass<*>> = [List::class], // KT-59581
|
||||
val k: Array<KClass<*>> = [List::class],
|
||||
vararg val v: Int = [42]
|
||||
)
|
||||
|
||||
|
||||
Vendored
+2
-2
@@ -3,5 +3,5 @@
|
||||
fun foo(l: () -> Unit) {}
|
||||
fun bar(l: () -> String) {}
|
||||
|
||||
val a = foo { <!UNSUPPORTED!>[]<!> }
|
||||
val b = bar { <!ARGUMENT_TYPE_MISMATCH, UNSUPPORTED!>[]<!> }
|
||||
val a = foo { <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, UNSUPPORTED!>[]<!> }
|
||||
val b = bar { <!TYPE_MISMATCH, UNSUPPORTED!>[]<!> }
|
||||
|
||||
Reference in New Issue
Block a user