Skip to content

Commit 50f7ca5

Browse files
committed
Made ColumnsResolver sealed to prevent unexpected behavior. Also, asColumnSet is now more efficient and retains the original object if it already was a ColumnSet. (preventing bugs again)
1 parent 9da43d0 commit 50f7ca5

File tree

4 files changed

+28
-6
lines changed

4 files changed

+28
-6
lines changed

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/columns/ColumnSet.kt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,22 @@ import org.jetbrains.kotlinx.dataframe.api.asSingleColumn
1717
public interface ColumnSet<out C> : ColumnsResolver<C>
1818

1919
internal fun <C> ColumnsResolver<C>.asColumnSet(): ColumnSet<C> =
20-
object : ColumnSet<C>, ColumnsResolver<C> by this {}
20+
when (this) {
21+
is ColumnSet<C> -> this
22+
else -> object : ColumnSet<C> {
23+
override fun resolve(context: ColumnResolutionContext): List<ColumnWithPath<C>> =
24+
this@asColumnSet.resolve(context)
25+
}
26+
}
2127

28+
@Suppress("UNCHECKED_CAST")
2229
@PublishedApi
2330
internal fun <C> SingleColumn<C>.asColumnSet(): ColumnSet<C> =
24-
object : ColumnSet<C>, SingleColumn<C> by this {}
31+
when (this) {
32+
is ColumnSet<*> -> this as ColumnSet<C>
33+
else -> object : ColumnSet<C>, SingleColumn<C> by this {}
34+
}
35+
2536

2637
internal fun <C> ColumnsSelectionDsl<C>.asColumnSet(): ColumnSet<DataRow<C>> =
2738
asSingleColumn().asColumnSet()

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/columns/ColumnsResolver.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import org.jetbrains.kotlinx.dataframe.impl.columns.*
1919
* @see [TransformableColumnSet]
2020
* @see [TransformableSingleColumn]
2121
*/
22-
public interface ColumnsResolver<out C> {
22+
public sealed interface ColumnsResolver<out C> {
2323

2424
/**
2525
* Resolves this [ColumnsResolver] as a [List]<[ColumnWithPath]<[C]>>.

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/columns/ColumnSet.kt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,22 @@ import org.jetbrains.kotlinx.dataframe.api.asSingleColumn
1717
public interface ColumnSet<out C> : ColumnsResolver<C>
1818

1919
internal fun <C> ColumnsResolver<C>.asColumnSet(): ColumnSet<C> =
20-
object : ColumnSet<C>, ColumnsResolver<C> by this {}
20+
when (this) {
21+
is ColumnSet<C> -> this
22+
else -> object : ColumnSet<C> {
23+
override fun resolve(context: ColumnResolutionContext): List<ColumnWithPath<C>> =
24+
this@asColumnSet.resolve(context)
25+
}
26+
}
2127

28+
@Suppress("UNCHECKED_CAST")
2229
@PublishedApi
2330
internal fun <C> SingleColumn<C>.asColumnSet(): ColumnSet<C> =
24-
object : ColumnSet<C>, SingleColumn<C> by this {}
31+
when (this) {
32+
is ColumnSet<*> -> this as ColumnSet<C>
33+
else -> object : ColumnSet<C>, SingleColumn<C> by this {}
34+
}
35+
2536

2637
internal fun <C> ColumnsSelectionDsl<C>.asColumnSet(): ColumnSet<DataRow<C>> =
2738
asSingleColumn().asColumnSet()

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/columns/ColumnsResolver.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import org.jetbrains.kotlinx.dataframe.impl.columns.*
1919
* @see [TransformableColumnSet]
2020
* @see [TransformableSingleColumn]
2121
*/
22-
public interface ColumnsResolver<out C> {
22+
public sealed interface ColumnsResolver<out C> {
2323

2424
/**
2525
* Resolves this [ColumnsResolver] as a [List]<[ColumnWithPath]<[C]>>.

0 commit comments

Comments
 (0)