diff options
author | Jiaxiang Chen <jiaxiang@google.com> | 2022-03-04 23:29:17 -0800 |
---|---|---|
committer | Jiaxiang Chen <roaringacw@gmail.com> | 2022-03-10 15:09:18 -0800 |
commit | 3150c1c154507c08ff220546dd76d72121cd04e1 (patch) | |
tree | e3b7faa1c8ca91c94e911b7d4a65d0bbe1005989 /kotlin-analysis-api | |
parent | decab20f1698020abedae7a142263e3261cfdbb3 (diff) | |
download | ksp-3150c1c154507c08ff220546dd76d72121cd04e1.tar.gz |
load files from arguments
Diffstat (limited to 'kotlin-analysis-api')
6 files changed, 31 insertions, 20 deletions
diff --git a/kotlin-analysis-api/build.gradle.kts b/kotlin-analysis-api/build.gradle.kts index 43ce47f4..bca9ee2b 100644 --- a/kotlin-analysis-api/build.gradle.kts +++ b/kotlin-analysis-api/build.gradle.kts @@ -56,6 +56,7 @@ dependencies { } implementation(project(":api")) + implementation(project(":common-util")) } tasks.register<Copy>("CopyLibsForTesting") { diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/KSPCoreEnvironment.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/KSPCoreEnvironment.kt new file mode 100644 index 00000000..fb40fd74 --- /dev/null +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/KSPCoreEnvironment.kt @@ -0,0 +1,14 @@ +package com.google.devtools.ksp.impl + +import com.intellij.mock.MockProject +import com.intellij.psi.PsiDocumentManager + +class KSPCoreEnvironment(private val project: MockProject) { + companion object { + lateinit var instance: KSPCoreEnvironment + } + init { + instance = this + } + val psiDocumentManager = PsiDocumentManager.getInstance(project) +} 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 5c76d32d..87f1992c 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 @@ -13,24 +13,15 @@ import org.jetbrains.kotlin.analysis.api.standalone.configureProjectEnvironment import org.jetbrains.kotlin.analysis.api.analyseWithReadAction import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys +import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoots import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.config.CompilerConfiguration -import org.jetbrains.kotlin.idea.references.* import org.jetbrains.kotlin.psi.KtFile import java.io.File -import org.jetbrains.kotlin.cli.jvm.config.addJavaSourceRoot - -fun findSomeReference(ktFile: KtFile): KtReference? { - for (i in 1..300) { - val reference = ktFile.findReferenceAt(i) - if (reference != null && reference is KtReference) - return reference - } - - return null -} +import org.jetbrains.kotlin.cli.jvm.config.addJavaSourceRoots +import java.nio.file.Files private fun convertFilesToKtFiles(project: Project, files: List<File>): List<KtFile> { val fs = StandardFileSystems.local() @@ -44,7 +35,8 @@ private fun convertFilesToKtFiles(project: Project, files: List<File>): List<KtF return ktFiles } -fun main() { +fun main(args: Array<String>) { + val kotlinSourceRoots = args.toList().map { File(it) } val compilerConfiguration = CompilerConfiguration() compilerConfiguration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, MessageCollector.NONE) val env = KotlinCoreEnvironment.createForProduction( @@ -55,11 +47,15 @@ fun main() { val application = ApplicationManager.getApplication() as MockApplication configureApplicationEnvironment(application) - val file = File("testData/api/hello.kt").absoluteFile - compilerConfiguration.addJavaSourceRoot(file) + val files = kotlinSourceRoots + .sortedBy { Files.isSymbolicLink(it.toPath()) } // Get non-symbolic paths first + .flatMap { root -> root.walk().filter { it.isFile && it.extension == "kt" }.toList() } + .sortedBy { Files.isSymbolicLink(it.toPath()) } // This time is for .java files + .distinctBy { it.canonicalPath } + compilerConfiguration.addKotlinSourceRoots(files.map { it.absolutePath }) val project = env.project as MockProject - val ktFiles = convertFilesToKtFiles(project, listOf(file)) + val ktFiles = convertFilesToKtFiles(project, files) configureProjectEnvironment( project, compilerConfiguration, @@ -67,6 +63,7 @@ fun main() { env::createPackagePartProvider, env.projectEnvironment.environment.jarFileSystem as CoreJarFileSystem ) + val kspCoreEnvironment = KSPCoreEnvironment(project) for (ktFile in ktFiles) { analyseWithReadAction(ktFile) { diff --git a/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/impl/test/KotlinAnalysisAPITest.kt b/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/impl/test/KotlinAnalysisAPITest.kt index de4d8dfc..c66e18ad 100644 --- a/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/impl/test/KotlinAnalysisAPITest.kt +++ b/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/impl/test/KotlinAnalysisAPITest.kt @@ -7,6 +7,6 @@ class KotlinAnalysisAPITest { @Test fun testHello() { - main() + main(arrayOf("testData/api")) } } diff --git a/kotlin-analysis-api/testData/api/anno.kt b/kotlin-analysis-api/testData/api/anno.kt new file mode 100644 index 00000000..d2b26b12 --- /dev/null +++ b/kotlin-analysis-api/testData/api/anno.kt @@ -0,0 +1,2 @@ +package test +annotation class Anno diff --git a/kotlin-analysis-api/testData/api/hello.kt b/kotlin-analysis-api/testData/api/hello.kt index c237c230..393dcb31 100644 --- a/kotlin-analysis-api/testData/api/hello.kt +++ b/kotlin-analysis-api/testData/api/hello.kt @@ -1,6 +1,3 @@ -package test -annotation class Anno - @Anno class Foo() { val k = "123" |