[LL FIR] do not calculate constructors with classes during types phase
^KT-56551
This commit is contained in:
committed by
Space Team
parent
5b3f617378
commit
e464af00db
+20
-23
@@ -13,9 +13,11 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkPhase
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkReceiverTypeRefIsResolved
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkReturnTypeRefIsResolved
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkTypeRefIsResolved
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries
|
||||
import org.jetbrains.kotlin.fir.FirElementWithResolveState
|
||||
import org.jetbrains.kotlin.fir.FirFileAnnotationsContainer
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.PrivateForInline
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirTypeResolveTransformer
|
||||
@@ -96,37 +98,32 @@ private class LLFirTypeTargetResolver(
|
||||
|
||||
transformer.withClassScopes(
|
||||
firClass,
|
||||
actionInsideStaticScope = {
|
||||
resolveConstructors(firClass)
|
||||
},
|
||||
action = action,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun resolveConstructors(firClass: FirRegularClass): Unit = transformer.withScopeCleanup {
|
||||
transformer.addTypeParametersScope(firClass)
|
||||
|
||||
for (member in firClass.declarations) {
|
||||
if (member !is FirConstructor) continue
|
||||
|
||||
member.lazyResolveToPhase(resolverPhase.previous)
|
||||
|
||||
performCustomResolveUnderLock(member) {
|
||||
// ConstructedTypeRef should be resolved only with type parameters, but not with nested classes and classes from supertypes
|
||||
transformer.transformDelegatedConstructorCall(member)
|
||||
|
||||
transformer.withClassScopes(firClass) {
|
||||
member.accept(transformer, null)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun doLazyResolveUnderLock(target: FirElementWithResolveState) {
|
||||
when (target) {
|
||||
is FirConstructor -> {
|
||||
error("Should be resolved during ${::resolveConstructors.name}")
|
||||
// ConstructedTypeRef should be resolved only with type parameters, but not with nested classes and classes from supertypes
|
||||
val scopesBeforeContainingClass = transformer.scopesBefore
|
||||
?: errorWithFirSpecificEntries("The containing class scope is not found", fir = target)
|
||||
|
||||
@OptIn(PrivateForInline::class)
|
||||
transformer.withScopeCleanup {
|
||||
val clazz = transformer.classDeclarationsStack.last()
|
||||
if (!transformer.removeOuterTypeParameterScope(clazz)) {
|
||||
transformer.scopes = scopesBeforeContainingClass
|
||||
} else {
|
||||
transformer.scopes = transformer.staticScopes
|
||||
transformer.addTypeParametersScope(clazz)
|
||||
}
|
||||
|
||||
transformer.transformDelegatedConstructorCall(target)
|
||||
}
|
||||
|
||||
target.accept(transformer, null)
|
||||
}
|
||||
is FirDanglingModifierList, is FirFileAnnotationsContainer, is FirCallableDeclaration, is FirTypeAlias, is FirScript -> {
|
||||
target.accept(transformer, null)
|
||||
|
||||
@@ -222,7 +222,7 @@ FILE: [ResolvedTo(IMPORTS)] annotationParameters.kt
|
||||
|
||||
}
|
||||
public? final? [ResolvedTo(TYPES)] class B : R|kotlin/Any| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=B] constructor(): R|B| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] constructor(): R|B| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@ TYPES:
|
||||
FILE: [ResolvedTo(IMPORTS)] classMembers.kt
|
||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||
public? final? [ResolvedTo(TYPES)] class A : R|kotlin/Any| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=A] constructor(): R|A| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor(): R|A| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -77,7 +77,7 @@ TYPES:
|
||||
FILE: [ResolvedTo(IMPORTS)] functionInValueClass.kt
|
||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||
@R|kotlin/jvm/JvmInline|[Types]() public? final? inline [ResolvedTo(TYPES)] class Value : R|kotlin/Any| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=Value] constructor([ResolvedTo(TYPES)] [CorrespondingProperty=/Value.value] value: R|kotlin/Int|): R|Value| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Value] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=/Value.value] value: Int): R|Value| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
|
||||
Vendored
+1
-1
@@ -391,7 +391,7 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass2.kt
|
||||
|
||||
}
|
||||
public? abstract [ResolvedTo(TYPES)] class OuterClass : R|Foo1| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
LAZY_super<<implicit>>
|
||||
}
|
||||
|
||||
|
||||
Vendored
+1
-1
@@ -391,7 +391,7 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass3.kt
|
||||
|
||||
}
|
||||
public? abstract [ResolvedTo(TYPES)] class OuterClass : R|Foo1| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
LAZY_super<<implicit>>
|
||||
}
|
||||
|
||||
|
||||
Vendored
+1
-1
@@ -391,7 +391,7 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass4.kt
|
||||
|
||||
}
|
||||
public? abstract [ResolvedTo(TYPES)] class OuterClass : R|Foo1| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
LAZY_super<<implicit>>
|
||||
}
|
||||
|
||||
|
||||
@@ -159,8 +159,8 @@ FILE: [ResolvedTo(IMPORTS)] nestedClass.kt
|
||||
|
||||
}
|
||||
public? final? [ResolvedTo(TYPES)] class OuterClass : R|AnotherTopLevelClass| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
LAZY_super<R|AnotherTopLevelClass|>
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
LAZY_super<AnotherTopLevelClass>
|
||||
}
|
||||
|
||||
public? final? [ResolvedTo(TYPES)] class NestedClass : R|kotlin/Any| {
|
||||
|
||||
@@ -542,7 +542,7 @@ FILE: [ResolvedTo(IMPORTS)] complexRedeclaration.kt
|
||||
|
||||
}
|
||||
public? final? [ResolvedTo(TYPES)] object B : R|kotlin/Any| {
|
||||
private [ResolvedTo(TYPES)] [ContainingClassKey=B] constructor(): R|B| {
|
||||
private [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] constructor(): R|B| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
|
||||
@@ -112,7 +112,7 @@ TYPES:
|
||||
FILE: [ResolvedTo(IMPORTS)] dataClassCopy.kt
|
||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||
public? final? data [ResolvedTo(TYPES)] class DataClass : R|kotlin/Any| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=DataClass] constructor([ResolvedTo(TYPES)] [CorrespondingProperty=one/DataClass.i] i: R|kotlin/Int|, [ResolvedTo(TYPES)] [CorrespondingProperty=one/DataClass.b] b: R|kotlin/Boolean|): R|one/DataClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=DataClass] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=one/DataClass.i] i: Int, [ResolvedTo(RAW_FIR)] [CorrespondingProperty=one/DataClass.b] b: Boolean): R|one/DataClass| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
|
||||
@@ -112,7 +112,7 @@ TYPES:
|
||||
FILE: [ResolvedTo(IMPORTS)] dataComponent2.kt
|
||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||
public? final? data [ResolvedTo(TYPES)] class DataClass : R|kotlin/Any| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=DataClass] constructor([ResolvedTo(TYPES)] [CorrespondingProperty=one/DataClass.i] i: R|kotlin/Int|, [ResolvedTo(TYPES)] [CorrespondingProperty=one/DataClass.b] b: R|kotlin/Boolean|): R|one/DataClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=DataClass] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=one/DataClass.i] i: Int, [ResolvedTo(RAW_FIR)] [CorrespondingProperty=one/DataClass.b] b: Boolean): R|one/DataClass| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
|
||||
@@ -132,7 +132,7 @@ FILE: [ResolvedTo(IMPORTS)] delegatedField.kt
|
||||
|
||||
}
|
||||
public? final? [ResolvedTo(TYPES)] [DelegateFieldsMapKey={0=FirFieldSymbol one/Usage.$$delegate_0}] class Usage : R|one/Foo| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=Usage] constructor([ResolvedTo(TYPES)] prop: R|one/Foo|): R|one/Usage| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Usage] constructor([ResolvedTo(RAW_FIR)] prop: Foo): R|one/Usage| {
|
||||
LAZY_super<<implicit>>
|
||||
}
|
||||
|
||||
|
||||
@@ -102,7 +102,7 @@ TYPES:
|
||||
FILE: [ResolvedTo(IMPORTS)] enumEntries.kt
|
||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||
public? final? [ResolvedTo(TYPES)] enum class MyEnum : R|kotlin/Enum<one/MyEnum>| {
|
||||
private [ResolvedTo(TYPES)] [ContainingClassKey=MyEnum] constructor(): R|one/MyEnum| {
|
||||
private [ResolvedTo(RAW_FIR)] [ContainingClassKey=MyEnum] constructor(): R|one/MyEnum| {
|
||||
LAZY_super<R|kotlin/Enum<one/MyEnum>|>
|
||||
}
|
||||
|
||||
|
||||
@@ -138,7 +138,7 @@ FILE: [ResolvedTo(IMPORTS)] enumEntry.kt
|
||||
|
||||
}
|
||||
public? final? [ResolvedTo(TYPES)] enum class Foo : R|kotlin/Enum<Foo>| {
|
||||
private [ResolvedTo(TYPES)] [ContainingClassKey=Foo] constructor(): R|Foo| {
|
||||
private [ResolvedTo(RAW_FIR)] [ContainingClassKey=Foo] constructor(): R|Foo| {
|
||||
LAZY_super<R|kotlin/Enum<Foo>|>
|
||||
}
|
||||
|
||||
|
||||
@@ -102,7 +102,7 @@ TYPES:
|
||||
FILE: [ResolvedTo(IMPORTS)] enumValueOf.kt
|
||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||
public? final? [ResolvedTo(TYPES)] enum class MyEnum : R|kotlin/Enum<one/MyEnum>| {
|
||||
private [ResolvedTo(TYPES)] [ContainingClassKey=MyEnum] constructor(): R|one/MyEnum| {
|
||||
private [ResolvedTo(RAW_FIR)] [ContainingClassKey=MyEnum] constructor(): R|one/MyEnum| {
|
||||
LAZY_super<R|kotlin/Enum<one/MyEnum>|>
|
||||
}
|
||||
|
||||
|
||||
@@ -102,7 +102,7 @@ TYPES:
|
||||
FILE: [ResolvedTo(IMPORTS)] enumValues.kt
|
||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||
public? final? [ResolvedTo(TYPES)] enum class MyEnum : R|kotlin/Enum<one/MyEnum>| {
|
||||
private [ResolvedTo(TYPES)] [ContainingClassKey=MyEnum] constructor(): R|one/MyEnum| {
|
||||
private [ResolvedTo(RAW_FIR)] [ContainingClassKey=MyEnum] constructor(): R|one/MyEnum| {
|
||||
LAZY_super<R|kotlin/Enum<one/MyEnum>|>
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -170,7 +170,7 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverride.kt
|
||||
|
||||
}
|
||||
public? abstract [ResolvedTo(TYPES)] class Usage : R|Foo2| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=Usage] constructor(): R|Usage| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Usage] constructor(): R|Usage| {
|
||||
LAZY_super<<implicit>>
|
||||
}
|
||||
|
||||
|
||||
Vendored
+2
-2
@@ -391,7 +391,7 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass.kt
|
||||
|
||||
}
|
||||
public? abstract [ResolvedTo(TYPES)] class OuterClass : R|Foo1| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
LAZY_super<<implicit>>
|
||||
}
|
||||
|
||||
@@ -405,7 +405,7 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass.kt
|
||||
}
|
||||
|
||||
public? abstract [ResolvedTo(TYPES)] class NestedClass : R|Foo2| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=NestedClass] constructor(): R|OuterClass.NestedClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=NestedClass] constructor(): R|OuterClass.NestedClass| {
|
||||
LAZY_super<<implicit>>
|
||||
}
|
||||
|
||||
|
||||
Vendored
+3
-3
@@ -391,7 +391,7 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass2.kt
|
||||
|
||||
}
|
||||
public? abstract [ResolvedTo(TYPES)] class OuterClass : R|Foo1| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
LAZY_super<<implicit>>
|
||||
}
|
||||
|
||||
@@ -414,8 +414,8 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass2.kt
|
||||
}
|
||||
|
||||
public? abstract [ResolvedTo(TYPES)] class AnotherNestedClass : R|OuterClass.NestedClass| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=AnotherNestedClass] constructor(): R|OuterClass.AnotherNestedClass| {
|
||||
LAZY_super<R|OuterClass.NestedClass|>
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherNestedClass] constructor(): R|OuterClass.AnotherNestedClass| {
|
||||
LAZY_super<NestedClass>
|
||||
}
|
||||
|
||||
public? open? override [ResolvedTo(TYPES)] fun bar([ResolvedTo(TYPES)] s: R|kotlin/String|): R|kotlin/Unit| { LAZY_BLOCK }
|
||||
|
||||
Vendored
+2
-2
@@ -391,12 +391,12 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass3.kt
|
||||
|
||||
}
|
||||
public? abstract [ResolvedTo(TYPES)] class OuterClass : R|Foo1| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
LAZY_super<<implicit>>
|
||||
}
|
||||
|
||||
public? final? [ResolvedTo(TYPES)] class SimpleNestedClass : R|kotlin/Any| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=SimpleNestedClass] constructor(): R|OuterClass.SimpleNestedClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=SimpleNestedClass] constructor(): R|OuterClass.SimpleNestedClass| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
|
||||
@@ -161,7 +161,7 @@ FILE: [ResolvedTo(IMPORTS)] lazyProperty.kt
|
||||
public? final? [ResolvedTo(RAW_FIR)] fun getAny(): Any? { LAZY_BLOCK }
|
||||
public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] Q> materialize(): Q { LAZY_BLOCK }
|
||||
public? final? [ResolvedTo(TYPES)] class Test : R|kotlin/Any| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=Test] constructor(): R|Test| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Test] constructor(): R|Test| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ FILE: [ResolvedTo(IMPORTS)] localConstructor.kt
|
||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||
public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> magic(): T { LAZY_BLOCK }
|
||||
public? final? [ResolvedTo(TYPES)] class Q : R|kotlin/Any| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=Q] constructor(): R|Q| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Q] constructor(): R|Q| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
|
||||
Vendored
+2
-2
@@ -321,7 +321,7 @@ FILE: [ResolvedTo(IMPORTS)] nestedCompilerRequiredAnnotationsForMember.kt
|
||||
|
||||
}
|
||||
@R|kotlin/Deprecated|[Types](String(FirstClass)) @R|Anno|[Types](LAZY_EXPRESSION) public? final? [ResolvedTo(TYPES)] class FirstClass : R|kotlin/Any| {
|
||||
@R|kotlin/Deprecated|[Types](String(constructor)) @R|Anno|[Types](LAZY_EXPRESSION) public? [ResolvedTo(TYPES)] [ContainingClassKey=FirstClass] constructor([ResolvedTo(TYPES)] [CorrespondingProperty=/FirstClass.a] @R|Anno|[Types](LAZY_EXPRESSION) a: R|kotlin/Int|): R|FirstClass| {
|
||||
@Deprecated[Unresolved](LAZY_EXPRESSION) @Anno[Unresolved](LAZY_EXPRESSION) public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=FirstClass] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=/FirstClass.a] @Deprecated[Unresolved](LAZY_EXPRESSION) @Anno[Unresolved](LAZY_EXPRESSION) a: Int): R|FirstClass| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
@@ -334,7 +334,7 @@ FILE: [ResolvedTo(IMPORTS)] nestedCompilerRequiredAnnotationsForMember.kt
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=FirstClass] get(): <implicit>
|
||||
|
||||
@R|kotlin/Deprecated|[Types](String(NestedClass)) @R|Anno|[Types](LAZY_EXPRESSION) public? final? [ResolvedTo(TYPES)] class NestedClass : R|kotlin/Any| {
|
||||
@R|kotlin/Deprecated|[Types](String(constructor)) @R|Anno|[Types](LAZY_EXPRESSION) public? [ResolvedTo(TYPES)] [ContainingClassKey=NestedClass] constructor([ResolvedTo(TYPES)] [CorrespondingProperty=/FirstClass.NestedClass.a] @R|Anno|[Types](LAZY_EXPRESSION) a: R|kotlin/Int|): R|FirstClass.NestedClass| {
|
||||
@Deprecated[Unresolved](LAZY_EXPRESSION) @Anno[Unresolved](LAZY_EXPRESSION) public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=NestedClass] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=/FirstClass.NestedClass.a] @Deprecated[Unresolved](LAZY_EXPRESSION) @Anno[Unresolved](LAZY_EXPRESSION) a: Int): R|FirstClass.NestedClass| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
|
||||
@@ -157,8 +157,8 @@ TYPES:
|
||||
FILE: [ResolvedTo(IMPORTS)] nestedTypeAlias.kt
|
||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||
public? final? [ResolvedTo(TYPES)] class OuterClass<[ResolvedTo(TYPES)] T1> : R|SuperForOuter| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=OuterClass] constructor<[ResolvedTo(TYPES)] T1>(): R|OuterClass<T1>| {
|
||||
LAZY_super<R|SuperForOuter|>
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=OuterClass] constructor<[ResolvedTo(TYPES)] T1>(): R|OuterClass<T1>| {
|
||||
LAZY_super<SuperForOuter>
|
||||
}
|
||||
|
||||
public? final? [ResolvedTo(SUPER_TYPES)] class NestedClass<[ResolvedTo(SUPER_TYPES)] T2> : R|Another| {
|
||||
|
||||
+1
-1
@@ -72,7 +72,7 @@ TYPES:
|
||||
FILE: [ResolvedTo(IMPORTS)] parameterOfNonLocalSetter.kt
|
||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||
public? final? [ResolvedTo(TYPES)] class X : R|kotlin/Any| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=X] constructor(): R|X| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=X] constructor(): R|X| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -185,7 +185,7 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverride.kt
|
||||
|
||||
}
|
||||
public? abstract [ResolvedTo(TYPES)] class Usage : R|Foo2| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=Usage] constructor(): R|Usage| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Usage] constructor(): R|Usage| {
|
||||
LAZY_super<<implicit>>
|
||||
}
|
||||
|
||||
|
||||
Vendored
+1
-1
@@ -406,7 +406,7 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass.kt
|
||||
|
||||
}
|
||||
public? abstract [ResolvedTo(TYPES)] class OuterClass : R|Foo1| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
LAZY_super<<implicit>>
|
||||
}
|
||||
|
||||
|
||||
Vendored
+2
-2
@@ -406,7 +406,7 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass2.kt
|
||||
|
||||
}
|
||||
public? abstract [ResolvedTo(TYPES)] class OuterClass : R|Foo1| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
LAZY_super<<implicit>>
|
||||
}
|
||||
|
||||
@@ -420,7 +420,7 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass2.kt
|
||||
}
|
||||
|
||||
public? abstract [ResolvedTo(TYPES)] class NestedClass : R|Foo2| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=NestedClass] constructor(): R|OuterClass.NestedClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=NestedClass] constructor(): R|OuterClass.NestedClass| {
|
||||
LAZY_super<<implicit>>
|
||||
}
|
||||
|
||||
|
||||
Vendored
+2
-2
@@ -406,12 +406,12 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass3.kt
|
||||
|
||||
}
|
||||
public? abstract [ResolvedTo(TYPES)] class OuterClass : R|Foo1| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
LAZY_super<<implicit>>
|
||||
}
|
||||
|
||||
public? final? [ResolvedTo(TYPES)] class SimpleNestedClass : R|kotlin/Any| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=SimpleNestedClass] constructor(): R|OuterClass.SimpleNestedClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=SimpleNestedClass] constructor(): R|OuterClass.SimpleNestedClass| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
|
||||
Vendored
+3
-3
@@ -421,7 +421,7 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass4.kt
|
||||
|
||||
}
|
||||
public? abstract [ResolvedTo(TYPES)] class OuterClass : R|Foo1| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||
LAZY_super<<implicit>>
|
||||
}
|
||||
|
||||
@@ -447,8 +447,8 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass4.kt
|
||||
}
|
||||
|
||||
public? abstract [ResolvedTo(TYPES)] class AnotherNestedClass : R|OuterClass.NestedClass| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=AnotherNestedClass] constructor(): R|OuterClass.AnotherNestedClass| {
|
||||
LAZY_super<R|OuterClass.NestedClass|>
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherNestedClass] constructor(): R|OuterClass.AnotherNestedClass| {
|
||||
LAZY_super<NestedClass>
|
||||
}
|
||||
|
||||
public? open? override [ResolvedTo(RAW_FIR)] fun bar([ResolvedTo(RAW_FIR)] s: String): R|kotlin/Unit| { LAZY_BLOCK }
|
||||
|
||||
+1
-1
@@ -102,7 +102,7 @@ TYPES:
|
||||
FILE: [ResolvedTo(IMPORTS)] secondaryConstructorParameter.kt
|
||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||
public? final? [ResolvedTo(TYPES)] class A : R|kotlin/Any| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=A] constructor([ResolvedTo(TYPES)] [CorrespondingProperty=/A.prop] prop: R|kotlin/Int| = LAZY_EXPRESSION, [ResolvedTo(TYPES)] c: R|kotlin/String|): R|A| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=/A.prop] prop: Int = LAZY_EXPRESSION, [ResolvedTo(RAW_FIR)] c: String): R|A| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -62,7 +62,7 @@ TYPES:
|
||||
FILE: [ResolvedTo(IMPORTS)] typeParameterOfNonLocalFunction.kt
|
||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||
public? final? [ResolvedTo(TYPES)] class X : R|kotlin/Any| {
|
||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=X] constructor(): R|X| {
|
||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=X] constructor(): R|X| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
|
||||
+11
-3
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.resolve.transformers
|
||||
|
||||
import kotlinx.collections.immutable.PersistentList
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import kotlinx.collections.immutable.toPersistentList
|
||||
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||
@@ -76,6 +77,9 @@ open class FirTypeResolveTransformer(
|
||||
@PrivateForInline
|
||||
var staticScopes = scopes
|
||||
|
||||
@set:PrivateForInline
|
||||
var scopesBefore: PersistentList<FirScope>? = null
|
||||
|
||||
private var currentDeclaration: FirDeclaration? = null
|
||||
|
||||
private inline fun <T> withDeclaration(declaration: FirDeclaration, crossinline action: () -> T): T {
|
||||
@@ -366,12 +370,14 @@ open class FirTypeResolveTransformer(
|
||||
}
|
||||
|
||||
inline fun <T> withScopeCleanup(crossinline l: () -> T): T {
|
||||
val scopesBefore = scopes
|
||||
val scopesBeforeSnapshot = scopes
|
||||
scopesBefore = scopesBeforeSnapshot
|
||||
|
||||
val staticScopesBefore = staticScopes
|
||||
|
||||
val result = l()
|
||||
|
||||
scopes = scopesBefore
|
||||
scopes = scopesBeforeSnapshot
|
||||
staticScopes = staticScopesBefore
|
||||
|
||||
return result
|
||||
@@ -406,13 +412,15 @@ open class FirTypeResolveTransformer(
|
||||
constructor.delegatedConstructor?.let(this::resolveConstructedTypeRefForDelegatedConstructorCall)
|
||||
}
|
||||
|
||||
fun removeOuterTypeParameterScope(firClass: FirClass): Boolean = !firClass.isInner && !firClass.isLocal
|
||||
|
||||
inline fun <R> withClassScopes(
|
||||
firClass: FirClass,
|
||||
crossinline actionInsideStaticScope: () -> Unit = {},
|
||||
crossinline action: () -> R,
|
||||
): R = withScopeCleanup {
|
||||
// Remove type parameter scopes for classes that are neither inner nor local
|
||||
if (!firClass.isInner && !firClass.isLocal) {
|
||||
if (removeOuterTypeParameterScope(firClass)) {
|
||||
this.scopes = staticScopes
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user