[FIR] Fix isValidTypeParameterFromOuterDeclaration check for local class

This fixes an IllegalArgumentException when
symbolProvider.getClassLikeSymbolByClassId is called with a local
class ID.

#KT-63656 Fixed
This commit is contained in:
Kirill Rakhman
2023-11-22 09:40:22 +01:00
committed by Space Team
parent a703f5afb8
commit 9ea4afe7c8
4 changed files with 46 additions and 52 deletions
@@ -1,3 +1,4 @@
// WITH_STDLIB
import A.B.D
import A.B.C
import A.B.D.Innermost
@@ -19,5 +20,24 @@ class A<T> {
val d: <!OUTER_CLASS_ARGUMENTS_REQUIRED("class 'B'")!>D?<!> = null
val innerMost: <!OUTER_CLASS_ARGUMENTS_REQUIRED("class 'B'")!>Innermost<String>?<!> = null
fun foo() {
object {
val something = listOf<<!OUTER_CLASS_ARGUMENTS_REQUIRED!>B<String><!>>()
}
}
}
fun foo() {
object {
val something = listOf<B<String>>() // False positive in K1 KT-63732
}
}
}
fun <T> bar() {
data class Example(val foo: Int)
object {
val something = listOf<Example>()
}
}
@@ -1,3 +1,4 @@
// WITH_STDLIB
import A.B.D
import A.B.C
import A.B.D.Innermost
@@ -19,5 +20,24 @@ class A<T> {
val d: <!OUTER_CLASS_ARGUMENTS_REQUIRED("class 'B'")!>D<!>? = null
val innerMost: <!OUTER_CLASS_ARGUMENTS_REQUIRED("class 'B'")!>Innermost<!><String>? = null
fun foo() {
object {
val something = listOf<<!OUTER_CLASS_ARGUMENTS_REQUIRED!>B<!><String>>()
}
}
}
fun foo() {
object {
val something = listOf<<!OUTER_CLASS_ARGUMENTS_REQUIRED!>B<!><String>>() // False positive in K1 KT-63732
}
}
}
fun <T> bar() {
data class Example(val foo: Int)
object {
val something = listOf<Example>()
}
}
@@ -1,49 +0,0 @@
package
public final class A</*0*/ T> {
public constructor A</*0*/ T>()
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
public final inner class B</*0*/ F> /*captured type parameters: /*1*/ T*/ {
public constructor B</*0*/ F>()
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
public final inner class C</*0*/ E> /*captured type parameters: /*1*/ F, /*2*/ T*/ {
public constructor C</*0*/ E>()
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
}
public final inner class D /*captured type parameters: /*0*/ F, /*1*/ T*/ {
public constructor D()
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
public final inner class Innermost</*0*/ X> /*captured type parameters: /*1*/ F, /*2*/ T*/ {
public constructor Innermost</*0*/ X>()
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
}
}
}
public final class Nested {
public constructor Nested()
public final val c: [Error type: Type for error type constructor (C)]<kotlin.Int>?
public final val d: [Error type: Type for error type constructor (D)]?
public final val innerMost: [Error type: Type for error type constructor (Innermost)]<kotlin.String>?
public final val x: [Error type: Type for error type constructor (B)]<kotlin.String>?
public final val y: [Error type: Type for error type constructor (C)]<kotlin.String, kotlin.String>?
public final val z: [Error type: Type for error type constructor (D)]<kotlin.String>?
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
}
}