init research
This commit is contained in:
+10
@@ -0,0 +1,10 @@
|
||||
## :plugins:public-api-modifier
|
||||
|
||||
This compiler plugin makes `@AccessApiOverload` annotated functions internal.
|
||||
It could help to produce two artifacts from the same code: one with the full API, one with a reduced API.
|
||||
|
||||
This is an exploratory plugin that is NOT actually enabled.
|
||||
See https://github.com/Kotlin/dataframe/pull/959 for more information.
|
||||
|
||||
You can test it by adding `compilerPluginClasspath(projects.pluginApiModifier)` in
|
||||
[`:core`](../../core/build.gradle.kts).
|
||||
@@ -0,0 +1,22 @@
|
||||
plugins {
|
||||
with(convention.plugins) {
|
||||
alias(kotlinJvm8)
|
||||
}
|
||||
}
|
||||
|
||||
group = "org.jetbrains.kotlinx.dataframe"
|
||||
|
||||
dependencies {
|
||||
compileOnly(libs.kotlin.compiler)
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
main {
|
||||
java.setSrcDirs(listOf("src"))
|
||||
resources.setSrcDirs(listOf("resources"))
|
||||
}
|
||||
test {
|
||||
java.setSrcDirs(listOf("tests", "tests-gen"))
|
||||
resources.setSrcDirs(listOf("testResources"))
|
||||
}
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
#
|
||||
# Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
# Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
#
|
||||
|
||||
org.jetbrains.kotlinx.dataframe.PublicApiModifierRegistrar
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
package org.jetbrains.kotlinx.dataframe
|
||||
|
||||
import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
|
||||
import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.copy
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
|
||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
|
||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter
|
||||
import org.jetbrains.kotlin.fir.extensions.FirStatusTransformerExtension
|
||||
import org.jetbrains.kotlin.fir.resolve.fqName
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
|
||||
@OptIn(ExperimentalCompilerApi::class)
|
||||
public class PublicApiModifierRegistrar : CompilerPluginRegistrar() {
|
||||
override val supportsK2: Boolean = true
|
||||
|
||||
override val pluginId: String = "org.jetbrains.kotlinx.dataframe.PublicApiModifier"
|
||||
|
||||
override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {
|
||||
FirExtensionRegistrarAdapter.registerExtension(Extensions())
|
||||
}
|
||||
}
|
||||
|
||||
public class Extensions : FirExtensionRegistrar() {
|
||||
override fun ExtensionRegistrarContext.configurePlugin() {
|
||||
+::StatusTransformer
|
||||
}
|
||||
}
|
||||
|
||||
public class StatusTransformer(session: FirSession) : FirStatusTransformerExtension(session) {
|
||||
public companion object {
|
||||
public val apiOverload: FqName = FqName("org.jetbrains.kotlinx.dataframe.annotations.AccessApiOverload")
|
||||
}
|
||||
|
||||
override fun needTransformStatus(declaration: FirDeclaration): Boolean =
|
||||
declaration.annotations.any {
|
||||
it.fqName(session) == apiOverload
|
||||
}
|
||||
|
||||
override fun transformStatus(
|
||||
status: FirDeclarationStatus,
|
||||
function: FirSimpleFunction,
|
||||
containingClass: FirClassLikeSymbol<*>?,
|
||||
isLocal: Boolean,
|
||||
): FirDeclarationStatus = status.copy(visibility = Visibilities.Internal)
|
||||
}
|
||||
Reference in New Issue
Block a user