From 3e7a9e27f56bcc678c8be56cac1e670981a2ba90 Mon Sep 17 00:00:00 2001 From: Ting-Yuan Huang Date: Thu, 12 Sep 2024 12:58:57 -0700 Subject: [PATCH] KSP2: Include all subdirectories in content scope. --- .../ksp/standalone/KspSourceModuleBuilder.kt | 13 +++++-------- kotlin-analysis-api/testData/getPackage.kt | 11 +++++++++++ .../devtools/ksp/processor/GetPackageProcessor.kt | 1 + test-utils/testData/api/getPackage.kt | 11 +++++++++++ 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/standalone/KspSourceModuleBuilder.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/standalone/KspSourceModuleBuilder.kt index edc614f46e..77d1c4c1b7 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/standalone/KspSourceModuleBuilder.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/standalone/KspSourceModuleBuilder.kt @@ -28,8 +28,6 @@ import org.jetbrains.kotlin.analysis.project.structure.builder.KtModuleBuilder import org.jetbrains.kotlin.analysis.project.structure.builder.KtModuleBuilderDsl import org.jetbrains.kotlin.analysis.project.structure.builder.KtModuleProviderBuilder import org.jetbrains.kotlin.analysis.project.structure.impl.KaSourceModuleImpl -import org.jetbrains.kotlin.analysis.project.structure.impl.collectSourceFilePaths -import org.jetbrains.kotlin.analysis.project.structure.impl.hasSuitableExtensionToAnalyse import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment import org.jetbrains.kotlin.config.ApiVersion import org.jetbrains.kotlin.config.LanguageVersion @@ -39,7 +37,6 @@ import java.nio.file.Path import kotlin.contracts.ExperimentalContracts import kotlin.contracts.InvocationKind import kotlin.contracts.contract -import kotlin.io.path.isDirectory @KtModuleBuilderDsl class KspModuleBuilder( @@ -77,17 +74,17 @@ class KspModuleBuilder( ) } + val analyzableExtensions = setOf("kt", "java", "kts") + private fun collectVirtualFilesByRoots(): Set { val localFileSystem = kotlinCoreProjectEnvironment.environment.localFileSystem return buildSet { for (root in sourceRoots) { - val files = when { - root.isDirectory() -> listOf(root) + collectSourceFilePaths(root) - root.hasSuitableExtensionToAnalyse() -> listOf(root) - else -> emptyList() + val files = root.toFile().walk().filter { + it.isDirectory || it.extension.lowercase() in analyzableExtensions } for (file in files) { - val virtualFile = localFileSystem.findFileByIoFile(file.toFile()) ?: continue + val virtualFile = localFileSystem.findFileByIoFile(file) ?: continue add(virtualFile) } } diff --git a/kotlin-analysis-api/testData/getPackage.kt b/kotlin-analysis-api/testData/getPackage.kt index 9ed18ce80b..37c4424a2e 100644 --- a/kotlin-analysis-api/testData/getPackage.kt +++ b/kotlin-analysis-api/testData/getPackage.kt @@ -37,6 +37,8 @@ // test.TestJava JAVA // symbols from package testlib // testlib.TestJavaLib JAVA_LIB +// symbols from package main.nested +// main.nested.MainAnotherJavaClass JAVA // END // MODULE: lib1 @@ -114,3 +116,12 @@ public class L { // FILE: test/Test.java package test; class TestJava {} + +// FILE: main/nested/MainAnotherJavaClass.java +package main.nested; +public class MainAnotherJavaClass { + public MainNestedJavaClass() {} + private String javaFieldInMain; + private void javaMethodInMain() { + } +} diff --git a/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/GetPackageProcessor.kt b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/GetPackageProcessor.kt index 41fb9be872..830b23a4c1 100644 --- a/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/GetPackageProcessor.kt +++ b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/GetPackageProcessor.kt @@ -19,6 +19,7 @@ class GetPackageProcessor : AbstractTestProcessor() { addPackage("non.exist", resolver) addPackage("test", resolver) addPackage("testlib", resolver) + addPackage("main.nested", resolver) return emptyList() } diff --git a/test-utils/testData/api/getPackage.kt b/test-utils/testData/api/getPackage.kt index 7679681374..611d4a32d2 100644 --- a/test-utils/testData/api/getPackage.kt +++ b/test-utils/testData/api/getPackage.kt @@ -36,6 +36,8 @@ // test.TestJava JAVA // symbols from package testlib // testlib.TestJavaLib JAVA_LIB +// symbols from package main.nested +// main.nested.MainAnotherJavaClass JAVA // END // MODULE: lib1 @@ -113,3 +115,12 @@ public class L { // FILE: test/Test.java package test; class TestJava {} + +// FILE: main/nested/MainAnotherJavaClass.java +package main.nested; +public class MainAnotherJavaClass { + public MainNestedJavaClass() {} + private String javaFieldInMain; + private void javaMethodInMain() { + } +}