Skip to content

Commit 2aad4e4

Browse files
committed
Add annotations to support types extending DataRow in the compiler plugin
1 parent 3415bc4 commit 2aad4e4

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/DataRow.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.jetbrains.kotlinx.dataframe
22

33
import org.jetbrains.kotlinx.dataframe.annotations.AccessApiOverload
4+
import org.jetbrains.kotlinx.dataframe.annotations.HasSchema
45
import org.jetbrains.kotlinx.dataframe.api.next
56
import org.jetbrains.kotlinx.dataframe.api.prev
67
import org.jetbrains.kotlinx.dataframe.columns.ColumnKind
@@ -18,6 +19,7 @@ import kotlin.reflect.KProperty
1819
*
1920
* @param T Schema marker. See [DataFrame] for details
2021
*/
22+
@HasSchema(schemaArg = 0)
2123
public interface DataRow<out T> {
2224

2325
public fun index(): Int

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/annotations/Plugin.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,26 @@ package org.jetbrains.kotlinx.dataframe.annotations
22

33
import kotlin.reflect.KClass
44

5+
/**
6+
* Matches the type parameter of the annotated class to DataRow/DataFrame type parameter T.
7+
*
8+
* Annotate public API classes that implement DataRow/DataFrame interface to enable "extract schema/create column from values" operation:
9+
* ```kotlin
10+
* df.add {
11+
* "col" from { it }
12+
* }
13+
* ```
14+
* Result before:
15+
* `col: DataColumn<AddDataRow<MySchema>>`
16+
*
17+
* Result after:
18+
*
19+
* ```
20+
* col:
21+
* col1: Int
22+
* col2: String
23+
* ```
24+
*/
525
@Target(AnnotationTarget.CLASS)
626
public annotation class HasSchema(val schemaArg: Int)
727

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import org.jetbrains.kotlinx.dataframe.DataFrame
1212
import org.jetbrains.kotlinx.dataframe.DataRow
1313
import org.jetbrains.kotlinx.dataframe.Selector
1414
import org.jetbrains.kotlinx.dataframe.annotations.AccessApiOverload
15+
import org.jetbrains.kotlinx.dataframe.annotations.HasSchema
1516
import org.jetbrains.kotlinx.dataframe.annotations.Interpretable
1617
import org.jetbrains.kotlinx.dataframe.annotations.Refine
1718
import org.jetbrains.kotlinx.dataframe.api.add
@@ -99,6 +100,7 @@ public fun <T> DataFrame<T>.addAll(dataFrames: Iterable<AnyFrame>): DataFrame<T>
99100
* Receiver that is used by the [AddExpression] (for instance in the [add] and [update] operations)
100101
* to access new (added or updated) column value in preceding row.
101102
*/
103+
@HasSchema(schemaArg = 0)
102104
public interface AddDataRow<out T> : DataRow<T> {
103105

104106
/**

0 commit comments

Comments
 (0)