[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.checkReceiverTypeRefIsResolved
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkReturnTypeRefIsResolved
|
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.checkTypeRefIsResolved
|
||||||
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries
|
||||||
import org.jetbrains.kotlin.fir.FirElementWithResolveState
|
import org.jetbrains.kotlin.fir.FirElementWithResolveState
|
||||||
import org.jetbrains.kotlin.fir.FirFileAnnotationsContainer
|
import org.jetbrains.kotlin.fir.FirFileAnnotationsContainer
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
import org.jetbrains.kotlin.fir.PrivateForInline
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirTypeResolveTransformer
|
import org.jetbrains.kotlin.fir.resolve.transformers.FirTypeResolveTransformer
|
||||||
@@ -96,37 +98,32 @@ private class LLFirTypeTargetResolver(
|
|||||||
|
|
||||||
transformer.withClassScopes(
|
transformer.withClassScopes(
|
||||||
firClass,
|
firClass,
|
||||||
actionInsideStaticScope = {
|
|
||||||
resolveConstructors(firClass)
|
|
||||||
},
|
|
||||||
action = action,
|
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) {
|
override fun doLazyResolveUnderLock(target: FirElementWithResolveState) {
|
||||||
when (target) {
|
when (target) {
|
||||||
is FirConstructor -> {
|
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 -> {
|
is FirDanglingModifierList, is FirFileAnnotationsContainer, is FirCallableDeclaration, is FirTypeAlias, is FirScript -> {
|
||||||
target.accept(transformer, null)
|
target.accept(transformer, null)
|
||||||
|
|||||||
@@ -222,7 +222,7 @@ FILE: [ResolvedTo(IMPORTS)] annotationParameters.kt
|
|||||||
|
|
||||||
}
|
}
|
||||||
public? final? [ResolvedTo(TYPES)] class B : R|kotlin/Any| {
|
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|>
|
LAZY_super<R|kotlin/Any|>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ TYPES:
|
|||||||
FILE: [ResolvedTo(IMPORTS)] classMembers.kt
|
FILE: [ResolvedTo(IMPORTS)] classMembers.kt
|
||||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||||
public? final? [ResolvedTo(TYPES)] class A : R|kotlin/Any| {
|
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|>
|
LAZY_super<R|kotlin/Any|>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -77,7 +77,7 @@ TYPES:
|
|||||||
FILE: [ResolvedTo(IMPORTS)] functionInValueClass.kt
|
FILE: [ResolvedTo(IMPORTS)] functionInValueClass.kt
|
||||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||||
@R|kotlin/jvm/JvmInline|[Types]() public? final? inline [ResolvedTo(TYPES)] class Value : R|kotlin/Any| {
|
@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|>
|
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? 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>>
|
LAZY_super<<implicit>>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Vendored
+1
-1
@@ -391,7 +391,7 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass3.kt
|
|||||||
|
|
||||||
}
|
}
|
||||||
public? abstract [ResolvedTo(TYPES)] class OuterClass : R|Foo1| {
|
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>>
|
LAZY_super<<implicit>>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Vendored
+1
-1
@@ -391,7 +391,7 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass4.kt
|
|||||||
|
|
||||||
}
|
}
|
||||||
public? abstract [ResolvedTo(TYPES)] class OuterClass : R|Foo1| {
|
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>>
|
LAZY_super<<implicit>>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -159,8 +159,8 @@ FILE: [ResolvedTo(IMPORTS)] nestedClass.kt
|
|||||||
|
|
||||||
}
|
}
|
||||||
public? final? [ResolvedTo(TYPES)] class OuterClass : R|AnotherTopLevelClass| {
|
public? final? [ResolvedTo(TYPES)] class OuterClass : R|AnotherTopLevelClass| {
|
||||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=OuterClass] constructor(): R|OuterClass| {
|
||||||
LAZY_super<R|AnotherTopLevelClass|>
|
LAZY_super<AnotherTopLevelClass>
|
||||||
}
|
}
|
||||||
|
|
||||||
public? final? [ResolvedTo(TYPES)] class NestedClass : R|kotlin/Any| {
|
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| {
|
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|>
|
LAZY_super<R|kotlin/Any|>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ TYPES:
|
|||||||
FILE: [ResolvedTo(IMPORTS)] dataClassCopy.kt
|
FILE: [ResolvedTo(IMPORTS)] dataClassCopy.kt
|
||||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||||
public? final? data [ResolvedTo(TYPES)] class DataClass : R|kotlin/Any| {
|
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|>
|
LAZY_super<R|kotlin/Any|>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ TYPES:
|
|||||||
FILE: [ResolvedTo(IMPORTS)] dataComponent2.kt
|
FILE: [ResolvedTo(IMPORTS)] dataComponent2.kt
|
||||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||||
public? final? data [ResolvedTo(TYPES)] class DataClass : R|kotlin/Any| {
|
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|>
|
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? 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>>
|
LAZY_super<<implicit>>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ TYPES:
|
|||||||
FILE: [ResolvedTo(IMPORTS)] enumEntries.kt
|
FILE: [ResolvedTo(IMPORTS)] enumEntries.kt
|
||||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||||
public? final? [ResolvedTo(TYPES)] enum class MyEnum : R|kotlin/Enum<one/MyEnum>| {
|
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>|>
|
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>| {
|
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>|>
|
LAZY_super<R|kotlin/Enum<Foo>|>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ TYPES:
|
|||||||
FILE: [ResolvedTo(IMPORTS)] enumValueOf.kt
|
FILE: [ResolvedTo(IMPORTS)] enumValueOf.kt
|
||||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||||
public? final? [ResolvedTo(TYPES)] enum class MyEnum : R|kotlin/Enum<one/MyEnum>| {
|
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>|>
|
LAZY_super<R|kotlin/Enum<one/MyEnum>|>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ TYPES:
|
|||||||
FILE: [ResolvedTo(IMPORTS)] enumValues.kt
|
FILE: [ResolvedTo(IMPORTS)] enumValues.kt
|
||||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||||
public? final? [ResolvedTo(TYPES)] enum class MyEnum : R|kotlin/Enum<one/MyEnum>| {
|
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>|>
|
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? 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>>
|
LAZY_super<<implicit>>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Vendored
+2
-2
@@ -391,7 +391,7 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass.kt
|
|||||||
|
|
||||||
}
|
}
|
||||||
public? abstract [ResolvedTo(TYPES)] class OuterClass : R|Foo1| {
|
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>>
|
LAZY_super<<implicit>>
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -405,7 +405,7 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass.kt
|
|||||||
}
|
}
|
||||||
|
|
||||||
public? abstract [ResolvedTo(TYPES)] class NestedClass : R|Foo2| {
|
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>>
|
LAZY_super<<implicit>>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Vendored
+3
-3
@@ -391,7 +391,7 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass2.kt
|
|||||||
|
|
||||||
}
|
}
|
||||||
public? abstract [ResolvedTo(TYPES)] class OuterClass : R|Foo1| {
|
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>>
|
LAZY_super<<implicit>>
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -414,8 +414,8 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass2.kt
|
|||||||
}
|
}
|
||||||
|
|
||||||
public? abstract [ResolvedTo(TYPES)] class AnotherNestedClass : R|OuterClass.NestedClass| {
|
public? abstract [ResolvedTo(TYPES)] class AnotherNestedClass : R|OuterClass.NestedClass| {
|
||||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=AnotherNestedClass] constructor(): R|OuterClass.AnotherNestedClass| {
|
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherNestedClass] constructor(): R|OuterClass.AnotherNestedClass| {
|
||||||
LAZY_super<R|OuterClass.NestedClass|>
|
LAZY_super<NestedClass>
|
||||||
}
|
}
|
||||||
|
|
||||||
public? open? override [ResolvedTo(TYPES)] fun bar([ResolvedTo(TYPES)] s: R|kotlin/String|): R|kotlin/Unit| { LAZY_BLOCK }
|
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? 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>>
|
LAZY_super<<implicit>>
|
||||||
}
|
}
|
||||||
|
|
||||||
public? final? [ResolvedTo(TYPES)] class SimpleNestedClass : R|kotlin/Any| {
|
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|>
|
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 getAny(): Any? { LAZY_BLOCK }
|
||||||
public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] Q> materialize(): Q { 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? 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|>
|
LAZY_super<R|kotlin/Any|>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ FILE: [ResolvedTo(IMPORTS)] localConstructor.kt
|
|||||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||||
public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> magic(): T { LAZY_BLOCK }
|
public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> magic(): T { LAZY_BLOCK }
|
||||||
public? final? [ResolvedTo(TYPES)] class Q : R|kotlin/Any| {
|
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|>
|
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(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|>
|
LAZY_super<R|kotlin/Any|>
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -334,7 +334,7 @@ FILE: [ResolvedTo(IMPORTS)] nestedCompilerRequiredAnnotationsForMember.kt
|
|||||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=FirstClass] get(): <implicit>
|
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(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|>
|
LAZY_super<R|kotlin/Any|>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -157,8 +157,8 @@ TYPES:
|
|||||||
FILE: [ResolvedTo(IMPORTS)] nestedTypeAlias.kt
|
FILE: [ResolvedTo(IMPORTS)] nestedTypeAlias.kt
|
||||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||||
public? final? [ResolvedTo(TYPES)] class OuterClass<[ResolvedTo(TYPES)] T1> : R|SuperForOuter| {
|
public? final? [ResolvedTo(TYPES)] class OuterClass<[ResolvedTo(TYPES)] T1> : R|SuperForOuter| {
|
||||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=OuterClass] constructor<[ResolvedTo(TYPES)] T1>(): R|OuterClass<T1>| {
|
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=OuterClass] constructor<[ResolvedTo(TYPES)] T1>(): R|OuterClass<T1>| {
|
||||||
LAZY_super<R|SuperForOuter|>
|
LAZY_super<SuperForOuter>
|
||||||
}
|
}
|
||||||
|
|
||||||
public? final? [ResolvedTo(SUPER_TYPES)] class NestedClass<[ResolvedTo(SUPER_TYPES)] T2> : R|Another| {
|
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
|
FILE: [ResolvedTo(IMPORTS)] parameterOfNonLocalSetter.kt
|
||||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||||
public? final? [ResolvedTo(TYPES)] class X : R|kotlin/Any| {
|
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|>
|
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? 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>>
|
LAZY_super<<implicit>>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Vendored
+1
-1
@@ -406,7 +406,7 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass.kt
|
|||||||
|
|
||||||
}
|
}
|
||||||
public? abstract [ResolvedTo(TYPES)] class OuterClass : R|Foo1| {
|
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>>
|
LAZY_super<<implicit>>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Vendored
+2
-2
@@ -406,7 +406,7 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass2.kt
|
|||||||
|
|
||||||
}
|
}
|
||||||
public? abstract [ResolvedTo(TYPES)] class OuterClass : R|Foo1| {
|
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>>
|
LAZY_super<<implicit>>
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -420,7 +420,7 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass2.kt
|
|||||||
}
|
}
|
||||||
|
|
||||||
public? abstract [ResolvedTo(TYPES)] class NestedClass : R|Foo2| {
|
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>>
|
LAZY_super<<implicit>>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Vendored
+2
-2
@@ -406,12 +406,12 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass3.kt
|
|||||||
|
|
||||||
}
|
}
|
||||||
public? abstract [ResolvedTo(TYPES)] class OuterClass : R|Foo1| {
|
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>>
|
LAZY_super<<implicit>>
|
||||||
}
|
}
|
||||||
|
|
||||||
public? final? [ResolvedTo(TYPES)] class SimpleNestedClass : R|kotlin/Any| {
|
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|>
|
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? 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>>
|
LAZY_super<<implicit>>
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -447,8 +447,8 @@ FILE: [ResolvedTo(IMPORTS)] hierarchyWithOverrideAndNestedClass4.kt
|
|||||||
}
|
}
|
||||||
|
|
||||||
public? abstract [ResolvedTo(TYPES)] class AnotherNestedClass : R|OuterClass.NestedClass| {
|
public? abstract [ResolvedTo(TYPES)] class AnotherNestedClass : R|OuterClass.NestedClass| {
|
||||||
public? [ResolvedTo(TYPES)] [ContainingClassKey=AnotherNestedClass] constructor(): R|OuterClass.AnotherNestedClass| {
|
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherNestedClass] constructor(): R|OuterClass.AnotherNestedClass| {
|
||||||
LAZY_super<R|OuterClass.NestedClass|>
|
LAZY_super<NestedClass>
|
||||||
}
|
}
|
||||||
|
|
||||||
public? open? override [ResolvedTo(RAW_FIR)] fun bar([ResolvedTo(RAW_FIR)] s: String): R|kotlin/Unit| { LAZY_BLOCK }
|
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
|
FILE: [ResolvedTo(IMPORTS)] secondaryConstructorParameter.kt
|
||||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||||
public? final? [ResolvedTo(TYPES)] class A : R|kotlin/Any| {
|
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|>
|
LAZY_super<R|kotlin/Any|>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -62,7 +62,7 @@ TYPES:
|
|||||||
FILE: [ResolvedTo(IMPORTS)] typeParameterOfNonLocalFunction.kt
|
FILE: [ResolvedTo(IMPORTS)] typeParameterOfNonLocalFunction.kt
|
||||||
[ResolvedTo(BODY_RESOLVE)] annotations container
|
[ResolvedTo(BODY_RESOLVE)] annotations container
|
||||||
public? final? [ResolvedTo(TYPES)] class X : R|kotlin/Any| {
|
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|>
|
LAZY_super<R|kotlin/Any|>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
-3
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.resolve.transformers
|
package org.jetbrains.kotlin.fir.resolve.transformers
|
||||||
|
|
||||||
|
import kotlinx.collections.immutable.PersistentList
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
import kotlinx.collections.immutable.toPersistentList
|
import kotlinx.collections.immutable.toPersistentList
|
||||||
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||||
@@ -76,6 +77,9 @@ open class FirTypeResolveTransformer(
|
|||||||
@PrivateForInline
|
@PrivateForInline
|
||||||
var staticScopes = scopes
|
var staticScopes = scopes
|
||||||
|
|
||||||
|
@set:PrivateForInline
|
||||||
|
var scopesBefore: PersistentList<FirScope>? = null
|
||||||
|
|
||||||
private var currentDeclaration: FirDeclaration? = null
|
private var currentDeclaration: FirDeclaration? = null
|
||||||
|
|
||||||
private inline fun <T> withDeclaration(declaration: FirDeclaration, crossinline action: () -> T): T {
|
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 {
|
inline fun <T> withScopeCleanup(crossinline l: () -> T): T {
|
||||||
val scopesBefore = scopes
|
val scopesBeforeSnapshot = scopes
|
||||||
|
scopesBefore = scopesBeforeSnapshot
|
||||||
|
|
||||||
val staticScopesBefore = staticScopes
|
val staticScopesBefore = staticScopes
|
||||||
|
|
||||||
val result = l()
|
val result = l()
|
||||||
|
|
||||||
scopes = scopesBefore
|
scopes = scopesBeforeSnapshot
|
||||||
staticScopes = staticScopesBefore
|
staticScopes = staticScopesBefore
|
||||||
|
|
||||||
return result
|
return result
|
||||||
@@ -406,13 +412,15 @@ open class FirTypeResolveTransformer(
|
|||||||
constructor.delegatedConstructor?.let(this::resolveConstructedTypeRefForDelegatedConstructorCall)
|
constructor.delegatedConstructor?.let(this::resolveConstructedTypeRefForDelegatedConstructorCall)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun removeOuterTypeParameterScope(firClass: FirClass): Boolean = !firClass.isInner && !firClass.isLocal
|
||||||
|
|
||||||
inline fun <R> withClassScopes(
|
inline fun <R> withClassScopes(
|
||||||
firClass: FirClass,
|
firClass: FirClass,
|
||||||
crossinline actionInsideStaticScope: () -> Unit = {},
|
crossinline actionInsideStaticScope: () -> Unit = {},
|
||||||
crossinline action: () -> R,
|
crossinline action: () -> R,
|
||||||
): R = withScopeCleanup {
|
): R = withScopeCleanup {
|
||||||
// Remove type parameter scopes for classes that are neither inner nor local
|
// Remove type parameter scopes for classes that are neither inner nor local
|
||||||
if (!firClass.isInner && !firClass.isLocal) {
|
if (removeOuterTypeParameterScope(firClass)) {
|
||||||
this.scopes = staticScopes
|
this.scopes = staticScopes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user