[LL FIR] resolve class before constructor

This is required to have stable resolution order to avoid concurrent
modifications and correct resolution context.
This also fixes KT-63700 as a super call expands only during body
resolution in the case of secondary constructor

^KT-63042
^KT-63700 Fixed
This commit is contained in:
Dmitrii Gridin
2023-11-22 12:21:47 +01:00
committed by Space Team
parent e3d91741ca
commit 5183019cb8
207 changed files with 2011 additions and 1019 deletions
@@ -7,7 +7,7 @@ FIR element rendered:
FIR FILE:
FILE: [ResolvedTo(IMPORTS)] annotationOnConstructorProperty.kt
public final [ResolvedTo(STATUS)] class Abc : R|kotlin/Any| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class Abc : R|kotlin/Any| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=Abc] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] [CorrespondingProperty=/Abc.i] @<ERROR TYPE REF: Symbol not found for Anno>[Types]() i: R|kotlin/Int|): R|Abc| {
LAZY_super<R|kotlin/Any|>
}
@@ -7,7 +7,7 @@ FIR element rendered:
FIR FILE:
FILE: [ResolvedTo(IMPORTS)] jvmFieldAnnotationOnConstructorProperty.kt
public final [ResolvedTo(STATUS)] class MyClass : R|A| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class MyClass : R|A| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=MyClass] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] [CorrespondingProperty=/MyClass.addCommaWarning] @<ERROR TYPE REF: Symbol not found for JvmField>[Types]() addCommaWarning: R|kotlin/Boolean| = LAZY_EXPRESSION): R|MyClass| {
LAZY_super<R|A|>
}
@@ -7,7 +7,7 @@ FIR element rendered:
FIR FILE:
FILE: [ResolvedTo(IMPORTS)] jvmFieldAnnotationOnConstructorProperty.kt
public final [ResolvedTo(STATUS)] class MyClass : R|A| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class MyClass : R|A| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=MyClass] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] [CorrespondingProperty=/MyClass.addCommaWarning] addCommaWarning: R|kotlin/Boolean| = LAZY_EXPRESSION): R|MyClass| {
LAZY_super<R|A|>
}
@@ -7,7 +7,7 @@ FIR element rendered:
FIR FILE:
FILE: [ResolvedTo(IMPORTS)] typeOnAnnotationOnConstructorParameter.kt
public final [ResolvedTo(STATUS)] class ResolveMe : R|A| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class ResolveMe : R|A| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=ResolveMe] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] addCommaWarning: R|@R|Anno|() kotlin/Boolean| = LAZY_EXPRESSION): R|ResolveMe| {
LAZY_super<R|A|>
}
@@ -7,7 +7,7 @@ String(abc)
FIR FILE:
FILE: [ResolvedTo(IMPORTS)] typeOnAnnotationOnConstructorParameterExpression.kt
public final [ResolvedTo(STATUS)] class ResolveMe : R|kotlin/Any| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class ResolveMe : R|kotlin/Any| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=ResolveMe] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] addCommaWarning: R|@R|Anno|(s = String(abc)) kotlin/Boolean| = LAZY_EXPRESSION): R|ResolveMe| {
LAZY_super<R|kotlin/Any|>
}
@@ -11,7 +11,7 @@ FILE: [ResolvedTo(IMPORTS)] typeOnAnnotationOnConstructorParameterExpressionScri
SCRIPT: [ResolvedTo(TYPES)] <script-typeOnAnnotationOnConstructorParameterExpressionScript.kts>
[ResolvedTo(RAW_FIR)] lval args: R|kotlin/Array<kotlin/String>|
public final [ResolvedTo(STATUS)] class ResolveMe : R|kotlin/Any| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class ResolveMe : R|kotlin/Any| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=ResolveMe] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] addCommaWarning: R|@R|Anno|(s = String(abc)) kotlin/Boolean| = LAZY_EXPRESSION): R|ResolveMe| {
LAZY_super<R|kotlin/Any|>
}
@@ -11,7 +11,7 @@ FILE: [ResolvedTo(IMPORTS)] typeOnAnnotationOnConstructorParameterScript.kts
SCRIPT: [ResolvedTo(TYPES)] <script-typeOnAnnotationOnConstructorParameterScript.kts>
[ResolvedTo(RAW_FIR)] lval args: R|kotlin/Array<kotlin/String>|
public final [ResolvedTo(STATUS)] class ResolveMe : R|A| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class ResolveMe : R|A| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=ResolveMe] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] addCommaWarning: R|@R|Anno|() kotlin/Boolean| = LAZY_EXPRESSION): R|ResolveMe| {
LAZY_super<R|A|>
}
@@ -7,7 +7,7 @@ FIR element rendered:
FIR FILE:
FILE: [ResolvedTo(IMPORTS)] typeOnAnnotationOnConstructorProperty.kt
public final [ResolvedTo(STATUS)] class ResolveMe : R|A| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class ResolveMe : R|A| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=ResolveMe] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] [CorrespondingProperty=/ResolveMe.addCommaWarning] addCommaWarning: R|@R|Anno|() kotlin/Boolean| = LAZY_EXPRESSION): R|ResolveMe| {
LAZY_super<R|A|>
}
@@ -7,7 +7,7 @@ FIR element rendered:
FIR FILE:
FILE: [ResolvedTo(IMPORTS)] typeOnAnnotationOnConstructorPropertyAndParameter.kt
public final [ResolvedTo(STATUS)] class ResolveMe : R|A| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class ResolveMe : R|A| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=ResolveMe] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] [CorrespondingProperty=/ResolveMe.addCommaWarning] addCommaWarning: R|@R|Anno|() kotlin/Boolean| = LAZY_EXPRESSION, [ResolvedTo(ANNOTATION_ARGUMENTS)] second: R|@R|Anno|() kotlin/Boolean| = LAZY_EXPRESSION): R|ResolveMe| {
LAZY_super<R|A|>
}
@@ -11,7 +11,7 @@ FILE: [ResolvedTo(IMPORTS)] typeOnAnnotationOnConstructorPropertyScript.kts
SCRIPT: [ResolvedTo(TYPES)] <script-typeOnAnnotationOnConstructorPropertyScript.kts>
[ResolvedTo(RAW_FIR)] lval args: R|kotlin/Array<kotlin/String>|
public final [ResolvedTo(STATUS)] class ResolveMe : R|A| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class ResolveMe : R|A| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=ResolveMe] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] [CorrespondingProperty=/ResolveMe.addCommaWarning] addCommaWarning: R|@R|Anno|() kotlin/Boolean| = LAZY_EXPRESSION): R|ResolveMe| {
LAZY_super<R|A|>
}
@@ -7,7 +7,7 @@ FIR element rendered:
FIR FILE:
FILE: [ResolvedTo(IMPORTS)] typeOnAnnotationOnConstructorPropertyWithArguments.kt
public final [ResolvedTo(STATUS)] class ResolveMe : R|A| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class ResolveMe : R|A| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=ResolveMe] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] [CorrespondingProperty=/ResolveMe.addCommaWarning] addCommaWarning: R|@R|Anno|(value = String(abc)) kotlin/Boolean| = LAZY_EXPRESSION): R|ResolveMe| {
LAZY_super<R|A|>
}
@@ -11,7 +11,7 @@ FILE: [ResolvedTo(IMPORTS)] typeOnAnnotationOnConstructorPropertyWithArgumentsSc
SCRIPT: [ResolvedTo(TYPES)] <script-typeOnAnnotationOnConstructorPropertyWithArgumentsScript.kts>
[ResolvedTo(RAW_FIR)] lval args: R|kotlin/Array<kotlin/String>|
public final [ResolvedTo(STATUS)] class ResolveMe : R|A| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class ResolveMe : R|A| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=ResolveMe] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] [CorrespondingProperty=/ResolveMe.addCommaWarning] addCommaWarning: R|@R|Anno|(value = String(abc)) kotlin/Boolean| = LAZY_EXPRESSION): R|ResolveMe| {
LAZY_super<R|A|>
}
@@ -13,7 +13,7 @@ FILE: [ResolvedTo(IMPORTS)] field.kt
}
}
public final [ResolvedTo(STATUS)] class X : R|kotlin/Any| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class X : R|kotlin/Any| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=X] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] [CorrespondingProperty=/X.x] x: R|kotlin/Int|): R|X| {
LAZY_super<R|kotlin/Any|>
}
@@ -18,7 +18,7 @@ FILE: [ResolvedTo(IMPORTS)] fieldScript.kts
}
public final [ResolvedTo(STATUS)] class X : R|kotlin/Any| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class X : R|kotlin/Any| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=X] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] [CorrespondingProperty=/X.x] x: R|kotlin/Int|): R|X| {
LAZY_super<R|kotlin/Any|>
}
@@ -13,7 +13,7 @@ FILE: [ResolvedTo(IMPORTS)] getter.kt
}
}
public final [ResolvedTo(STATUS)] class X : R|kotlin/Any| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class X : R|kotlin/Any| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=X] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] [CorrespondingProperty=/X.x] x: R|kotlin/Int|): R|X| {
LAZY_super<R|kotlin/Any|>
}
@@ -18,7 +18,7 @@ FILE: [ResolvedTo(IMPORTS)] getterScript.kts
}
public final [ResolvedTo(STATUS)] class X : R|kotlin/Any| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class X : R|kotlin/Any| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=X] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] [CorrespondingProperty=/X.x] x: R|kotlin/Int|): R|X| {
LAZY_super<R|kotlin/Any|>
}
@@ -13,7 +13,7 @@ FILE: [ResolvedTo(IMPORTS)] param.kt
}
}
public final [ResolvedTo(STATUS)] class X : R|kotlin/Any| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class X : R|kotlin/Any| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=X] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] [CorrespondingProperty=/X.x] @CONSTRUCTOR_PARAMETER:R|Ann|[Types]() x: R|kotlin/Int|): R|X| {
LAZY_super<R|kotlin/Any|>
}
@@ -18,7 +18,7 @@ FILE: [ResolvedTo(IMPORTS)] paramScript.kts
}
public final [ResolvedTo(STATUS)] class X : R|kotlin/Any| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class X : R|kotlin/Any| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=X] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] [CorrespondingProperty=/X.x] @CONSTRUCTOR_PARAMETER:R|Ann|[Types]() x: R|kotlin/Int|): R|X| {
LAZY_super<R|kotlin/Any|>
}
@@ -13,7 +13,7 @@ FILE: [ResolvedTo(IMPORTS)] property.kt
}
}
public final [ResolvedTo(STATUS)] class X : R|kotlin/Any| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class X : R|kotlin/Any| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=X] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] [CorrespondingProperty=/X.x] x: R|kotlin/Int|): R|X| {
LAZY_super<R|kotlin/Any|>
}
@@ -18,7 +18,7 @@ FILE: [ResolvedTo(IMPORTS)] propertyScript.kts
}
public final [ResolvedTo(STATUS)] class X : R|kotlin/Any| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class X : R|kotlin/Any| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=X] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] [CorrespondingProperty=/X.x] x: R|kotlin/Int|): R|X| {
LAZY_super<R|kotlin/Any|>
}
@@ -13,7 +13,7 @@ FILE: [ResolvedTo(IMPORTS)] setParam.kt
}
}
public final [ResolvedTo(STATUS)] class X : R|kotlin/Any| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class X : R|kotlin/Any| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=X] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] [CorrespondingProperty=/X.x] x: R|kotlin/Int|): R|X| {
LAZY_super<R|kotlin/Any|>
}
@@ -18,7 +18,7 @@ FILE: [ResolvedTo(IMPORTS)] setParamScript.kts
}
public final [ResolvedTo(STATUS)] class X : R|kotlin/Any| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class X : R|kotlin/Any| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=X] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] [CorrespondingProperty=/X.x] x: R|kotlin/Int|): R|X| {
LAZY_super<R|kotlin/Any|>
}
@@ -13,7 +13,7 @@ FILE: [ResolvedTo(IMPORTS)] setter.kt
}
}
public final [ResolvedTo(STATUS)] class X : R|kotlin/Any| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class X : R|kotlin/Any| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=X] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] [CorrespondingProperty=/X.x] x: R|kotlin/Int|): R|X| {
LAZY_super<R|kotlin/Any|>
}
@@ -18,7 +18,7 @@ FILE: [ResolvedTo(IMPORTS)] setterScript.kts
}
public final [ResolvedTo(STATUS)] class X : R|kotlin/Any| {
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class X : R|kotlin/Any| {
public [ResolvedTo(ANNOTATION_ARGUMENTS)] [ContainingClassKey=X] constructor([ResolvedTo(ANNOTATION_ARGUMENTS)] [CorrespondingProperty=/X.x] x: R|kotlin/Int|): R|X| {
LAZY_super<R|kotlin/Any|>
}