Skip to content

Commit 505cd56

Browse files
committed
implement getOwnerJvmClassName
1 parent e1b7a89 commit 505cd56

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
@@ -578,7 +578,6 @@ class KSPAATest : AbstractKSPAATest() {
578578
runTest("../test-utils/testData/api/throwList.kt")
579579
}
580580

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

0 commit comments

Comments
 (0)