From 22aff4e0319a9c6acfde96cf895a29a69c06586e Mon Sep 17 00:00:00 2001 From: bennyhuo Date: Mon, 16 Dec 2024 07:07:10 +0800 Subject: [PATCH 1/2] Bump Kotlin to 2.1.0. --- README.md | 1 + build.gradle.kts | 21 ++++++++++++++++--- gradle.properties | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- kace-compiler/build.gradle.kts | 14 +++++++------ .../KaceFirSupertypeGenerationExtension.kt | 16 ++++++-------- kace-gradle-plugin/build.gradle.kts | 8 +++---- .../kanyun/kace/gradle/KaceGenerateTask.kt | 2 +- .../kanyun/kace/gradle/compat/ChangedFiles.kt | 15 +++++++++++++ kace-sample/app/build.gradle.kts | 8 +++++++ kace-sample/build.gradle.kts | 7 ++++--- kace-sample/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- kace-sample/sample-lib/build.gradle.kts | 8 +++++++ test_agp.sh | 16 +++++++------- 15 files changed, 84 insertions(+), 40 deletions(-) create mode 100644 kace-gradle-plugin/src/main/java/com/kanyun/kace/gradle/compat/ChangedFiles.kt diff --git a/README.md b/README.md index 0b89db0..82ebc7a 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,7 @@ The Kace currently supports the above four most commonly used types. Other types | 1.9.20-1.2.0 | 1.9.20 | 4.2.2 | 6.8.3 | | 2.0.0-1.2.0 | 2.0.0 | 7.1.3 | 7.2 | | 2.0.20-1.2.0 | 2.0.20 | 7.1.3 | 7.2 | +| 2.1.0-1.2.0 | 2.1.0 | 7.3.1 | 7.6.3 | Since the goal of the Kace is to help developers easily upgrade to Kotlin 1.8, the minimum supported version of Kotlin is relatively high diff --git a/build.gradle.kts b/build.gradle.kts index b433cce..4a8c961 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,8 +1,17 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension +import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension + // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - id("com.android.application") version "7.1.3" apply false - id("com.android.library") version "7.1.3" apply false - id("org.jetbrains.kotlin.android") version "2.0.20" apply false + id("com.android.application") version "7.3.1" apply false + id("com.android.library") version "7.3.1" apply false + + // Use Kotlin 2.0.0 to build gradle plugin and compiler plugin for 2.1.0 + // to avoid incompatible issue with gradle build. + id("org.jetbrains.kotlin.android") version "2.0.0" apply false + id("org.jetbrains.kotlin.jvm") version "2.0.0" apply false + id("com.vanniktech.maven.publish") version "0.18.0" apply false id("com.github.gmazzo.buildconfig") version "2.1.0" apply false } @@ -19,4 +28,10 @@ allprojects { pluginManager.withPlugin("java") { extensions.getByType().sourceCompatibility = JavaVersion.VERSION_1_8 } + pluginManager.withPlugin("org.jetbrains.kotlin.jvm") { + extensions.getByType().compilerOptions.jvmTarget.set(JvmTarget.JVM_1_8) + } + pluginManager.withPlugin("org.jetbrains.kotlin.android") { + extensions.getByType().compilerOptions.jvmTarget.set(JvmTarget.JVM_1_8) + } } diff --git a/gradle.properties b/gradle.properties index de4081d..0de58a8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ kotlin.code.style=official android.nonTransitiveRClass=true KOTLIN_PLUGIN_ID=com.kanyun.kace -VERSION_NAME=2.0.20-1.2.0-SNAPSHOT +VERSION_NAME=2.1.0-1.2.0-SNAPSHOT GROUP=com.kanyun.kace diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a241a53..88dab3d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Thu Sep 29 08:11:34 CST 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/kace-compiler/build.gradle.kts b/kace-compiler/build.gradle.kts index 74f501c..96aff79 100644 --- a/kace-compiler/build.gradle.kts +++ b/kace-compiler/build.gradle.kts @@ -25,18 +25,20 @@ plugins { `maven-publish` } +// Build this project with Kotlin 2.0.0 for compatibility reason. +// But we should depend on libs for Kotlin 2.1.0. +val kotlinVersion = "2.1.0" + dependencies { - implementation(kotlin("stdlib-jdk8")) - implementation(kotlin("reflect")) - implementation(kotlin("compiler-embeddable")) + implementation(kotlin("stdlib-jdk8", kotlinVersion)) + implementation(kotlin("reflect", kotlinVersion)) + implementation(kotlin("compiler-embeddable", kotlinVersion)) kapt("com.google.auto.service:auto-service:1.0.1") compileOnly("com.google.auto.service:auto-service-annotations:1.0.1") testImplementation(kotlin("test-junit")) - testImplementation("org.jetbrains.kotlin:kotlin-compiler-embeddable") - - testImplementation("com.bennyhuo.kotlin:kotlin-compile-testing-extensions:2.0.0-1.3.0") + testImplementation("com.bennyhuo.kotlin:kotlin-compile-testing-extensions:2.1.0-1.3.0") } val compileKotlin: KotlinCompile by tasks diff --git a/kace-compiler/src/main/java/com/kanyun/kace/compiler/KaceFirSupertypeGenerationExtension.kt b/kace-compiler/src/main/java/com/kanyun/kace/compiler/KaceFirSupertypeGenerationExtension.kt index 6be3336..18d00c8 100644 --- a/kace-compiler/src/main/java/com/kanyun/kace/compiler/KaceFirSupertypeGenerationExtension.kt +++ b/kace-compiler/src/main/java/com/kanyun/kace/compiler/KaceFirSupertypeGenerationExtension.kt @@ -31,11 +31,9 @@ import org.jetbrains.kotlin.fir.symbols.SymbolInternals import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef -import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.classId import org.jetbrains.kotlin.fir.types.coneTypeSafe import org.jetbrains.kotlin.fir.types.constructClassLikeType -import org.jetbrains.kotlin.fir.types.toSymbol import org.jetbrains.kotlin.name.ClassId /** @@ -50,10 +48,10 @@ class KaceFirSupertypeGenerationExtension( classLikeDeclaration: FirClassLikeDeclaration, resolvedSupertypes: List, typeResolver: TypeResolveService, - ): List { + ): List { var shouldAddSuperType = false OUTER@ for (superTypeRef in resolvedSupertypes) { - val superType = superTypeRef.type + val superType = superTypeRef.coneType val classIds = listOf(superType.classId) + superType.allSuperTypeClassIds() for (classId in classIds) { if (classId == ANDROID_EXTENSIONS_CLASS_ID) { @@ -69,12 +67,10 @@ class KaceFirSupertypeGenerationExtension( if (!shouldAddSuperType) return emptyList() return listOf( - buildResolvedTypeRef { - type = ANDROID_EXTENSIONS_CLASS_ID.constructClassLikeType( - emptyArray(), - isNullable = false, - ) - }, + ANDROID_EXTENSIONS_CLASS_ID.constructClassLikeType( + emptyArray(), + isMarkedNullable = false, + ) ) } diff --git a/kace-gradle-plugin/build.gradle.kts b/kace-gradle-plugin/build.gradle.kts index 26490a5..74316cb 100644 --- a/kace-gradle-plugin/build.gradle.kts +++ b/kace-gradle-plugin/build.gradle.kts @@ -22,12 +22,10 @@ plugins { } dependencies { - implementation(kotlin("gradle-plugin")) - implementation(kotlin("stdlib-jdk8")) + compileOnly(kotlin("gradle-plugin")) + compileOnly(kotlin("stdlib-jdk8")) - compileOnly("com.android.tools.build:gradle:4.2.2") - compileOnly("org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.0") - implementation("org.jetbrains.kotlin:kotlin-compiler-embeddable") + compileOnly("com.android.tools.build:gradle:7.3.1") } buildConfig { diff --git a/kace-gradle-plugin/src/main/java/com/kanyun/kace/gradle/KaceGenerateTask.kt b/kace-gradle-plugin/src/main/java/com/kanyun/kace/gradle/KaceGenerateTask.kt index ff93865..8a0a9f7 100644 --- a/kace-gradle-plugin/src/main/java/com/kanyun/kace/gradle/KaceGenerateTask.kt +++ b/kace-gradle-plugin/src/main/java/com/kanyun/kace/gradle/KaceGenerateTask.kt @@ -16,6 +16,7 @@ package com.kanyun.kace.gradle +import com.kanyun.kace.gradle.compat.ChangedFiles import org.gradle.api.DefaultTask import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.DirectoryProperty @@ -34,7 +35,6 @@ import org.gradle.work.ChangeType import org.gradle.work.Incremental import org.gradle.work.InputChanges import org.gradle.workers.WorkerExecutor -import org.jetbrains.kotlin.incremental.ChangedFiles import java.io.File import javax.inject.Inject diff --git a/kace-gradle-plugin/src/main/java/com/kanyun/kace/gradle/compat/ChangedFiles.kt b/kace-gradle-plugin/src/main/java/com/kanyun/kace/gradle/compat/ChangedFiles.kt new file mode 100644 index 0000000..bfd9145 --- /dev/null +++ b/kace-gradle-plugin/src/main/java/com/kanyun/kace/gradle/compat/ChangedFiles.kt @@ -0,0 +1,15 @@ +package com.kanyun.kace.gradle.compat + +import java.io.File +import java.io.Serializable + +/** + * Copy this from Kotlin compiler to avoid depending on it explicitly. + */ +sealed class ChangedFiles : Serializable { + class Known(val modified: List, val removed: List, val forDependencies: Boolean = false) : ChangedFiles() + class Unknown : ChangedFiles() + companion object { + const val serialVersionUID: Long = 0 + } +} diff --git a/kace-sample/app/build.gradle.kts b/kace-sample/app/build.gradle.kts index 74ae56e..48c7be6 100644 --- a/kace-sample/app/build.gradle.kts +++ b/kace-sample/app/build.gradle.kts @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + plugins { id("com.android.application") id("org.jetbrains.kotlin.android") @@ -96,4 +98,10 @@ kace { else -> emptyMap() } } +} + +kotlin { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_1_8) + } } \ No newline at end of file diff --git a/kace-sample/build.gradle.kts b/kace-sample/build.gradle.kts index fab16aa..8bc4aea 100644 --- a/kace-sample/build.gradle.kts +++ b/kace-sample/build.gradle.kts @@ -1,8 +1,9 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - id("com.android.application") apply false - id("com.android.library") apply false - id("org.jetbrains.kotlin.android") version "2.0.20" apply false + id("com.android.application") version "7.3.1" apply false + id("com.android.library") version "7.3.1" apply false + id("org.jetbrains.kotlin.jvm") version "2.1.0" apply false + id("org.jetbrains.kotlin.android") version "2.1.0" apply false id("com.kanyun.kace") version "0.0.0-SNAPSHOT" apply false } diff --git a/kace-sample/gradle.properties b/kace-sample/gradle.properties index ac64ba7..d3a9835 100644 --- a/kace-sample/gradle.properties +++ b/kace-sample/gradle.properties @@ -28,4 +28,4 @@ kotlin_version = 1.7.0 kotlin_coroutine_version = 1.6.3 testAgp=false -agpVersion=7.1.3 \ No newline at end of file +agpVersion=7.3.1 \ No newline at end of file diff --git a/kace-sample/gradle/wrapper/gradle-wrapper.properties b/kace-sample/gradle/wrapper/gradle-wrapper.properties index 34af3af..22130e1 100644 --- a/kace-sample/gradle/wrapper/gradle-wrapper.properties +++ b/kace-sample/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip \ No newline at end of file +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-bin.zip \ No newline at end of file diff --git a/kace-sample/sample-lib/build.gradle.kts b/kace-sample/sample-lib/build.gradle.kts index 50f1384..da24ae1 100644 --- a/kace-sample/sample-lib/build.gradle.kts +++ b/kace-sample/sample-lib/build.gradle.kts @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + plugins { id("com.android.library") id("org.jetbrains.kotlin.android") @@ -36,6 +38,12 @@ android { resourcePrefix = "sample_lib" } +kotlin { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_1_8) + } +} + dependencies { implementation("androidx.appcompat:appcompat:1.4.1") } diff --git a/test_agp.sh b/test_agp.sh index 1f3c3ab..e7290c5 100755 --- a/test_agp.sh +++ b/test_agp.sh @@ -16,14 +16,14 @@ function testUnderAGPVersion() { cd kace-sample -setGradleVersion 7.2 -testUnderAGPVersion 7.1.3 +setGradleVersion 7.6.3 +testUnderAGPVersion 7.3.1 -setGradleVersion 7.3.3 -testUnderAGPVersion 7.2.0 +setGradleVersion 7.6.3 +testUnderAGPVersion 7.4.0 -setGradleVersion 7.4 -testUnderAGPVersion 7.3.0 +setGradleVersion 8.0 +testUnderAGPVersion 7.3.1 -setGradleVersion 7.5 -testUnderAGPVersion 7.4.0 +setGradleVersion 8.5 +testUnderAGPVersion 7.3.1 From aa75778ab9e79b59250f2ad352df7885fcd5411c Mon Sep 17 00:00:00 2001 From: RicardoJiang <2868405029@qq.com> Date: Thu, 2 Jan 2025 21:25:32 +0800 Subject: [PATCH 2/2] FIX: spotless check --- .../KaceFirSupertypeGenerationExtension.kt | 2 +- .../kanyun/kace/gradle/compat/ChangedFiles.kt | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/kace-compiler/src/main/java/com/kanyun/kace/compiler/KaceFirSupertypeGenerationExtension.kt b/kace-compiler/src/main/java/com/kanyun/kace/compiler/KaceFirSupertypeGenerationExtension.kt index 18d00c8..c3e6fa0 100644 --- a/kace-compiler/src/main/java/com/kanyun/kace/compiler/KaceFirSupertypeGenerationExtension.kt +++ b/kace-compiler/src/main/java/com/kanyun/kace/compiler/KaceFirSupertypeGenerationExtension.kt @@ -70,7 +70,7 @@ class KaceFirSupertypeGenerationExtension( ANDROID_EXTENSIONS_CLASS_ID.constructClassLikeType( emptyArray(), isMarkedNullable = false, - ) + ), ) } diff --git a/kace-gradle-plugin/src/main/java/com/kanyun/kace/gradle/compat/ChangedFiles.kt b/kace-gradle-plugin/src/main/java/com/kanyun/kace/gradle/compat/ChangedFiles.kt index bfd9145..baee869 100644 --- a/kace-gradle-plugin/src/main/java/com/kanyun/kace/gradle/compat/ChangedFiles.kt +++ b/kace-gradle-plugin/src/main/java/com/kanyun/kace/gradle/compat/ChangedFiles.kt @@ -1,3 +1,19 @@ +/* + * Copyright (C) 2022 KanYun + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.kanyun.kace.gradle.compat import java.io.File