[FIR] remove user code leaks from compiler.fir.resolve module, add more information to some errors
This commit is contained in:
committed by
Space Team
parent
df0662459b
commit
d43057e19a
@@ -37,6 +37,7 @@ import org.jetbrains.kotlin.fir.types.*
|
|||||||
import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef
|
import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
||||||
|
import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -48,6 +49,7 @@ import org.jetbrains.kotlin.types.SmartcastStability
|
|||||||
import org.jetbrains.kotlin.types.model.safeSubstitute
|
import org.jetbrains.kotlin.types.model.safeSubstitute
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||||
|
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
|
||||||
import kotlin.contracts.ExperimentalContracts
|
import kotlin.contracts.ExperimentalContracts
|
||||||
import kotlin.contracts.contract
|
import kotlin.contracts.contract
|
||||||
|
|
||||||
@@ -354,7 +356,9 @@ private fun BodyResolveComponents.typeFromSymbol(symbol: FirBasedSymbol<*>): Fir
|
|||||||
type = symbol.constructType(emptyArray(), isNullable = false)
|
type = symbol.constructType(emptyArray(), isNullable = false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> error("Failed to extract type from symbol: $symbol")
|
else -> errorWithAttachment("Failed to extract type from symbol: ${symbol::class.java}") {
|
||||||
|
withFirEntry("declaration", symbol.fir)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,10 @@ import org.jetbrains.kotlin.fir.declarations.builder.FirTypeParameterBuilder
|
|||||||
import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction
|
import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction
|
||||||
import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter
|
import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
import org.jetbrains.kotlin.fir.declarations.utils.isAbstract
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.utils.isActual
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.utils.isExpect
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.utils.visibility
|
||||||
import org.jetbrains.kotlin.fir.diagnostics.ConeIntermediateDiagnostic
|
import org.jetbrains.kotlin.fir.diagnostics.ConeIntermediateDiagnostic
|
||||||
import org.jetbrains.kotlin.fir.extensions.extensionService
|
import org.jetbrains.kotlin.fir.extensions.extensionService
|
||||||
import org.jetbrains.kotlin.fir.moduleData
|
import org.jetbrains.kotlin.fir.moduleData
|
||||||
@@ -41,6 +44,7 @@ import org.jetbrains.kotlin.name.CallableId
|
|||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds
|
import org.jetbrains.kotlin.name.StandardClassIds
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
|
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.unreachableBranch
|
import org.jetbrains.kotlin.utils.addToStdlib.unreachableBranch
|
||||||
|
|
||||||
@@ -401,7 +405,9 @@ fun FirSimpleFunction.isPublicInObject(checkOnlyName: Boolean): Boolean {
|
|||||||
valueParameters[1].hasTypeOf(StandardClassIds.Int, allowNullable = false)
|
valueParameters[1].hasTypeOf(StandardClassIds.Int, allowNullable = false)
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
else -> error("Unexpected method name: $name")
|
else -> errorWithAttachment("Unexpected method name") {
|
||||||
|
withEntry("methodName", name.asString())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-1
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.resolve.FirSamResolver
|
|||||||
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents
|
import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
|
import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds
|
import org.jetbrains.kotlin.name.StandardClassIds
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds.Byte
|
import org.jetbrains.kotlin.name.StandardClassIds.Byte
|
||||||
@@ -29,6 +30,7 @@ import org.jetbrains.kotlin.resolve.calls.results.*
|
|||||||
import org.jetbrains.kotlin.types.model.KotlinTypeMarker
|
import org.jetbrains.kotlin.types.model.KotlinTypeMarker
|
||||||
import org.jetbrains.kotlin.types.model.requireOrDescribe
|
import org.jetbrains.kotlin.types.model.requireOrDescribe
|
||||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||||
|
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
|
||||||
|
|
||||||
abstract class AbstractConeCallConflictResolver(
|
abstract class AbstractConeCallConflictResolver(
|
||||||
private val specificityComparator: TypeSpecificityComparator,
|
private val specificityComparator: TypeSpecificityComparator,
|
||||||
@@ -120,7 +122,9 @@ abstract class AbstractConeCallConflictResolver(
|
|||||||
is FirVariable -> createFlatSignature(call, declaration)
|
is FirVariable -> createFlatSignature(call, declaration)
|
||||||
is FirClass -> createFlatSignature(call, declaration)
|
is FirClass -> createFlatSignature(call, declaration)
|
||||||
is FirTypeAlias -> createFlatSignature(call, declaration)
|
is FirTypeAlias -> createFlatSignature(call, declaration)
|
||||||
else -> error("Not supported: $declaration")
|
else -> errorWithAttachment("Not supported: ${declaration::class.java}") {
|
||||||
|
withFirEntry("declaration", declaration)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+8
-1
@@ -28,6 +28,8 @@ import org.jetbrains.kotlin.fir.resolve.scope
|
|||||||
import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator
|
import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
|
import org.jetbrains.kotlin.fir.utils.exceptions.withConeTypeEntry
|
||||||
|
import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds
|
import org.jetbrains.kotlin.name.StandardClassIds
|
||||||
@@ -36,6 +38,7 @@ import org.jetbrains.kotlin.resolve.calls.inference.runTransaction
|
|||||||
import org.jetbrains.kotlin.resolve.calls.tower.isSuccess
|
import org.jetbrains.kotlin.resolve.calls.tower.isSuccess
|
||||||
import org.jetbrains.kotlin.types.expressions.CoercionStrategy
|
import org.jetbrains.kotlin.types.expressions.CoercionStrategy
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.shouldNotBeCalled
|
import org.jetbrains.kotlin.utils.addToStdlib.shouldNotBeCalled
|
||||||
|
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
|
||||||
|
|
||||||
|
|
||||||
internal object CheckCallableReferenceExpectedType : CheckerStage() {
|
internal object CheckCallableReferenceExpectedType : CheckerStage() {
|
||||||
@@ -309,7 +312,11 @@ private fun varargParameterTypeByExpectedParameter(
|
|||||||
varargMappingState: VarargMappingState,
|
varargMappingState: VarargMappingState,
|
||||||
): Pair<ConeKotlinType?, VarargMappingState> {
|
): Pair<ConeKotlinType?, VarargMappingState> {
|
||||||
val elementType = substitutedParameter.returnTypeRef.coneType.arrayElementType()
|
val elementType = substitutedParameter.returnTypeRef.coneType.arrayElementType()
|
||||||
?: error("Vararg parameter $substitutedParameter does not have vararg type")
|
?: errorWithAttachment("Vararg parameter ${substitutedParameter::class.java} does not have vararg type") {
|
||||||
|
withConeTypeEntry("expectedParameterType", expectedParameterType)
|
||||||
|
withFirEntry("substitutedParameter", substitutedParameter)
|
||||||
|
withEntry("varargMappingState", varargMappingState.toString())
|
||||||
|
}
|
||||||
|
|
||||||
return when (varargMappingState) {
|
return when (varargMappingState) {
|
||||||
VarargMappingState.UNMAPPED -> {
|
VarargMappingState.UNMAPPED -> {
|
||||||
|
|||||||
+5
-2
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.descriptors.Modality
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.modality
|
import org.jetbrains.kotlin.fir.declarations.utils.modality
|
||||||
import org.jetbrains.kotlin.fir.render
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents
|
import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.ConeTypeParameterBasedTypeVariable
|
import org.jetbrains.kotlin.fir.resolve.inference.ConeTypeParameterBasedTypeVariable
|
||||||
import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents
|
import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents
|
||||||
@@ -22,6 +21,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
|||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.types.coneType
|
import org.jetbrains.kotlin.fir.types.coneType
|
||||||
import org.jetbrains.kotlin.fir.unwrapSubstitutionOverrides
|
import org.jetbrains.kotlin.fir.unwrapSubstitutionOverrides
|
||||||
|
import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry
|
||||||
import org.jetbrains.kotlin.resolve.calls.inference.model.NewConstraintSystemImpl
|
import org.jetbrains.kotlin.resolve.calls.inference.model.NewConstraintSystemImpl
|
||||||
import org.jetbrains.kotlin.resolve.calls.inference.model.SimpleConstraintSystemConstraintPosition
|
import org.jetbrains.kotlin.resolve.calls.inference.model.SimpleConstraintSystemConstraintPosition
|
||||||
import org.jetbrains.kotlin.resolve.calls.results.FlatSignature
|
import org.jetbrains.kotlin.resolve.calls.results.FlatSignature
|
||||||
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.types.model.KotlinTypeMarker
|
|||||||
import org.jetbrains.kotlin.types.model.TypeParameterMarker
|
import org.jetbrains.kotlin.types.model.TypeParameterMarker
|
||||||
import org.jetbrains.kotlin.types.model.TypeSubstitutorMarker
|
import org.jetbrains.kotlin.types.model.TypeSubstitutorMarker
|
||||||
import org.jetbrains.kotlin.types.model.TypeSystemInferenceExtensionContext
|
import org.jetbrains.kotlin.types.model.TypeSystemInferenceExtensionContext
|
||||||
|
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
|
||||||
|
|
||||||
typealias CandidateSignature = FlatSignature<Candidate>
|
typealias CandidateSignature = FlatSignature<Candidate>
|
||||||
|
|
||||||
@@ -337,7 +338,9 @@ class ConeSimpleConstraintSystemImpl(val system: NewConstraintSystemImpl, val se
|
|||||||
for (upperBound in typeParameter.symbol.resolvedBounds) {
|
for (upperBound in typeParameter.symbol.resolvedBounds) {
|
||||||
addSubtypeConstraint(
|
addSubtypeConstraint(
|
||||||
substitutionMap[typeParameter.typeParameterSymbol]
|
substitutionMap[typeParameter.typeParameterSymbol]
|
||||||
?: error("No ${typeParameter.symbol.fir.render()} in substitution map"),
|
?: errorWithAttachment("No ${typeParameter.symbol.fir::class.java} in substitution map") {
|
||||||
|
withFirEntry("typeParameter", typeParameter.symbol.fir)
|
||||||
|
},
|
||||||
substitutor.substituteOrSelf(upperBound.coneType)
|
substitutor.substituteOrSelf(upperBound.coneType)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-1
@@ -23,9 +23,11 @@ import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
|||||||
import org.jetbrains.kotlin.fir.scopes.processOverriddenFunctions
|
import org.jetbrains.kotlin.fir.scopes.processOverriddenFunctions
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.ForbiddenNamedArgumentsTarget
|
import org.jetbrains.kotlin.resolve.ForbiddenNamedArgumentsTarget
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||||
|
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
|
||||||
import kotlin.collections.component1
|
import kotlin.collections.component1
|
||||||
import kotlin.collections.component2
|
import kotlin.collections.component2
|
||||||
import kotlin.collections.set
|
import kotlin.collections.set
|
||||||
@@ -293,7 +295,14 @@ private class FirCallArgumentsProcessor(
|
|||||||
for ((parameter, resolvedArgument) in result) {
|
for ((parameter, resolvedArgument) in result) {
|
||||||
if (!parameter.isVararg) {
|
if (!parameter.isVararg) {
|
||||||
if (resolvedArgument !is ResolvedCallArgument.SimpleArgument) {
|
if (resolvedArgument !is ResolvedCallArgument.SimpleArgument) {
|
||||||
error("Incorrect resolved argument for parameter $parameter :$resolvedArgument")
|
errorWithAttachment("Incorrect resolved argument for parameter ${parameter::class.java}: ${resolvedArgument::class.java}") {
|
||||||
|
withFirEntry("parameter", parameter)
|
||||||
|
withEntryGroup("arguments") {
|
||||||
|
for ((index, argument) in resolvedArgument.arguments.withIndex()) {
|
||||||
|
withFirEntry("argument$index", argument)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (resolvedArgument.callArgument.isSpread) {
|
} else if (resolvedArgument.callArgument.isSpread) {
|
||||||
addDiagnostic(NonVarargSpread(resolvedArgument.callArgument))
|
addDiagnostic(NonVarargSpread(resolvedArgument.callArgument))
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-2
@@ -9,7 +9,10 @@ import org.jetbrains.kotlin.KtFakeSourceElementKind
|
|||||||
import org.jetbrains.kotlin.KtSourceElement
|
import org.jetbrains.kotlin.KtSourceElement
|
||||||
import org.jetbrains.kotlin.fakeElement
|
import org.jetbrains.kotlin.fakeElement
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.ContextReceiverGroup
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isInner
|
import org.jetbrains.kotlin.fir.declarations.utils.isInner
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isStatic
|
import org.jetbrains.kotlin.fir.declarations.utils.isStatic
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
@@ -26,9 +29,11 @@ import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
|||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
|
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
|
import org.jetbrains.kotlin.fir.utils.exceptions.withConeTypeEntry
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds.Annotations.HidesMembers
|
import org.jetbrains.kotlin.name.StandardClassIds.Annotations.HidesMembers
|
||||||
import org.jetbrains.kotlin.types.AbstractTypeChecker
|
import org.jetbrains.kotlin.types.AbstractTypeChecker
|
||||||
import org.jetbrains.kotlin.utils.SmartList
|
import org.jetbrains.kotlin.utils.SmartList
|
||||||
|
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
|
||||||
|
|
||||||
enum class ProcessResult {
|
enum class ProcessResult {
|
||||||
FOUND, SCOPE_EMPTY;
|
FOUND, SCOPE_EMPTY;
|
||||||
@@ -133,7 +138,9 @@ class MemberScopeTowerLevel(
|
|||||||
scopeSession,
|
scopeSession,
|
||||||
FakeOverrideTypeCalculator.DoNothing,
|
FakeOverrideTypeCalculator.DoNothing,
|
||||||
requiredMembersPhase = FirResolvePhase.STATUS,
|
requiredMembersPhase = FirResolvePhase.STATUS,
|
||||||
) ?: error("No scope for flexible type scope, while it's not null for $dispatchReceiverType")
|
) ?: errorWithAttachment("No scope for flexible type scope, while it's not null") {
|
||||||
|
withConeTypeEntry("dispatchReceiverType", dispatchReceiverType)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
typeForSyntheticScope = dispatchReceiverType
|
typeForSyntheticScope = dispatchReceiverType
|
||||||
useSiteForSyntheticScope = scope
|
useSiteForSyntheticScope = scope
|
||||||
|
|||||||
+6
-6
@@ -17,17 +17,15 @@ import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
|||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.LocalClassesNavigationInfo
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.LocalClassesNavigationInfo
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirCompositeScope
|
import org.jetbrains.kotlin.fir.scopes.FirCompositeScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousObjectSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
|
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
|
||||||
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhaseWithCallableMembers
|
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhaseWithCallableMembers
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.coneType
|
import org.jetbrains.kotlin.fir.types.coneType
|
||||||
import org.jetbrains.kotlin.fir.types.toSymbol
|
import org.jetbrains.kotlin.fir.types.toSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry
|
||||||
import org.jetbrains.kotlin.fir.visitors.transformSingle
|
import org.jetbrains.kotlin.fir.visitors.transformSingle
|
||||||
|
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
|
||||||
import org.jetbrains.kotlin.util.PrivateForInline
|
import org.jetbrains.kotlin.util.PrivateForInline
|
||||||
|
|
||||||
class FirStatusResolveProcessor(
|
class FirStatusResolveProcessor(
|
||||||
@@ -286,7 +284,9 @@ abstract class AbstractFirStatusResolveTransformer(
|
|||||||
is FirRegularClass -> declaration.declarations
|
is FirRegularClass -> declaration.declarations
|
||||||
is FirAnonymousObject -> declaration.declarations
|
is FirAnonymousObject -> declaration.declarations
|
||||||
is FirFile -> declaration.declarations
|
is FirFile -> declaration.declarations
|
||||||
else -> error("Not supported declaration ${declaration::class.simpleName}")
|
else -> errorWithAttachment("Unsupported declaration: ${declaration::class.java}") {
|
||||||
|
withFirEntry("declaration", declaration)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (declaration.needResolveMembers()) {
|
if (declaration.needResolveMembers()) {
|
||||||
|
|||||||
+5
-2
@@ -18,15 +18,16 @@ import org.jetbrains.kotlin.fir.declarations.utils.visibility
|
|||||||
import org.jetbrains.kotlin.fir.extensions.FirStatusTransformerExtension
|
import org.jetbrains.kotlin.fir.extensions.FirStatusTransformerExtension
|
||||||
import org.jetbrains.kotlin.fir.extensions.extensionService
|
import org.jetbrains.kotlin.fir.extensions.extensionService
|
||||||
import org.jetbrains.kotlin.fir.extensions.statusTransformerExtensions
|
import org.jetbrains.kotlin.fir.extensions.statusTransformerExtensions
|
||||||
import org.jetbrains.kotlin.fir.render
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
||||||
import org.jetbrains.kotlin.fir.toEffectiveVisibility
|
import org.jetbrains.kotlin.fir.toEffectiveVisibility
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
|
import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry
|
||||||
import org.jetbrains.kotlin.fir.visibilityChecker
|
import org.jetbrains.kotlin.fir.visibilityChecker
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
|
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
|
||||||
|
|
||||||
class FirStatusResolver(
|
class FirStatusResolver(
|
||||||
val session: FirSession,
|
val session: FirSession,
|
||||||
@@ -77,7 +78,9 @@ class FirStatusResolver(
|
|||||||
is FirConstructor -> resolveStatus(declaration, containingClass, isLocal)
|
is FirConstructor -> resolveStatus(declaration, containingClass, isLocal)
|
||||||
is FirField -> resolveStatus(declaration, containingClass, isLocal)
|
is FirField -> resolveStatus(declaration, containingClass, isLocal)
|
||||||
is FirBackingField -> resolveStatus(declaration, containingClass, isLocal)
|
is FirBackingField -> resolveStatus(declaration, containingClass, isLocal)
|
||||||
else -> error("Unsupported declaration type: ${declaration.render()}")
|
else -> errorWithAttachment("Unsupported declaration type: ${declaration::class.java}") {
|
||||||
|
withFirEntry("declaration", declaration)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+10
-5
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.fir.resolve.transformers.body.resolve
|
package org.jetbrains.kotlin.fir.resolve.transformers.body.resolve
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirCallResolver
|
import org.jetbrains.kotlin.fir.FirCallResolver
|
||||||
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.util.PrivateForInline
|
import org.jetbrains.kotlin.util.PrivateForInline
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
@@ -24,8 +25,10 @@ import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
|||||||
import org.jetbrains.kotlin.fir.resolve.transformers.*
|
import org.jetbrains.kotlin.fir.resolve.transformers.*
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirLocalScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirLocalScope
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImplWithoutSource
|
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
|
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImplWithoutSource
|
||||||
|
import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry
|
||||||
|
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
|
||||||
|
|
||||||
abstract class FirAbstractBodyResolveTransformer(phase: FirResolvePhase) : FirAbstractPhaseTransformer<ResolutionMode>(phase) {
|
abstract class FirAbstractBodyResolveTransformer(phase: FirResolvePhase) : FirAbstractPhaseTransformer<ResolutionMode>(phase) {
|
||||||
abstract val context: BodyResolveContext
|
abstract val context: BodyResolveContext
|
||||||
@@ -54,18 +57,20 @@ abstract class FirAbstractBodyResolveTransformer(phase: FirResolvePhase) : FirAb
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun transformLazyExpression(lazyExpression: FirLazyExpression, data: ResolutionMode): FirStatement {
|
override fun transformLazyExpression(lazyExpression: FirLazyExpression, data: ResolutionMode): FirStatement {
|
||||||
suppressOrThrowError("FirLazyExpression should be calculated before accessing")
|
suppressOrThrowError("FirLazyExpression should be calculated before accessing", lazyExpression)
|
||||||
return lazyExpression
|
return lazyExpression
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformLazyBlock(lazyBlock: FirLazyBlock, data: ResolutionMode): FirStatement {
|
override fun transformLazyBlock(lazyBlock: FirLazyBlock, data: ResolutionMode): FirStatement {
|
||||||
suppressOrThrowError("FirLazyBlock should be calculated before accessing")
|
suppressOrThrowError("FirLazyBlock should be calculated before accessing", lazyBlock)
|
||||||
return lazyBlock
|
return lazyBlock
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun suppressOrThrowError(message: String) {
|
private fun suppressOrThrowError(message: String, element: FirElement) {
|
||||||
if (System.getProperty("kotlin.suppress.lazy.expression.access").toBoolean()) return
|
if (System.getProperty("kotlin.suppress.lazy.expression.access").toBoolean()) return
|
||||||
error(message)
|
errorWithAttachment(message) {
|
||||||
|
withFirEntry("firElement", element)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected inline val localScopes: List<FirLocalScope> get() = components.localScopes
|
protected inline val localScopes: List<FirLocalScope> get() = components.localScopes
|
||||||
|
|||||||
+8
-2
@@ -31,8 +31,10 @@ import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclaration
|
|||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirExpressionsResolveTransformer
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirExpressionsResolveTransformer
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImplWithoutSource
|
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImplWithoutSource
|
||||||
|
import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry
|
||||||
import org.jetbrains.kotlin.fir.visitors.transformSingle
|
import org.jetbrains.kotlin.fir.visitors.transformSingle
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
|
||||||
|
|
||||||
abstract class FirAbstractContractResolveTransformerDispatcher(
|
abstract class FirAbstractContractResolveTransformerDispatcher(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
@@ -313,13 +315,17 @@ abstract class FirAbstractContractResolveTransformerDispatcher(
|
|||||||
private val FirContractDescriptionOwner.valueParameters: List<FirValueParameter>
|
private val FirContractDescriptionOwner.valueParameters: List<FirValueParameter>
|
||||||
get() = when (this) {
|
get() = when (this) {
|
||||||
is FirFunction -> valueParameters
|
is FirFunction -> valueParameters
|
||||||
else -> error()
|
else -> errorWithAttachment("Expected ${FirFunction::class.java} but ${this::class.java} found") {
|
||||||
|
withFirEntry("foundElement", this@valueParameters)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val FirContractDescriptionOwner.body: FirBlock
|
private val FirContractDescriptionOwner.body: FirBlock
|
||||||
get() = when (this) {
|
get() = when (this) {
|
||||||
is FirFunction -> body!!
|
is FirFunction -> body!!
|
||||||
else -> error()
|
else -> errorWithAttachment("Expected ${FirFunction::class.java} but ${this::class.java} found") {
|
||||||
|
withFirEntry("foundElement", this@body)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirContractDescriptionOwner.error(): Nothing = throw IllegalStateException("${this::class} can not be a contract owner")
|
private fun FirContractDescriptionOwner.error(): Nothing = throw IllegalStateException("${this::class} can not be a contract owner")
|
||||||
|
|||||||
Reference in New Issue
Block a user