Skip to content

Commit 5e82ede

Browse files
authored
Separate compiler from Gradle optics plugin + fix visibilities bug (#3765)
1 parent 14f94f7 commit 5e82ede

File tree

15 files changed

+57
-33
lines changed

15 files changed

+57
-33
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
plugins {
2+
id(libs.plugins.kotlin.jvm.get().pluginId)
3+
id("arrow.kotlin")
4+
}
5+
6+
kotlin {
7+
explicitApi = null
8+
compilerOptions {
9+
optIn.add("org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi")
10+
}
11+
}
12+
13+
dependencies {
14+
compileOnly(kotlin("compiler"))
15+
}
16+

arrow-libs/optics/arrow-optics-plugin/src/main/kotlin/arrow/optics/plugin/fir/OpticsCompanionGenerator.kt renamed to arrow-libs/optics/arrow-optics-compiler-plugin/src/main/kotlin/arrow/optics/plugin/fir/OpticsCompanionGenerator.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,9 @@ class OpticsCompanionGenerator(session: FirSession) : FirDeclarationGenerationEx
4949
if (!session.predicateBasedProvider.matches(predicate, owner)) return null
5050
if (owner.companionObjectSymbol != null) return null
5151
if (name != SpecialNames.DEFAULT_NAME_FOR_COMPANION_OBJECT) return null
52-
return createCompanionObject(owner, Key).symbol
52+
return createCompanionObject(owner, Key) {
53+
this.visibility = owner.rawStatus.visibility
54+
}.symbol
5355
}
5456

