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()) 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() }
} }