Minor: add helper function createLazyValue with onRecursion
This commit is contained in:
+17
-22
@@ -47,15 +47,11 @@ class ClassResolutionScopesSupport(
|
|||||||
scopeWithGenerics(scopeForStaticMemberDeclarationResolution())
|
scopeWithGenerics(scopeForStaticMemberDeclarationResolution())
|
||||||
}
|
}
|
||||||
|
|
||||||
private val inheritanceScope: () -> LexicalScope = storageManager.createLazyValueWithPostCompute(
|
private val inheritanceScope: () -> LexicalScope = storageManager.createLazyValue(onRecursion = createThrowingLexicalScope) {
|
||||||
{
|
classDescriptor.getAllSuperclassesAndMeWithoutAny().asReversed().fold(getOuterScope()) { scope, currentClass ->
|
||||||
classDescriptor.getAllSuperclassesAndMeWithoutAny().asReversed().fold(getOuterScope()) { scope, currentClass ->
|
createInheritanceScope(parent = scope, ownerDescriptor = classDescriptor, classDescriptor = currentClass)
|
||||||
createInheritanceScope(parent = scope, ownerDescriptor = classDescriptor, classDescriptor = currentClass)
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
createThrowingLexicalScope,
|
|
||||||
{}
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
public val scopeForMemberDeclarationResolution: () -> LexicalScope = storageManager.createLazyValue {
|
public val scopeForMemberDeclarationResolution: () -> LexicalScope = storageManager.createLazyValue {
|
||||||
@@ -64,19 +60,15 @@ class ClassResolutionScopesSupport(
|
|||||||
LexicalScopeKind.CLASS_MEMBER_SCOPE)
|
LexicalScopeKind.CLASS_MEMBER_SCOPE)
|
||||||
}
|
}
|
||||||
|
|
||||||
public val scopeForStaticMemberDeclarationResolution: () -> LexicalScope = storageManager.createLazyValueWithPostCompute(
|
public val scopeForStaticMemberDeclarationResolution: () -> LexicalScope = storageManager.createLazyValue(onRecursion = createThrowingLexicalScope) {
|
||||||
{
|
if (classDescriptor.kind.isSingleton) {
|
||||||
if (classDescriptor.kind.isSingleton) {
|
scopeForMemberDeclarationResolution()
|
||||||
scopeForMemberDeclarationResolution()
|
}
|
||||||
}
|
else {
|
||||||
else {
|
LexicalScopeImpl(inheritanceScope(), classDescriptor, false, null,
|
||||||
LexicalScopeImpl(inheritanceScope(), classDescriptor, false, null,
|
LexicalScopeKind.CLASS_STATIC_SCOPE)
|
||||||
LexicalScopeKind.CLASS_STATIC_SCOPE)
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
createThrowingLexicalScope,
|
|
||||||
{}
|
|
||||||
)
|
|
||||||
|
|
||||||
public val scopeForInitializerResolution: () -> LexicalScope = storageManager.createLazyValue {
|
public val scopeForInitializerResolution: () -> LexicalScope = storageManager.createLazyValue {
|
||||||
val primaryConstructor = classDescriptor.unsubstitutedPrimaryConstructor ?:
|
val primaryConstructor = classDescriptor.unsubstitutedPrimaryConstructor ?:
|
||||||
@@ -127,6 +119,9 @@ class ClassResolutionScopesSupport(
|
|||||||
memberScopes = *staticScopes.toTypedArray(), isStaticScope = true)
|
memberScopes = *staticScopes.toTypedArray(), isStaticScope = true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun <T : Any> StorageManager.createLazyValue(onRecursion: ((Boolean) -> T), compute: () -> T) =
|
||||||
|
createLazyValueWithPostCompute(compute, onRecursion, {})
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val createThrowingLexicalScope: (Boolean) -> LexicalScope = { ThrowingLexicalScope() }
|
private val createThrowingLexicalScope: (Boolean) -> LexicalScope = { ThrowingLexicalScope() }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user