From b690ef2dc1229cc72e14fd9b3f16036d371ed40f Mon Sep 17 00:00:00 2001 From: Roman Efremov Date: Fri, 22 Nov 2024 11:43:53 +0100 Subject: [PATCH] [kotlin] Remove TransformingIterator util ^KTIJ-32260 Fixed GitOrigin-RevId: 19348a77fe24b7692cad057026d73b90cc5b9763 --- .../projectStructure/ModuleInfoProvider.kt | 81 ++++++++----------- .../jetbrains/kotlin/idea/base/util/seq.kt | 44 ---------- 2 files changed, 32 insertions(+), 93 deletions(-) delete mode 100644 plugins/kotlin/base/project-structure/src/org/jetbrains/kotlin/idea/base/util/seq.kt diff --git a/plugins/kotlin/base/project-structure/src/org/jetbrains/kotlin/idea/base/projectStructure/ModuleInfoProvider.kt b/plugins/kotlin/base/project-structure/src/org/jetbrains/kotlin/idea/base/projectStructure/ModuleInfoProvider.kt index 99352a8a5646..9aa7a50eb576 100644 --- a/plugins/kotlin/base/project-structure/src/org/jetbrains/kotlin/idea/base/projectStructure/ModuleInfoProvider.kt +++ b/plugins/kotlin/base/project-structure/src/org/jetbrains/kotlin/idea/base/projectStructure/ModuleInfoProvider.kt @@ -270,15 +270,12 @@ class ModuleInfoProvider(private val project: Project) { val contextualModuleResult = contextByContextualBinaryModule(collectionRequest) contextualModuleResult?.let { yield(Result.success(it)) } - yieldAll(object : Iterable> { - override fun iterator(): Iterator> { - val orderEntries = runReadAction { fileIndex.getOrderEntriesForFile(virtualFile) } - val iterator = orderEntries.iterator() - return MappingIterator(iterator) { orderEntry -> - collectByOrderEntry(collectionRequest, orderEntry)?.let(Result.Companion::success) - } + val orderEntries = runReadAction { fileIndex.getOrderEntriesForFile(virtualFile) } + yieldAll( + orderEntries.asSequence().mapNotNull { orderEntry -> + collectByOrderEntry(collectionRequest, orderEntry)?.let(Result.Companion::success) } - }) + ) } } @@ -321,28 +318,24 @@ class ModuleInfoProvider(private val project: Project) { } private suspend fun SequenceScope>.collectSourceRelatedByFile(virtualFile: VirtualFile, config: Configuration) { - yieldAll(object : Iterable> { - override fun iterator(): Iterator> { - val modules = sequence { - withCallExtensions( - config = config, - extensionBlock = { findContainingModules(project, virtualFile) }, - ) { - runReadAction { fileIndex.getModuleForFile(virtualFile) }?.let { module -> - yield(module) - } - } - } - val iterator = modules.iterator() - - return MappingIterator(iterator) { module -> - if (module.isDisposed) return@MappingIterator null - val projectFileIndex = ProjectFileIndex.getInstance(project) - val sourceRootType: KotlinSourceRootType? = projectFileIndex.getKotlinSourceRootType(virtualFile) - module.asSourceInfo(sourceRootType)?.let(Result.Companion::success) + val modules = sequence { + withCallExtensions( + config = config, + extensionBlock = { findContainingModules(project, virtualFile) }, + ) { + runReadAction { fileIndex.getModuleForFile(virtualFile) }?.let { module -> + yield(module) } } - }) + } + yieldAll( + modules.mapNotNull { module -> + if (module.isDisposed) return@mapNotNull null + val projectFileIndex = ProjectFileIndex.getInstance(project) + val sourceRootType: KotlinSourceRootType? = projectFileIndex.getKotlinSourceRootType(virtualFile) + module.asSourceInfo(sourceRootType)?.let(Result.Companion::success) + } + ) val fileOrigin = getOutsiderFileOrigin(project, virtualFile) if (fileOrigin != null) { @@ -499,27 +492,17 @@ private sealed class UserDataModuleContainer { @K1ModeProjectStructureApi fun Sequence>.unwrap( errorHandler: (String, Throwable) -> Unit, -): Sequence { - val originalSequence = this - return object : Sequence { - override fun iterator(): Iterator { - return object : TransformingIterator() { - private var iterator: Iterator>? = originalSequence.iterator() - override fun calculateHasNext(): Boolean = iterator?.hasNext() == true - - override fun calculateNext(): IdeaModuleInfo? { - val iter = iterator ?: return null - val result = iter.next() - result.getOrNull()?.let { return it } - - val error = result.exceptionOrNull() - if (error != null) { - errorHandler("Could not find correct module information", error) - iterator = null - } - return null - } - } +): Sequence = sequence { + for (result in this@unwrap) { + val successResult = result.getOrNull() + if (successResult != null) { + yield(successResult) + continue + } + val error = result.exceptionOrNull() + if (error != null) { + errorHandler("Could not find correct module information", error) + break } } } \ No newline at end of file diff --git a/plugins/kotlin/base/project-structure/src/org/jetbrains/kotlin/idea/base/util/seq.kt b/plugins/kotlin/base/project-structure/src/org/jetbrains/kotlin/idea/base/util/seq.kt deleted file mode 100644 index 59fee155cbe6..000000000000 --- a/plugins/kotlin/base/project-structure/src/org/jetbrains/kotlin/idea/base/util/seq.kt +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package org.jetbrains.kotlin.idea.base.util - - -abstract class TransformingIterator : Iterator { - protected var next: T? = null - - protected abstract fun calculateHasNext(): Boolean - protected abstract fun calculateNext(): T? - - override fun hasNext(): Boolean { - while (calculateHasNext()) { - val t = calculateNext() - if (t != null) { - next = t - return true - } - } - next = null - return false - } - - override fun next(): T { - val v = next - next = null - if (v != null) return v - hasNext() - val v1 = next - next = null - @Suppress("KotlinConstantConditions") - return v1 ?: throw NoSuchElementException() - } - -} - -class MappingIterator( - private val iterator: Iterator, - private val mapping: (K) -> T? -): TransformingIterator() { - override fun calculateHasNext(): Boolean = iterator.hasNext() - - override fun calculateNext(): T? = mapping(iterator.next()) -} -