Skip to content

Commit 18b4705

Browse files
committed
Setup compiler plugin that makes API overloads internal
1 parent c7b1004 commit 18b4705

File tree

6 files changed

+104
-9
lines changed

6 files changed

+104
-9
lines changed

core/build.gradle.kts

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import com.google.devtools.ksp.gradle.KspTaskJvm
33
import io.github.devcrocod.korro.KorroTask
44
import nl.jolanrensen.docProcessor.defaultProcessors.ARG_DOC_PROCESSOR_LOG_NOT_FOUND
55
import nl.jolanrensen.docProcessor.gradle.creatingProcessDocTask
6-
import org.gradle.jvm.tasks.Jar
76
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
7+
import org.jetbrains.kotlinx.publisher.composeOfTaskOutputs
88
import xyz.ronella.gradle.plugin.simple.git.task.GitTask
99

1010
plugins {
@@ -60,6 +60,10 @@ sourceSets {
6060
}
6161
}
6262

63+
val experimental = sourceSets.create("experimental") {
64+
kotlin.srcDir(sourceSets.main.get().kotlin)
65+
}
66+
6367
dependencies {
6468
val kotlinCompilerPluginClasspathSamples by configurations.getting
6569

@@ -102,14 +106,6 @@ val compileSamplesKotlin = tasks.named<KotlinCompile>("compileSamplesKotlin") {
102106
destinationDirectory = layout.buildDirectory.dir("classes/testWithOutputs/kotlin")
103107
}
104108

105-
tasks.withType<KspTask> {
106-
// "test" classpath is re-used, so repeated generation should be disabled
107-
if (name == "kspSamplesKotlin") {
108-
dependsOn("kspTestKotlin")
109-
enabled = false
110-
}
111-
}
112-
113109
val clearTestResults by tasks.creating(Delete::class) {
114110
delete(layout.buildDirectory.dir("dataframes"))
115111
delete(layout.buildDirectory.dir("korroOutputLines"))
@@ -295,6 +291,14 @@ tasks.withType<org.jetbrains.dokka.gradle.AbstractDokkaLeafTask> {
295291

296292
// endregion
297293

294+
tasks.withType<KspTask> {
295+
// "test" classpath is re-used, so repeated generation should be disabled
296+
if (name == "kspSamplesKotlin") {
297+
dependsOn("kspTestKotlin")
298+
enabled = false
299+
}
300+
}
301+
298302
korro {
299303
docs = fileTree(rootProject.rootDir) {
300304
include("docs/StardustDocs/topics/*.md")

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,12 @@ public annotation class ScopeProperty
4343

4444
@Target(AnnotationTarget.FUNCTION)
4545
internal annotation class Check
46+
47+
/**
48+
* One of the design goals of the library is typed access to columns.
49+
* That's why all operations that have "column" parameters have 4 overloads: https://kotlin.github.io/dataframe/apilevels.html
50+
* In Kotlin Notebook and in Gradle project with the compiler plugin, Column Accessors API and KProperties API become redundant and
51+
* clutter API scope of DataFrame. This annotation indicates such functions so that they can be excluded from public API
52+
*/
53+
@Target(AnnotationTarget.FUNCTION)
54+
internal annotation class ApiOverload
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
plugins {
2+
alias(libs.plugins.kotlin.jvm)
3+
alias(libs.plugins.ktlint)
4+
}
5+
6+
group = "org.jetbrains.kotlinx.dataframe"
7+
8+
repositories {
9+
mavenCentral()
10+
}
11+
12+
dependencies {
13+
compileOnly(libs.kotlin.compiler)
14+
}
15+
16+
sourceSets {
17+
main {
18+
java.setSrcDirs(listOf("src"))
19+
resources.setSrcDirs(listOf("resources"))
20+
}
21+
test {
22+
java.setSrcDirs(listOf("tests", "tests-gen"))
23+
resources.setSrcDirs(listOf("testResources"))
24+
}
25+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#
2+
# Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
3+
# Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
4+
#
5+
6+
org.jetbrains.kotlinx.dataframe.PublicApiModifierRegistrar
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package org.jetbrains.kotlinx.dataframe
2+
3+
import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
4+
import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi
5+
import org.jetbrains.kotlin.config.CompilerConfiguration
6+
import org.jetbrains.kotlin.descriptors.Visibilities
7+
import org.jetbrains.kotlin.fir.FirSession
8+
import org.jetbrains.kotlin.fir.copy
9+
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
10+
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
11+
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
12+
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
13+
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter
14+
import org.jetbrains.kotlin.fir.extensions.FirStatusTransformerExtension
15+
import org.jetbrains.kotlin.fir.resolve.fqName
16+
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
17+
import org.jetbrains.kotlin.name.FqName
18+
19+
@OptIn(ExperimentalCompilerApi::class)
20+
class PublicApiModifierRegistrar : CompilerPluginRegistrar() {
21+
override val supportsK2: Boolean = true
22+
23+
override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {
24+
FirExtensionRegistrarAdapter.registerExtension(Extensions())
25+
}
26+
}
27+
28+
class Extensions : FirExtensionRegistrar() {
29+
override fun ExtensionRegistrarContext.configurePlugin() {
30+
+::StatusTransformer
31+
}
32+
}
33+
34+
class StatusTransformer(session: FirSession) : FirStatusTransformerExtension(session) {
35+
companion object {
36+
val apiOverload = FqName("org.jetbrains.kotlinx.dataframe.annotations.ApiOverload")
37+
}
38+
39+
override fun needTransformStatus(declaration: FirDeclaration): Boolean =
40+
declaration.annotations.any {
41+
it.fqName(session) == apiOverload
42+
}
43+
44+
override fun transformStatus(
45+
status: FirDeclarationStatus,
46+
function: FirSimpleFunction,
47+
containingClass: FirClassLikeSymbol<*>?,
48+
isLocal: Boolean,
49+
): FirDeclarationStatus = status.copy(visibility = Visibilities.Internal)
50+
}

settings.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,4 @@ include("dataframe-excel")
4343
include("core")
4444
include("dataframe-openapi-generator")
4545
include("dataframe-geo")
46+
include("plugins:public-api-modifier")

0 commit comments

Comments
 (0)