@@ -15,14 +15,18 @@ import org.jetbrains.kotlinx.dataframe.codeGen.Marker
1515import org.jetbrains.kotlinx.dataframe.codeGen.MarkerVisibility
1616import org.jetbrains.kotlinx.dataframe.codeGen.MarkersExtractor
1717import org.jetbrains.kotlinx.dataframe.codeGen.TypeCastGenerator
18+ import org.jetbrains.kotlinx.dataframe.schema.ColumnSchema
1819import org.jetbrains.kotlinx.dataframe.schema.DataFrameSchema
1920import kotlin.reflect.KClass
2021import kotlin.reflect.KProperty
2122import kotlin.reflect.KType
2223import kotlin.reflect.KVisibility
2324import kotlin.reflect.full.findAnnotation
25+ import kotlin.reflect.full.isSubtypeOf
2426import kotlin.reflect.full.superclasses
2527import kotlin.reflect.jvm.jvmErasure
28+ import kotlin.reflect.typeOf
29+ import kotlin.time.Instant
2630
2731internal class ReplCodeGeneratorImpl : ReplCodeGenerator {
2832
@@ -116,9 +120,24 @@ internal class ReplCodeGeneratorImpl : ReplCodeGenerator {
116120 result.newMarkers.forEach {
117121 generatedMarkers[it.name] = it
118122 }
119- return result.code
123+ return if (schema.hasExperimentalInstant()) {
124+ result.code.copy(
125+ declarations = " @file:OptIn(kotlin.time.ExperimentalTime::class)\n " + result.code.declarations,
126+ )
127+ } else {
128+ result.code
129+ }
120130 }
121131
132+ private fun DataFrameSchema.hasExperimentalInstant (): Boolean =
133+ columns.values.any { column ->
134+ when (column) {
135+ is ColumnSchema .Frame -> column.schema.hasExperimentalInstant()
136+ is ColumnSchema .Group -> column.schema.hasExperimentalInstant()
137+ is ColumnSchema .Value -> column.type.isSubtypeOf(typeOf<Instant ?>())
138+ }
139+ }
140+
122141 override fun process (markerClass : KClass <* >): Code {
123142 val newMarkers = mutableListOf<Marker >()
124143
0 commit comments