aboutsummaryrefslogtreecommitdiff
path: root/kotlin-analysis-api
diff options
context:
space:
mode:
authorJiaxiang Chen <jiaxiang@google.com>2022-03-23 14:12:30 -0700
committerJiaxiang Chen <roaringacw@gmail.com>2022-03-28 19:06:44 -0700
commit9f5f322b67b0d17d2df68252e7d960a360e2e467 (patch)
tree2d36201816154e002b815d43db2d4754e57cf7f6 /kotlin-analysis-api
parentf3b7ae942da7b6d2e08c3fd1ad85828ec39f1440 (diff)
downloadksp-9f5f322b67b0d17d2df68252e7d960a360e2e467.tar.gz
Use AlwaysAccessibleValidityToken for KtSymbol analysis
Diffstat (limited to 'kotlin-analysis-api')
-rw-r--r--kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSFileImpl.kt7
-rw-r--r--kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/processor/HelloWorldProcessor.kt22
-rw-r--r--kotlin-analysis-api/testData/helloWorld.kt1
3 files changed, 5 insertions, 25 deletions
diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSFileImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSFileImpl.kt
index 33107866..57ef25ef 100644
--- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSFileImpl.kt
+++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSFileImpl.kt
@@ -25,11 +25,12 @@ import com.google.devtools.ksp.symbol.KSNode
import com.google.devtools.ksp.symbol.KSVisitor
import com.google.devtools.ksp.symbol.Location
import com.google.devtools.ksp.symbol.Origin
-import org.jetbrains.kotlin.analysis.api.analyseWithReadAction
+import org.jetbrains.kotlin.analysis.api.analyseWithCustomToken
import org.jetbrains.kotlin.analysis.api.annotations.annotations
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
+import org.jetbrains.kotlin.analysis.api.tokens.AlwaysAccessibleValidityTokenFactory
import org.jetbrains.kotlin.psi.KtFile
class KSFileImpl(private val ktFile: KtFile) : KSFile {
@@ -43,7 +44,7 @@ class KSFileImpl(private val ktFile: KtFile) : KSFile {
ktFile.virtualFilePath
}
override val declarations: Sequence<KSDeclaration> by lazy {
- analyseWithReadAction(ktFile) {
+ analyseWithCustomToken(ktFile, AlwaysAccessibleValidityTokenFactory) {
ktFile.getFileSymbol().getFileScope().getAllSymbols().map {
when (it) {
is KtNamedClassOrObjectSymbol -> KSClassDeclarationImpl(it)
@@ -67,7 +68,7 @@ class KSFileImpl(private val ktFile: KtFile) : KSFile {
}
override val annotations: Sequence<KSAnnotation> by lazy {
- analyseWithReadAction(ktFile) {
+ analyseWithCustomToken(ktFile, AlwaysAccessibleValidityTokenFactory) {
ktFile.getFileSymbol().annotations.map { KSAnnotationImpl(it) }.asSequence()
}
}
diff --git a/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/processor/HelloWorldProcessor.kt b/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/processor/HelloWorldProcessor.kt
index 441847c9..c37ab7df 100644
--- a/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/processor/HelloWorldProcessor.kt
+++ b/kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/processor/HelloWorldProcessor.kt
@@ -9,31 +9,9 @@ class HelloWorldProcessor : AbstractTestProcessor() {
override fun process(resolver: Resolver): List<KSAnnotated> {
val fooKt = resolver.getAllFiles().single()
results.add(fooKt.fileName)
-
- // FIXME: symbols escape contexts ¯\_(ツ)_/¯
- // This doesn't work; AA complains "... is inaccessible: Called outside analyse method"
- /*
val bar = resolver.getAllFiles().single { it.fileName == "Foo.kt" }
.declarations.single { it.simpleName.asString() == "Foo" }
- .safeAs<KSClassDeclaration>()!!.superTypes.single().resolve().declaration
- .safeAs<KSClassDeclaration>()!!
-
results.add(bar.simpleName.asString())
- */
-
- // This is OK if making KSFileImpl.ktFile public:
- /*
- val ktFile = fooKt.safeAs<KSFileImpl>()!!.ktFile
- analyseWithReadAction(ktFile) {
- val fileSymbol = ktFile.getFileSymbol()
- val members = fileSymbol.getFileScope().getAllSymbols()
- val classes = members.filterIsInstance<KtClassOrObjectSymbol>()
- classes.first().superTypes.filter { it.toString() == "Bar" }.firstOrNull()?.let {
- results.add(it.toString())
- }
- }
- */
-
return emptyList()
}
diff --git a/kotlin-analysis-api/testData/helloWorld.kt b/kotlin-analysis-api/testData/helloWorld.kt
index 02b8c179..50deed0b 100644
--- a/kotlin-analysis-api/testData/helloWorld.kt
+++ b/kotlin-analysis-api/testData/helloWorld.kt
@@ -2,6 +2,7 @@
// TEST PROCESSOR: HelloWorldProcessor
// EXPECTED:
// Foo.kt
+// Foo
// END
// MODULE: lib
// FILE: Bar.kt