@@ -8,7 +8,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.effectiveVisibility
8
8
import org.jetbrains.kotlin.fir.declarations.utils.isEnumClass
9
9
import org.jetbrains.kotlin.fir.declarations.utils.isStatic
10
10
import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess
11
- import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
11
+ import org.jetbrains.kotlin.fir.expressions.FirExpression
12
12
import org.jetbrains.kotlin.fir.expressions.FirGetClassCall
13
13
import org.jetbrains.kotlin.fir.expressions.FirVarargArgumentsExpression
14
14
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack
@@ -46,6 +46,7 @@ import org.jetbrains.kotlin.name.Name
46
46
import org.jetbrains.kotlin.name.StandardClassIds
47
47
import org.jetbrains.kotlinx.dataframe.plugin.extensions.KotlinTypeFacade
48
48
import org.jetbrains.kotlinx.dataframe.plugin.impl.AbstractInterpreter
49
+ import org.jetbrains.kotlinx.dataframe.plugin.impl.AbstractSchemaModificationInterpreter
49
50
import org.jetbrains.kotlinx.dataframe.plugin.impl.Arguments
50
51
import org.jetbrains.kotlinx.dataframe.plugin.impl.Interpreter
51
52
import org.jetbrains.kotlinx.dataframe.plugin.impl.PluginDataFrameSchema
@@ -54,26 +55,56 @@ import org.jetbrains.kotlinx.dataframe.plugin.impl.SimpleCol
54
55
import org.jetbrains.kotlinx.dataframe.plugin.impl.SimpleDataColumn
55
56
import org.jetbrains.kotlinx.dataframe.plugin.impl.SimpleColumnGroup
56
57
import org.jetbrains.kotlinx.dataframe.plugin.impl.SimpleFrameColumn
58
+ import org.jetbrains.kotlinx.dataframe.plugin.impl.dsl
57
59
import org.jetbrains.kotlinx.dataframe.plugin.impl.simpleColumnOf
58
60
import org.jetbrains.kotlinx.dataframe.plugin.impl.type
59
61
import java.util.*
60
62
63
+ class ToDataFrameDsl : AbstractSchemaModificationInterpreter () {
64
+ val Arguments .receiver: FirExpression ? by arg(lens = Interpreter .Id )
65
+ val Arguments .body by dsl()
66
+ override fun Arguments.interpret (): PluginDataFrameSchema {
67
+ val dsl = CreateDataFrameDslImplApproximation ()
68
+ body(dsl, mapOf (" explicitReceiver" to Interpreter .Success (receiver)))
69
+ return PluginDataFrameSchema (dsl.columns)
70
+ }
71
+ }
72
+
73
+ class ToDataFrame : AbstractSchemaModificationInterpreter () {
74
+ val Arguments .receiver: FirExpression ? by arg(lens = Interpreter .Id )
75
+ val Arguments .maxDepth: Number by arg(defaultValue = Present (DEFAULT_MAX_DEPTH ))
76
+
77
+ override fun Arguments.interpret (): PluginDataFrameSchema {
78
+ return toDataFrame(maxDepth.toInt(), receiver, TraverseConfiguration ())
79
+ }
80
+ }
81
+
82
+ class ToDataFrameDefault : AbstractSchemaModificationInterpreter () {
83
+ val Arguments .receiver: FirExpression ? by arg(lens = Interpreter .Id )
84
+
85
+ override fun Arguments.interpret (): PluginDataFrameSchema {
86
+ return toDataFrame(DEFAULT_MAX_DEPTH , receiver, TraverseConfiguration ())
87
+ }
88
+ }
89
+
90
+ private const val DEFAULT_MAX_DEPTH = 0
91
+
61
92
class Properties0 : AbstractInterpreter <Unit >() {
62
93
val Arguments .dsl: CreateDataFrameDslImplApproximation by arg()
63
- val Arguments .call : FirFunctionCall by arg()
94
+ val Arguments .explicitReceiver : FirExpression ? by arg()
64
95
val Arguments .maxDepth: Int by arg()
65
- val Arguments .body: ( Any ) -> Unit by arg(lens = Interpreter . Dsl , defaultValue = Present (value = {}) )
96
+ val Arguments .body by dsl( )
66
97
67
98
override fun Arguments.interpret () {
68
99
dsl.configuration.maxDepth = maxDepth
69
- body(dsl.configuration.traverseConfiguration)
70
- val schema = toDataFrame(dsl.configuration.maxDepth, call , dsl.configuration.traverseConfiguration)
100
+ body(dsl.configuration.traverseConfiguration, emptyMap() )
101
+ val schema = toDataFrame(dsl.configuration.maxDepth, explicitReceiver , dsl.configuration.traverseConfiguration)
71
102
dsl.columns.addAll(schema.columns())
72
103
}
73
104
}
74
105
75
106
class CreateDataFrameConfiguration {
76
- var maxDepth = 0
107
+ var maxDepth = DEFAULT_MAX_DEPTH
77
108
var traverseConfiguration: TraverseConfiguration = TraverseConfiguration ()
78
109
}
79
110
@@ -123,7 +154,7 @@ class Exclude1 : AbstractInterpreter<Unit>() {
123
154
@OptIn(SymbolInternals ::class )
124
155
internal fun KotlinTypeFacade.toDataFrame (
125
156
maxDepth : Int ,
126
- call : FirFunctionCall ,
157
+ explicitReceiver : FirExpression ? ,
127
158
traverseConfiguration : TraverseConfiguration
128
159
): PluginDataFrameSchema {
129
160
fun ConeKotlinType.isValueType () =
@@ -238,7 +269,7 @@ internal fun KotlinTypeFacade.toDataFrame(
238
269
}
239
270
}
240
271
241
- val receiver = call. explicitReceiver ? : return PluginDataFrameSchema (emptyList())
272
+ val receiver = explicitReceiver ? : return PluginDataFrameSchema (emptyList())
242
273
val arg = receiver.resolvedType.typeArguments.firstOrNull() ? : return PluginDataFrameSchema (emptyList())
243
274
return when {
244
275
arg.isStarProjection -> PluginDataFrameSchema (emptyList())
0 commit comments