diff options
author | Jiaxiang Chen <jiaxiang@google.com> | 2022-04-15 11:14:53 -0700 |
---|---|---|
committer | Jiaxiang Chen <roaringacw@gmail.com> | 2022-04-22 15:42:17 -0700 |
commit | 13ce1e9e0ba1a8e2590014cdd584d58276eeb485 (patch) | |
tree | 21377e1b66ee9aaa7c9d7be9876303b6fe6ed9ba /kotlin-analysis-api | |
parent | b8bcec111323fbaf2114dd38e15df9d85c94432d (diff) | |
download | ksp-13ce1e9e0ba1a8e2590014cdd584d58276eeb485.tar.gz |
implement getClassDeclarationByName
Diffstat (limited to 'kotlin-analysis-api')
-rw-r--r-- | kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/ResolverAAImpl.kt | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/ResolverAAImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/ResolverAAImpl.kt index 62e1571a..41a2b963 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/ResolverAAImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/ResolverAAImpl.kt @@ -39,7 +39,14 @@ import com.google.devtools.ksp.symbol.KSTypeArgument import com.google.devtools.ksp.symbol.KSTypeReference import com.google.devtools.ksp.symbol.Modifier import com.google.devtools.ksp.symbol.Variance +import org.jetbrains.kotlin.analysis.api.symbols.KtEnumEntrySymbol import org.jetbrains.kotlin.analysis.api.symbols.KtFileSymbol +import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol +import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithMembers +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.utils.addToStdlib.safeAs @OptIn(KspExperimental::class) class ResolverAAImpl( @@ -64,7 +71,34 @@ class ResolverAAImpl( } override fun getClassDeclarationByName(name: KSName): KSClassDeclaration? { - TODO("Not yet implemented") + fun findClass(name: KSName): KtSymbolWithMembers? { + if (name.asString() == "") { + return null + } + val parent = name.getQualifier() + val simpleName = name.getShortName() + val classId = ClassId(FqName(parent), Name.identifier(simpleName)) + analyzeWithSymbolAsContext(ktFiles.first()) { + classId.getCorrespondingToplevelClassOrObjectSymbol() as? KtNamedClassOrObjectSymbol + }?.let { return it } + return findClass(KSNameImpl(name.getQualifier())).safeAs<KtNamedClassOrObjectSymbol>()?.let { + analyzeWithSymbolAsContext(ktFiles.first()) { + ( + it.getStaticMemberScope().getClassifierSymbols { it.asString() == simpleName }.singleOrNull() + ?: it.getMemberScope().getClassifierSymbols { it.asString() == simpleName }.singleOrNull() + ).safeAs<KtNamedClassOrObjectSymbol>() + ?: it.getStaticMemberScope().getCallableSymbols { it.asString() == simpleName }.singleOrNull() + .safeAs<KtEnumEntrySymbol>() + } + } + } + return findClass(name)?.let { + when (it) { + is KtNamedClassOrObjectSymbol -> KSClassDeclarationImpl(it) + is KtEnumEntrySymbol -> KSClassDeclarationEnumEntryImpl(it) + else -> throw IllegalStateException() + } + } } override fun getDeclarationsFromPackage(packageName: String): Sequence<KSDeclaration> { @@ -103,7 +137,7 @@ class ResolverAAImpl( } override fun getKSNameFromString(name: String): KSName { - TODO("Not yet implemented") + return KSNameImpl(name) } // FIXME: correct implementation after incremental is ready. |