FIR IDE: introduce KtConstructorSymbol.ownerClassId

Will be needed for completion
This commit is contained in:
Ilya Kirillov
2020-07-10 12:11:12 +03:00
parent 4653cdf794
commit 6a6580dd97
2 changed files with 9 additions and 1 deletions
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.idea.frontend.api.symbols
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
sealed class KtFunctionLikeSymbol : KtCallableSymbol(), KtTypedSymbol, KtSymbolWithKind {
@@ -32,6 +33,7 @@ abstract class KtConstructorSymbol : KtFunctionLikeSymbol() {
abstract override val valueParameters: List<KtConstructorParameterSymbol>
abstract val isPrimary: Boolean
abstract val owner: KtClassOrObjectSymbol
abstract val ownerClassId: ClassId
abstract override fun createPointer(): KtSymbolPointer<KtConstructorSymbol>
}
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
import org.jetbrains.kotlin.idea.frontend.api.symbols.*
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
import org.jetbrains.kotlin.name.ClassId
internal class KtFirConstructorSymbol(
fir: FirConstructor,
@@ -39,9 +40,14 @@ internal class KtFirConstructorSymbol(
override val isPrimary: Boolean get() = withValidityAssertion { fir.isPrimary }
override val symbolKind: KtSymbolKind get() = KtSymbolKind.MEMBER
override val ownerClassId: ClassId
get() = withValidityAssertion {
fir.symbol.callableId.classId ?: error("ClassID should present for constructor")
}
override val owner: KtClassOrObjectSymbol by cached {
val session = fir.session
val classId = fir.symbol.callableId.classId ?: error("ClassID should present for constructor")
val classId = ownerClassId
val firClass = session.firSymbolProvider.getClassLikeSymbolByFqName(classId)?.fir
?: error("Class with id $classId id was not found")
check(firClass is FirRegularClass) { "Owner class for constructor should be FirRegularClass, but ${firClass::class} was met" }