aboutsummaryrefslogtreecommitdiff
path: root/kotlin-analysis-api
diff options
context:
space:
mode:
authorJiaxiang Chen <jiaxiang@google.com>2022-03-04 23:29:17 -0800
committerJiaxiang Chen <roaringacw@gmail.com>2022-03-10 15:09:18 -0800
commit3150c1c154507c08ff220546dd76d72121cd04e1 (patch)
treee3b7faa1c8ca91c94e911b7d4a65d0bbe1005989 /kotlin-analysis-api
parentdecab20f1698020abedae7a142263e3261cfdbb3 (diff)
downloadksp-3150c1c154507c08ff220546dd76d72121cd04e1.tar.gz
load files from arguments
Diffstat (limited to 'kotlin-analysis-api')
-rw-r--r--kotlin-analysis-api/build.gradle.kts1
-rw-r--r--kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/KSPCoreEnvironment.kt14
-rw-r--r--kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/KotlinSymbolProcessing.kt29
-rw-r--r--kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/impl/test/KotlinAnalysisAPITest.kt2
-rw-r--r--kotlin-analysis-api/testData/api/anno.kt2
-rw-r--r--kotlin-analysis-api/testData/api/hello.kt3
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"