Minor: add helper function createLazyValue with onRecursion

This commit is contained in:
Zalim Bashorov
2015-12-11 18:25:18 +03:00
parent 7756644eb1
commit 38522f60ea
@@ -47,15 +47,11 @@ class ClassResolutionScopesSupport(
scopeWithGenerics(scopeForStaticMemberDeclarationResolution())
}
private val inheritanceScope: () -> LexicalScope = storageManager.createLazyValueWithPostCompute(
{
classDescriptor.getAllSuperclassesAndMeWithoutAny().asReversed().fold(getOuterScope()) { scope, currentClass ->
createInheritanceScope(parent = scope, ownerDescriptor = classDescriptor, classDescriptor = currentClass)
}
},
createThrowingLexicalScope,
{}
)
private val inheritanceScope: () -> LexicalScope = storageManager.createLazyValue(onRecursion = createThrowingLexicalScope) {
classDescriptor.getAllSuperclassesAndMeWithoutAny().asReversed().fold(getOuterScope()) { scope, currentClass ->
createInheritanceScope(parent = scope, ownerDescriptor = classDescriptor, classDescriptor = currentClass)
}
}
public val scopeForMemberDeclarationResolution: () -> LexicalScope = storageManager.createLazyValue {
@@ -64,19 +60,15 @@ class ClassResolutionScopesSupport(
LexicalScopeKind.CLASS_MEMBER_SCOPE)
}
public val scopeForStaticMemberDeclarationResolution: () -> LexicalScope = storageManager.createLazyValueWithPostCompute(
{
if (classDescriptor.kind.isSingleton) {
scopeForMemberDeclarationResolution()
}
else {
LexicalScopeImpl(inheritanceScope(), classDescriptor, false, null,
LexicalScopeKind.CLASS_STATIC_SCOPE)
}
},
createThrowingLexicalScope,
{}
)
public val scopeForStaticMemberDeclarationResolution: () -> LexicalScope = storageManager.createLazyValue(onRecursion = createThrowingLexicalScope) {
if (classDescriptor.kind.isSingleton) {
scopeForMemberDeclarationResolution()
}
else {
LexicalScopeImpl(inheritanceScope(), classDescriptor, false, null,
LexicalScopeKind.CLASS_STATIC_SCOPE)
}
}
public val scopeForInitializerResolution: () -> LexicalScope = storageManager.createLazyValue {
val primaryConstructor = classDescriptor.unsubstitutedPrimaryConstructor ?:
@@ -127,6 +119,9 @@ class ClassResolutionScopesSupport(
memberScopes = *staticScopes.toTypedArray(), isStaticScope = true)
}
private fun <T : Any> StorageManager.createLazyValue(onRecursion: ((Boolean) -> T), compute: () -> T) =
createLazyValueWithPostCompute(compute, onRecursion, {})
companion object {
private val createThrowingLexicalScope: (Boolean) -> LexicalScope = { ThrowingLexicalScope() }
}