Skip to content

Commit 5615526

Browse files
committed
Code generator redesigned: schemas for marker interfaces are now stored and processed independently from code generation. Supported empty marker interfaces generation and fixed dataframe schema printing for complex dataframes.
1 parent 87bebff commit 5615526

34 files changed

+1114
-656
lines changed

src/main/kotlin/org/jetbrains/dataframe/Operations.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -339,9 +339,9 @@ internal fun <T> List<T>.splitByIndices(startIndices: Sequence<Int>): Sequence<L
339339
}
340340
}
341341

342-
internal fun KClass<*>.createType(typeArgument: KType?) =
343-
if (typeArgument != null) createType(listOf(KTypeProjection.invariant(typeArgument)))
344-
else createStarProjectedType(false)
342+
internal fun KClass<*>.createType(typeArgument: KType? = null, nullable: Boolean = false) =
343+
if (typeArgument != null) createType(listOf(KTypeProjection.invariant(typeArgument)), nullable)
344+
else createStarProjectedType(nullable)
345345

346346
internal inline fun <reified T> createType(typeArgument: KType? = null) = T::class.createType(typeArgument)
347347

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,23 @@
11
package org.jetbrains.dataframe.api
22

33
import org.jetbrains.dataframe.DataFrame
4-
import org.jetbrains.dataframe.impl.codeGen.CodeGeneratorImpl
4+
import org.jetbrains.dataframe.impl.codeGen.CodeGenerator
5+
import org.jetbrains.dataframe.internal.schema.extractSchema
56

6-
inline fun <reified T> DataFrame<T>.generateCode() = generateCode(T::class.simpleName!!)
7+
inline fun <reified T> DataFrame<T>.generateCode(fields: Boolean = true, extensionProperties: Boolean = true): String {
8+
val name = if(T::class.isAbstract)
9+
T::class.simpleName!!
10+
else "DataEntry"
11+
return generateCode(name, fields, extensionProperties)
12+
}
713

8-
fun <T> DataFrame<T>.generateCode(markerName: String): String {
9-
val codeGen = CodeGeneratorImpl()
10-
return codeGen.generateInterfaceDeclarations(this, markerName, generateExtensionProperties = true).joinToString("\n")
14+
fun <T> DataFrame<T>.generateCode(markerName: String, fields: Boolean = true, extensionProperties: Boolean = true): String {
15+
val codeGen = CodeGenerator.create()
16+
return codeGen.generate(
17+
extractSchema(),
18+
markerName,
19+
fields = fields,
20+
extensionProperties = extensionProperties,
21+
isOpen = true,
22+
).first.declarations
1123
}
Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
package org.jetbrains.dataframe
22

3-
import org.jetbrains.dataframe.impl.codeGen.CodeGeneratorImpl
3+
import org.jetbrains.dataframe.impl.codeGen.CodeGenerator
4+
import org.jetbrains.dataframe.internal.schema.extractSchema
45

56
fun AnyFrame.schema(markerName: String? = null): String {
6-
return CodeGeneratorImpl().generateInterfaceDeclarations(this, markerName ?: "DataRecord", generateExtensionProperties = false).joinToString("\n")
7+
return CodeGenerator.create().generate(
8+
extractSchema(),
9+
markerName ?: "DataRecord",
10+
fields = true,
11+
extensionProperties = false,
12+
isOpen = true
13+
).first.declarations
714
}

src/main/kotlin/org/jetbrains/dataframe/api/select.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import org.jetbrains.dataframe.impl.columns.toColumns
55
import kotlin.reflect.KProperty
66

77
fun <T> DataFrame<T>.select(selector: ColumnsSelector<T, *>): DataFrame<T> = new(this[selector])
8-
fun <T> DataFrame<T>.select(vararg columns: KProperty<*>) = select { columns.toColumns() }
9-
fun <T> DataFrame<T>.select(vararg columns: String) = select { columns.toColumns() }
10-
fun <T> DataFrame<T>.select(vararg columns: Column) = select { columns.toColumns() }
11-
fun <T> DataFrame<T>.select(columns: Iterable<Column>) = select { columns.toColumnSet() }
8+
fun <T> DataFrame<T>.select(vararg columns: KProperty<*>): DataFrame<T> = select { columns.toColumns() }
9+
fun <T> DataFrame<T>.select(vararg columns: String): DataFrame<T> = select { columns.toColumns() }
10+
fun <T> DataFrame<T>.select(vararg columns: Column): DataFrame<T> = select { columns.toColumns() }
11+
fun <T> DataFrame<T>.select(columns: Iterable<Column>): DataFrame<T> = select { columns.toColumnSet() }
1212

src/main/kotlin/org/jetbrains/dataframe/columns/DataColumn.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package org.jetbrains.dataframe.columns
22

33
import org.jetbrains.dataframe.*
44
import org.jetbrains.dataframe.impl.asList
5-
import org.jetbrains.dataframe.impl.schema.DataFrameSchema
5+
import org.jetbrains.dataframe.internal.schema.DataFrameSchema
66
import org.jetbrains.dataframe.impl.columns.MapColumnImpl
77
import org.jetbrains.dataframe.impl.columns.FrameColumnImpl
88
import org.jetbrains.dataframe.impl.columns.ValueImplColumn

src/main/kotlin/org/jetbrains/dataframe/impl/Rendering.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ package org.jetbrains.dataframe.impl
33
import org.jetbrains.dataframe.AnyCol
44
import org.jetbrains.dataframe.AnyFrame
55
import org.jetbrains.dataframe.ColumnKind
6-
import org.jetbrains.dataframe.impl.schema.ColumnSchema
7-
import org.jetbrains.dataframe.impl.schema.DataFrameSchema
6+
import org.jetbrains.dataframe.internal.schema.ColumnSchema
7+
import org.jetbrains.dataframe.internal.schema.DataFrameSchema
88
import org.jetbrains.dataframe.impl.columns.asGroup
99
import org.jetbrains.dataframe.impl.columns.asTable
1010

src/main/kotlin/org/jetbrains/dataframe/impl/codeGen/CodeGenSchema.kt

Lines changed: 0 additions & 36 deletions
This file was deleted.

src/main/kotlin/org/jetbrains/dataframe/impl/codeGen/CodeGenerationMode.kt

Lines changed: 0 additions & 6 deletions
This file was deleted.

src/main/kotlin/org/jetbrains/dataframe/impl/codeGen/CodeGenerator.kt

Lines changed: 0 additions & 23 deletions
This file was deleted.

0 commit comments

Comments
 (0)