[LL FIR] rewrite status phase transformer
Now we will try to avoid redundant calculation:
* Class-like declarations can be calculated without super types
* Overridden search logic not is out of lock
Unfortunately, right now it is not safe to use
StatusResolveMode.FunctionWithSpecificName and
StatusResolveMode.PropertyWithSpecificName
because lazyResolveToPhaseWithCallableMembers can lead to an incorrect
state of scope. Example:
```
open class A {
open fun a() {}
open fun b() {}
}
class C : A()
```
Steps:
1. Resolve constructor of C to STATUS
2. Now we want to call lazyResolveToPhaseWithCallableMembers on
C, and this call will do nothing because this class and all
its declarations (only constructor) are already in STATUS phase,
so class A won't be resolved as expected
^KT-56551
This commit is contained in:
committed by
Space Team
parent
e464af00db
commit
2885df14ee
@@ -175,25 +175,25 @@ FILE: [ResolvedTo(IMPORTS)] nestedClass.kt
|
||||
STATUS:
|
||||
FILE: [ResolvedTo(IMPORTS)] nestedClass.kt
|
||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||
public open [ResolvedTo(STATUS)] class TopLevelClass : R|kotlin/Any| {
|
||||
public [ResolvedTo(STATUS)] [ContainingClassKey=TopLevelClass] constructor(): R|TopLevelClass| {
|
||||
public? open [ResolvedTo(SUPER_TYPES)] class TopLevelClass : R|kotlin/Any| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=TopLevelClass] constructor(): R|TopLevelClass| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
}
|
||||
public open [ResolvedTo(STATUS)] class AnotherTopLevelClass : R|TopLevelClass| {
|
||||
public [ResolvedTo(STATUS)] [ContainingClassKey=AnotherTopLevelClass] constructor(): R|AnotherTopLevelClass| {
|
||||
LAZY_super<R|TopLevelClass|>
|
||||
public? open [ResolvedTo(SUPER_TYPES)] class AnotherTopLevelClass : R|TopLevelClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherTopLevelClass] constructor(): R|AnotherTopLevelClass| {
|
||||
LAZY_super<TopLevelClass>
|
||||
}
|
||||
|
||||
}
|
||||
public final [ResolvedTo(STATUS)] class OuterClass : R|AnotherTopLevelClass| {
|
||||
public [ResolvedTo(STATUS)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
LAZY_super<R|AnotherTopLevelClass|>
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
LAZY_super<AnotherTopLevelClass>
|
||||
}
|
||||
|
||||
public final [ResolvedTo(STATUS)] class NestedClass : R|kotlin/Any| {
|
||||
public [ResolvedTo(STATUS)] [ContainingClassKey=NestedClass] constructor(): R|OuterClass.NestedClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=NestedClass] constructor(): R|OuterClass.NestedClass| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
@@ -204,25 +204,25 @@ FILE: [ResolvedTo(IMPORTS)] nestedClass.kt
|
||||
EXPECT_ACTUAL_MATCHING:
|
||||
FILE: [ResolvedTo(IMPORTS)] nestedClass.kt
|
||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||
public open [ResolvedTo(STATUS)] class TopLevelClass : R|kotlin/Any| {
|
||||
public [ResolvedTo(STATUS)] [ContainingClassKey=TopLevelClass] constructor(): R|TopLevelClass| {
|
||||
public? open [ResolvedTo(SUPER_TYPES)] class TopLevelClass : R|kotlin/Any| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=TopLevelClass] constructor(): R|TopLevelClass| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
}
|
||||
public open [ResolvedTo(STATUS)] class AnotherTopLevelClass : R|TopLevelClass| {
|
||||
public [ResolvedTo(STATUS)] [ContainingClassKey=AnotherTopLevelClass] constructor(): R|AnotherTopLevelClass| {
|
||||
LAZY_super<R|TopLevelClass|>
|
||||
public? open [ResolvedTo(SUPER_TYPES)] class AnotherTopLevelClass : R|TopLevelClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherTopLevelClass] constructor(): R|AnotherTopLevelClass| {
|
||||
LAZY_super<TopLevelClass>
|
||||
}
|
||||
|
||||
}
|
||||
public final [ResolvedTo(STATUS)] class OuterClass : R|AnotherTopLevelClass| {
|
||||
public [ResolvedTo(STATUS)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
LAZY_super<R|AnotherTopLevelClass|>
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
LAZY_super<AnotherTopLevelClass>
|
||||
}
|
||||
|
||||
public final [ResolvedTo(EXPECT_ACTUAL_MATCHING)] class NestedClass : R|kotlin/Any| {
|
||||
public [ResolvedTo(STATUS)] [ContainingClassKey=NestedClass] constructor(): R|OuterClass.NestedClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=NestedClass] constructor(): R|OuterClass.NestedClass| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
@@ -251,7 +251,7 @@ FILE: [ResolvedTo(IMPORTS)] nestedClass.kt
|
||||
}
|
||||
|
||||
public final [ResolvedTo(ARGUMENTS_OF_ANNOTATIONS)] class NestedClass : R|kotlin/Any| {
|
||||
public [ResolvedTo(STATUS)] [ContainingClassKey=NestedClass] constructor(): R|OuterClass.NestedClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=NestedClass] constructor(): R|OuterClass.NestedClass| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
@@ -280,7 +280,7 @@ FILE: [ResolvedTo(IMPORTS)] nestedClass.kt
|
||||
}
|
||||
|
||||
public final [ResolvedTo(CONTRACTS)] class NestedClass : R|kotlin/Any| {
|
||||
public [ResolvedTo(STATUS)] [ContainingClassKey=NestedClass] constructor(): R|OuterClass.NestedClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=NestedClass] constructor(): R|OuterClass.NestedClass| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
@@ -309,7 +309,7 @@ FILE: [ResolvedTo(IMPORTS)] nestedClass.kt
|
||||
}
|
||||
|
||||
public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] class NestedClass : R|kotlin/Any| {
|
||||
public [ResolvedTo(STATUS)] [ContainingClassKey=NestedClass] constructor(): R|OuterClass.NestedClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=NestedClass] constructor(): R|OuterClass.NestedClass| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
@@ -338,7 +338,7 @@ FILE: [ResolvedTo(IMPORTS)] nestedClass.kt
|
||||
}
|
||||
|
||||
public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] class NestedClass : R|kotlin/Any| {
|
||||
public [ResolvedTo(STATUS)] [ContainingClassKey=NestedClass] constructor(): R|OuterClass.NestedClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=NestedClass] constructor(): R|OuterClass.NestedClass| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user