diff options
author | Jiaxiang Chen <jiaxiang@google.com> | 2022-03-23 14:12:30 -0700 |
---|---|---|
committer | Jiaxiang Chen <roaringacw@gmail.com> | 2022-03-28 19:06:44 -0700 |
commit | 9f5f322b67b0d17d2df68252e7d960a360e2e467 (patch) | |
tree | 2d36201816154e002b815d43db2d4754e57cf7f6 /kotlin-analysis-api | |
parent | f3b7ae942da7b6d2e08c3fd1ad85828ec39f1440 (diff) | |
download | ksp-9f5f322b67b0d17d2df68252e7d960a360e2e467.tar.gz |
Use AlwaysAccessibleValidityToken for KtSymbol analysis
Diffstat (limited to 'kotlin-analysis-api')
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 |