[LL FIR] update phase of type parameters on lazy resolve

This commit is contained in:
Ilya Kirillov
2022-08-06 16:02:33 +02:00
parent 0f6f901179
commit 72da40f97c
9 changed files with 52 additions and 43 deletions
@@ -38,6 +38,15 @@ internal interface LLFirLazyTransformer {
if (element.resolvePhase >= newPhase) return
element.replaceResolvePhase(newPhase)
if (element is FirCallableDeclaration) {
element.typeParameters.forEach { typeParameter ->
// if it is not a type parameter of outer declaration
if (typeParameter is FirTypeParameter) {
updatePhaseForNonLocals(typeParameter, newPhase)
}
}
}
when (element) {
is FirFunction -> {
element.valueParameters.forEach { updatePhaseForNonLocals(it, newPhase) }
@@ -1,5 +1,5 @@
FILE: functionWithImplicitType.kt
public final [BODY_RESOLVE] fun <T> checkSubtype([BODY_RESOLVE] t: R|T|): R|T| {
public final [BODY_RESOLVE] fun <[BODY_RESOLVE] T> checkSubtype([BODY_RESOLVE] t: R|T|): R|T| {
^checkSubtype R|<local>/t|
}
public final [BODY_RESOLVE] val ab: R|kotlin/collections/List<kotlin/Int>?| = R|/checkSubtype|<R|kotlin/collections/List<kotlin/Int>?|>(Q|java/util/Collections|.R|java/util/Collections.emptyList|<R|kotlin/Int|>())
@@ -1,8 +1,8 @@
FILE: lambdaInImplicitFunBody.kt
public final inline [BODY_RESOLVE] fun <T, R> with([BODY_RESOLVE] receiver: R|T|, [BODY_RESOLVE] block: R|T.() -> R|): R|R| {
public final inline [BODY_RESOLVE] fun <[BODY_RESOLVE] T, [BODY_RESOLVE] R> with([BODY_RESOLVE] receiver: R|T|, [BODY_RESOLVE] block: R|T.() -> R|): R|R| {
^with R|<local>/block|.R|SubstitutionOverride<kotlin/Function1.invoke: R|R|>|(R|<local>/receiver|)
}
public final inline [BODY_RESOLVE] fun <T, R> R|T|.let([BODY_RESOLVE] block: R|(T) -> R|): R|R| {
public final inline [BODY_RESOLVE] fun <[BODY_RESOLVE] T, [BODY_RESOLVE] R> R|T|.let([BODY_RESOLVE] block: R|(T) -> R|): R|R| {
^let R|<local>/block|.R|SubstitutionOverride<kotlin/Function1.invoke: R|R|>|(this@R|/let|)
}
public final [BODY_RESOLVE] class B : R|kotlin/Any| {
@@ -1,8 +1,8 @@
FILE: lambdaInImplicitPropertyBody.kt
public final inline [BODY_RESOLVE] fun <T, R> with([BODY_RESOLVE] receiver: R|T|, [BODY_RESOLVE] block: R|T.() -> R|): R|R| {
public final inline [BODY_RESOLVE] fun <[BODY_RESOLVE] T, [BODY_RESOLVE] R> with([BODY_RESOLVE] receiver: R|T|, [BODY_RESOLVE] block: R|T.() -> R|): R|R| {
^with R|<local>/block|.R|SubstitutionOverride<kotlin/Function1.invoke: R|R|>|(R|<local>/receiver|)
}
public final inline [BODY_RESOLVE] fun <T, R> R|T|.let([BODY_RESOLVE] block: R|(T) -> R|): R|R| {
public final inline [BODY_RESOLVE] fun <[BODY_RESOLVE] T, [BODY_RESOLVE] R> R|T|.let([BODY_RESOLVE] block: R|(T) -> R|): R|R| {
^let R|<local>/block|.R|SubstitutionOverride<kotlin/Function1.invoke: R|R|>|(this@R|/let|)
}
public final [BODY_RESOLVE] class B : R|kotlin/Any| {
@@ -1,8 +1,8 @@
FILE: lambdasInWithBodyFunction.kt
public final inline [BODY_RESOLVE] fun <T, R> with([BODY_RESOLVE] receiver: R|T|, [BODY_RESOLVE] block: R|T.() -> R|): R|R| {
public final inline [BODY_RESOLVE] fun <[BODY_RESOLVE] T, [BODY_RESOLVE] R> with([BODY_RESOLVE] receiver: R|T|, [BODY_RESOLVE] block: R|T.() -> R|): R|R| {
^with R|<local>/block|.R|SubstitutionOverride<kotlin/Function1.invoke: R|R|>|(R|<local>/receiver|)
}
public final inline [BODY_RESOLVE] fun <T, R> R|T|.let([BODY_RESOLVE] block: R|(T) -> R|): R|R| {
public final inline [BODY_RESOLVE] fun <[BODY_RESOLVE] T, [BODY_RESOLVE] R> R|T|.let([BODY_RESOLVE] block: R|(T) -> R|): R|R| {
^let R|<local>/block|.R|SubstitutionOverride<kotlin/Function1.invoke: R|R|>|(this@R|/let|)
}
public final [BODY_RESOLVE] class A : R|kotlin/Any| {
@@ -9,41 +9,41 @@ FILE: functionWithTypeParameters.kt
COMPILER_REQUIRED_ANNOTATIONS:
FILE: functionWithTypeParameters.kt
public? final? [COMPILER_REQUIRED_ANNOTATIONS] fun <[RAW_FIR] T : Int, [RAW_FIR] K> resolveMe(): R|kotlin/Unit| { LAZY_BLOCK }
public? final? [COMPILER_REQUIRED_ANNOTATIONS] fun <[COMPILER_REQUIRED_ANNOTATIONS] T : Int, [COMPILER_REQUIRED_ANNOTATIONS] K> resolveMe(): R|kotlin/Unit| { LAZY_BLOCK }
COMPANION_GENERATION:
FILE: functionWithTypeParameters.kt
public? final? [COMPANION_GENERATION] fun <[RAW_FIR] T : Int, [RAW_FIR] K> resolveMe(): R|kotlin/Unit| { LAZY_BLOCK }
public? final? [COMPANION_GENERATION] fun <[COMPANION_GENERATION] T : Int, [COMPANION_GENERATION] K> resolveMe(): R|kotlin/Unit| { LAZY_BLOCK }
SUPER_TYPES:
FILE: functionWithTypeParameters.kt
public? final? [SUPER_TYPES] fun <[RAW_FIR] T : Int, [RAW_FIR] K> resolveMe(): R|kotlin/Unit| { LAZY_BLOCK }
public? final? [SUPER_TYPES] fun <[SUPER_TYPES] T : Int, [SUPER_TYPES] K> resolveMe(): R|kotlin/Unit| { LAZY_BLOCK }
TYPES:
FILE: functionWithTypeParameters.kt
public? final? [TYPES] fun <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> resolveMe(): R|kotlin/Unit| { LAZY_BLOCK }
public? final? [TYPES] fun <[TYPES] T : R|kotlin/Int|, [TYPES] K> resolveMe(): R|kotlin/Unit| { LAZY_BLOCK }
STATUS:
FILE: functionWithTypeParameters.kt
public final [STATUS] fun <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> resolveMe(): R|kotlin/Unit| { LAZY_BLOCK }
public final [STATUS] fun <[STATUS] T : R|kotlin/Int|, [STATUS] K> resolveMe(): R|kotlin/Unit| { LAZY_BLOCK }
ARGUMENTS_OF_ANNOTATIONS:
FILE: functionWithTypeParameters.kt
public final [ARGUMENTS_OF_ANNOTATIONS] fun <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> resolveMe(): R|kotlin/Unit| { LAZY_BLOCK }
public final [ARGUMENTS_OF_ANNOTATIONS] fun <[ARGUMENTS_OF_ANNOTATIONS] T : R|kotlin/Int|, [ARGUMENTS_OF_ANNOTATIONS] K> resolveMe(): R|kotlin/Unit| { LAZY_BLOCK }
CONTRACTS:
FILE: functionWithTypeParameters.kt
public final [CONTRACTS] fun <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> resolveMe(): R|kotlin/Unit| {
public final [CONTRACTS] fun <[CONTRACTS] T : R|kotlin/Int|, [CONTRACTS] K> resolveMe(): R|kotlin/Unit| {
}
IMPLICIT_TYPES_BODY_RESOLVE:
FILE: functionWithTypeParameters.kt
public final [IMPLICIT_TYPES_BODY_RESOLVE] fun <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> resolveMe(): R|kotlin/Unit| {
public final [IMPLICIT_TYPES_BODY_RESOLVE] fun <[IMPLICIT_TYPES_BODY_RESOLVE] T : R|kotlin/Int|, [IMPLICIT_TYPES_BODY_RESOLVE] K> resolveMe(): R|kotlin/Unit| {
}
EXPECT_ACTUAL_MATCHING:
FILE: functionWithTypeParameters.kt
public final [EXPECT_ACTUAL_MATCHING] fun <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> resolveMe(): R|kotlin/Unit| {
public final [EXPECT_ACTUAL_MATCHING] fun <[EXPECT_ACTUAL_MATCHING] T : R|kotlin/Int|, [EXPECT_ACTUAL_MATCHING] K> resolveMe(): R|kotlin/Unit| {
}
BODY_RESOLVE:
@@ -11,51 +11,51 @@ FILE: propertyWithTypeParameters.kt
COMPILER_REQUIRED_ANNOTATIONS:
FILE: propertyWithTypeParameters.kt
public? final? [COMPILER_REQUIRED_ANNOTATIONS] val <[RAW_FIR] T : Int, [RAW_FIR] K> T.resolveMe: K
public? final? [COMPILER_REQUIRED_ANNOTATIONS] val <[COMPILER_REQUIRED_ANNOTATIONS] T : Int, [COMPILER_REQUIRED_ANNOTATIONS] K> T.resolveMe: K
public? [COMPILER_REQUIRED_ANNOTATIONS] get(): K { LAZY_BLOCK }
COMPANION_GENERATION:
FILE: propertyWithTypeParameters.kt
public? final? [COMPANION_GENERATION] val <[RAW_FIR] T : Int, [RAW_FIR] K> T.resolveMe: K
public? final? [COMPANION_GENERATION] val <[COMPANION_GENERATION] T : Int, [COMPANION_GENERATION] K> T.resolveMe: K
public? [COMPANION_GENERATION] get(): K { LAZY_BLOCK }
SUPER_TYPES:
FILE: propertyWithTypeParameters.kt
public? final? [SUPER_TYPES] val <[RAW_FIR] T : Int, [RAW_FIR] K> T.resolveMe: K
public? final? [SUPER_TYPES] val <[SUPER_TYPES] T : Int, [SUPER_TYPES] K> T.resolveMe: K
public? [SUPER_TYPES] get(): K { LAZY_BLOCK }
TYPES:
FILE: propertyWithTypeParameters.kt
public? final? [TYPES] val <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> R|T|.resolveMe: R|K|
public? final? [TYPES] val <[TYPES] T : R|kotlin/Int|, [TYPES] K> R|T|.resolveMe: R|K|
public? [TYPES] get(): R|K| { LAZY_BLOCK }
STATUS:
FILE: propertyWithTypeParameters.kt
public final [STATUS] val <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> R|T|.resolveMe: R|K|
public final [STATUS] val <[STATUS] T : R|kotlin/Int|, [STATUS] K> R|T|.resolveMe: R|K|
public [STATUS] get(): R|K| { LAZY_BLOCK }
ARGUMENTS_OF_ANNOTATIONS:
FILE: propertyWithTypeParameters.kt
public final [ARGUMENTS_OF_ANNOTATIONS] val <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> R|T|.resolveMe: R|K|
public final [ARGUMENTS_OF_ANNOTATIONS] val <[ARGUMENTS_OF_ANNOTATIONS] T : R|kotlin/Int|, [ARGUMENTS_OF_ANNOTATIONS] K> R|T|.resolveMe: R|K|
public [ARGUMENTS_OF_ANNOTATIONS] get(): R|K| { LAZY_BLOCK }
CONTRACTS:
FILE: propertyWithTypeParameters.kt
public final [CONTRACTS] val <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> R|T|.resolveMe: R|K|
public final [CONTRACTS] val <[CONTRACTS] T : R|kotlin/Int|, [CONTRACTS] K> R|T|.resolveMe: R|K|
public [CONTRACTS] get(): R|K| {
^ TODO#()
}
IMPLICIT_TYPES_BODY_RESOLVE:
FILE: propertyWithTypeParameters.kt
public final [IMPLICIT_TYPES_BODY_RESOLVE] val <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> R|T|.resolveMe: R|K|
public final [IMPLICIT_TYPES_BODY_RESOLVE] val <[IMPLICIT_TYPES_BODY_RESOLVE] T : R|kotlin/Int|, [IMPLICIT_TYPES_BODY_RESOLVE] K> R|T|.resolveMe: R|K|
public [IMPLICIT_TYPES_BODY_RESOLVE] get(): R|K| {
^ TODO#()
}
EXPECT_ACTUAL_MATCHING:
FILE: propertyWithTypeParameters.kt
public final [EXPECT_ACTUAL_MATCHING] val <[RAW_FIR] T : R|kotlin/Int|, [RAW_FIR] K> R|T|.resolveMe: R|K|
public final [EXPECT_ACTUAL_MATCHING] val <[EXPECT_ACTUAL_MATCHING] T : R|kotlin/Int|, [EXPECT_ACTUAL_MATCHING] K> R|T|.resolveMe: R|K|
public [EXPECT_ACTUAL_MATCHING] get(): R|K| {
^ TODO#()
}
@@ -28,7 +28,7 @@ FILE: typeParameterOfNonLocalFunction.kt
super<R|kotlin/Any|>()
}
public? final? [COMPILER_REQUIRED_ANNOTATIONS] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
public? final? [COMPILER_REQUIRED_ANNOTATIONS] fun <[COMPILER_REQUIRED_ANNOTATIONS] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
}
@@ -39,7 +39,7 @@ FILE: typeParameterOfNonLocalFunction.kt
super<R|kotlin/Any|>()
}
public? final? [COMPANION_GENERATION] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
public? final? [COMPANION_GENERATION] fun <[COMPANION_GENERATION] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
}
@@ -50,7 +50,7 @@ FILE: typeParameterOfNonLocalFunction.kt
super<R|kotlin/Any|>()
}
public? final? [SUPER_TYPES] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
public? final? [SUPER_TYPES] fun <[SUPER_TYPES] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
}
@@ -61,7 +61,7 @@ FILE: typeParameterOfNonLocalFunction.kt
super<R|kotlin/Any|>()
}
public? final? [TYPES] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
public? final? [TYPES] fun <[TYPES] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
}
@@ -72,7 +72,7 @@ FILE: typeParameterOfNonLocalFunction.kt
super<R|kotlin/Any|>()
}
public final [STATUS] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
public final [STATUS] fun <[STATUS] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
}
@@ -83,7 +83,7 @@ FILE: typeParameterOfNonLocalFunction.kt
super<R|kotlin/Any|>()
}
public final [ARGUMENTS_OF_ANNOTATIONS] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
public final [ARGUMENTS_OF_ANNOTATIONS] fun <[ARGUMENTS_OF_ANNOTATIONS] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
}
@@ -94,7 +94,7 @@ FILE: typeParameterOfNonLocalFunction.kt
super<R|kotlin/Any|>()
}
public final [CONTRACTS] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| {
public final [CONTRACTS] fun <[CONTRACTS] resolveMe> ddd(): R|kotlin/Unit| {
}
}
@@ -106,7 +106,7 @@ FILE: typeParameterOfNonLocalFunction.kt
super<R|kotlin/Any|>()
}
public final [IMPLICIT_TYPES_BODY_RESOLVE] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| {
public final [IMPLICIT_TYPES_BODY_RESOLVE] fun <[IMPLICIT_TYPES_BODY_RESOLVE] resolveMe> ddd(): R|kotlin/Unit| {
}
}
@@ -118,7 +118,7 @@ FILE: typeParameterOfNonLocalFunction.kt
super<R|kotlin/Any|>()
}
public final [EXPECT_ACTUAL_MATCHING] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| {
public final [EXPECT_ACTUAL_MATCHING] fun <[EXPECT_ACTUAL_MATCHING] resolveMe> ddd(): R|kotlin/Unit| {
}
}
@@ -9,41 +9,41 @@ FILE: typeParameterOfTopFunction.kt
COMPILER_REQUIRED_ANNOTATIONS:
FILE: typeParameterOfTopFunction.kt
public? final? [COMPILER_REQUIRED_ANNOTATIONS] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
public? final? [COMPILER_REQUIRED_ANNOTATIONS] fun <[COMPILER_REQUIRED_ANNOTATIONS] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
COMPANION_GENERATION:
FILE: typeParameterOfTopFunction.kt
public? final? [COMPANION_GENERATION] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
public? final? [COMPANION_GENERATION] fun <[COMPANION_GENERATION] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
SUPER_TYPES:
FILE: typeParameterOfTopFunction.kt
public? final? [SUPER_TYPES] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
public? final? [SUPER_TYPES] fun <[SUPER_TYPES] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
TYPES:
FILE: typeParameterOfTopFunction.kt
public? final? [TYPES] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
public? final? [TYPES] fun <[TYPES] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
STATUS:
FILE: typeParameterOfTopFunction.kt
public final [STATUS] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
public final [STATUS] fun <[STATUS] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
ARGUMENTS_OF_ANNOTATIONS:
FILE: typeParameterOfTopFunction.kt
public final [ARGUMENTS_OF_ANNOTATIONS] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
public final [ARGUMENTS_OF_ANNOTATIONS] fun <[ARGUMENTS_OF_ANNOTATIONS] resolveMe> ddd(): R|kotlin/Unit| { LAZY_BLOCK }
CONTRACTS:
FILE: typeParameterOfTopFunction.kt
public final [CONTRACTS] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| {
public final [CONTRACTS] fun <[CONTRACTS] resolveMe> ddd(): R|kotlin/Unit| {
}
IMPLICIT_TYPES_BODY_RESOLVE:
FILE: typeParameterOfTopFunction.kt
public final [IMPLICIT_TYPES_BODY_RESOLVE] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| {
public final [IMPLICIT_TYPES_BODY_RESOLVE] fun <[IMPLICIT_TYPES_BODY_RESOLVE] resolveMe> ddd(): R|kotlin/Unit| {
}
EXPECT_ACTUAL_MATCHING:
FILE: typeParameterOfTopFunction.kt
public final [EXPECT_ACTUAL_MATCHING] fun <[RAW_FIR] resolveMe> ddd(): R|kotlin/Unit| {
public final [EXPECT_ACTUAL_MATCHING] fun <[EXPECT_ACTUAL_MATCHING] resolveMe> ddd(): R|kotlin/Unit| {
}
BODY_RESOLVE: