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
|
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
|
* @author Vitaliy.Bibaev
|
||||||
*/
|
*/
|
||||||
interface BothSemanticsHandler {
|
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
|
package com.intellij.debugger.streams.kotlin.trace.impl.handler.collections
|
||||||
|
|
||||||
import com.intellij.debugger.streams.trace.IntermediateCallHandler
|
import com.intellij.debugger.streams.trace.IntermediateCallHandler
|
||||||
import com.intellij.debugger.streams.trace.dsl.CodeBlock
|
import com.intellij.debugger.streams.trace.dsl.*
|
||||||
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.wrapper.IntermediateStreamCall
|
import com.intellij.debugger.streams.wrapper.IntermediateStreamCall
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Vitaliy.Bibaev
|
* @author Vitaliy.Bibaev
|
||||||
*/
|
*/
|
||||||
class CollectionIntermediateHandler(
|
class CollectionIntermediateHandler(
|
||||||
private val order: Int,
|
order: Int,
|
||||||
private val call: IntermediateStreamCall,
|
private val call: IntermediateStreamCall,
|
||||||
private val dsl: Dsl,
|
private val dsl: Dsl,
|
||||||
private val internalHandler: BothSemanticsHandler)
|
private val internalHandler: BothSemanticsHandler)
|
||||||
: IntermediateCallHandler {
|
: IntermediateCallHandler, CollectionHandlerBase(order, dsl, call, internalHandler) {
|
||||||
override fun additionalVariablesDeclaration(): MutableList<VariableDeclaration> {
|
|
||||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun prepareResult(): CodeBlock {
|
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> {
|
override fun additionalCallsBefore(): List<IntermediateStreamCall> {
|
||||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
return internalHandler.additionalCallsBefore(call, dsl)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun additionalCallsAfter(): MutableList<IntermediateStreamCall> {
|
override fun additionalCallsAfter(): List<IntermediateStreamCall> {
|
||||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
return internalHandler.additionalCallsAfter(call, dsl)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun transformCall(call: IntermediateStreamCall): IntermediateStreamCall {
|
||||||
|
return internalHandler.transformAsIntermediateCall(call, dsl)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getResultExpression(): Expression {
|
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.CodeBlock
|
||||||
import com.intellij.debugger.streams.trace.dsl.Dsl
|
import com.intellij.debugger.streams.trace.dsl.Dsl
|
||||||
import com.intellij.debugger.streams.trace.dsl.Expression
|
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.IntermediateStreamCall
|
||||||
import com.intellij.debugger.streams.wrapper.TerminatorStreamCall
|
import com.intellij.debugger.streams.wrapper.TerminatorStreamCall
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Vitaliy.Bibaev
|
* @author Vitaliy.Bibaev
|
||||||
*/
|
*/
|
||||||
class CollectionTerminatorHandler(private val internalHandler: TerminatorStreamCall,
|
class CollectionTerminatorHandler(private val call: TerminatorStreamCall,
|
||||||
private val resultExpression: String,
|
private val resultExpression: String,
|
||||||
private val dsl: Dsl,
|
private val dsl: Dsl,
|
||||||
private val handler: BothSemanticsHandler)
|
private val internalHandler: BothSemanticsHandler)
|
||||||
: TerminatorCallHandler {
|
: TerminatorCallHandler, CollectionHandlerBase(Int.MAX_VALUE, dsl, call, internalHandler) {
|
||||||
override fun additionalVariablesDeclaration(): MutableList<VariableDeclaration> {
|
|
||||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun prepareResult(): CodeBlock {
|
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> {
|
override fun additionalCallsBefore(): List<IntermediateStreamCall> =
|
||||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
internalHandler.additionalCallsBefore(call, dsl)
|
||||||
|
|
||||||
|
override fun transformCall(call: TerminatorStreamCall): TerminatorStreamCall {
|
||||||
|
return internalHandler.transformAsTerminalCall(call, dsl)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getResultExpression(): Expression {
|
private fun createCallAfterExpression(additionalCallsAfter: List<IntermediateStreamCall>): Expression {
|
||||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
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