Skip to content

Commit 3fac0c1

Browse files
committed
KSP2: fix module names for Android builds
by mimicking the rules from KGP.
1 parent 0d114d9 commit 3fac0c1

File tree

4 files changed

+20
-1
lines changed
  • gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle
  • integration-tests/src/test

4 files changed

+20
-1
lines changed

gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspAATask.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,12 @@ abstract class KspAATask @Inject constructor(
154154
kspAATask.kspClasspath.from(kspAADepCfg)
155155
kspAATask.kspConfig.let { cfg ->
156156
cfg.processorClasspath.from(processorClasspath)
157-
cfg.moduleName.value(project.name)
157+
// Ref: https://github.com/JetBrains/kotlin/blob/6535f86dfe36effeba976802ebd56a5a56071f45/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt#L92
158+
val moduleName = when (val compilationName = kotlinCompilation.name) {
159+
KotlinCompilation.MAIN_COMPILATION_NAME -> project.name
160+
else -> "${project.name}_$compilationName"
161+
}
162+
cfg.moduleName.value(moduleName)
158163
val kotlinOutputDir = KspGradleSubplugin.getKspKotlinOutputDir(project, sourceSetName, target)
159164
val javaOutputDir = KspGradleSubplugin.getKspJavaOutputDir(project, sourceSetName, target)
160165
val filteredTasks =

integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AndroidIT.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ class AndroidIT(useKSP2: Boolean) {
3232
assert("-keep class com.example.AClassBuilder { *; }" in configurationText) {
3333
"Merged configuration did not contain generated proguard rules!\n$configurationText"
3434
}
35+
val outputs = result.output.lines()
36+
assert("w: [ksp] [workload_debug] Mangled name for internalFun: internalFun\$workload_debug" in outputs)
37+
assert("w: [ksp] [workload_release] Mangled name for internalFun: internalFun\$workload_release" in outputs)
3538
}
3639
}
3740

integration-tests/src/test/resources/playground/test-processor/src/main/kotlin/TestProcessor.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import com.google.devtools.ksp.KspExperimental
22
import com.google.devtools.ksp.containingFile
3+
import com.google.devtools.ksp.getClassDeclarationByName
34
import com.google.devtools.ksp.processing.*
45
import com.google.devtools.ksp.symbol.*
56
import java.io.OutputStream
@@ -49,6 +50,14 @@ class TestProcessor : SymbolProcessor {
4950
emit("TestProcessor: processing ${file.fileName}", "")
5051
file.accept(visitor, "")
5152
}
53+
54+
resolver.getClassDeclarationByName("com.example.AClass")?.let { aClass ->
55+
aClass.declarations.single { it.simpleName.asString() == "internalFun" }.let { internalFun ->
56+
val internalName = resolver.getJvmName(internalFun as KSFunctionDeclaration)
57+
val moduleName = resolver.getModuleName().asString()
58+
logger.warn("[$moduleName] Mangled name for internalFun: $internalName")
59+
}
60+
}
5261
invoked = true
5362
return emptyList()
5463
}

integration-tests/src/test/resources/playground/workload/src/main/java/com/example/AClass.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,6 @@ class AClass(private val a: Int, val b: String, val c: Double, val d: HELLO) {
1414
class innerClass<T : HELLO>
1515

1616
val generic = innerClass<HELLO>()
17+
18+
internal fun internalFun(): Int = 0
1719
}

0 commit comments

Comments
 (0)