5557
fun FirClassSymbol<*>.isGeneratedOpticsCompanion(): Boolean {

arrow-libs/optics/arrow-optics-plugin/src/main/kotlin/arrow/optics/plugin/fir/OpticsPluginWrappers.kt renamed to arrow-libs/optics/arrow-optics-compiler-plugin/src/main/kotlin/arrow/optics/plugin/fir/OpticsPluginWrappers.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package arrow.optics.plugin.fir
22

3-
import arrow.optics.plugin.BuildConfig
43
import org.jetbrains.kotlin.compiler.plugin.AbstractCliOption
54
import org.jetbrains.kotlin.compiler.plugin.CliOption
65
import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor
@@ -11,15 +10,15 @@ import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter
1110

1211
@Suppress("unused") // Used via reflection.
1312
class OpticsCommandLineProcessor : CommandLineProcessor {
14-
override val pluginId: String = BuildConfig.KOTLIN_PLUGIN_ID
15-
override val pluginOptions: Collection<CliOption> = emptyList()
13+
override val pluginId: String = "arrow.optics.plugin"
14+
override val pluginOptions: Collection<CliOption> = emptyList()
1615

17-
override fun processOption(option: AbstractCliOption, value: String, configuration: CompilerConfiguration) {
18-
error("Unexpected config option: '${option.optionName}'")
19-
}
16+
override fun processOption(option: AbstractCliOption, value: String, configuration: CompilerConfiguration) {
17+
error("Unexpected config option: '${option.optionName}'")
18+
}
2019
}
2120

22-
class OpticsPluginComponentRegistrar: CompilerPluginRegistrar() {
21+
class OpticsPluginComponentRegistrar : CompilerPluginRegistrar() {
2322
override val supportsK2: Boolean
2423
get() = true
2524

arrow-libs/optics/arrow-optics-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor renamed to arrow-libs/optics/arrow-optics-compiler-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor

File renamed without changes.

arrow-libs/optics/arrow-optics-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar renamed to arrow-libs/optics/arrow-optics-compiler-plugin/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar

File renamed without changes.

arrow-libs/optics/arrow-optics-ksp-plugin/src/main/kotlin/arrow/optics/plugin/internals/domain.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,15 @@ import com.google.devtools.ksp.symbol.KSClassDeclaration
88
import com.google.devtools.ksp.symbol.KSType
99
import com.google.devtools.ksp.symbol.KSTypeParameter
1010
import com.google.devtools.ksp.symbol.Variance
11-
import com.google.devtools.ksp.symbol.Visibility
12-
import java.util.Locale
11+
import java.util.*
1312

1413
data class ADT(val declaration: KSClassDeclaration, val targets: List<Target>) {
1514
val sourceClassName = declaration.qualifiedNameOrSimpleName
1615
val sourceName = declaration.simpleName.asString().replaceFirstChar { it.lowercase(Locale.getDefault()) }.sanitize()
1716
val simpleName = declaration.nameWithParentClass
1817
val packageName = declaration.packageName.asSanitizedString()
19-
val visibilityModifierName = when (declaration.companionObject?.getVisibility()) {
20-
Visibility.INTERNAL -> "internal"
21-
else -> "public"
22-
}
18+
val visibilityModifierName =
19+
(declaration.companionObject?.getVisibility() ?: declaration.getVisibility()).name.lowercase()
2320
val typeParameters: List<String> = declaration.typeParameters.map { tyParam ->
2421
if (tyParam.variance == Variance.STAR) return@map "*"
2522
// val prefix = when (it.variance) {

arrow-libs/optics/arrow-optics-plugin/build.gradle.kts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ repositories {
1414
}
1515

1616
kotlin {
17-
explicitApi = null
17+
explicitApi()
1818
compilerOptions {
1919
optIn.add("org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi")
2020
}
@@ -25,17 +25,17 @@ dependencies {
2525
implementation(kotlin("gradle-plugin-api"))
2626
implementation(kotlin("gradle-plugin"))
2727
implementation(projects.arrowOpticsKspPlugin)
28+
implementation(projects.arrowOpticsCompilerPlugin)
2829
implementation("com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:${libs.versions.kspVersion.get()}")
2930
}
3031

3132
buildConfig {
3233
packageName("arrow.optics.plugin")
3334

34-
buildConfigField("String", "KOTLIN_PLUGIN_ID", "\"arrow.optics.plugin\"")
35-
36-
buildConfigField("String", "KOTLIN_PLUGIN_GROUP", "\"${project.group}\"")
37-
buildConfigField("String", "KOTLIN_PLUGIN_NAME", "\"${project.name}\"")
38-
buildConfigField("String", "KOTLIN_PLUGIN_VERSION", "\"${project.version}\"")
35+
val compilerPluginProject = project(":arrow-optics-compiler-plugin")
36+
buildConfigField("String", "KOTLIN_PLUGIN_GROUP", "\"${compilerPluginProject.group}\"")
37+
buildConfigField("String", "KOTLIN_PLUGIN_NAME", "\"${compilerPluginProject.name}\"")
38+
buildConfigField("String", "KOTLIN_PLUGIN_VERSION", "\"${compilerPluginProject.version}\"")
3939

4040
val kspPluginProject = project(":arrow-optics-ksp-plugin")
4141
buildConfigField(

arrow-libs/optics/arrow-optics-plugin/src/main/kotlin/arrow/optics/plugin/ArrowOpticsPlugin.kt

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
1515
import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact
1616
import org.jetbrains.kotlin.gradle.plugin.SubpluginOption
1717

18-
fun KotlinSingleTargetExtension<*>.arrowOptics() {
18+
public fun KotlinSingleTargetExtension<*>.arrowOptics() {
1919
project.dependencies.add("ksp", BuildConfig.KSP_PLUGIN_LIBRARY_COORDINATES)
2020

2121
for (sourceSet in sourceSets) {
@@ -26,16 +26,19 @@ fun KotlinSingleTargetExtension<*>.arrowOptics() {
2626
}
2727
}
2828

29-
fun KotlinMultiplatformExtension.arrowOpticsCommon() =
29+
public fun KotlinMultiplatformExtension.arrowOpticsCommon() {
3030
arrowOptics(metadata())
31+
}
3132

32-
fun KotlinMultiplatformExtension.arrowOpticsAllTargets() =
33+
public fun KotlinMultiplatformExtension.arrowOpticsAllTargets() {
3334
arrowOptics(targets.toList())
35+
}
3436

35-
fun KotlinMultiplatformExtension.arrowOptics(target: KotlinTarget, vararg moreTargets: KotlinTarget) =
37+
public fun KotlinMultiplatformExtension.arrowOptics(target: KotlinTarget, vararg moreTargets: KotlinTarget) {
3638
arrowOptics(listOf(target) + moreTargets.toList())
39+
}
3740

38-
fun KotlinMultiplatformExtension.arrowOptics(targets: List<KotlinTarget>) {
41+
public fun KotlinMultiplatformExtension.arrowOptics(targets: List<KotlinTarget>) {
3942
for (target in targets) {
4043
val miniTarget = target.name.lowercase()
4144

@@ -69,7 +72,7 @@ fun KotlinMultiplatformExtension.arrowOptics(targets: List<KotlinTarget>) {
6972
}
7073
}
7174

72-
class ArrowOpticsPlugin : KotlinCompilerPluginSupportPlugin {
75+
public class ArrowOpticsPlugin : KotlinCompilerPluginSupportPlugin {
7376
override fun apply(target: Project) {
7477
target.pluginManager.apply(KspGradleSubplugin::class.java)
7578
target.extensions.configure(KspExtension::class.java) {
@@ -82,7 +85,7 @@ class ArrowOpticsPlugin : KotlinCompilerPluginSupportPlugin {
8285
override fun applyToCompilation(kotlinCompilation: KotlinCompilation<*>): Provider<List<SubpluginOption>> =
8386
kotlinCompilation.target.project.provider { emptyList() }
8487

85-
override fun getCompilerPluginId(): String = BuildConfig.KOTLIN_PLUGIN_ID
88+
override fun getCompilerPluginId(): String = "arrow.optics.plugin"
8689

8790
override fun getPluginArtifact(): SubpluginArtifact = SubpluginArtifact(
8891
groupId = BuildConfig.KOTLIN_PLUGIN_GROUP,
@@ -93,4 +96,4 @@ class ArrowOpticsPlugin : KotlinCompilerPluginSupportPlugin {
9396
override fun isApplicable(kotlinCompilation: KotlinCompilation<*>): Boolean = true
9497
}
9598

96-
open class OpticsGradleExtension(objectFactory: ObjectFactory)
99+
public open class OpticsGradleExtension(objectFactory: ObjectFactory)

build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ dependencies {
6363
kover(projects.arrowFxCoroutines)
6464
kover(projects.arrowFxStm)
6565
kover(projects.arrowOptics)
66-
kover(projects.arrowOpticsKspPlugin)
6766
kover(projects.arrowOpticsReflect)
6867
kover(projects.arrowOpticsCompose)
6968
kover(projects.arrowResilience)

buildSrc/src/main/kotlin/arrow.kotlin.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,10 @@ val Project.needsJava11
3636
val Project.needsAbiValidation
3737
get() = project.name !in listOf(
3838
"arrow-optics-ksp-plugin",
39+
"arrow-optics-compiler-plugin",
40+
"arrow-optics-plugin",
3941
"suspendapp-test-app",
4042
"suspendapp-test-runner",
41-
"arrow-optics-plugin",
4243
)
4344

4445
val Project.isKotlinJvm: Boolean

0 commit comments

Comments
 (0)