Skip to content

Commit

Permalink
Clean up Kotlin's compiler flags (#239)
Browse files Browse the repository at this point in the history
  • Loading branch information
mars885 authored Aug 25, 2024
1 parent af3abcc commit 63986d8
Show file tree
Hide file tree
Showing 13 changed files with 102 additions and 36 deletions.
1 change: 0 additions & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ val installGitHook by tasks.registering(Copy::class) {
into(File(rootProject.rootDir, ".git/hooks/"))

// https://github.com/gradle/kotlin-dsl-samples/issues/1412
@Suppress("UnstableApiUsage")
filePermissions {
unix("rwxr-xr-x")
}
Expand Down
28 changes: 1 addition & 27 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@
import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask
import io.gitlab.arturbosch.detekt.Detekt
import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
import org.jetbrains.kotlin.gradle.plugin.KaptExtension
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
// See https://github.com/gradle/gradle/issues/20084#issuecomment-1060822638
Expand Down Expand Up @@ -94,35 +92,11 @@ allprojects {

subprojects {
plugins.withId(rootProject.libs.plugins.kotlinJvm.get().pluginId) {
extensions.findByType<KotlinProjectExtension>()?.run {
configure<KotlinProjectExtension> {
jvmToolchain(rootProject.libs.versions.jvmToolchain.get().toInt())
}
}

plugins.withId(rootProject.libs.plugins.kotlinKapt.get().pluginId) {
extensions.findByType<KaptExtension>()?.run {
correctErrorTypes = true
}
}

tasks.withType<KotlinCompile>().all {
compilerOptions {
freeCompilerArgs.set(
listOf(
"-opt-in=kotlinx.coroutines.FlowPreview",
"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
"-opt-in=kotlinx.serialization.ExperimentalSerializationApi",
"-opt-in=androidx.compose.material.ExperimentalMaterialApi",
"-opt-in=androidx.compose.animation.ExperimentalAnimationApi",
"-opt-in=androidx.compose.ui.ExperimentalComposeUiApi",
"-opt-in=androidx.compose.foundation.ExperimentalFoundationApi",
"-opt-in=androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi",
"-opt-in=androidx.compose.foundation.layout.ExperimentalLayoutApi",
),
)
}
}

// https://stackoverflow.com/a/70348822/7015881
// https://issuetracker.google.com/issues/238425626
configurations.all {
Expand Down
8 changes: 8 additions & 0 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,14 @@ gradlePlugin {
id = "com.paulrybitskyi.gamedge.android"
implementationClass = "com.paulrybitskyi.gamedge.plugins.GamedgeAndroidPlugin"
}
create("com.paulrybitskyi.gamedge.kotlin.coroutines") {
id = "com.paulrybitskyi.gamedge.kotlin.coroutines"
implementationClass = "com.paulrybitskyi.gamedge.plugins.GamedgeKotlinCoroutinesPlugin"
}
create("com.paulrybitskyi.gamedge.kotlin.kapt") {
id = "com.paulrybitskyi.gamedge.kotlin.kapt"
implementationClass = "com.paulrybitskyi.gamedge.plugins.GamedgeKotlinKaptPlugin"
}
create("com.paulrybitskyi.gamedge.protobuf") {
id = "com.paulrybitskyi.gamedge.protobuf"
implementationClass = "com.paulrybitskyi.gamedge.plugins.GamedgeProtobufPlugin"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,9 @@ class GamedgeAndroidPlugin : Plugin<Project> {
addDependencies()
}

private fun Project.setupPlugins() {
plugins.apply(libs.plugins.kotlinAndroid.get().pluginId)
private fun Project.setupPlugins(): Unit = with(plugins) {
apply(libs.plugins.kotlinAndroid.get().pluginId)
apply(libs.plugins.gamedgeKotlinCoroutines.get().pluginId)
}

private fun Project.configurePlugins() {
Expand Down Expand Up @@ -151,7 +152,6 @@ class GamedgeAndroidPlugin : Plugin<Project> {
}

private fun Project.addDependencies(): Unit = with(dependencies) {
add("implementation", libs.coroutines.get())
add("implementation", libs.kotlinResult.get())

add("coreLibraryDesugaring", libs.desugaredJdk.get())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class GamedgeDaggerHiltPlugin : Plugin<Project> {
}

private fun Project.setupPlugins(): Unit = with(plugins) {
apply(libs.plugins.kotlinKapt.get().pluginId)
apply(libs.plugins.gamedgeKotlinKapt.get().pluginId)
apply(libs.plugins.ksp.get().pluginId)
apply(libs.plugins.daggerHilt.get().pluginId)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,15 @@ package com.paulrybitskyi.gamedge.plugins
import com.paulrybitskyi.gamedge.extensions.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

class GamedgeJetpackComposePlugin : Plugin<Project> {

override fun apply(project: Project) = with(project) {
setupPlugins()
addDependencies()
configureTasks()
}

private fun Project.setupPlugins(): Unit = with(plugins) {
Expand All @@ -26,4 +29,19 @@ class GamedgeJetpackComposePlugin : Plugin<Project> {
add("implementation", libs.composeAnimation.get())
add("implementation", libs.composeConstraintLayout.get())
}

private fun Project.configureTasks() {
tasks.withType<KotlinCompile>().all {
compilerOptions {
freeCompilerArgs.addAll(
listOf(
"-opt-in=androidx.compose.foundation.ExperimentalFoundationApi",
"-opt-in=androidx.compose.foundation.layout.ExperimentalLayoutApi",
"-opt-in=androidx.compose.material.ExperimentalMaterialApi",
"-opt-in=androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi",
),
)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.paulrybitskyi.gamedge.plugins

import com.paulrybitskyi.gamedge.extensions.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

class GamedgeKotlinCoroutinesPlugin : Plugin<Project> {

override fun apply(project: Project) = with(project) {
addDependencies()
configureTasks()
}

private fun Project.addDependencies(): Unit = with(dependencies) {
add("implementation", libs.coroutines.get())
}

private fun Project.configureTasks() {
tasks.withType<KotlinCompile>().all {
compilerOptions {
freeCompilerArgs.add("-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi")
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.paulrybitskyi.gamedge.plugins

import com.paulrybitskyi.gamedge.extensions.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.plugin.KaptExtension
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

class GamedgeKotlinKaptPlugin : Plugin<Project> {

override fun apply(project: Project) = with(project) {
setupPlugins()
configurePlugin()
configureTasks()
}

private fun Project.setupPlugins(): Unit = with(plugins) {
apply(libs.plugins.kotlinKapt.get().pluginId)
}

private fun Project.configurePlugin() {
configure<KaptExtension> {
correctErrorTypes = true
}
}

private fun Project.configureTasks() {
tasks.withType<KotlinCompile>().all {
compilerOptions {
// w: Kapt currently doesn't support language version 2.0+. Falling back to 1.9.
freeCompilerArgs.add("-Xsuppress-version-warnings")
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure

@Suppress("DEPRECATION")
class GamedgeProtobufPlugin : Plugin<Project> {

override fun apply(project: Project) = with(project) {
Expand Down
4 changes: 2 additions & 2 deletions common-domain/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@

plugins {
id(libs.plugins.kotlinJvm.get().pluginId)
id(libs.plugins.kotlinKapt.get().pluginId)
id(libs.plugins.gamedgeKotlinCoroutines.get().pluginId)
id(libs.plugins.gamedgeKotlinKapt.get().pluginId)
}

dependencies {
implementation(libs.coroutines)
implementation(libs.kotlinResult)

implementation(libs.daggerHiltCore)
Expand Down
1 change: 1 addition & 0 deletions common-testing-domain/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

plugins {
id(libs.plugins.kotlinJvm.get().pluginId)
id(libs.plugins.gamedgeKotlinCoroutines.get().pluginId)
}

dependencies {
Expand Down
3 changes: 2 additions & 1 deletion common-testing/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
plugins {
id(libs.plugins.androidLibrary.get().pluginId)
id(libs.plugins.gamedgeAndroid.get().pluginId)
id(libs.plugins.kotlinKapt.get().pluginId)
id(libs.plugins.gamedgeKotlinCoroutines.get().pluginId)
id(libs.plugins.gamedgeKotlinKapt.get().pluginId)
}

android {
Expand Down
2 changes: 2 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ gradleVersions = { id = "com.github.ben-manes.versions", version.ref = "gradleVe
detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detektPlugin" }
ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlintPlugin" }
gamedgeAndroid = { id = "com.paulrybitskyi.gamedge.android" }
gamedgeKotlinCoroutines = { id = "com.paulrybitskyi.gamedge.kotlin.coroutines" }
gamedgeKotlinKapt = { id = "com.paulrybitskyi.gamedge.kotlin.kapt" }
gamedgeProtobuf = { id = "com.paulrybitskyi.gamedge.protobuf" }
gamedgeJetpackCompose = { id = "com.paulrybitskyi.gamedge.jetpack.compose" }
gamedgeDaggerHilt = { id = "com.paulrybitskyi.gamedge.dagger.hilt" }
Expand Down

0 comments on commit 63986d8

Please sign in to comment.