[FIR] remove user code leaks from compiler.fir.semantics module, add more information to some errors

This commit is contained in:
Ilya Kirillov
2023-07-04 12:32:40 +02:00
committed by Space Team
parent b5394d79b9
commit df0662459b
2 changed files with 11 additions and 4 deletions
@@ -10,6 +10,8 @@ import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
import org.jetbrains.kotlin.fir.utils.exceptions.withFirLookupTagEntry
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
fun Visibility.toEffectiveVisibility( fun Visibility.toEffectiveVisibility(
ownerSymbol: FirClassLikeSymbol<*>?, ownerSymbol: FirClassLikeSymbol<*>?,
@@ -35,6 +37,8 @@ fun Visibility.toEffectiveVisibility(
} }
Visibilities.Public -> EffectiveVisibility.Public Visibilities.Public -> EffectiveVisibility.Public
Visibilities.Local -> EffectiveVisibility.Local Visibilities.Local -> EffectiveVisibility.Local
else -> error("Unknown visibility: $this") else -> errorWithAttachment("Unknown visibility: $this") {
withFirLookupTagEntry("owner", owner)
}
} }
} }
@@ -9,7 +9,6 @@ import kotlinx.collections.immutable.PersistentList
import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toPersistentList import kotlinx.collections.immutable.toPersistentList
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.labelName import org.jetbrains.kotlin.fir.labelName
import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.resolve.calls.* import org.jetbrains.kotlin.fir.resolve.calls.*
@@ -23,8 +22,10 @@ import org.jetbrains.kotlin.fir.types.ConeErrorType
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.ConeStubType import org.jetbrains.kotlin.fir.types.ConeStubType
import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.fir.types.coneType
import org.jetbrains.kotlin.fir.utils.exceptions.withConeTypeEntry
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.addIfNotNull import org.jetbrains.kotlin.utils.addIfNotNull
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
fun SessionHolder.collectImplicitReceivers( fun SessionHolder.collectImplicitReceivers(
type: ConeKotlinType?, type: ConeKotlinType?,
@@ -281,10 +282,12 @@ class FirTowerDataElement(
private fun ImplicitReceiverValue<*>.getImplicitScope( private fun ImplicitReceiverValue<*>.getImplicitScope(
processTypeScope: FirTypeScope.(ConeKotlinType) -> FirTypeScope, processTypeScope: FirTypeScope.(ConeKotlinType) -> FirTypeScope,
): FirScope { ): FirScope {
return when (type.fullyExpandedType(useSiteSession)) { return when (val type = type.fullyExpandedType(useSiteSession)) {
is ConeErrorType, is ConeErrorType,
is ConeStubType -> FirTypeScope.Empty is ConeStubType -> FirTypeScope.Empty
else -> implicitScope?.processTypeScope(type) ?: error("Scope for type ${type::class.simpleName} is null.") else -> implicitScope?.processTypeScope(type) ?: errorWithAttachment("Scope for type ${type::class.simpleName} is null") {
withConeTypeEntry("type", type)
}
} }
} }
} }