Skip to content

Commit 6c6a26c

Browse files
authored
Merge pull request #214 from Kotlin/jpc-kdoc-reuse
KDocs start using Doc Preprocessor Gradle plugin
2 parents eb1c312 + 3aa5f22 commit 6c6a26c

File tree

148 files changed

+20381
-402
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

148 files changed

+20381
-402
lines changed

core/build.gradle.kts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,12 @@ val addGeneratedSourcesToGit by tasks.creating(GitTask::class) {
6969

7070
// Backup the kotlin source files location
7171
val kotlinMainSources = kotlin.sourceSets.main.get().kotlin.sourceDirectories
72+
val kotlinTestSources = kotlin.sourceSets.test.get().kotlin.sourceDirectories
7273

7374
// Task to generate the processed documentation
7475
val processKDocsMain by creatingProcessDocTask(
75-
sources = kotlinMainSources.filterNot { "build/generated" in it.path }, // Exclude generated sources
76+
sources = (kotlinMainSources + kotlinTestSources) // Include both test and main sources for cross-referencing
77+
.filterNot { "build/generated" in it.path }, // Exclude generated sources
7678
) {
7779
target = file(generatedSourcesFolderName)
7880
processors = listOf(
@@ -107,8 +109,9 @@ tasks.withType<Jar> {
107109
doFirst {
108110
kotlin.sourceSets.main {
109111
kotlin.setSrcDirs(
110-
processKDocsMain.targets +
111-
kotlinMainSources.filter { "build/generated" in it.path } // Include generated sources (which were excluded above)
112+
processKDocsMain.targets
113+
.filterNot { "src/test/kotlin" in it.path || "src/test/java" in it.path } // filter out test sources again
114+
.plus(kotlinMainSources.filter { "build/generated" in it.path }) // Include generated sources (which were excluded above)
112115
)
113116
}
114117
}

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,17 @@ public typealias RowValueExpression<T, C, R> = DataRow<T>.(it: C) -> R
7474
*/
7575
public typealias RowColumnExpression<T, C, R> = (row: DataRow<T>, col: DataColumn<C>) -> R
7676

77+
/**
78+
* [ColumnExpression] is used to express or select any instance of `R` using the given instance of [DataColumn]`<C>` as
79+
* `this` and `it`.
80+
*
81+
* Shorthand for:
82+
* ```kotlin
83+
* DataColumn<C>.(it: DataColumn<C>) -> R
84+
* ```
85+
*/
86+
public typealias ColumnExpression<C, R> = Selector<DataColumn<C>, R>
87+
7788
/**
7889
* [ColumnSelector] is used to express or select a single column, represented by [SingleColumn]`<C>`, using the
7990
* context of [ColumnsSelectionDsl]`<T>` as `this` and `it`.

core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/ColumnsSelectionDsl.kt

Lines changed: 49 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -11,36 +11,27 @@ import org.jetbrains.kotlinx.dataframe.DataColumn
1111
import org.jetbrains.kotlinx.dataframe.DataFrame
1212
import org.jetbrains.kotlinx.dataframe.DataRow
1313
import org.jetbrains.kotlinx.dataframe.Predicate
14-
import org.jetbrains.kotlinx.dataframe.columns.ColumnAccessor
15-
import org.jetbrains.kotlinx.dataframe.columns.ColumnGroup
16-
import org.jetbrains.kotlinx.dataframe.columns.ColumnPath
17-
import org.jetbrains.kotlinx.dataframe.columns.ColumnReference
18-
import org.jetbrains.kotlinx.dataframe.columns.ColumnResolutionContext
19-
import org.jetbrains.kotlinx.dataframe.columns.ColumnSet
20-
import org.jetbrains.kotlinx.dataframe.columns.ColumnWithPath
21-
import org.jetbrains.kotlinx.dataframe.columns.FrameColumn
22-
import org.jetbrains.kotlinx.dataframe.columns.SingleColumn
23-
import org.jetbrains.kotlinx.dataframe.columns.renamedReference
14+
import org.jetbrains.kotlinx.dataframe.columns.*
15+
import org.jetbrains.kotlinx.dataframe.documentation.AccessApi
2416
import org.jetbrains.kotlinx.dataframe.hasNulls
2517
import org.jetbrains.kotlinx.dataframe.impl.columnName
26-
import org.jetbrains.kotlinx.dataframe.impl.columns.ColumnsList
27-
import org.jetbrains.kotlinx.dataframe.impl.columns.DistinctColumnSet
28-
import org.jetbrains.kotlinx.dataframe.impl.columns.addPath
29-
import org.jetbrains.kotlinx.dataframe.impl.columns.allColumnsExcept
30-
import org.jetbrains.kotlinx.dataframe.impl.columns.changePath
31-
import org.jetbrains.kotlinx.dataframe.impl.columns.createColumnSet
32-
import org.jetbrains.kotlinx.dataframe.impl.columns.getAt
33-
import org.jetbrains.kotlinx.dataframe.impl.columns.getChildrenAt
34-
import org.jetbrains.kotlinx.dataframe.impl.columns.single
35-
import org.jetbrains.kotlinx.dataframe.impl.columns.toColumns
36-
import org.jetbrains.kotlinx.dataframe.impl.columns.top
37-
import org.jetbrains.kotlinx.dataframe.impl.columns.transform
38-
import org.jetbrains.kotlinx.dataframe.impl.columns.transformSingle
18+
import org.jetbrains.kotlinx.dataframe.impl.columns.*
3919
import org.jetbrains.kotlinx.dataframe.impl.columns.tree.dfs
4020
import kotlin.reflect.KProperty
4121
import kotlin.reflect.KType
4222
import kotlin.reflect.typeOf
4323

24+
/**
25+
* Referring to a column in the selection DSL can be done in several ways corresponding to all
26+
* [Access APIs][AccessApi]:
27+
* TODO: [Issue #286](https://github.com/Kotlin/dataframe/issues/286)
28+
*/
29+
private interface CommonColumnSelectionExamples
30+
31+
/** [Column Selection DSL][ColumnSelectionDsl] */
32+
internal interface ColumnSelectionDslLink
33+
34+
/** TODO: [Issue #286](https://github.com/Kotlin/dataframe/issues/286) */
4435
public interface ColumnSelectionDsl<out T> : ColumnsContainer<T> {
4536

4637
public operator fun <C> ColumnReference<C>.invoke(): DataColumn<C> = get(this)
@@ -56,6 +47,10 @@ public interface ColumnSelectionDsl<out T> : ColumnsContainer<T> {
5647
public operator fun String.get(column: String): ColumnPath = pathOf(this, column)
5748
}
5849

50+
/** [Columns Selection DSL][ColumnsSelectionDsl] */
51+
internal interface ColumnsSelectionDslLink
52+
53+
/** TODO: [Issue #286](https://github.com/Kotlin/dataframe/issues/286) */
5954
public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColumn<DataRow<T>> {
6055

6156
public fun <C> ColumnSet<C>.first(condition: ColumnFilter<C>): SingleColumn<C> =
@@ -70,24 +65,26 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
7065

7166
public fun ColumnsContainer<*>.group(name: String): ColumnGroupReference = name.toColumnOf()
7267

73-
public operator fun String.rangeTo(endInclusive: String): ColumnSet<*> = toColumnAccessor().rangeTo(endInclusive.toColumnAccessor())
74-
75-
public operator fun AnyColumnReference.rangeTo(endInclusive: AnyColumnReference): ColumnSet<*> = object : ColumnSet<Any?> {
76-
override fun resolve(context: ColumnResolutionContext): List<ColumnWithPath<Any?>> {
77-
val startPath = this@rangeTo.resolveSingle(context)!!.path
78-
val endPath = endInclusive.resolveSingle(context)!!.path
79-
val parentPath = startPath.parent()!!
80-
require(parentPath == endPath.parent()) { "Start and end columns have different parent column paths" }
81-
val parentCol = context.df.getColumnGroup(parentPath)
82-
val startIndex = parentCol.getColumnIndex(startPath.name)
83-
val endIndex = parentCol.getColumnIndex(endPath.name)
84-
return (startIndex..endIndex).map {
85-
parentCol.getColumn(it).let {
86-
it.addPath(parentPath + it.name)
68+
public operator fun String.rangeTo(endInclusive: String): ColumnSet<*> =
69+
toColumnAccessor().rangeTo(endInclusive.toColumnAccessor())
70+
71+
public operator fun AnyColumnReference.rangeTo(endInclusive: AnyColumnReference): ColumnSet<*> =
72+
object : ColumnSet<Any?> {
73+
override fun resolve(context: ColumnResolutionContext): List<ColumnWithPath<Any?>> {
74+
val startPath = this@rangeTo.resolveSingle(context)!!.path
75+
val endPath = endInclusive.resolveSingle(context)!!.path
76+
val parentPath = startPath.parent()!!
77+
require(parentPath == endPath.parent()) { "Start and end columns have different parent column paths" }
78+
val parentCol = context.df.getColumnGroup(parentPath)
79+
val startIndex = parentCol.getColumnIndex(startPath.name)
80+
val endIndex = parentCol.getColumnIndex(endPath.name)
81+
return (startIndex..endIndex).map {
82+
parentCol.getColumn(it).let {
83+
it.addPath(parentPath + it.name)
84+
}
8785
}
8886
}
8987
}
90-
}
9188

9289
public fun none(): ColumnSet<*> = ColumnsList<Any?>(emptyList())
9390

@@ -115,7 +112,8 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
115112

116113
public fun <C> ColumnSet<DataRow<C>>.select(vararg columns: String): ColumnSet<*> = select { columns.toColumns() }
117114

118-
public fun <C, R> ColumnSet<DataRow<C>>.select(vararg columns: KProperty<R>): ColumnSet<R> = select { columns.toColumns() }
115+
public fun <C, R> ColumnSet<DataRow<C>>.select(vararg columns: KProperty<R>): ColumnSet<R> =
116+
select { columns.toColumns() }
119117

120118
public fun <C, R> ColumnSet<DataRow<C>>.select(selector: ColumnsSelector<C, R>): ColumnSet<R> = createColumnSet {
121119
this@select.resolve(it).flatMap { group ->
@@ -145,7 +143,8 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
145143

146144
// region allDfs
147145

148-
public fun ColumnSet<*>.allDfs(includeGroups: Boolean = false): ColumnSet<Any?> = if (includeGroups) dfs { true } else dfs { !it.isColumnGroup() }
146+
public fun ColumnSet<*>.allDfs(includeGroups: Boolean = false): ColumnSet<Any?> =
147+
if (includeGroups) dfs { true } else dfs { !it.isColumnGroup() }
149148

150149
public fun String.allDfs(includeGroups: Boolean = false): ColumnSet<Any?> = toColumnAccessor().allDfs(includeGroups)
151150

@@ -242,7 +241,9 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
242241

243242
public fun <C> col(property: KProperty<C>): ColumnAccessor<C> = property.toColumnAccessor()
244243

245-
public operator fun ColumnSet<*>.get(colName: String): ColumnSet<Any?> = transform { it.mapNotNull { it.getChild(colName) } }
244+
public operator fun ColumnSet<*>.get(colName: String): ColumnSet<Any?> =
245+
transform { it.mapNotNull { it.getChild(colName) } }
246+
246247
public operator fun <C> ColumnSet<*>.get(column: ColumnReference<C>): ColumnSet<C> = cols(column)
247248

248249
public fun SingleColumn<AnyRow>.take(n: Int): ColumnSet<*> = transformSingle { it.children().take(n) }
@@ -288,8 +289,11 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
288289
public infix fun <C> ColumnReference<C>.into(column: KProperty<*>): ColumnReference<C> = named(column.columnName)
289290

290291
public infix fun String.into(newName: String): ColumnReference<Any?> = toColumnAccessor().into(newName)
291-
public infix fun String.into(column: ColumnAccessor<*>): ColumnReference<Any?> = toColumnAccessor().into(column.name())
292-
public infix fun String.into(column: KProperty<*>): ColumnReference<Any?> = toColumnAccessor().into(column.columnName)
292+
public infix fun String.into(column: ColumnAccessor<*>): ColumnReference<Any?> =
293+
toColumnAccessor().into(column.name())
294+
295+
public infix fun String.into(column: KProperty<*>): ColumnReference<Any?> =
296+
toColumnAccessor().into(column.columnName)
293297

294298
public infix fun <C> ColumnReference<C>.named(newName: String): ColumnReference<C> = renamedReference(newName)
295299
public infix fun <C> ColumnReference<C>.named(name: KProperty<*>): ColumnReference<C> = named(name.columnName)
@@ -311,6 +315,7 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
311315
public infix fun <C> KProperty<C>.and(other: String): ColumnSet<Any?> = toColumnAccessor() and other
312316
public infix fun <C> KProperty<C>.and(other: KProperty<C>): ColumnSet<C> =
313317
toColumnAccessor() and other.toColumnAccessor()
318+
314319
public infix fun <C> KProperty<C>.and(other: ColumnsSelector<T, C>): ColumnSet<C> = toColumnAccessor() and other()
315320

316321
// endregion
@@ -339,7 +344,7 @@ public interface ColumnsSelectionDsl<out T> : ColumnSelectionDsl<T>, SingleColum
339344
public inline fun <T, reified R> ColumnsSelectionDsl<T>.expr(
340345
name: String = "",
341346
infer: Infer = Infer.Nulls,
342-
noinline expression: AddExpression<T, R>
347+
noinline expression: AddExpression<T, R>,
343348
): DataColumn<R> = mapToColumn(name, infer, expression)
344349

345350
internal fun <T, C> ColumnsSelector<T, C>.filter(predicate: (ColumnWithPath<C>) -> Boolean): ColumnsSelector<T, C> =

0 commit comments

Comments
 (0)