From 1469a0aa6fef0e398ba527af334e9f7c6ce74ce3 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 2 Jul 2015 12:53:48 +0300 Subject: [PATCH] Make computation of indexed JavaTypeQualifiers eager --- .../load/java/typeEnhacement/typeQualifiers.kt | 12 ++++++++---- .../src/org/jetbrains/kotlin/utils/collections.kt | 3 ++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/typeEnhacement/typeQualifiers.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/typeEnhacement/typeQualifiers.kt index 6edac91ae36..fdf1f306047 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/typeEnhacement/typeQualifiers.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/typeEnhacement/typeQualifiers.kt @@ -119,16 +119,20 @@ fun JetType.computeIndexedQualifiersForOverride(fromSupertypes: Collection val isHeadTypeConstructor = index == 0 - if (!isHeadTypeConstructor && onlyHeadTypeConstructor) return JavaTypeQualifiers.NONE + assert(isHeadTypeConstructor || !onlyHeadTypeConstructor) { "Only head type constructors should be computed" } - val qualifiers = indexedThisType.getOrDefault(index, { return JavaTypeQualifiers.NONE }) + val qualifiers = indexedThisType[index] val verticalSlice = indexedFromSupertypes.map { it.getOrDefault(index, { null }) }.filterNotNull() // Only the head type constructor is safely co-variant - return qualifiers.computeQualifiersForOverride(verticalSlice, isCovariant && isHeadTypeConstructor) + qualifiers.computeQualifiersForOverride(verticalSlice, isCovariant && isHeadTypeConstructor) } + + return { index -> computedResult.getOrDefault(index) { JavaTypeQualifiers.NONE } } } private fun JetType.computeQualifiersForOverride(fromSupertypes: Collection, isCovariant: Boolean): JavaTypeQualifiers { diff --git a/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt b/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt index 64bd09855ce..3aaf3f7ac6c 100644 --- a/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt +++ b/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt @@ -106,4 +106,5 @@ public fun Collection.toReadOnlyList(): List = public fun T?.singletonOrEmptyList(): List = if (this != null) Collections.singletonList(this) else Collections.emptyList() -public inline fun List.getOrDefault(index: Int, default: (Int) -> T): T = if (index in 0..size() - 1) this[index] else default(index) \ No newline at end of file +public inline fun List.getOrDefault(index: Int, default: (Int) -> T): T = if (index in 0..size() - 1) this[index] else default(index) +public inline fun Array.getOrDefault(index: Int, default: (Int) -> T): T = if (index in 0..size() - 1) this[index] else default(index)