From 45532e480feb51cfb724f6fbad6c972f34244e89 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Tue, 6 Dec 2016 14:36:00 +0300 Subject: [PATCH] Remove repeating contexts in CompositeBindingContext creation --- .../kotlin/resolve/CompositeBindingContext.kt | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/CompositeBindingContext.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/CompositeBindingContext.kt index c115f425947..4178218928b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/CompositeBindingContext.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/CompositeBindingContext.kt @@ -25,9 +25,10 @@ import com.intellij.openapi.util.ModificationTracker import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics import org.jetbrains.kotlin.types.KotlinType +import java.util.* class CompositeBindingContext private constructor( - private val delegates: List + private val delegates: LinkedHashSet ) : BindingContext { override fun getType(expression: KtExpression): KotlinType? { return delegates.asSequence().map { it.getType(expression) }.firstOrNull { it != null } @@ -36,8 +37,9 @@ class CompositeBindingContext private constructor( companion object { fun create(delegates: List): BindingContext { if (delegates.isEmpty()) return BindingContext.EMPTY - if (delegates.size == 1) return delegates.first() - return CompositeBindingContext(delegates) + val delegatesSet = LinkedHashSet(delegates) + if (delegatesSet.size == 1) return delegates.first() + return CompositeBindingContext(delegatesSet) } } @@ -51,7 +53,7 @@ class CompositeBindingContext private constructor( override fun getSliceContents(slice: ReadOnlySlice): ImmutableMap { //we need intermediate map cause ImmutableMap doesn't support same entries obtained from different slices - var map = hashMapOf() + val map = hashMapOf() delegates.forEach { map.putAll(it.getSliceContents(slice)) } return ImmutableMap.builder().putAll(map).build() } @@ -72,8 +74,8 @@ class CompositeBindingContext private constructor( return delegates.fold(emptySequence(), { r, t -> r + t.asSequence() }).iterator() } - override val modificationTracker = object : ModificationTracker { - override fun getModificationCount() = delegates.fold(0L, { r, t -> r + t.modificationTracker.modificationCount }) + override val modificationTracker = ModificationTracker { + delegates.fold(0L, { r, t -> r + t.modificationTracker.modificationCount }) } override fun all(): Collection {