From 779290be0c8ecb8ebe92b4f102b63216cb4573bc Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 9 Mar 2018 17:53:40 +0100 Subject: [PATCH] J2K Interner: convert and prettify --- .../org/jetbrains/kotlin/utils/Interner.kt | 61 +++++-------------- 1 file changed, 16 insertions(+), 45 deletions(-) diff --git a/compiler/util/src/org/jetbrains/kotlin/utils/Interner.kt b/compiler/util/src/org/jetbrains/kotlin/utils/Interner.kt index 8bb04893df6..eb11f9a199b 100644 --- a/compiler/util/src/org/jetbrains/kotlin/utils/Interner.kt +++ b/compiler/util/src/org/jetbrains/kotlin/utils/Interner.kt @@ -14,56 +14,27 @@ * limitations under the License. */ -package org.jetbrains.kotlin.utils; +package org.jetbrains.kotlin.utils -import kotlin.collections.CollectionsKt; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +class Interner(private val parent: Interner? = null) { + private val firstIndex: Int = parent?.run { interned.size + firstIndex } ?: 0 + private val interned = hashMapOf() -import java.util.HashMap; -import java.util.List; -import java.util.Map; + val allInternedObjects: List + get() = interned.keys.sortedBy(interned::get) -public final class Interner { - private final Interner parent; - private final int firstIndex; - private final Map interned = new HashMap<>(); + val isEmpty: Boolean + get() = interned.isEmpty() && parent?.isEmpty != false - public Interner(Interner parent) { - this.parent = parent; - this.firstIndex = parent != null ? parent.interned.size() + parent.firstIndex : 0; - } - - public Interner() { - this(null); - } - - @Nullable - private Integer find(@NotNull T obj) { - assert parent == null || parent.interned.size() + parent.firstIndex == firstIndex : - "Parent changed in parallel with child: indexes will be wrong"; - if (parent != null) { - Integer index = parent.find(obj); - if (index != null) return index; + private fun find(obj: T): Int? { + assert(parent == null || parent.interned.size + parent.firstIndex == firstIndex) { + "Parent changed in parallel with child: indexes will be wrong" } - return interned.get(obj); + return parent?.find(obj) ?: interned[obj] } - public int intern(@NotNull T obj) { - Integer index = find(obj); - if (index != null) return index; - - index = firstIndex + interned.size(); - interned.put(obj, index); - return index; - } - - @NotNull - public List getAllInternedObjects() { - return CollectionsKt.sortedBy(interned.keySet(), interned::get); - } - - public boolean isEmpty() { - return interned.isEmpty() && (parent == null || parent.isEmpty()); - } + fun intern(obj: T): Int = + find(obj) ?: (firstIndex + interned.size).also { + interned[obj] = it + } }