From 38522f60eaeba4ba87ff90f0066a43e44e11b0f7 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Fri, 11 Dec 2015 18:25:18 +0300 Subject: [PATCH] Minor: add helper function createLazyValue with `onRecursion` --- .../ClassResolutionScopesSupport.kt | 39 ++++++++----------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/ClassResolutionScopesSupport.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/ClassResolutionScopesSupport.kt index fa7aade7277..476ca077939 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/ClassResolutionScopesSupport.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/ClassResolutionScopesSupport.kt @@ -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 StorageManager.createLazyValue(onRecursion: ((Boolean) -> T), compute: () -> T) = + createLazyValueWithPostCompute(compute, onRecursion, {}) + companion object { private val createThrowingLexicalScope: (Boolean) -> LexicalScope = { ThrowingLexicalScope() } }