Add stubs for filter operations
This commit is contained in:
committed by
Yan Zhulanow
parent
385a82567f
commit
cd4577ea78
+26
-17
@@ -1,5 +1,9 @@
|
||||
package com.intellij.debugger.streams.kotlin.lib
|
||||
|
||||
import com.intellij.debugger.streams.kotlin.resolve.FilterOrderResolver
|
||||
import com.intellij.debugger.streams.kotlin.trace.impl.handler.collections.FilterIntermediateHandler
|
||||
import com.intellij.debugger.streams.kotlin.trace.impl.handler.collections.FilterTerminatorHandler
|
||||
import com.intellij.debugger.streams.kotlin.trace.impl.interpret.FilterTraceInterpreter
|
||||
import com.intellij.debugger.streams.lib.IntermediateOperation
|
||||
import com.intellij.debugger.streams.lib.TerminalOperation
|
||||
import com.intellij.debugger.streams.lib.impl.LibrarySupportBase
|
||||
@@ -16,8 +20,9 @@ import com.intellij.debugger.streams.wrapper.TerminatorStreamCall
|
||||
*/
|
||||
class KotlinCollectionLibrarySupport : LibrarySupportBase() {
|
||||
init {
|
||||
addIntermediateOperationsSupport()
|
||||
addTerminationOperationsSupport()
|
||||
addOperation(FilterOperation("filter",
|
||||
{ num, call, dsl -> FilterIntermediateHandler(num, call, dsl) },
|
||||
{ call, resultExpression, dsl -> FilterTerminatorHandler(call, resultExpression, dsl)}))
|
||||
}
|
||||
|
||||
private fun addOperation(operation: CollectionOperation) {
|
||||
@@ -25,20 +30,24 @@ class KotlinCollectionLibrarySupport : LibrarySupportBase() {
|
||||
addTerminationOperationsSupport(operation)
|
||||
}
|
||||
|
||||
private class CollectionOperation : IntermediateOperation, TerminalOperation {
|
||||
override val name: String
|
||||
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
|
||||
override val traceInterpreter: CallTraceInterpreter
|
||||
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
|
||||
override val valuesOrderResolver: ValuesOrderResolver
|
||||
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
|
||||
private abstract class CollectionOperation(override val name: String,
|
||||
private val intermediateHandlerProvider: IntermediateHandlerProvider,
|
||||
private val terminatorCallProvider: TerminatorHandlerProvider)
|
||||
: IntermediateOperation, TerminalOperation {
|
||||
override fun getTraceHandler(callOrder: Int, call: IntermediateStreamCall, dsl: Dsl): IntermediateCallHandler =
|
||||
intermediateHandlerProvider(callOrder, call, dsl)
|
||||
|
||||
override fun getTraceHandler(callOrder: Int, call: IntermediateStreamCall, dsl: Dsl): IntermediateCallHandler {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
}
|
||||
|
||||
override fun getTraceHandler(call: TerminatorStreamCall, resultExpression: String, dsl: Dsl): TerminatorCallHandler {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
}
|
||||
override fun getTraceHandler(call: TerminatorStreamCall, resultExpression: String, dsl: Dsl): TerminatorCallHandler =
|
||||
terminatorCallProvider(call, resultExpression, dsl)
|
||||
}
|
||||
}
|
||||
|
||||
private class FilterOperation(name: String, intermediateHandlerProvider: IntermediateHandlerProvider,
|
||||
terminatorHandlerProvider: TerminatorHandlerProvider)
|
||||
: CollectionOperation(name, intermediateHandlerProvider, terminatorHandlerProvider) {
|
||||
override val traceInterpreter: CallTraceInterpreter = FilterTraceInterpreter()
|
||||
override val valuesOrderResolver: ValuesOrderResolver = FilterOrderResolver()
|
||||
}
|
||||
}
|
||||
|
||||
private typealias IntermediateHandlerProvider = (Int, IntermediateStreamCall, Dsl) -> IntermediateCallHandler
|
||||
private typealias TerminatorHandlerProvider = (TerminatorStreamCall, String, Dsl) -> TerminatorCallHandler
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.intellij.debugger.streams.kotlin.resolve
|
||||
|
||||
import com.intellij.debugger.streams.resolve.ValuesOrderResolver
|
||||
import com.intellij.debugger.streams.trace.TraceInfo
|
||||
|
||||
/**
|
||||
* @author Vitaliy.Bibaev
|
||||
*/
|
||||
class FilterOrderResolver : ValuesOrderResolver {
|
||||
override fun resolve(info: TraceInfo): ValuesOrderResolver.Result {
|
||||
return ValuesOrderResolver.Result.of(emptyMap(), emptyMap())
|
||||
}
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
package com.intellij.debugger.streams.kotlin.trace.impl.handler.collections
|
||||
|
||||
import com.intellij.debugger.streams.trace.dsl.*
|
||||
import com.intellij.debugger.streams.trace.dsl.impl.TextExpression
|
||||
import com.intellij.debugger.streams.trace.impl.handler.unified.HandlerBase
|
||||
import com.intellij.debugger.streams.wrapper.IntermediateStreamCall
|
||||
|
||||
/**
|
||||
* @author Vitaliy.Bibaev
|
||||
*/
|
||||
class FilterIntermediateHandler(number: Int, call: IntermediateStreamCall, dsl: Dsl) : HandlerBase.Intermediate(dsl) {
|
||||
private val itemsMap = dsl.linkedMap(dsl.types.INT, call.typeBefore, "filter${number}ItemsMap")
|
||||
override fun additionalCallsAfter(): List<IntermediateStreamCall> {
|
||||
return emptyList()
|
||||
}
|
||||
|
||||
override fun additionalCallsBefore(): List<IntermediateStreamCall> {
|
||||
return emptyList()
|
||||
}
|
||||
|
||||
override fun transformCall(call: IntermediateStreamCall): IntermediateStreamCall {
|
||||
// TODO: transform it
|
||||
return call
|
||||
}
|
||||
|
||||
override fun additionalVariablesDeclaration(): List<VariableDeclaration> {
|
||||
return listOf(itemsMap.defaultDeclaration())
|
||||
}
|
||||
|
||||
override fun getResultExpression(): Expression {
|
||||
return dsl.newArray(dsl.types.ANY, TextExpression("values"))
|
||||
}
|
||||
|
||||
override fun prepareResult(): CodeBlock {
|
||||
return itemsMap.convertToArray(dsl, "values")
|
||||
}
|
||||
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
package com.intellij.debugger.streams.kotlin.trace.impl.handler.collections
|
||||
|
||||
import com.intellij.debugger.streams.trace.dsl.CodeBlock
|
||||
import com.intellij.debugger.streams.trace.dsl.Dsl
|
||||
import com.intellij.debugger.streams.trace.dsl.Expression
|
||||
import com.intellij.debugger.streams.trace.dsl.VariableDeclaration
|
||||
import com.intellij.debugger.streams.trace.dsl.impl.TextExpression
|
||||
import com.intellij.debugger.streams.trace.impl.handler.unified.HandlerBase
|
||||
import com.intellij.debugger.streams.wrapper.IntermediateStreamCall
|
||||
import com.intellij.debugger.streams.wrapper.TerminatorStreamCall
|
||||
|
||||
/**
|
||||
* @author Vitaliy.Bibaev
|
||||
*/
|
||||
class FilterTerminatorHandler(call: TerminatorStreamCall, resultExpression: String, dsl: Dsl)
|
||||
: HandlerBase.Terminal(dsl) {
|
||||
override fun additionalCallsBefore(): List<IntermediateStreamCall> = emptyList()
|
||||
|
||||
override fun additionalVariablesDeclaration(): List<VariableDeclaration> {
|
||||
return emptyList()
|
||||
}
|
||||
|
||||
override fun getResultExpression(): Expression = TextExpression("1")
|
||||
|
||||
override fun prepareResult(): CodeBlock {
|
||||
return dsl.block { }
|
||||
}
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
package com.intellij.debugger.streams.kotlin.trace.impl.interpret
|
||||
|
||||
import com.intellij.debugger.streams.trace.CallTraceInterpreter
|
||||
import com.intellij.debugger.streams.trace.TraceInfo
|
||||
import com.intellij.debugger.streams.trace.impl.interpret.ValuesOrderInfo
|
||||
import com.intellij.debugger.streams.trace.impl.interpret.ex.UnexpectedValueTypeException
|
||||
import com.intellij.debugger.streams.wrapper.StreamCall
|
||||
import com.sun.jdi.ArrayReference
|
||||
import com.sun.jdi.Value
|
||||
|
||||
/**
|
||||
* @author Vitaliy.Bibaev
|
||||
*/
|
||||
class FilterTraceInterpreter : CallTraceInterpreter {
|
||||
override fun resolve(call: StreamCall, value: Value): TraceInfo {
|
||||
if (value !is ArrayReference) throw UnexpectedValueTypeException("array reference excepted, but actual: ${value.type().name()}")
|
||||
val times = value.getValue(0)
|
||||
val values = value.getValue(1)
|
||||
val predicateResults = value.getValue(0)
|
||||
return ValuesOrderInfo.empty(call)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user