Skip to content

Commit 2c6be35

Browse files
committed
[Compiler plugin] Support creating groups in AddDsl
1 parent 16455e9 commit 2c6be35

File tree

5 files changed

+38
-0
lines changed

5 files changed

+38
-0
lines changed

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/add.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ public class AddDsl<T>(
207207

208208
public infix fun <R> ColumnReference<R>.into(column: KProperty<R>): Boolean = into(column.name)
209209

210+
@Interpretable("AddDslStringInvoke")
210211
public operator fun String.invoke(body: AddDsl<T>.() -> Unit): Unit = group(this, body)
211212

212213
public infix fun AnyColumnGroupAccessor.from(body: AddDsl<T>.() -> Unit): Unit = group(this, body)

plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/add.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import org.jetbrains.kotlinx.dataframe.plugin.impl.Arguments
77
import org.jetbrains.kotlinx.dataframe.plugin.impl.Interpreter
88
import org.jetbrains.kotlinx.dataframe.plugin.impl.PluginDataFrameSchema
99
import org.jetbrains.kotlinx.dataframe.plugin.impl.SimpleCol
10+
import org.jetbrains.kotlinx.dataframe.plugin.impl.SimpleColumnGroup
1011
import org.jetbrains.kotlinx.dataframe.plugin.impl.dataFrame
1112
import org.jetbrains.kotlinx.dataframe.plugin.impl.simpleColumnOf
1213
import org.jetbrains.kotlinx.dataframe.plugin.impl.dsl
@@ -57,3 +58,15 @@ class AddWithDsl : AbstractSchemaModificationInterpreter() {
5758
return PluginDataFrameSchema(addDsl.columns)
5859
}
5960
}
61+
62+
class AddDslStringInvoke : AbstractInterpreter<Unit>() {
63+
val Arguments.dsl: AddDslApproximation by arg(lens = Interpreter.Value)
64+
val Arguments.receiver: String by string()
65+
val Arguments.body by dsl()
66+
67+
override fun Arguments.interpret() {
68+
val addDsl = AddDslApproximation(mutableListOf())
69+
body(addDsl, emptyMap())
70+
dsl.columns.add(SimpleColumnGroup(receiver, addDsl.columns))
71+
}
72+
}

plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/loadInterpreter.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ import org.jetbrains.kotlin.fir.types.classId
6767
import org.jetbrains.kotlin.fir.types.coneType
6868
import org.jetbrains.kotlin.name.ClassId
6969
import org.jetbrains.kotlin.name.Name
70+
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.AddDslStringInvoke
7071
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.AddId
7172
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.All0
7273
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ColsAtAnyDepth0
@@ -196,6 +197,7 @@ internal inline fun <reified T> String.load(): T {
196197
"Flatten0" -> Flatten0()
197198
"FlattenDefault" -> FlattenDefault()
198199
"AddId" -> AddId()
200+
"AddDslStringInvoke" -> AddDslStringInvoke()
199201
else -> error("$this")
200202
} as T
201203
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import org.jetbrains.kotlinx.dataframe.*
2+
import org.jetbrains.kotlinx.dataframe.annotations.*
3+
import org.jetbrains.kotlinx.dataframe.api.*
4+
import org.jetbrains.kotlinx.dataframe.io.*
5+
6+
fun box(): String {
7+
val df = dataFrameOf("a")(1).add {
8+
"id" from { it }
9+
"group" {
10+
"a" from { it }
11+
}
12+
}
13+
14+
df.group.a
15+
return "OK"
16+
}

plugins/kotlin-dataframe/tests-gen/org/jetbrains/kotlin/fir/dataframe/DataFrameBlackBoxCodegenTestGenerated.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@
1717
@TestMetadata("testData/box")
1818
@TestDataPath("$PROJECT_ROOT")
1919
public class DataFrameBlackBoxCodegenTestGenerated extends AbstractDataFrameBlackBoxCodegenTest {
20+
@Test
21+
@TestMetadata("addDsl.kt")
22+
public void testAddDsl() {
23+
runTest("testData/box/addDsl.kt");
24+
}
25+
2026
@Test
2127
@TestMetadata("addId.kt")
2228
public void testAddId() {

0 commit comments

Comments
 (0)