[FE1.0] Optimize search of expect class member in annotation checker
In the following scenario, when we search corresponding expect member
for actual `A.B`, we can skip checking compatibility of `B` scope.
```
class A {
class B {
fun foo() {}
}
}
actual typealias AImpl = A
```
This is because:
1. Annotation checker runs no matter if found expect class is compatible
or not.
2. Class always has at most one corresponding `expect` class (unlike for
functions, which may have several overrides), so we are sure that we
found the right member.
^KT-60668
^KT-60936
This commit is contained in:
committed by
Space Team
parent
f1ea6545eb
commit
b57940a59b
+21
@@ -0,0 +1,21 @@
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
annotation class Ann
|
||||
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>expect class A {
|
||||
<!INCOMPATIBLE_MATCHING{JVM}!>class B {
|
||||
@Ann
|
||||
fun foo()
|
||||
<!NO_ACTUAL_FOR_EXPECT{JVM}!>fun missingOnActual()<!>
|
||||
}<!>
|
||||
}<!>
|
||||
|
||||
// MODULE: m1-jvm()()(m1-common)
|
||||
// FILE: jvm.kt
|
||||
class AImpl {
|
||||
class B {
|
||||
fun foo() {}
|
||||
}
|
||||
}
|
||||
|
||||
<!ACTUAL_ANNOTATIONS_NOT_MATCH_EXPECT!>actual typealias <!ACTUAL_ANNOTATIONS_NOT_MATCH_EXPECT, NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>A<!> = AImpl<!>
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
annotation class Ann
|
||||
|
||||
expect class A {
|
||||
class B {
|
||||
@Ann
|
||||
fun foo()
|
||||
fun missingOnActual()
|
||||
}
|
||||
}
|
||||
|
||||
// MODULE: m1-jvm()()(m1-common)
|
||||
// FILE: jvm.kt
|
||||
class AImpl {
|
||||
class B {
|
||||
fun foo() {}
|
||||
}
|
||||
}
|
||||
|
||||
actual typealias <!ACTUAL_ANNOTATIONS_NOT_MATCH_EXPECT, NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS!>A<!> = AImpl
|
||||
Reference in New Issue
Block a user