From ae630aa7daa944f376be1d4cc49ef740c6d14acd Mon Sep 17 00:00:00 2001 From: Ting-Yuan Huang Date: Thu, 4 Apr 2024 10:29:23 -0700 Subject: [PATCH 1/4] Print missing deps when packing KSP2 uber jar --- kotlin-analysis-api/build.gradle.kts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/kotlin-analysis-api/build.gradle.kts b/kotlin-analysis-api/build.gradle.kts index bf087d542f..9d3c2ee187 100644 --- a/kotlin-analysis-api/build.gradle.kts +++ b/kotlin-analysis-api/build.gradle.kts @@ -1,4 +1,5 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +import java.io.ByteArrayOutputStream description = "Kotlin Symbol Processing implementation using Kotlin Analysis API" @@ -23,6 +24,7 @@ plugins { } val depSourceJars by configurations.creating +val depJarsForCheck by configurations.creating dependencies { listOf( @@ -91,6 +93,10 @@ dependencies { implementation(project(":common-util")) testImplementation(kotlin("stdlib", aaKotlinBaseVersion)) + + depJarsForCheck("org.jetbrains.kotlin", "kotlin-stdlib", aaKotlinBaseVersion) + depJarsForCheck(project(":api")) + depJarsForCheck(project(":common-deps")) } sourceSets.main { @@ -123,6 +129,27 @@ tasks.withType() { archiveClassifier.set("") minimize() mergeServiceFiles() + + doLast { + // Checks for missing dependencies + val jarJar = archiveFile.get().asFile + val depJars = depJarsForCheck.resolve().map(File::getPath) + val stdout = ByteArrayOutputStream() + try { + exec { + executable = "jdeps" + args = listOf( + "--multi-release", "base", + "--missing-deps", + "-cp", depJars.joinToString(":"), jarJar.path + ) + standardOutput = stdout + } + } catch (e: org.gradle.process.internal.ExecException) { + logger.warn(e.message) + } + logger.warn(stdout.toString()) + } } tasks { From 004b314ca78f94a69e9362eee81269e57a2f749c Mon Sep 17 00:00:00 2001 From: Ting-Yuan Huang Date: Thu, 4 Apr 2024 10:30:26 -0700 Subject: [PATCH 2/4] Add missing dep: org.jetbrains:annotations --- kotlin-analysis-api/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/kotlin-analysis-api/build.gradle.kts b/kotlin-analysis-api/build.gradle.kts index 9d3c2ee187..15b79fadf9 100644 --- a/kotlin-analysis-api/build.gradle.kts +++ b/kotlin-analysis-api/build.gradle.kts @@ -86,6 +86,7 @@ dependencies { ) { isTransitive = false } + implementation("org.jetbrains:annotations:24.1.0") compileOnly(project(":common-deps")) From 73f3c96bc681a32a2720daa4197df28f0ff57c33 Mon Sep 17 00:00:00 2001 From: Ting-Yuan Huang Date: Thu, 4 Apr 2024 10:35:08 -0700 Subject: [PATCH 3/4] Do not minimize lz4-java some of the classes can be loaded via reflection --- kotlin-analysis-api/build.gradle.kts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kotlin-analysis-api/build.gradle.kts b/kotlin-analysis-api/build.gradle.kts index 15b79fadf9..b13460bd59 100644 --- a/kotlin-analysis-api/build.gradle.kts +++ b/kotlin-analysis-api/build.gradle.kts @@ -128,7 +128,9 @@ tasks.withType() { } exclude("kotlin/**") archiveClassifier.set("") - minimize() + minimize { + exclude(dependency("org.lz4:lz4-java:.*")) + } mergeServiceFiles() doLast { From 52f13cf1ca0dac310c6dc21fa450fb06352cd1d9 Mon Sep 17 00:00:00 2001 From: Ting-Yuan Huang Date: Thu, 4 Apr 2024 10:41:14 -0700 Subject: [PATCH 4/4] Keep more classes in uber jar --- .../google/devtools/ksp/impl/KotlinSymbolProcessing.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/KotlinSymbolProcessing.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/KotlinSymbolProcessing.kt index de0aa23fcc..378072222e 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/KotlinSymbolProcessing.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/KotlinSymbolProcessing.kt @@ -705,6 +705,16 @@ internal val DEAR_SHADOW_JAR_PLEASE_DO_NOT_REMOVE_THESE = listOf( org.jetbrains.kotlin.load.java.ErasedOverridabilityCondition::class.java, org.jetbrains.kotlin.load.java.FieldOverridabilityCondition::class.java, org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInsLoaderImpl::class.java, + com.fasterxml.aalto.AaltoInputProperties::class.java, + com.google.errorprone.annotations.CheckReturnValue::class.java, + com.intellij.openapi.application.JetBrainsProtocolHandler::class.java, + com.intellij.openapi.editor.impl.EditorDocumentPriorities::class.java, + com.intellij.psi.tree.ChildRoleBase::class.java, + com.intellij.util.xmlb.Constants::class.java, + com.intellij.xml.CommonXmlStrings::class.java, + javax.annotation.ParametersAreNonnullByDefault::class.java, + org.codehaus.stax2.XMLInputFactory2::class.java, + org.codehaus.stax2.XMLStreamProperties::class.java, ) fun TargetPlatform.getPlatformInfo(kspConfig: KSPConfig): List =