Implement proxy classes for collection handlers
This commit is contained in:
committed by
Yan Zhulanow
parent
8fc64490ca
commit
8d9e348424
+18
@@ -1,7 +1,25 @@
|
||||
package com.intellij.debugger.streams.kotlin.trace.impl.handler.collections
|
||||
|
||||
import com.intellij.debugger.streams.trace.dsl.*
|
||||
import com.intellij.debugger.streams.wrapper.IntermediateStreamCall
|
||||
import com.intellij.debugger.streams.wrapper.StreamCall
|
||||
import com.intellij.debugger.streams.wrapper.TerminatorStreamCall
|
||||
|
||||
/**
|
||||
* @author Vitaliy.Bibaev
|
||||
*/
|
||||
interface BothSemanticsHandler {
|
||||
fun variablesDeclaration(call: StreamCall, order: Int, dsl: Dsl): List<VariableDeclaration>
|
||||
|
||||
fun prepareResult(dsl: Dsl, variables: List<Variable>): CodeBlock
|
||||
|
||||
fun additionalCallsBefore(call: StreamCall, dsl: Dsl): List<IntermediateStreamCall>
|
||||
|
||||
fun additionalCallsAfter(call: StreamCall, dsl: Dsl): List<IntermediateStreamCall>
|
||||
|
||||
fun getResultExpression(call: StreamCall, variables: List<Variable>): Expression
|
||||
|
||||
fun transformAsIntermediateCall(call: IntermediateStreamCall, dsl: Dsl): IntermediateStreamCall
|
||||
|
||||
fun transformAsTerminalCall(call: TerminatorStreamCall, dsl: Dsl): TerminatorStreamCall
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
package com.intellij.debugger.streams.kotlin.trace.impl.handler.collections
|
||||
|
||||
import com.intellij.debugger.streams.trace.TraceHandler
|
||||
import com.intellij.debugger.streams.trace.dsl.Dsl
|
||||
import com.intellij.debugger.streams.trace.dsl.Expression
|
||||
import com.intellij.debugger.streams.trace.dsl.Variable
|
||||
import com.intellij.debugger.streams.trace.dsl.VariableDeclaration
|
||||
import com.intellij.debugger.streams.wrapper.StreamCall
|
||||
|
||||
/**
|
||||
* @author Vitaliy.Bibaev
|
||||
*/
|
||||
abstract class CollectionHandlerBase(order: Int, dsl: Dsl,
|
||||
private val call: StreamCall, private val internalHandler: BothSemanticsHandler)
|
||||
: TraceHandler {
|
||||
private val declarations: List<VariableDeclaration> = internalHandler.variablesDeclaration(call, order, dsl)
|
||||
protected val variables: List<Variable> = declarations.map(VariableDeclaration::variable)
|
||||
|
||||
override fun additionalVariablesDeclaration(): List<VariableDeclaration> = declarations
|
||||
|
||||
override fun getResultExpression(): Expression = internalHandler.getResultExpression(call, variables)
|
||||
}
|
||||
+13
-15
@@ -1,38 +1,36 @@
|
||||
package com.intellij.debugger.streams.kotlin.trace.impl.handler.collections
|
||||
|
||||
import com.intellij.debugger.streams.trace.IntermediateCallHandler
|
||||
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.*
|
||||
import com.intellij.debugger.streams.wrapper.IntermediateStreamCall
|
||||
|
||||
/**
|
||||
* @author Vitaliy.Bibaev
|
||||
*/
|
||||
class CollectionIntermediateHandler(
|
||||
private val order: Int,
|
||||
order: Int,
|
||||
private val call: IntermediateStreamCall,
|
||||
private val dsl: Dsl,
|
||||
private val internalHandler: BothSemanticsHandler)
|
||||
: IntermediateCallHandler {
|
||||
override fun additionalVariablesDeclaration(): MutableList<VariableDeclaration> {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
}
|
||||
: IntermediateCallHandler, CollectionHandlerBase(order, dsl, call, internalHandler) {
|
||||
|
||||
override fun prepareResult(): CodeBlock {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
return internalHandler.prepareResult(dsl, variables)
|
||||
}
|
||||
|
||||
override fun additionalCallsBefore(): MutableList<IntermediateStreamCall> {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
override fun additionalCallsBefore(): List<IntermediateStreamCall> {
|
||||
return internalHandler.additionalCallsBefore(call, dsl)
|
||||
}
|
||||
|
||||
override fun additionalCallsAfter(): MutableList<IntermediateStreamCall> {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
override fun additionalCallsAfter(): List<IntermediateStreamCall> {
|
||||
return internalHandler.additionalCallsAfter(call, dsl)
|
||||
}
|
||||
|
||||
override fun transformCall(call: IntermediateStreamCall): IntermediateStreamCall {
|
||||
return internalHandler.transformAsIntermediateCall(call, dsl)
|
||||
}
|
||||
|
||||
override fun getResultExpression(): Expression {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
return internalHandler.getResultExpression(call, variables)
|
||||
}
|
||||
}
|
||||
+27
-12
@@ -4,31 +4,46 @@ import com.intellij.debugger.streams.trace.TerminatorCallHandler
|
||||
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.wrapper.IntermediateStreamCall
|
||||
import com.intellij.debugger.streams.wrapper.TerminatorStreamCall
|
||||
|
||||
/**
|
||||
* @author Vitaliy.Bibaev
|
||||
*/
|
||||
class CollectionTerminatorHandler(private val internalHandler: TerminatorStreamCall,
|
||||
class CollectionTerminatorHandler(private val call: TerminatorStreamCall,
|
||||
private val resultExpression: String,
|
||||
private val dsl: Dsl,
|
||||
private val handler: BothSemanticsHandler)
|
||||
: TerminatorCallHandler {
|
||||
override fun additionalVariablesDeclaration(): MutableList<VariableDeclaration> {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
}
|
||||
private val internalHandler: BothSemanticsHandler)
|
||||
: TerminatorCallHandler, CollectionHandlerBase(Int.MAX_VALUE, dsl, call, internalHandler) {
|
||||
|
||||
override fun prepareResult(): CodeBlock {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
val prepareResult = internalHandler.prepareResult(dsl, variables)
|
||||
val additionalCallsAfter = internalHandler.additionalCallsAfter(call, dsl)
|
||||
if (additionalCallsAfter.isEmpty()) {
|
||||
return prepareResult
|
||||
}
|
||||
|
||||
return dsl.block {
|
||||
+createCallAfterExpression(additionalCallsAfter)
|
||||
add(prepareResult)
|
||||
}
|
||||
}
|
||||
|
||||
override fun additionalCallsBefore(): MutableList<IntermediateStreamCall> {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
override fun additionalCallsBefore(): List<IntermediateStreamCall> =
|
||||
internalHandler.additionalCallsBefore(call, dsl)
|
||||
|
||||
override fun transformCall(call: TerminatorStreamCall): TerminatorStreamCall {
|
||||
return internalHandler.transformAsTerminalCall(call, dsl)
|
||||
}
|
||||
|
||||
override fun getResultExpression(): Expression {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
private fun createCallAfterExpression(additionalCallsAfter: List<IntermediateStreamCall>): Expression {
|
||||
var result: Expression = TextExpression(resultExpression)
|
||||
for (call in additionalCallsAfter) {
|
||||
val args = call.arguments.map { TextExpression(it.text) }.toTypedArray()
|
||||
result = result.call(call.name, *args)
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user