[KAPT] KT-65006 fix issues when using Kapt+Serialization

This MR fixes two independent issues causing build failures when using Kapt in combination with the Kotlin serialization plugin (and, very likely, with other plugins as well):
Kapt applied compiler plugins twice, causing errors similar to the one described in KT-65006
Kapt failed to generate @Metadata annotations for plugin-generated companion objects because the corresponding SLC missed containingFile needed for generation of method and class signatures

Merge-request: KT-MR-13970
Merged-by: Pavel Mikhailovskii <Pavel.Mikhailovskii@jetbrains.com>
This commit is contained in:
strangepleasures
2024-01-23 20:35:32 +00:00
committed by Space Team
parent 8e4dc1fc31
commit 85c9c57da4
8 changed files with 66 additions and 55 deletions
@@ -17,6 +17,7 @@ import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.symbols.KtClassKind
import org.jetbrains.kotlin.analysis.api.symbols.KtClassOrObjectSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.api.symbols.sourcePsiSafe
@@ -164,15 +165,26 @@ abstract class SymbolLightClassForClassLike<SType : KtClassOrObjectSymbol> prote
override fun getSupers(): Array<PsiClass> = PsiClassImplUtil.getSupers(this)
override fun getSuperTypes(): Array<PsiClassType> = PsiClassImplUtil.getSuperTypes(this)
override fun getContainingClass(): PsiClass? {
private val _containingClass: PsiClass? by lazyPub {
val containingBody = classOrObjectDeclaration?.parent
return when (val parent = containingBody?.parent) {
when (val parent = containingBody?.parent) {
is KtClassOrObject -> parent.toLightClass()
is KtScript -> parent.toLightClass()
null -> withClassOrObjectSymbol { s ->
(s.getContainingSymbol() as? KtNamedClassOrObjectSymbol)?.let { createLightClassNoCache(it, ktModule, manager) }
}
else -> null
}
}
override fun getContainingClass(): PsiClass? = _containingClass
private val _containingFile: PsiFile? by lazyPub {
super.getContainingFile() ?: containingClass?.containingFile
}
override fun getContainingFile(): PsiFile? = _containingFile
abstract override fun getParent(): PsiElement?
override fun getScope(): PsiElement? = parent