Skip to content

Commit f34f279

Browse files
neetopiating-yuan
authored andcommitted
implement getOwnerJvmClassName
(cherry picked from commit 505cd56)
1 parent cac7c67 commit f34f279

File tree

2 files changed

+25
-3
lines changed
  • kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl
  • test-utils/src/test/kotlin/com/google/devtools/ksp/test

2 files changed

+25
-3
lines changed

kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/ResolverAAImpl.kt

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,20 +51,25 @@ import com.intellij.psi.PsiMethod
5151
import com.intellij.psi.impl.file.impl.JavaFileManager
5252
import org.jetbrains.kotlin.analysis.api.KaExperimentalApi
5353
import org.jetbrains.kotlin.analysis.api.components.buildSubstitutor
54+
import org.jetbrains.kotlin.analysis.api.fir.symbols.KaFirSymbol
5455
import org.jetbrains.kotlin.analysis.api.fir.types.KaFirType
5556
import org.jetbrains.kotlin.analysis.api.symbols.*
5657
import org.jetbrains.kotlin.analysis.api.types.KtType
5758
import org.jetbrains.kotlin.analysis.decompiler.stub.file.ClsKotlinBinaryClassCache
5859
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getFirResolveSession
5960
import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule
61+
import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade
62+
import org.jetbrains.kotlin.asJava.findFacadeClass
6063
import org.jetbrains.kotlin.asJava.toLightClass
6164
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
6265
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCliJavaFileManagerImpl
66+
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
6367
import org.jetbrains.kotlin.fir.types.isRaw
6468
import org.jetbrains.kotlin.fir.types.typeContext
6569
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightAccessorMethod
6670
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightSimpleMethod
6771
import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
72+
import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource
6873
import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
6974
import org.jetbrains.kotlin.load.kotlin.getOptimalModeForReturnType
7075
import org.jetbrains.kotlin.load.kotlin.getOptimalModeForValueParameter
@@ -534,12 +539,30 @@ class ResolverAAImpl(
534539
return newKSFiles.asSequence()
535540
}
536541

542+
private fun getOwnerJvmClassNameHelper(declaration: KSDeclaration): String? {
543+
return declaration.closestClassDeclaration()?.let {
544+
// Find classId for JvmClassName for member callables.
545+
(it as? KSClassDeclarationImpl)?.ktClassOrObjectSymbol?.classIdIfNonLocal
546+
?.asString()?.replace(".", "$")?.replace("/", ".")
547+
} ?: declaration.containingFile?.let {
548+
// Find containing file facade class name from file symbol
549+
(it as? KSFileImpl)?.let {
550+
((it.ktFileSymbol.psi as? KtFile)?.findFacadeClass() as? KtLightClassForFacade)
551+
?.facadeClassFqName?.asString()
552+
}
553+
// Down cast to fir symbol for library symbols as light facade class for libraries not available in AA.
554+
} ?: (
555+
((declaration as? AbstractKSDeclarationImpl)?.ktDeclarationSymbol as? KaFirSymbol<FirCallableSymbol<*>>)
556+
?.firSymbol?.containerSource as? JvmPackagePartSource
557+
)?.classId?.asFqNameString()
558+
}
559+
537560
override fun getOwnerJvmClassName(declaration: KSFunctionDeclaration): String? {
538-
TODO("Not yet implemented")
561+
return getOwnerJvmClassNameHelper(declaration)
539562
}
540563

541564
override fun getOwnerJvmClassName(declaration: KSPropertyDeclaration): String? {
542-
TODO("Not yet implemented")
565+
return getOwnerJvmClassNameHelper(declaration)
543566
}
544567

545568
override fun getPropertyDeclarationByName(name: KSName, includeTopLevel: Boolean): KSPropertyDeclaration? {

test-utils/src/test/kotlin/com/google/devtools/ksp/test/KSPAATest.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,6 @@ class KSPAATest : AbstractKSPAATest() {
579579
runTest("../test-utils/testData/api/throwList.kt")
580580
}
581581

582-
@Disabled
583582
@TestMetadata("topLevelMembers.kt")
584583
@Test
585584
fun testTopLevelMembers() {

0 commit comments

Comments
 (0)