Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for Kotlin 2.0.0 🚀🚀🚀 #78

Merged
merged 7 commits into from
Jun 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
*.iml
.gradle
.idea
.kotlin
.fleet
.DS_Store
build
captures
Expand Down
9 changes: 3 additions & 6 deletions androidApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ plugins {
id(libs.plugins.com.android.application.get().pluginId)
id(libs.plugins.kotlin.android.get().pluginId)
id(libs.plugins.conventions.lint.get().pluginId)

alias(libs.plugins.androidx.baselineprofile)
alias(libs.plugins.compose.compiler)
}

kotlin {
Expand All @@ -30,11 +32,6 @@ android {
buildConfig = true
}

composeOptions {

kotlinCompilerExtensionVersion = libs.versions.composeCompiler.get()
}

packaging {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
Expand Down Expand Up @@ -92,7 +89,7 @@ android {
}

kotlinOptions {
jvmTarget = ProjectSettings.Android.KotlinJvmTarget
jvmTarget = ProjectSettings.Android.KotlinJvmTargetNum
}
}

Expand Down
2 changes: 1 addition & 1 deletion baselineprofile/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ android {
}

kotlinOptions {
jvmTarget = ProjectSettings.Android.KotlinJvmTarget
jvmTarget = ProjectSettings.Android.KotlinJvmTargetNum
}

defaultConfig {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package app.futured.kmptemplate.gradle.configuration

import org.gradle.api.JavaVersion
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

object ProjectSettings {

Expand All @@ -23,7 +24,8 @@ object ProjectSettings {
val VersionName = System.getenv("VERSION_NAME") ?: "1.0.0"

val JavaCompatibility = JavaVersion.VERSION_11
const val KotlinJvmTarget = "11"
val KotlinJvmTarget = JvmTarget.JVM_11
const val KotlinJvmTargetNum = "11"

object BuildTypes {
const val Debug = "debug"
Expand Down
21 changes: 14 additions & 7 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
[versions]
agp = "8.4.1"
kotlin = "1.9.24"
ksp = "1.9.24-1.0.20" # Must be compatible with: `kotlin`
# https://kotlinlang.org/docs/multiplatform-compatibility-guide.html#version-compatibility
agp = "8.3.0"
kotlin = "2.0.0"
ksp = "2.0.0-1.0.21" # Must be compatible with: `kotlin`
desugarLibs = "1.1.5"
androidxComposeBom = "2024.01.00"
androidxActivity = "1.7.2"
composeCompiler = "1.5.14" # Must be compatible with: `kotlin`
decompose = "3.0.0"
essenty = "2.0.0"
decompose = "3.1.0"
essenty = "2.1.0"
koin = "3.5.6"
koinAnnotations = "1.3.1" # Must be compatible with: `ksp`
kotlinx-coroutines = "1.8.1"
Expand All @@ -17,9 +18,10 @@ ktlint = "1.2.1"
detektGradlePlugin = "1.23.6"
composeLint = "1.3.1"
apollo = "3.8.2"
ktorfit = "1.14.0" # Must be compatible with: `ksp`
ktorfit = "2.0.0" # Must be compatible with: `ksp`
ktorfitConverter = "2.0.0"
ktor = "2.3.11" # Must be compatible with: `ktorfit`
kotlinx-serialization = "1.6.2"
kotlinx-serialization = "1.6.3"
timber = "5.0.1"
kermit = "2.0.2"
skie = "0.8.2" # Must be compatible with: `kotlin`
Expand All @@ -34,6 +36,7 @@ espressoCore = "3.5.1"
uiautomator = "2.3.0"
benchmarkMacroJunit4 = "1.2.4"
profileinstaller = "1.3.1"
composeRuntime = "1.6.2"

# Android Namespaces
project-android-namespace = "app.futured.kmptemplate.android"
Expand All @@ -60,6 +63,7 @@ androidx-compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-toolin
androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" }
androidx-compose-runtime = { group = "androidx.compose.runtime", name = "runtime" }
jetbrains-compose-runtime = { group = "org.jetbrains.compose.runtime", name = "runtime" , version.ref = "composeRuntime"}

# Koin
#koin-bom = { group = "io.insert-koin", name = "koin-bom", version.ref = "koin" }
Expand Down Expand Up @@ -115,6 +119,7 @@ network-apollo-normalizedCache-core = { group = "com.apollographql.apollo3", nam
network-apollo-normalizedCache-sqlite = { group = "com.apollographql.apollo3", name = "apollo-normalized-cache-sqlite", version.ref = "apollo" }
network-ktorfit-ksp = { group = "de.jensklingenberg.ktorfit", name = "ktorfit-ksp", version.ref = "ktorfit" }
network-ktorfit-lib = { group = "de.jensklingenberg.ktorfit", name = "ktorfit-lib", version.ref = "ktorfit" }
network-ktorfit-converters = { group = "de.jensklingenberg.ktorfit", name = "ktorfit-converters-response", version.ref = "ktorfitConverter" }
network-ktor-client-serialization = { group = "io.ktor", name = "ktor-client-serialization", version.ref = "ktor" }
network-ktor-client-contentNegotiation = { group = "io.ktor", name = "ktor-client-content-negotiation", version.ref = "ktor" }
network-ktor-client-logging = { group = "io.ktor", name = "ktor-client-logging", version.ref = "ktor" }
Expand All @@ -139,6 +144,7 @@ gradlePlugin-ksp = { group = "com.google.devtools.ksp", name = "com.google.devto
[plugins]
com-android-application = { id = "com.android.application", version.ref = "agp" }
com-android-library = { id = "com.android.library", version.ref = "agp" }
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" }
Expand Down Expand Up @@ -172,6 +178,7 @@ apollo = [

ktorfit = [
"network-ktorfit-lib",
"network-ktorfit-converters",
"network-ktor-client-contentNegotiation",
"network-ktor-client-serialization",
"network-ktor-client-logging",
Expand Down
3 changes: 2 additions & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
# https://kotlinlang.org/docs/multiplatform-compatibility-guide.html#version-compatibility
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
11 changes: 7 additions & 4 deletions shared/app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
@file:OptIn(ExperimentalKotlinGradlePluginApi::class)

import app.futured.kmptemplate.gradle.configuration.ProjectSettings
import app.futured.kmptemplate.gradle.ext.iosTargets
import co.touchlab.skie.configuration.DefaultArgumentInterop
import co.touchlab.skie.configuration.EnumInterop
import co.touchlab.skie.configuration.FlowInterop
import co.touchlab.skie.configuration.SealedInterop
import co.touchlab.skie.configuration.SuppressSkieWarning
import co.touchlab.skie.configuration.SuspendInterop
import dev.icerock.gradle.MRVisibility
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi

plugins {
id(libs.plugins.com.android.library.get().pluginId)
Expand All @@ -22,10 +26,8 @@ kotlin {
applyDefaultHierarchyTemplate()

androidTarget {
compilations.all {
kotlinOptions {
jvmTarget = ProjectSettings.Android.KotlinJvmTarget
}
compilerOptions {
jvmTarget.set(ProjectSettings.Android.KotlinJvmTarget)
}
}

Expand Down Expand Up @@ -116,6 +118,7 @@ skie {
FlowInterop.Enabled(true)
EnumInterop.Enabled(true)
SealedInterop.Enabled(true)
SuppressSkieWarning.NameCollision(true)
}
}
}
Expand Down
16 changes: 7 additions & 9 deletions shared/feature/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
@file:OptIn(ExperimentalKotlinGradlePluginApi::class)

import app.futured.kmptemplate.gradle.configuration.ProjectSettings
import app.futured.kmptemplate.gradle.ext.iosTargets
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi

plugins {
id(libs.plugins.com.android.library.get().pluginId)
Expand All @@ -8,6 +11,7 @@ plugins {
id(libs.plugins.conventions.lint.get().pluginId)
id(libs.plugins.koin.annotations.plugin.get().pluginId)

alias(libs.plugins.compose.compiler)
alias(libs.plugins.kotlin.serialization)
}

Expand All @@ -19,10 +23,8 @@ kotlin {
jvmToolchain(ProjectSettings.Kotlin.JvmToolchainVersion)

androidTarget {
compilations.all {
kotlinOptions {
jvmTarget = ProjectSettings.Android.KotlinJvmTarget
}
compilerOptions {
jvmTarget.set(ProjectSettings.Android.KotlinJvmTarget)
}
}

Expand All @@ -31,7 +33,7 @@ kotlin {
sourceSets {
androidMain {
dependencies {
implementation(libs.androidx.compose.runtime)
implementation(libs.jetbrains.compose.runtime)
}
}
commonMain {
Expand Down Expand Up @@ -78,8 +80,4 @@ android {
buildFeatures {
compose = true
}

composeOptions {
kotlinCompilerExtensionVersion = libs.versions.composeCompiler.get()
}
}
9 changes: 5 additions & 4 deletions shared/network/graphql/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
@file:OptIn(ExperimentalKotlinGradlePluginApi::class)

import app.futured.kmptemplate.gradle.configuration.ProductFlavors
import app.futured.kmptemplate.gradle.configuration.ProjectSettings
import app.futured.kmptemplate.gradle.ext.iosTargets
import com.codingfeline.buildkonfig.compiler.FieldSpec.Type.STRING
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi

plugins {
id(libs.plugins.com.android.library.get().pluginId)
Expand All @@ -17,10 +20,8 @@ kotlin {
jvmToolchain(ProjectSettings.Kotlin.JvmToolchainVersion)

androidTarget {
compilations.all {
kotlinOptions {
jvmTarget = ProjectSettings.Android.KotlinJvmTarget
}
compilerOptions {
jvmTarget.set(ProjectSettings.Android.KotlinJvmTarget)
}
}

Expand Down
9 changes: 5 additions & 4 deletions shared/network/rest/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
@file:OptIn(ExperimentalKotlinGradlePluginApi::class)

import app.futured.kmptemplate.gradle.configuration.ProductFlavors
import app.futured.kmptemplate.gradle.configuration.ProjectSettings
import app.futured.kmptemplate.gradle.ext.iosTargets
import com.codingfeline.buildkonfig.compiler.FieldSpec.Type.STRING
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi

plugins {
id(libs.plugins.com.android.library.get().pluginId)
Expand All @@ -18,10 +21,8 @@ kotlin {
jvmToolchain(ProjectSettings.Kotlin.JvmToolchainVersion)

androidTarget {
compilations.all {
kotlinOptions {
jvmTarget = ProjectSettings.Android.KotlinJvmTarget
}
compilerOptions {
jvmTarget.set(ProjectSettings.Android.KotlinJvmTarget)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package app.futured.kmptemplate.network.rest.injection

import app.futured.kmptemplate.network.rest.FlavorConstants
import app.futured.kmptemplate.network.rest.api.StarWarsApi
import app.futured.kmptemplate.network.rest.api.createStarWarsApi
import app.futured.kmptemplate.network.rest.plugin.ContentNegotiationPlugin
import app.futured.kmptemplate.network.rest.plugin.HttpTimeoutPlugin
import app.futured.kmptemplate.network.rest.plugin.LoggingPlugin
Expand Down Expand Up @@ -57,5 +58,5 @@ class NetworkRestModule {
.build()

@Single
internal fun starWarsApi(ktorFit: Ktorfit): StarWarsApi = ktorFit.create<StarWarsApi>()
internal fun starWarsApi(ktorFit: Ktorfit): StarWarsApi = ktorFit.createStarWarsApi()
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package app.futured.kmptemplate.network.rest.result
import de.jensklingenberg.ktorfit.Ktorfit
import de.jensklingenberg.ktorfit.converter.Converter
import de.jensklingenberg.ktorfit.converter.KtorfitResult
import de.jensklingenberg.ktorfit.internal.TypeData
import de.jensklingenberg.ktorfit.converter.TypeData
import io.ktor.client.call.body
import io.ktor.http.isSuccess
import io.ktor.util.reflect.TypeInfo
Expand All @@ -26,8 +26,6 @@ class NetworkResultConverterFactory internal constructor(
if (typeData.typeInfo.type == NetworkResult::class) {
return object : Converter.SuspendResponseConverter<KtorHttpResponse, Any> {

override suspend fun convert(response: KtorHttpResponse): Any = convert(KtorfitResult.Success(response))

override suspend fun convert(result: KtorfitResult): Any {
val wrappedTypeInfo = typeData.typeArgs.first().typeInfo // NetworkResult<wrappedTypeInfo>

Expand Down
9 changes: 5 additions & 4 deletions shared/persistence/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
@file:OptIn(ExperimentalKotlinGradlePluginApi::class)

import app.futured.kmptemplate.gradle.configuration.ProjectSettings
import app.futured.kmptemplate.gradle.ext.iosTargets
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi

plugins {
id(libs.plugins.com.android.library.get().pluginId)
Expand All @@ -13,10 +16,8 @@ kotlin {
jvmToolchain(ProjectSettings.Kotlin.JvmToolchainVersion)

androidTarget {
compilations.all {
kotlinOptions {
jvmTarget = ProjectSettings.Android.KotlinJvmTarget
}
compilerOptions {
jvmTarget.set(ProjectSettings.Android.KotlinJvmTarget)
}
}

Expand Down
9 changes: 5 additions & 4 deletions shared/platform/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
@file:OptIn(ExperimentalKotlinGradlePluginApi::class)

import app.futured.kmptemplate.gradle.configuration.ProjectSettings
import app.futured.kmptemplate.gradle.ext.iosTargets
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi

plugins {
id(libs.plugins.com.android.library.get().pluginId)
Expand All @@ -11,10 +14,8 @@ kotlin {
jvmToolchain(ProjectSettings.Kotlin.JvmToolchainVersion)

androidTarget {
compilations.all {
kotlinOptions {
jvmTarget = ProjectSettings.Android.KotlinJvmTarget
}
compilerOptions {
jvmTarget.set(ProjectSettings.Android.KotlinJvmTarget)
}
}

Expand Down
Loading
Loading