aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTing-Yuan Huang <laszio@google.com>2024-02-15 13:39:23 -0800
committerKSP Auto Pick <kotlin-symbol-processing@google.com>2024-02-16 22:06:01 +0000
commit5aa11cf90a839833a316c876bb66d4809e3dd939 (patch)
treeb124dcce138e3d365b7189440c8267c739dd2764
parentcc4560f0224b08e5ce35c7c1a5f85d6b46c1fd31 (diff)
downloadksp-5aa11cf90a839833a316c876bb66d4809e3dd939.tar.gz
Make sure all bundled dependencies are renamed.
(cherry picked from commit fbac00423eb16b46429fd45eb4c81663206de6d3)
-rw-r--r--symbol-processing-aa-embeddable/build.gradle.kts90
1 files changed, 87 insertions, 3 deletions
diff --git a/symbol-processing-aa-embeddable/build.gradle.kts b/symbol-processing-aa-embeddable/build.gradle.kts
index fe54967e..ec48f904 100644
--- a/symbol-processing-aa-embeddable/build.gradle.kts
+++ b/symbol-processing-aa-embeddable/build.gradle.kts
@@ -1,5 +1,6 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.gradle.jvm.tasks.Jar
+import java.util.zip.ZipFile
evaluationDependsOn(":kotlin-analysis-api")
@@ -28,9 +29,28 @@ tasks.withType<Jar> {
}
val prefixesToRelocate = listOf(
- "org.jetbrains.kotlin." to "ksp.org.jetbrains.kotlin.",
- "com.intellij." to "ksp.com.intellij.",
-)
+ "org.jetbrains.",
+ "org.intellij.",
+ "com.intellij.",
+ "it.unimi.dsi.",
+ "com.google.common.",
+ "com.google.errorprone.",
+ "com.google.gwt.",
+ "com.google.j2objc.",
+ "kotlin.sequences.",
+ "kotlin.text.",
+ "org.checkerframework.",
+ "com.github.benmanes.caffeine.",
+ "org.jdom.",
+ "org.picocontainer.",
+ "net.rubygrapefruit.",
+ "com.fasterxml.",
+ "org.codehaus.",
+ "one.util.",
+ "FirNativeForwardDeclarationGetClassCallChecker",
+).map {
+ Pair(it, "ksp." + it)
+}
tasks.withType<ShadowJar> {
archiveClassifier.set("")
@@ -51,6 +71,46 @@ fun String.replaceWithKsp() =
val DEP_SOURCES_DIR = "$buildDir/source-jar"
+val validPaths = prefixesToRelocate.map {
+ it.second.split('.').filter { it.isNotEmpty() }.joinToString("/")
+} + listOf(
+ "com/google/devtools/ksp",
+ "kotlin",
+ "kotlinx",
+ "META-INF",
+ "org/apache/log4j/package-info.class",
+ "ksp/FirNativeForwardDeclarationGetClassCallChecker.class",
+)
+
+class Trie(paths: List<String>) {
+ class TrieNode(val key: String)
+
+ private val terminals = mutableSetOf<TrieNode>()
+
+ private val m = mutableMapOf<Pair<TrieNode?, String>, TrieNode>().apply {
+ paths.forEach { path ->
+ var p: TrieNode? = null
+ for (d in path.split("/")) {
+ p = getOrPut(Pair(p, d)) { TrieNode(d) }
+ }
+ terminals.add(p!!)
+ }
+ }
+
+ fun contains(s: String): Boolean {
+ var p: TrieNode? = null
+ for (d in s.split("/")) {
+ p = m.get(Pair(p, d))?.also {
+ if (it in terminals)
+ return true
+ } ?: return false
+ }
+ return true
+ }
+}
+
+val validPackages = Trie(validPaths)
+
tasks {
val copyDeps by creating(Copy::class) {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
@@ -68,10 +128,34 @@ tasks {
from(DEP_SOURCES_DIR)
filter { it.replaceWithKsp() }
}
+
+ // All bundled dependencies should be renamed.
+ val validate by creating(DefaultTask::class) {
+ dependsOn(shadowJar)
+ doLast {
+ val violatingFiles = mutableListOf<String>()
+ shadowJar.get().outputs.files.filter {
+ it.extension == "jar"
+ }.forEach {
+ for (e in ZipFile(it).entries()) {
+ if (e.name.endsWith(".class") and !validPackages.contains(e.name))
+ violatingFiles.add(e.name)
+ }
+ }
+ if (violatingFiles.isNotEmpty()) {
+ error(
+ "Detected unrelocated classes that may cause conflicts: " +
+ violatingFiles.joinToString(System.lineSeparator())
+ )
+ }
+ }
+ }
+
publish {
dependsOn(shadowJar)
dependsOn(sourcesJar)
dependsOn(project(":kotlin-analysis-api").tasks["dokkaJavadocJar"])
+ dependsOn(validate)
}
}