Scripting: refactor history handling in legacy REPL using new infra

#KT-47187 fixed
This commit is contained in:
Ilya Chernikov
2022-05-18 12:11:06 +02:00
committed by teamcity
parent 92bf260057
commit 597677dae3
6 changed files with 59 additions and 5 deletions
@@ -36,6 +36,7 @@ data class LineId(override val no: Int, override val generation: Int, private va
open class BasicReplStageHistory<T>(override val lock: ReentrantReadWriteLock = ReentrantReadWriteLock()) : IReplStageHistory<T>, ArrayList<ReplHistoryRecord<T>>() {
val currentLineNumber = AtomicInteger(REPL_CODE_LINE_FIRST_NO)
val currentGeneration = AtomicInteger(REPL_CODE_LINE_FIRST_GEN)
override fun push(id: ILineId, item: T) {
@@ -51,6 +52,7 @@ open class BasicReplStageHistory<T>(override val lock: ReentrantReadWriteLock =
val removed = map { it.id }
clear()
currentGeneration.incrementAndGet()
currentLineNumber.set(REPL_CODE_LINE_FIRST_NO)
return removed
}
}
@@ -68,9 +70,13 @@ open class BasicReplStageHistory<T>(override val lock: ReentrantReadWriteLock =
val removed = asSequence().drop(idx + 1).map { it.id }.toList()
removeRange(idx + 1, size)
currentGeneration.incrementAndGet()
removed.lastOrNull()?.no?.let {
currentLineNumber.set(it)
}
removed
} else {
currentGeneration.incrementAndGet()
currentLineNumber.set(id.no + 1)
emptyList()
}
}
@@ -80,5 +86,7 @@ open class BasicReplStageState<HistoryItemT>(override final val lock: ReentrantR
override val currentGeneration: Int get() = history.currentGeneration.get()
override fun getNextLineNo(): Int = history.currentLineNumber.getAndIncrement()
override val history: BasicReplStageHistory<HistoryItemT> = BasicReplStageHistory(lock)
}