[FIR] Squash AbstractFirBasedSymbol with FirBasedSymbol

This commit is contained in:
Dmitriy Novozhilov
2021-06-11 12:14:24 +03:00
parent 823cbc59b7
commit 39cd1c8504
84 changed files with 294 additions and 313 deletions
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.PrivateForInline
import org.jetbrains.kotlin.fir.checkers.generator.diagnostics.model.* import org.jetbrains.kotlin.fir.checkers.generator.diagnostics.model.*
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol 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.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.lexer.KtKeywordToken import org.jetbrains.kotlin.lexer.KtKeywordToken
@@ -405,13 +405,13 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
parameter<Collection<Symbol>>("candidates") parameter<Collection<Symbol>>("candidates")
} }
val ITERATOR_AMBIGUITY by error<PsiElement>(PositioningStrategy.REFERENCE_BY_QUALIFIED) { val ITERATOR_AMBIGUITY by error<PsiElement>(PositioningStrategy.REFERENCE_BY_QUALIFIED) {
parameter<Collection<AbstractFirBasedSymbol<*>>>("candidates") parameter<Collection<FirBasedSymbol<*>>>("candidates")
} }
val HAS_NEXT_FUNCTION_AMBIGUITY by error<PsiElement>(PositioningStrategy.REFERENCE_BY_QUALIFIED) { val HAS_NEXT_FUNCTION_AMBIGUITY by error<PsiElement>(PositioningStrategy.REFERENCE_BY_QUALIFIED) {
parameter<Collection<AbstractFirBasedSymbol<*>>>("candidates") parameter<Collection<FirBasedSymbol<*>>>("candidates")
} }
val NEXT_AMBIGUITY by error<PsiElement>(PositioningStrategy.REFERENCE_BY_QUALIFIED) { val NEXT_AMBIGUITY by error<PsiElement>(PositioningStrategy.REFERENCE_BY_QUALIFIED) {
parameter<Collection<AbstractFirBasedSymbol<*>>>("candidates") parameter<Collection<FirBasedSymbol<*>>>("candidates")
} }
} }
@@ -893,10 +893,10 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
val HAS_NEXT_MISSING by error<KtExpression>() val HAS_NEXT_MISSING by error<KtExpression>()
val NEXT_MISSING by error<KtExpression>() val NEXT_MISSING by error<KtExpression>()
val HAS_NEXT_FUNCTION_NONE_APPLICABLE by error<KtExpression> { val HAS_NEXT_FUNCTION_NONE_APPLICABLE by error<KtExpression> {
parameter<Collection<AbstractFirBasedSymbol<*>>>("candidates") parameter<Collection<FirBasedSymbol<*>>>("candidates")
} }
val NEXT_NONE_APPLICABLE by error<KtExpression> { val NEXT_NONE_APPLICABLE by error<KtExpression> {
parameter<Collection<AbstractFirBasedSymbol<*>>>("candidates") parameter<Collection<FirBasedSymbol<*>>>("candidates")
} }
val DELEGATE_SPECIAL_FUNCTION_MISSING by error<KtExpression> { val DELEGATE_SPECIAL_FUNCTION_MISSING by error<KtExpression> {
parameter<String>("expectedFunctionSignature") parameter<String>("expectedFunctionSignature")
@@ -905,11 +905,11 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
} }
val DELEGATE_SPECIAL_FUNCTION_AMBIGUITY by error<KtExpression> { val DELEGATE_SPECIAL_FUNCTION_AMBIGUITY by error<KtExpression> {
parameter<String>("expectedFunctionSignature") parameter<String>("expectedFunctionSignature")
parameter<Collection<AbstractFirBasedSymbol<*>>>("candidates") parameter<Collection<FirBasedSymbol<*>>>("candidates")
} }
val DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE by error<KtExpression> { val DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE by error<KtExpression> {
parameter<String>("expectedFunctionSignature") parameter<String>("expectedFunctionSignature")
parameter<Collection<AbstractFirBasedSymbol<*>>>("candidates") parameter<Collection<FirBasedSymbol<*>>>("candidates")
} }
val DELEGATE_SPECIAL_FUNCTION_RETURN_TYPE_MISMATCH by error<KtExpression> { val DELEGATE_SPECIAL_FUNCTION_RETURN_TYPE_MISMATCH by error<KtExpression> {
parameter<String>("delegateFunction") parameter<String>("delegateFunction")
@@ -1048,4 +1048,4 @@ private inline fun <reified P : PsiElement> AbstractDiagnosticGroup.exposedVisib
return warning<P>(positioningStrategy, exposedVisibilityDiagnosticInit) return warning<P>(positioningStrategy, exposedVisibilityDiagnosticInit)
} }
typealias Symbol = AbstractFirBasedSymbol<*> typealias Symbol = FirBasedSymbol<*>
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
@@ -108,7 +108,7 @@ object FirErrors {
val VAL_OR_VAR_ON_SECONDARY_CONSTRUCTOR_PARAMETER by warning1<KtParameter, KtKeywordToken>(SourceElementPositioningStrategies.VAL_OR_VAR_NODE) val VAL_OR_VAR_ON_SECONDARY_CONSTRUCTOR_PARAMETER by warning1<KtParameter, KtKeywordToken>(SourceElementPositioningStrategies.VAL_OR_VAR_NODE)
// Unresolved // Unresolved
val INVISIBLE_REFERENCE by error1<PsiElement, AbstractFirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED) val INVISIBLE_REFERENCE by error1<PsiElement, FirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val UNRESOLVED_REFERENCE by error1<PsiElement, String>(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED) val UNRESOLVED_REFERENCE by error1<PsiElement, String>(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED)
val UNRESOLVED_LABEL by error0<PsiElement>() val UNRESOLVED_LABEL by error0<PsiElement>()
val DESERIALIZATION_ERROR by error0<PsiElement>() val DESERIALIZATION_ERROR by error0<PsiElement>()
@@ -257,8 +257,8 @@ object FirErrors {
val VALUE_CLASS_CANNOT_BE_CLONEABLE by error0<KtDeclaration>(SourceElementPositioningStrategies.INLINE_OR_VALUE_MODIFIER) val VALUE_CLASS_CANNOT_BE_CLONEABLE by error0<KtDeclaration>(SourceElementPositioningStrategies.INLINE_OR_VALUE_MODIFIER)
// Applicability // Applicability
val NONE_APPLICABLE by error1<PsiElement, Collection<AbstractFirBasedSymbol<*>>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED) val NONE_APPLICABLE by error1<PsiElement, Collection<FirBasedSymbol<*>>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val INAPPLICABLE_CANDIDATE by error1<PsiElement, AbstractFirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED) val INAPPLICABLE_CANDIDATE by error1<PsiElement, FirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val TYPE_MISMATCH by error2<PsiElement, ConeKotlinType, ConeKotlinType>() val TYPE_MISMATCH by error2<PsiElement, ConeKotlinType, ConeKotlinType>()
val THROWABLE_TYPE_MISMATCH by error1<PsiElement, ConeKotlinType>() val THROWABLE_TYPE_MISMATCH by error1<PsiElement, ConeKotlinType>()
val CONDITION_TYPE_MISMATCH by error1<PsiElement, ConeKotlinType>() val CONDITION_TYPE_MISMATCH by error1<PsiElement, ConeKotlinType>()
@@ -278,11 +278,11 @@ object FirErrors {
val NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER by error1<KtElement, String>() val NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER by error1<KtElement, String>()
// Ambiguity // Ambiguity
val OVERLOAD_RESOLUTION_AMBIGUITY by error1<PsiElement, Collection<AbstractFirBasedSymbol<*>>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED) val OVERLOAD_RESOLUTION_AMBIGUITY by error1<PsiElement, Collection<FirBasedSymbol<*>>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val ASSIGN_OPERATOR_AMBIGUITY by error1<PsiElement, Collection<AbstractFirBasedSymbol<*>>>() val ASSIGN_OPERATOR_AMBIGUITY by error1<PsiElement, Collection<FirBasedSymbol<*>>>()
val ITERATOR_AMBIGUITY by error1<PsiElement, Collection<AbstractFirBasedSymbol<*>>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED) val ITERATOR_AMBIGUITY by error1<PsiElement, Collection<FirBasedSymbol<*>>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val HAS_NEXT_FUNCTION_AMBIGUITY by error1<PsiElement, Collection<AbstractFirBasedSymbol<*>>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED) val HAS_NEXT_FUNCTION_AMBIGUITY by error1<PsiElement, Collection<FirBasedSymbol<*>>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val NEXT_AMBIGUITY by error1<PsiElement, Collection<AbstractFirBasedSymbol<*>>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED) val NEXT_AMBIGUITY by error1<PsiElement, Collection<FirBasedSymbol<*>>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
// Types & type parameters // Types & type parameters
val RECURSION_IN_IMPLICIT_TYPES by error0<PsiElement>() val RECURSION_IN_IMPLICIT_TYPES by error0<PsiElement>()
@@ -360,8 +360,8 @@ object FirErrors {
// Redeclarations // Redeclarations
val MANY_COMPANION_OBJECTS by error0<KtObjectDeclaration>(SourceElementPositioningStrategies.COMPANION_OBJECT) val MANY_COMPANION_OBJECTS by error0<KtObjectDeclaration>(SourceElementPositioningStrategies.COMPANION_OBJECT)
val CONFLICTING_OVERLOADS by error1<PsiElement, Collection<AbstractFirBasedSymbol<*>>>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) val CONFLICTING_OVERLOADS by error1<PsiElement, Collection<FirBasedSymbol<*>>>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
val REDECLARATION by error1<PsiElement, Collection<AbstractFirBasedSymbol<*>>>() val REDECLARATION by error1<PsiElement, Collection<FirBasedSymbol<*>>>()
val METHOD_OF_ANY_IMPLEMENTED_IN_INTERFACE by error0<PsiElement>() val METHOD_OF_ANY_IMPLEMENTED_IN_INTERFACE by error0<PsiElement>()
// Invalid local declarations // Invalid local declarations
@@ -435,7 +435,7 @@ object FirErrors {
// Destructuring declaration // Destructuring declaration
val INITIALIZER_REQUIRED_FOR_DESTRUCTURING_DECLARATION by error0<KtDestructuringDeclaration>() val INITIALIZER_REQUIRED_FOR_DESTRUCTURING_DECLARATION by error0<KtDestructuringDeclaration>()
val COMPONENT_FUNCTION_MISSING by error2<PsiElement, Name, ConeKotlinType>() val COMPONENT_FUNCTION_MISSING by error2<PsiElement, Name, ConeKotlinType>()
val COMPONENT_FUNCTION_AMBIGUITY by error2<PsiElement, Name, Collection<AbstractFirBasedSymbol<*>>>() val COMPONENT_FUNCTION_AMBIGUITY by error2<PsiElement, Name, Collection<FirBasedSymbol<*>>>()
val COMPONENT_FUNCTION_ON_NULLABLE by error1<KtExpression, Name>() val COMPONENT_FUNCTION_ON_NULLABLE by error1<KtExpression, Name>()
val COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH by error3<KtExpression, Name, ConeKotlinType, ConeKotlinType>() val COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH by error3<KtExpression, Name, ConeKotlinType, ConeKotlinType>()
@@ -449,8 +449,8 @@ object FirErrors {
val VAL_REASSIGNMENT_VIA_BACKING_FIELD_ERROR by error1<KtExpression, FirPropertySymbol>() val VAL_REASSIGNMENT_VIA_BACKING_FIELD_ERROR by error1<KtExpression, FirPropertySymbol>()
val CAPTURED_VAL_INITIALIZATION by error1<KtExpression, FirPropertySymbol>() val CAPTURED_VAL_INITIALIZATION by error1<KtExpression, FirPropertySymbol>()
val CAPTURED_MEMBER_VAL_INITIALIZATION by error1<KtExpression, FirPropertySymbol>() val CAPTURED_MEMBER_VAL_INITIALIZATION by error1<KtExpression, FirPropertySymbol>()
val WRONG_INVOCATION_KIND by warning3<PsiElement, AbstractFirBasedSymbol<*>, EventOccurrencesRange, EventOccurrencesRange>() val WRONG_INVOCATION_KIND by warning3<PsiElement, FirBasedSymbol<*>, EventOccurrencesRange, EventOccurrencesRange>()
val LEAKED_IN_PLACE_LAMBDA by error1<PsiElement, AbstractFirBasedSymbol<*>>() val LEAKED_IN_PLACE_LAMBDA by error1<PsiElement, FirBasedSymbol<*>>()
val WRONG_IMPLIES_CONDITION by warning0<PsiElement>() val WRONG_IMPLIES_CONDITION by warning0<PsiElement>()
// Nullability // Nullability
@@ -491,11 +491,11 @@ object FirErrors {
val ITERATOR_MISSING by error0<KtExpression>() val ITERATOR_MISSING by error0<KtExpression>()
val HAS_NEXT_MISSING by error0<KtExpression>() val HAS_NEXT_MISSING by error0<KtExpression>()
val NEXT_MISSING by error0<KtExpression>() val NEXT_MISSING by error0<KtExpression>()
val HAS_NEXT_FUNCTION_NONE_APPLICABLE by error1<KtExpression, Collection<AbstractFirBasedSymbol<*>>>() val HAS_NEXT_FUNCTION_NONE_APPLICABLE by error1<KtExpression, Collection<FirBasedSymbol<*>>>()
val NEXT_NONE_APPLICABLE by error1<KtExpression, Collection<AbstractFirBasedSymbol<*>>>() val NEXT_NONE_APPLICABLE by error1<KtExpression, Collection<FirBasedSymbol<*>>>()
val DELEGATE_SPECIAL_FUNCTION_MISSING by error3<KtExpression, String, ConeKotlinType, String>() val DELEGATE_SPECIAL_FUNCTION_MISSING by error3<KtExpression, String, ConeKotlinType, String>()
val DELEGATE_SPECIAL_FUNCTION_AMBIGUITY by error2<KtExpression, String, Collection<AbstractFirBasedSymbol<*>>>() val DELEGATE_SPECIAL_FUNCTION_AMBIGUITY by error2<KtExpression, String, Collection<FirBasedSymbol<*>>>()
val DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE by error2<KtExpression, String, Collection<AbstractFirBasedSymbol<*>>>() val DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE by error2<KtExpression, String, Collection<FirBasedSymbol<*>>>()
val DELEGATE_SPECIAL_FUNCTION_RETURN_TYPE_MISMATCH by error3<KtExpression, String, ConeKotlinType, ConeKotlinType>() val DELEGATE_SPECIAL_FUNCTION_RETURN_TYPE_MISMATCH by error3<KtExpression, String, ConeKotlinType, ConeKotlinType>()
val UNDERSCORE_IS_RESERVED by error0<KtElement>(SourceElementPositioningStrategies.RESERVED_UNDERSCORE) val UNDERSCORE_IS_RESERVED by error0<KtElement>(SourceElementPositioningStrategies.RESERVED_UNDERSCORE)
val UNDERSCORE_USAGE_WITHOUT_BACKTICKS by error0<KtElement>(SourceElementPositioningStrategies.RESERVED_UNDERSCORE) val UNDERSCORE_USAGE_WITHOUT_BACKTICKS by error0<KtElement>(SourceElementPositioningStrategies.RESERVED_UNDERSCORE)
@@ -531,15 +531,15 @@ object FirErrors {
val RETURN_IN_FUNCTION_WITH_EXPRESSION_BODY by error0<KtReturnExpression>(SourceElementPositioningStrategies.RETURN_WITH_LABEL) val RETURN_IN_FUNCTION_WITH_EXPRESSION_BODY by error0<KtReturnExpression>(SourceElementPositioningStrategies.RETURN_WITH_LABEL)
// Inline // Inline
val USAGE_IS_NOT_INLINABLE by error1<KtElement, AbstractFirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED) val USAGE_IS_NOT_INLINABLE by error1<KtElement, FirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val NON_LOCAL_RETURN_NOT_ALLOWED by error1<KtElement, AbstractFirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED) val NON_LOCAL_RETURN_NOT_ALLOWED by error1<KtElement, FirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val RECURSION_IN_INLINE by error1<KtElement, AbstractFirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED) val RECURSION_IN_INLINE by error1<KtElement, FirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val NON_PUBLIC_CALL_FROM_PUBLIC_INLINE by error2<KtElement, AbstractFirBasedSymbol<*>, AbstractFirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED) val NON_PUBLIC_CALL_FROM_PUBLIC_INLINE by error2<KtElement, FirBasedSymbol<*>, FirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val PROTECTED_CONSTRUCTOR_CALL_FROM_PUBLIC_INLINE by error2<KtElement, AbstractFirBasedSymbol<*>, AbstractFirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED) val PROTECTED_CONSTRUCTOR_CALL_FROM_PUBLIC_INLINE by error2<KtElement, FirBasedSymbol<*>, FirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val PROTECTED_CALL_FROM_PUBLIC_INLINE_ERROR by error2<KtElement, AbstractFirBasedSymbol<*>, AbstractFirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED) val PROTECTED_CALL_FROM_PUBLIC_INLINE_ERROR by error2<KtElement, FirBasedSymbol<*>, FirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val PROTECTED_CALL_FROM_PUBLIC_INLINE by warning2<KtElement, AbstractFirBasedSymbol<*>, AbstractFirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED) val PROTECTED_CALL_FROM_PUBLIC_INLINE by warning2<KtElement, FirBasedSymbol<*>, FirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val PRIVATE_CLASS_MEMBER_FROM_INLINE by error2<KtElement, AbstractFirBasedSymbol<*>, AbstractFirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED) val PRIVATE_CLASS_MEMBER_FROM_INLINE by error2<KtElement, FirBasedSymbol<*>, FirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
val SUPER_CALL_FROM_PUBLIC_INLINE by warning1<KtElement, AbstractFirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED) val SUPER_CALL_FROM_PUBLIC_INLINE by warning1<KtElement, FirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
// Imports // Imports
val CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON by error1<KtImportDirective, Name>(SourceElementPositioningStrategies.IMPORT_LAST_NAME) val CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON by error1<KtImportDirective, Name>(SourceElementPositioningStrategies.IMPORT_LAST_NAME)
@@ -32,7 +32,6 @@ import org.jetbrains.kotlin.fir.references.FirThisReference
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.* import org.jetbrains.kotlin.fir.resolve.dfa.cfg.*
import org.jetbrains.kotlin.fir.resolve.inference.isBuiltinFunctionalType import org.jetbrains.kotlin.fir.resolve.inference.isBuiltinFunctionalType
import org.jetbrains.kotlin.fir.resolve.isInvoke import org.jetbrains.kotlin.fir.resolve.isInvoke
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
@@ -50,7 +49,7 @@ object FirCallsEffectAnalyzer : FirControlFlowChecker() {
if (function !is FirContractDescriptionOwner) return if (function !is FirContractDescriptionOwner) return
if (function.contractDescription.coneEffects?.any { it is ConeCallsEffectDeclaration } != true) return if (function.contractDescription.coneEffects?.any { it is ConeCallsEffectDeclaration } != true) return
val functionalTypeEffects = mutableMapOf<AbstractFirBasedSymbol<*>, ConeCallsEffectDeclaration>() val functionalTypeEffects = mutableMapOf<FirBasedSymbol<*>, ConeCallsEffectDeclaration>()
function.valueParameters.forEachIndexed { index, parameter -> function.valueParameters.forEachIndexed { index, parameter ->
if (parameter.returnTypeRef.isFunctionalTypeRef(session)) { if (parameter.returnTypeRef.isFunctionalTypeRef(session)) {
@@ -66,7 +65,7 @@ object FirCallsEffectAnalyzer : FirControlFlowChecker() {
if (functionalTypeEffects.isEmpty()) return if (functionalTypeEffects.isEmpty()) return
val leakedSymbols = mutableMapOf<AbstractFirBasedSymbol<*>, MutableList<FirSourceElement>>() val leakedSymbols = mutableMapOf<FirBasedSymbol<*>, MutableList<FirSourceElement>>()
graph.traverse( graph.traverse(
TraverseDirection.Forward, TraverseDirection.Forward,
CapturedLambdaFinder(function), CapturedLambdaFinder(function),
@@ -102,7 +101,7 @@ object FirCallsEffectAnalyzer : FirControlFlowChecker() {
private fun investigate( private fun investigate(
info: LambdaInvocationInfo, info: LambdaInvocationInfo,
symbol: AbstractFirBasedSymbol<*>, symbol: FirBasedSymbol<*>,
requiredRange: EventOccurrencesRange, requiredRange: EventOccurrencesRange,
function: FirContractDescriptionOwner, function: FirContractDescriptionOwner,
reporter: DiagnosticReporter, reporter: DiagnosticReporter,
@@ -124,8 +123,8 @@ object FirCallsEffectAnalyzer : FirControlFlowChecker() {
} }
private class IllegalScopeContext( private class IllegalScopeContext(
private val functionalTypeSymbols: Set<AbstractFirBasedSymbol<*>>, private val functionalTypeSymbols: Set<FirBasedSymbol<*>>,
private val leakedSymbols: MutableMap<AbstractFirBasedSymbol<*>, MutableList<FirSourceElement>>, private val leakedSymbols: MutableMap<FirBasedSymbol<*>, MutableList<FirSourceElement>>,
) { ) {
private var scopeDepth: Int = 0 private var scopeDepth: Int = 0
private var illegalScopeDepth: Int? = null private var illegalScopeDepth: Int? = null
@@ -237,7 +236,7 @@ object FirCallsEffectAnalyzer : FirControlFlowChecker() {
} }
private class InvocationDataCollector( private class InvocationDataCollector(
val functionalTypeSymbols: Set<AbstractFirBasedSymbol<*>> val functionalTypeSymbols: Set<FirBasedSymbol<*>>
) : ControlFlowGraphVisitor<PathAwareLambdaInvocationInfo, Collection<Pair<EdgeLabel, PathAwareLambdaInvocationInfo>>>() { ) : ControlFlowGraphVisitor<PathAwareLambdaInvocationInfo, Collection<Pair<EdgeLabel, PathAwareLambdaInvocationInfo>>>() {
override fun visitNode( override fun visitNode(
@@ -334,7 +333,7 @@ object FirCallsEffectAnalyzer : FirControlFlowChecker() {
private fun FirExpression?.toQualifiedReference(): FirReference? = (this as? FirQualifiedAccess)?.calleeReference private fun FirExpression?.toQualifiedReference(): FirReference? = (this as? FirQualifiedAccess)?.calleeReference
private fun referenceToSymbol(reference: FirReference?): AbstractFirBasedSymbol<*>? = when (reference) { private fun referenceToSymbol(reference: FirReference?): FirBasedSymbol<*>? = when (reference) {
is FirResolvedNamedReference -> reference.resolvedSymbol is FirResolvedNamedReference -> reference.resolvedSymbol
is FirThisReference -> reference.boundSymbol is FirThisReference -> reference.boundSymbol
else -> null else -> null
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.fir.resolve.dfa.cfg.BlockExitNode
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.CFGNode import org.jetbrains.kotlin.fir.resolve.dfa.cfg.CFGNode
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.ControlFlowGraph import org.jetbrains.kotlin.fir.resolve.dfa.cfg.ControlFlowGraph
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.JumpNode import org.jetbrains.kotlin.fir.resolve.dfa.cfg.JumpNode
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
import org.jetbrains.kotlin.fir.typeContext import org.jetbrains.kotlin.fir.typeContext
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
@@ -216,7 +216,7 @@ object FirReturnsImpliesAnalyzer : FirControlFlowChecker() {
private val CheckerContext.containingProperty: FirProperty? private val CheckerContext.containingProperty: FirProperty?
get() = (containingDeclarations.asReversed().firstOrNull { it is FirProperty } as? FirProperty) get() = (containingDeclarations.asReversed().firstOrNull { it is FirProperty } as? FirProperty)
private fun FirFunction<*>.getParameterType(symbol: AbstractFirBasedSymbol<*>, context: CheckerContext): ConeKotlinType? { private fun FirFunction<*>.getParameterType(symbol: FirBasedSymbol<*>, context: CheckerContext): ConeKotlinType? {
val typeRef = if (this.symbol == symbol) { val typeRef = if (this.symbol == symbol) {
if (symbol is FirPropertyAccessorSymbol) { if (symbol is FirPropertyAccessorSymbol) {
context.containingProperty?.receiverTypeRef context.containingProperty?.receiverTypeRef
@@ -229,7 +229,7 @@ object FirReturnsImpliesAnalyzer : FirControlFlowChecker() {
return typeRef?.coneType return typeRef?.coneType
} }
private fun FirFunction<*>.getParameterSymbol(index: Int, context: CheckerContext): AbstractFirBasedSymbol<*> { private fun FirFunction<*>.getParameterSymbol(index: Int, context: CheckerContext): FirBasedSymbol<*> {
return if (index == -1) { return if (index == -1) {
if (symbol !is FirPropertyAccessorSymbol) { if (symbol !is FirPropertyAccessorSymbol) {
symbol symbol
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.resolve.firProvider import org.jetbrains.kotlin.fir.resolve.firProvider
import org.jetbrains.kotlin.fir.scopes.PACKAGE_MEMBER import org.jetbrains.kotlin.fir.scopes.PACKAGE_MEMBER
import org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope import org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
@@ -28,7 +28,7 @@ object FirConflictsChecker : FirBasicDeclarationChecker() {
private class DeclarationInspector : FirDeclarationInspector() { private class DeclarationInspector : FirDeclarationInspector() {
val declarationConflictingSymbols: HashMap<FirDeclaration, SmartSet<AbstractFirBasedSymbol<*>>> = hashMapOf() val declarationConflictingSymbols: HashMap<FirDeclaration, SmartSet<FirBasedSymbol<*>>> = hashMapOf()
override fun collectNonFunctionDeclaration(key: String, declaration: FirDeclaration): MutableList<FirDeclaration> = override fun collectNonFunctionDeclaration(key: String, declaration: FirDeclaration): MutableList<FirDeclaration> =
super.collectNonFunctionDeclaration(key, declaration).also { super.collectNonFunctionDeclaration(key, declaration).also {
@@ -41,7 +41,7 @@ object FirConflictsChecker : FirBasicDeclarationChecker() {
} }
private fun collectLocalConflicts(declaration: FirDeclaration, conflicting: List<FirDeclaration>) { private fun collectLocalConflicts(declaration: FirDeclaration, conflicting: List<FirDeclaration>) {
val localConflicts = SmartSet.create<AbstractFirBasedSymbol<*>>() val localConflicts = SmartSet.create<FirBasedSymbol<*>>()
for (otherDeclaration in conflicting) { for (otherDeclaration in conflicting) {
if (otherDeclaration is FirSymbolOwner<*>) { if (otherDeclaration is FirSymbolOwner<*>) {
if (otherDeclaration != declaration && declaration is FirSymbolOwner<*> && if (otherDeclaration != declaration && declaration is FirSymbolOwner<*> &&
@@ -75,7 +75,7 @@ object FirConflictsChecker : FirBasicDeclarationChecker() {
declaration: FirDeclaration, declaration: FirDeclaration,
declarationPresentation: String, declarationPresentation: String,
containingFile: FirFile, containingFile: FirFile,
conflictingSymbol: AbstractFirBasedSymbol<*>, conflictingSymbol: FirBasedSymbol<*>,
conflictingPresentation: String?, conflictingPresentation: String?,
conflictingFile: FirFile?, conflictingFile: FirFile?,
session: FirSession session: FirSession
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeAmbiguityError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeAmbiguityError
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateError
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedNameError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedNameError
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.typeContext import org.jetbrains.kotlin.fir.typeContext
import org.jetbrains.kotlin.fir.types.ConeKotlinErrorType import org.jetbrains.kotlin.fir.types.ConeKotlinErrorType
import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.fir.types.coneType
@@ -65,7 +65,7 @@ object FirDelegatedPropertyChecker : FirPropertyChecker() {
fun reportInapplicableDiagnostics( fun reportInapplicableDiagnostics(
candidateApplicability: CandidateApplicability, candidateApplicability: CandidateApplicability,
candidates: Collection<AbstractFirBasedSymbol<*>> candidates: Collection<FirBasedSymbol<*>>
) { ) {
if (candidateApplicability == CandidateApplicability.INAPPLICABLE_WRONG_RECEIVER) { if (candidateApplicability == CandidateApplicability.INAPPLICABLE_WRONG_RECEIVER) {
reporter.reportOn( reporter.reportOn(
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.resolve.inference.isBuiltinFunctionalType
import org.jetbrains.kotlin.fir.resolve.inference.isFunctionalType import org.jetbrains.kotlin.fir.resolve.inference.isFunctionalType
import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.resolve.transformers.publishedApiEffectiveVisibility import org.jetbrains.kotlin.fir.resolve.transformers.publishedApiEffectiveVisibility
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol 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.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
@@ -103,7 +103,7 @@ object FirInlineDeclarationChecker : FirMemberDeclarationChecker() {
private fun checkReceiversOfQualifiedAccessExpression( private fun checkReceiversOfQualifiedAccessExpression(
qualifiedAccessExpression: FirQualifiedAccessExpression, qualifiedAccessExpression: FirQualifiedAccessExpression,
targetSymbol: AbstractFirBasedSymbol<*>?, targetSymbol: FirBasedSymbol<*>?,
context: CheckerContext context: CheckerContext
) { ) {
checkReceiver(qualifiedAccessExpression, qualifiedAccessExpression.dispatchReceiver, targetSymbol, context) checkReceiver(qualifiedAccessExpression, qualifiedAccessExpression.dispatchReceiver, targetSymbol, context)
@@ -112,7 +112,7 @@ object FirInlineDeclarationChecker : FirMemberDeclarationChecker() {
private fun checkArgumentsOfCall( private fun checkArgumentsOfCall(
functionCall: FirFunctionCall, functionCall: FirFunctionCall,
targetSymbol: AbstractFirBasedSymbol<*>?, targetSymbol: FirBasedSymbol<*>?,
context: CheckerContext context: CheckerContext
) { ) {
val calledFunction = (targetSymbol as? FirNamedFunctionSymbol)?.fir ?: return val calledFunction = (targetSymbol as? FirNamedFunctionSymbol)?.fir ?: return
@@ -140,7 +140,7 @@ object FirInlineDeclarationChecker : FirMemberDeclarationChecker() {
private fun checkReceiver( private fun checkReceiver(
qualifiedAccessExpression: FirQualifiedAccessExpression, qualifiedAccessExpression: FirQualifiedAccessExpression,
receiverExpression: FirExpression, receiverExpression: FirExpression,
targetSymbol: AbstractFirBasedSymbol<*>?, targetSymbol: FirBasedSymbol<*>?,
context: CheckerContext context: CheckerContext
) { ) {
val receiverSymbol = receiverExpression.toResolvedCallableSymbol() ?: return val receiverSymbol = receiverExpression.toResolvedCallableSymbol() ?: return
@@ -157,7 +157,7 @@ object FirInlineDeclarationChecker : FirMemberDeclarationChecker() {
} }
} }
private fun isInvokeOrInlineExtension(targetSymbol: AbstractFirBasedSymbol<*>?): Boolean { private fun isInvokeOrInlineExtension(targetSymbol: FirBasedSymbol<*>?): Boolean {
if (targetSymbol !is FirNamedFunctionSymbol) return false if (targetSymbol !is FirNamedFunctionSymbol) return false
val function = targetSymbol.fir val function = targetSymbol.fir
if (function.isInline) return true if (function.isInline) return true
@@ -167,7 +167,7 @@ object FirInlineDeclarationChecker : FirMemberDeclarationChecker() {
private fun checkQualifiedAccess( private fun checkQualifiedAccess(
qualifiedAccess: FirQualifiedAccess, qualifiedAccess: FirQualifiedAccess,
targetSymbol: AbstractFirBasedSymbol<*>?, targetSymbol: FirBasedSymbol<*>?,
context: CheckerContext context: CheckerContext
) { ) {
val source = qualifiedAccess.source ?: return val source = qualifiedAccess.source ?: return
@@ -280,7 +280,7 @@ object FirInlineDeclarationChecker : FirMemberDeclarationChecker() {
} }
} }
private fun AbstractFirBasedSymbol<*>.isDefinedInInlineFunction(): Boolean { private fun FirBasedSymbol<*>.isDefinedInInlineFunction(): Boolean {
return when (val fir = this.fir) { return when (val fir = this.fir) {
is FirAnonymousFunction -> true is FirAnonymousFunction -> true
is FirMemberDeclaration -> fir.isLocalMember is FirMemberDeclaration -> fir.isLocalMember
@@ -291,7 +291,7 @@ object FirInlineDeclarationChecker : FirMemberDeclarationChecker() {
} }
private fun checkRecursion( private fun checkRecursion(
targetSymbol: AbstractFirBasedSymbol<*>, targetSymbol: FirBasedSymbol<*>,
source: FirSourceElement, source: FirSourceElement,
context: CheckerContext context: CheckerContext
) { ) {
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.withSuppressedDiagnostics
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.name.StandardClassIds
@@ -110,7 +110,7 @@ object FirSupertypesChecker : FirClassChecker() {
} }
private fun checkClassCannotBeExtendedDirectly( private fun checkClassCannotBeExtendedDirectly(
symbol: AbstractFirBasedSymbol<*>?, symbol: FirBasedSymbol<*>?,
reporter: DiagnosticReporter, reporter: DiagnosticReporter,
superTypeRef: FirTypeRef, superTypeRef: FirTypeRef,
context: CheckerContext context: CheckerContext
@@ -139,7 +139,7 @@ object FirSupertypesChecker : FirClassChecker() {
} }
private fun checkExpandedTypeCannotBeInherited( private fun checkExpandedTypeCannotBeInherited(
symbol: AbstractFirBasedSymbol<*>?, symbol: FirBasedSymbol<*>?,
fullyExpandedType: ConeKotlinType, fullyExpandedType: ConeKotlinType,
reporter: DiagnosticReporter, reporter: DiagnosticReporter,
superTypeRef: FirTypeRef, superTypeRef: FirTypeRef,
@@ -31,7 +31,7 @@ import org.jetbrains.kotlin.fir.resolve.calls.UnsafeCall
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeAmbiguityError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeAmbiguityError
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateError
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedNameError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedNameError
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.resolve.calls.tower.isSuccess import org.jetbrains.kotlin.resolve.calls.tower.isSuccess
@@ -93,9 +93,9 @@ object FirForLoopChecker : FirBlockChecker() {
reporter: DiagnosticReporter, reporter: DiagnosticReporter,
reportSource: FirSourceElement?, reportSource: FirSourceElement?,
context: CheckerContext, context: CheckerContext,
ambiguityFactory: FirDiagnosticFactory1<Collection<AbstractFirBasedSymbol<*>>>, ambiguityFactory: FirDiagnosticFactory1<Collection<FirBasedSymbol<*>>>,
missingFactory: FirDiagnosticFactory0, missingFactory: FirDiagnosticFactory0,
noneApplicableFactory: FirDiagnosticFactory1<Collection<AbstractFirBasedSymbol<*>>>? = null, noneApplicableFactory: FirDiagnosticFactory1<Collection<FirBasedSymbol<*>>>? = null,
unsafeCallFactory: FirDiagnosticFactory0? = null, unsafeCallFactory: FirDiagnosticFactory0? = null,
): Boolean { ): Boolean {
when (val calleeReference = call.calleeReference) { when (val calleeReference = call.calleeReference) {
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirRenderer import org.jetbrains.kotlin.fir.FirRenderer
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.fir.types.render
object FirDiagnosticRenderers { object FirDiagnosticRenderers {
val NULLABLE_STRING = Renderer<String?> { it ?: "null" } val NULLABLE_STRING = Renderer<String?> { it ?: "null" }
val SYMBOL = Renderer { symbol: AbstractFirBasedSymbol<*> -> val SYMBOL = Renderer { symbol: FirBasedSymbol<*> ->
when (symbol) { when (symbol) {
is FirClassLikeSymbol<*> -> symbol.classId.asString() is FirClassLikeSymbol<*> -> symbol.classId.asString()
is FirCallableSymbol<*> -> symbol.callableId.toString() is FirCallableSymbol<*> -> symbol.callableId.toString()
@@ -32,7 +32,7 @@ object FirDiagnosticRenderers {
} }
} }
val SYMBOLS = Renderer { symbols: Collection<AbstractFirBasedSymbol<*>> -> val SYMBOLS = Renderer { symbols: Collection<FirBasedSymbol<*>> ->
symbols.joinToString(prefix = "[", postfix = "]", separator = ", ", limit = 3, truncated = "...") { symbol -> symbols.joinToString(prefix = "[", postfix = "]", separator = ", ", limit = 3, truncated = "...") { symbol ->
SYMBOL.render(symbol) SYMBOL.render(symbol)
} }
@@ -97,7 +97,7 @@ object FirDiagnosticRenderers {
element.render(mode = FirRenderer.RenderMode.WithFqNamesExceptAnnotationAndBody) element.render(mode = FirRenderer.RenderMode.WithFqNamesExceptAnnotationAndBody)
} }
val AMBIGUOUS_CALLS = Renderer { candidates: Collection<AbstractFirBasedSymbol<*>> -> val AMBIGUOUS_CALLS = Renderer { candidates: Collection<FirBasedSymbol<*>> ->
candidates.joinToString(separator = "\n", prefix = "\n") { symbol -> candidates.joinToString(separator = "\n", prefix = "\n") { symbol ->
SYMBOL.render(symbol) SYMBOL.render(symbol)
} }
@@ -28,7 +28,6 @@ import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateErr
import org.jetbrains.kotlin.fir.resolve.directExpansionType import org.jetbrains.kotlin.fir.resolve.directExpansionType
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
@@ -1631,7 +1630,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
} }
} }
private fun FlowContent.symbolAnchor(symbol: AbstractFirBasedSymbol<*>, body: FlowContent.() -> Unit) { private fun FlowContent.symbolAnchor(symbol: FirBasedSymbol<*>, body: FlowContent.() -> Unit) {
span(classes = "declaration") { span(classes = "declaration") {
id = linkResolver.symbolSignature(symbol) id = linkResolver.symbolSignature(symbol)
body() body()
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.fir.resolve.calls.originalConstructorIfTypeAlias
import org.jetbrains.kotlin.fir.resolve.providers.FirProvider import org.jetbrains.kotlin.fir.resolve.providers.FirProvider
import org.jetbrains.kotlin.fir.scopes.* import org.jetbrains.kotlin.fir.scopes.*
import org.jetbrains.kotlin.fir.scopes.impl.delegatedWrapperData import org.jetbrains.kotlin.fir.scopes.impl.delegatedWrapperData
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.AccessorSymbol import org.jetbrains.kotlin.fir.symbols.AccessorSymbol
import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
@@ -140,7 +140,7 @@ fun FirClassifierSymbol<*>.toSymbol(
} }
} }
private fun AbstractFirBasedSymbol<*>.toSymbolForCall( private fun FirBasedSymbol<*>.toSymbolForCall(
session: FirSession, session: FirSession,
classifierStorage: Fir2IrClassifierStorage, classifierStorage: Fir2IrClassifierStorage,
declarationStorage: Fir2IrDeclarationStorage, declarationStorage: Fir2IrDeclarationStorage,
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.scopes.* import org.jetbrains.kotlin.fir.scopes.*
import org.jetbrains.kotlin.fir.scopes.impl.FirFakeOverrideGenerator import org.jetbrains.kotlin.fir.scopes.impl.FirFakeOverrideGenerator
import org.jetbrains.kotlin.fir.scopes.impl.delegatedWrapperData import org.jetbrains.kotlin.fir.scopes.impl.delegatedWrapperData
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
@@ -98,7 +98,7 @@ class FakeOverrideGenerator(
name: Name, name: Name,
firClass: FirClass<*>, firClass: FirClass<*>,
result: MutableList<IrDeclaration>, result: MutableList<IrDeclaration>,
realDeclarationSymbols: Set<AbstractFirBasedSymbol<*>> realDeclarationSymbols: Set<FirBasedSymbol<*>>
) { ) {
val isLocal = firClass !is FirRegularClass || firClass.isLocal val isLocal = firClass !is FirRegularClass || firClass.isLocal
useSiteMemberScope.processFunctionsByName(name) { functionSymbol -> useSiteMemberScope.processFunctionsByName(name) { functionSymbol ->
@@ -181,7 +181,7 @@ class FakeOverrideGenerator(
baseSymbols: MutableMap<I, List<S>>, baseSymbols: MutableMap<I, List<S>>,
result: MutableList<in I>, result: MutableList<in I>,
containsErrorTypes: (I) -> Boolean, containsErrorTypes: (I) -> Boolean,
realDeclarationSymbols: Set<AbstractFirBasedSymbol<*>>, realDeclarationSymbols: Set<FirBasedSymbol<*>>,
computeDirectOverridden: FirTypeScope.(S) -> List<S>, computeDirectOverridden: FirTypeScope.(S) -> List<S>,
scope: FirTypeScope, scope: FirTypeScope,
) { ) {
@@ -14,13 +14,13 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.getOwnerId import org.jetbrains.kotlin.fir.getOwnerId
import org.jetbrains.kotlin.fir.resolve.calls.ReceiverValue import org.jetbrains.kotlin.fir.resolve.calls.ReceiverValue
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
@NoMutableState @NoMutableState
object FirJavaVisibilityChecker : FirVisibilityChecker() { object FirJavaVisibilityChecker : FirVisibilityChecker() {
override fun platformVisibilityCheck( override fun platformVisibilityCheck(
declarationVisibility: Visibility, declarationVisibility: Visibility,
symbol: AbstractFirBasedSymbol<*>, symbol: FirBasedSymbol<*>,
useSiteFile: FirFile, useSiteFile: FirFile,
containingDeclarations: List<FirDeclaration>, containingDeclarations: List<FirDeclaration>,
dispatchReceiver: ReceiverValue?, dispatchReceiver: ReceiverValue?,
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.resolve.firProvider
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes
import org.jetbrains.kotlin.fir.resolve.symbolProvider import org.jetbrains.kotlin.fir.resolve.symbolProvider
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
@@ -32,7 +32,7 @@ abstract class FirVisibilityChecker : FirSessionComponent {
object Default : FirVisibilityChecker() { object Default : FirVisibilityChecker() {
override fun platformVisibilityCheck( override fun platformVisibilityCheck(
declarationVisibility: Visibility, declarationVisibility: Visibility,
symbol: AbstractFirBasedSymbol<*>, symbol: FirBasedSymbol<*>,
useSiteFile: FirFile, useSiteFile: FirFile,
containingDeclarations: List<FirDeclaration>, containingDeclarations: List<FirDeclaration>,
dispatchReceiver: ReceiverValue?, dispatchReceiver: ReceiverValue?,
@@ -122,7 +122,7 @@ abstract class FirVisibilityChecker : FirSessionComponent {
protected abstract fun platformVisibilityCheck( protected abstract fun platformVisibilityCheck(
declarationVisibility: Visibility, declarationVisibility: Visibility,
symbol: AbstractFirBasedSymbol<*>, symbol: FirBasedSymbol<*>,
useSiteFile: FirFile, useSiteFile: FirFile,
containingDeclarations: List<FirDeclaration>, containingDeclarations: List<FirDeclaration>,
dispatchReceiver: ReceiverValue?, dispatchReceiver: ReceiverValue?,
@@ -210,7 +210,7 @@ abstract class FirVisibilityChecker : FirSessionComponent {
return false return false
} }
protected fun AbstractFirBasedSymbol<*>.packageFqName(): FqName { protected fun FirBasedSymbol<*>.packageFqName(): FqName {
return when (this) { return when (this) {
is FirClassLikeSymbol<*> -> classId.packageFqName is FirClassLikeSymbol<*> -> classId.packageFqName
is FirCallableSymbol<*> -> callableId.packageName is FirCallableSymbol<*> -> callableId.packageName
@@ -222,7 +222,7 @@ abstract class FirVisibilityChecker : FirSessionComponent {
val FirSession.moduleVisibilityChecker: FirModuleVisibilityChecker? by FirSession.nullableSessionComponentAccessor() val FirSession.moduleVisibilityChecker: FirModuleVisibilityChecker? by FirSession.nullableSessionComponentAccessor()
val FirSession.visibilityChecker: FirVisibilityChecker by FirSession.sessionComponentAccessor() val FirSession.visibilityChecker: FirVisibilityChecker by FirSession.sessionComponentAccessor()
fun AbstractFirBasedSymbol<*>.getOwnerId(): ClassId? { fun FirBasedSymbol<*>.getOwnerId(): ClassId? {
return when (this) { return when (this) {
is FirClassLikeSymbol<*> -> { is FirClassLikeSymbol<*> -> {
val ownerId = classId.outerClassId val ownerId = classId.outerClassId
@@ -220,7 +220,7 @@ fun <T : FirResolvable> BodyResolveComponents.typeFromCallee(access: T): FirReso
} }
} }
private fun BodyResolveComponents.typeFromSymbol(symbol: AbstractFirBasedSymbol<*>, makeNullable: Boolean): FirResolvedTypeRef { private fun BodyResolveComponents.typeFromSymbol(symbol: FirBasedSymbol<*>, makeNullable: Boolean): FirResolvedTypeRef {
return when (symbol) { return when (symbol) {
is FirCallableSymbol<*> -> { is FirCallableSymbol<*> -> {
val returnTypeRef = returnTypeCalculator.tryCalculateReturnType(symbol.fir) val returnTypeRef = returnTypeCalculator.tryCalculateReturnType(symbol.fir)
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents
import org.jetbrains.kotlin.fir.resolve.inference.PostponedResolvedAtom import org.jetbrains.kotlin.fir.resolve.inference.PostponedResolvedAtom
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.ConeTypeVariable import org.jetbrains.kotlin.fir.types.ConeTypeVariable
import org.jetbrains.kotlin.fir.types.FirTypeProjection import org.jetbrains.kotlin.fir.types.FirTypeProjection
@@ -77,7 +77,7 @@ data class CallInfo(
} }
class Candidate( class Candidate(
val symbol: AbstractFirBasedSymbol<*>, val symbol: FirBasedSymbol<*>,
val dispatchReceiverValue: ReceiverValue?, val dispatchReceiverValue: ReceiverValue?,
val extensionReceiverValue: ReceiverValue?, val extensionReceiverValue: ReceiverValue?,
val explicitReceiverKind: ExplicitReceiverKind, val explicitReceiverKind: ExplicitReceiverKind,
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.moduleData import org.jetbrains.kotlin.fir.moduleData
import org.jetbrains.kotlin.fir.returnExpressions import org.jetbrains.kotlin.fir.returnExpressions
import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirErrorFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirErrorFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirErrorPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirErrorPropertySymbol
import org.jetbrains.kotlin.fir.types.classId import org.jetbrains.kotlin.fir.types.classId
@@ -44,7 +44,7 @@ class CandidateFactory private constructor(
fun createCandidate( fun createCandidate(
callInfo: CallInfo, callInfo: CallInfo,
symbol: AbstractFirBasedSymbol<*>, symbol: FirBasedSymbol<*>,
explicitReceiverKind: ExplicitReceiverKind, explicitReceiverKind: ExplicitReceiverKind,
scope: FirScope?, scope: FirScope?,
dispatchReceiverValue: ReceiverValue? = null, dispatchReceiverValue: ReceiverValue? = null,
@@ -75,7 +75,7 @@ class CandidateFactory private constructor(
} }
fun createErrorCandidate(callInfo: CallInfo, diagnostic: ConeDiagnostic): Candidate { fun createErrorCandidate(callInfo: CallInfo, diagnostic: ConeDiagnostic): Candidate {
val symbol: AbstractFirBasedSymbol<*> = when (callInfo.callKind) { val symbol: FirBasedSymbol<*> = when (callInfo.callKind) {
is CallKind.VariableAccess -> createErrorPropertySymbol(diagnostic) is CallKind.VariableAccess -> createErrorPropertySymbol(diagnostic)
is CallKind.Function, is CallKind.Function,
is CallKind.DelegatingConstructorCall, is CallKind.DelegatingConstructorCall,
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@OptIn(FirImplementationDetail::class) @OptIn(FirImplementationDetail::class)
@@ -18,7 +18,7 @@ open class FirNamedReferenceWithCandidate(
name: Name, name: Name,
val candidate: Candidate val candidate: Candidate
) : FirSimpleNamedReference(source, name, candidate.symbol) { ) : FirSimpleNamedReference(source, name, candidate.symbol) {
override val candidateSymbol: AbstractFirBasedSymbol<*> override val candidateSymbol: FirBasedSymbol<*>
get() = candidate.symbol get() = candidate.symbol
open val isError: Boolean get() = false open val isError: Boolean get() = false
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.resolve.smartcastScope
import org.jetbrains.kotlin.fir.resolvedTypeFromPrototype import org.jetbrains.kotlin.fir.resolvedTypeFromPrototype
import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator
import org.jetbrains.kotlin.fir.scopes.FirTypeScope import org.jetbrains.kotlin.fir.scopes.FirTypeScope
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinErrorType import org.jetbrains.kotlin.fir.types.ConeKotlinErrorType
@@ -65,7 +65,7 @@ class ExpressionReceiverValue(
?: type.scope(useSiteSession, scopeSession, FakeOverrideTypeCalculator.DoNothing) ?: type.scope(useSiteSession, scopeSession, FakeOverrideTypeCalculator.DoNothing)
} }
sealed class ImplicitReceiverValue<S : AbstractFirBasedSymbol<*>>( sealed class ImplicitReceiverValue<S : FirBasedSymbol<*>>(
val boundSymbol: S, val boundSymbol: S,
type: ConeKotlinType, type: ConeKotlinType,
protected val useSiteSession: FirSession, protected val useSiteSession: FirSession,
@@ -105,7 +105,7 @@ sealed class ImplicitReceiverValue<S : AbstractFirBasedSymbol<*>>(
} }
} }
private fun receiverExpression(symbol: AbstractFirBasedSymbol<*>, type: ConeKotlinType): FirThisReceiverExpression = private fun receiverExpression(symbol: FirBasedSymbol<*>, type: ConeKotlinType): FirThisReceiverExpression =
buildThisReceiverExpression { buildThisReceiverExpression {
// NB: we can't use `symbol.fir.source` as the source of `this` receiver. For instance, if this is an implicit receiver for a class, // NB: we can't use `symbol.fir.source` as the source of `this` receiver. For instance, if this is an implicit receiver for a class,
// the entire class itself will be set as a source. If combined with an implicit type operation, a certain assertion, like null // the entire class itself will be set as a source. If combined with an implicit type operation, a certain assertion, like null
@@ -7,8 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.calls.tower
import org.jetbrains.kotlin.fir.resolve.calls.* import org.jetbrains.kotlin.fir.resolve.calls.*
import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
@@ -71,9 +70,9 @@ private class TowerScopeLevelProcessor(
val resultCollector: CandidateCollector, val resultCollector: CandidateCollector,
val candidateFactory: CandidateFactory, val candidateFactory: CandidateFactory,
val group: TowerGroup val group: TowerGroup
) : TowerScopeLevel.TowerScopeLevelProcessor<AbstractFirBasedSymbol<*>> { ) : TowerScopeLevel.TowerScopeLevelProcessor<FirBasedSymbol<*>> {
override fun consumeCandidate( override fun consumeCandidate(
symbol: AbstractFirBasedSymbol<*>, symbol: FirBasedSymbol<*>,
dispatchReceiverValue: ReceiverValue?, dispatchReceiverValue: ReceiverValue?,
extensionReceiverValue: ReceiverValue?, extensionReceiverValue: ReceiverValue?,
scope: FirScope, scope: FirScope,
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.impl.FirDefaultStarImportingScope import org.jetbrains.kotlin.fir.scopes.impl.FirDefaultStarImportingScope
import org.jetbrains.kotlin.fir.scopes.impl.importedFromObjectData import org.jetbrains.kotlin.fir.scopes.impl.importedFromObjectData
import org.jetbrains.kotlin.fir.scopes.processClassifiersByName import org.jetbrains.kotlin.fir.scopes.processClassifiersByName
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol 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.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.types.AbstractTypeChecker import org.jetbrains.kotlin.types.AbstractTypeChecker
@@ -34,19 +34,19 @@ enum class ProcessResult {
abstract class TowerScopeLevel { abstract class TowerScopeLevel {
sealed class Token<out T : AbstractFirBasedSymbol<*>> { sealed class Token<out T : FirBasedSymbol<*>> {
object Properties : Token<FirVariableSymbol<*>>() object Properties : Token<FirVariableSymbol<*>>()
object Functions : Token<FirFunctionSymbol<*>>() object Functions : Token<FirFunctionSymbol<*>>()
object Objects : Token<AbstractFirBasedSymbol<*>>() object Objects : Token<FirBasedSymbol<*>>()
} }
abstract fun processFunctionsByName(info: CallInfo, processor: TowerScopeLevelProcessor<FirFunctionSymbol<*>>): ProcessResult abstract fun processFunctionsByName(info: CallInfo, processor: TowerScopeLevelProcessor<FirFunctionSymbol<*>>): ProcessResult
abstract fun processPropertiesByName(info: CallInfo, processor: TowerScopeLevelProcessor<FirVariableSymbol<*>>): ProcessResult abstract fun processPropertiesByName(info: CallInfo, processor: TowerScopeLevelProcessor<FirVariableSymbol<*>>): ProcessResult
abstract fun processObjectsByName(info: CallInfo, processor: TowerScopeLevelProcessor<AbstractFirBasedSymbol<*>>): ProcessResult abstract fun processObjectsByName(info: CallInfo, processor: TowerScopeLevelProcessor<FirBasedSymbol<*>>): ProcessResult
interface TowerScopeLevelProcessor<in T : AbstractFirBasedSymbol<*>> { interface TowerScopeLevelProcessor<in T : FirBasedSymbol<*>> {
fun consumeCandidate( fun consumeCandidate(
symbol: T, symbol: T,
dispatchReceiverValue: ReceiverValue?, dispatchReceiverValue: ReceiverValue?,
@@ -79,7 +79,7 @@ class MemberScopeTowerLevel(
private val implicitExtensionInvokeMode: Boolean = false, private val implicitExtensionInvokeMode: Boolean = false,
private val scopeSession: ScopeSession private val scopeSession: ScopeSession
) : SessionBasedTowerLevel(session) { ) : SessionBasedTowerLevel(session) {
private fun <T : AbstractFirBasedSymbol<*>> processMembers( private fun <T : FirBasedSymbol<*>> processMembers(
output: TowerScopeLevelProcessor<T>, output: TowerScopeLevelProcessor<T>,
processScopeMembers: FirScope.(processor: (T) -> Unit) -> Unit processScopeMembers: FirScope.(processor: (T) -> Unit) -> Unit
): ProcessResult { ): ProcessResult {
@@ -169,7 +169,7 @@ class MemberScopeTowerLevel(
override fun processObjectsByName( override fun processObjectsByName(
info: CallInfo, info: CallInfo,
processor: TowerScopeLevelProcessor<AbstractFirBasedSymbol<*>> processor: TowerScopeLevelProcessor<FirBasedSymbol<*>>
): ProcessResult { ): ProcessResult {
return ProcessResult.FOUND return ProcessResult.FOUND
} }
@@ -273,7 +273,7 @@ class ScopeTowerLevel(
return false return false
} }
private fun <T : AbstractFirBasedSymbol<*>> consumeCallableCandidate( private fun <T : FirBasedSymbol<*>> consumeCallableCandidate(
candidate: FirCallableSymbol<*>, candidate: FirCallableSymbol<*>,
processor: TowerScopeLevelProcessor<T> processor: TowerScopeLevelProcessor<T>
) { ) {
@@ -326,7 +326,7 @@ class ScopeTowerLevel(
override fun processObjectsByName( override fun processObjectsByName(
info: CallInfo, info: CallInfo,
processor: TowerScopeLevelProcessor<AbstractFirBasedSymbol<*>> processor: TowerScopeLevelProcessor<FirBasedSymbol<*>>
): ProcessResult { ): ProcessResult {
var empty = true var empty = true
session.lookupTracker?.recordCallLookup(info, scope.scopeOwnerLookupNames) session.lookupTracker?.recordCallLookup(info, scope.scopeOwnerLookupNames)
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap
import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirAbstractBodyResolveTransformer import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirAbstractBodyResolveTransformer
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
@@ -175,7 +175,7 @@ abstract class FirDataFlowAnalyzer<FLOW : Flow>(
* DataFlowAnalyzer holds variables only for declarations that have some smartcast (or can have) * DataFlowAnalyzer holds variables only for declarations that have some smartcast (or can have)
* If there is no useful information there is no data flow variable also * If there is no useful information there is no data flow variable also
*/ */
val symbol: AbstractFirBasedSymbol<*> = qualifiedAccessExpression.symbol ?: return null val symbol: FirBasedSymbol<*> = qualifiedAccessExpression.symbol ?: return null
val flow = graphBuilder.lastNode.flow val flow = graphBuilder.lastNode.flow
var variable = variableStorage.getRealVariableWithoutUnwrappingAlias(symbol, qualifiedAccessExpression, flow) ?: return null var variable = variableStorage.getRealVariableWithoutUnwrappingAlias(symbol, qualifiedAccessExpression, flow) ?: return null
val stability = variable.stability val stability = variable.stability
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.references.FirThisReference
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol 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.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.coneTypeSafe import org.jetbrains.kotlin.fir.types.coneTypeSafe
@@ -38,7 +38,7 @@ class VariableStorage(private val session: FirSession) {
fun getOrCreateRealVariableWithoutUnwrappingAlias( fun getOrCreateRealVariableWithoutUnwrappingAlias(
flow: Flow, flow: Flow,
symbol: AbstractFirBasedSymbol<*>, symbol: FirBasedSymbol<*>,
fir: FirElement, fir: FirElement,
stability: PropertyStability stability: PropertyStability
): RealVariable { ): RealVariable {
@@ -49,7 +49,7 @@ class VariableStorage(private val session: FirSession) {
private fun getOrCreateRealVariable( private fun getOrCreateRealVariable(
flow: Flow, flow: Flow,
symbol: AbstractFirBasedSymbol<*>, symbol: FirBasedSymbol<*>,
fir: FirElement, fir: FirElement,
stability: PropertyStability stability: PropertyStability
): RealVariable { ): RealVariable {
@@ -67,7 +67,7 @@ class VariableStorage(private val session: FirSession) {
private fun getIdentifierBySymbol( private fun getIdentifierBySymbol(
flow: Flow, flow: Flow,
symbol: AbstractFirBasedSymbol<*>, symbol: FirBasedSymbol<*>,
fir: FirElement, fir: FirElement,
): Identifier { ): Identifier {
val expression = fir as? FirQualifiedAccess val expression = fir as? FirQualifiedAccess
@@ -109,7 +109,7 @@ class VariableStorage(private val session: FirSession) {
} }
@JvmName("getOrCreateRealVariableOrNull") @JvmName("getOrCreateRealVariableOrNull")
fun getOrCreateRealVariable(flow: Flow, symbol: AbstractFirBasedSymbol<*>?, fir: FirElement): RealVariable? = fun getOrCreateRealVariable(flow: Flow, symbol: FirBasedSymbol<*>?, fir: FirElement): RealVariable? =
symbol.getStability(fir)?.let { getOrCreateRealVariable(flow, symbol!!, fir, it) } symbol.getStability(fir)?.let { getOrCreateRealVariable(flow, symbol!!, fir, it) }
fun createSyntheticVariable(fir: FirElement): SyntheticVariable = fun createSyntheticVariable(fir: FirElement): SyntheticVariable =
@@ -126,14 +126,14 @@ class VariableStorage(private val session: FirSession) {
} }
} }
fun getRealVariableWithoutUnwrappingAlias(symbol: AbstractFirBasedSymbol<*>?, fir: FirElement, flow: Flow): RealVariable? { fun getRealVariableWithoutUnwrappingAlias(symbol: FirBasedSymbol<*>?, fir: FirElement, flow: Flow): RealVariable? {
val realFir = fir.unwrapElement() val realFir = fir.unwrapElement()
return symbol.takeIf { it.getStability(realFir) != null }?.let { return symbol.takeIf { it.getStability(realFir) != null }?.let {
_realVariables[getIdentifierBySymbol(flow, it, realFir.unwrapElement())] _realVariables[getIdentifierBySymbol(flow, it, realFir.unwrapElement())]
} }
} }
fun getRealVariable(symbol: AbstractFirBasedSymbol<*>?, fir: FirElement, flow: Flow): RealVariable? { fun getRealVariable(symbol: FirBasedSymbol<*>?, fir: FirElement, flow: Flow): RealVariable? {
return getRealVariableWithoutUnwrappingAlias(symbol, fir, flow)?.let { flow.unwrapVariable(it) } return getRealVariableWithoutUnwrappingAlias(symbol, fir, flow)?.let { flow.unwrapVariable(it) }
} }
@@ -152,7 +152,7 @@ class VariableStorage(private val session: FirSession) {
} }
} }
fun removeRealVariable(symbol: AbstractFirBasedSymbol<*>) { fun removeRealVariable(symbol: FirBasedSymbol<*>) {
_realVariables.remove(Identifier(symbol, null, null)) _realVariables.remove(Identifier(symbol, null, null))
} }
@@ -162,7 +162,7 @@ class VariableStorage(private val session: FirSession) {
} }
@OptIn(ExperimentalContracts::class) @OptIn(ExperimentalContracts::class)
fun AbstractFirBasedSymbol<*>?.getStability(originalFir: FirElement): PropertyStability? { fun FirBasedSymbol<*>?.getStability(originalFir: FirElement): PropertyStability? {
contract { contract {
returnsNotNull() implies (this@getStability != null) returnsNotNull() implies (this@getStability != null)
} }
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.dfa.* import org.jetbrains.kotlin.fir.resolve.dfa.*
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.types.isNothing import org.jetbrains.kotlin.fir.types.isNothing
import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor
@@ -67,7 +67,7 @@ class ControlFlowGraphBuilder {
private val exitTargetsForReturn: SymbolBasedNodeStorage<FirFunction<*>, FunctionExitNode> = SymbolBasedNodeStorage() private val exitTargetsForReturn: SymbolBasedNodeStorage<FirFunction<*>, FunctionExitNode> = SymbolBasedNodeStorage()
private val exitTargetsForTry: Stack<CFGNode<*>> = stackOf() private val exitTargetsForTry: Stack<CFGNode<*>> = stackOf()
private val exitsOfAnonymousFunctions: MutableMap<FirFunctionSymbol<*>, FunctionExitNode> = mutableMapOf() private val exitsOfAnonymousFunctions: MutableMap<FirFunctionSymbol<*>, FunctionExitNode> = mutableMapOf()
private val enterToLocalClassesMembers: MutableMap<AbstractFirBasedSymbol<*>, CFGNode<*>?> = mutableMapOf() private val enterToLocalClassesMembers: MutableMap<FirBasedSymbol<*>, CFGNode<*>?> = mutableMapOf()
private val postponedLambdas: MutableSet<FirFunctionSymbol<*>> = mutableSetOf() private val postponedLambdas: MutableSet<FirFunctionSymbol<*>> = mutableSetOf()
private val entersToPostponedAnonymousFunctions: MutableMap<FirFunctionSymbol<*>, PostponedLambdaEnterNode> = mutableMapOf() private val entersToPostponedAnonymousFunctions: MutableMap<FirFunctionSymbol<*>, PostponedLambdaEnterNode> = mutableMapOf()
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.dfa
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.types.ConeClassErrorType import org.jetbrains.kotlin.fir.types.ConeClassErrorType
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
@@ -18,7 +18,7 @@ import kotlin.contracts.contract
// --------------------------------------- Variables --------------------------------------- // --------------------------------------- Variables ---------------------------------------
data class Identifier( data class Identifier(
val symbol: AbstractFirBasedSymbol<*>, val symbol: FirBasedSymbol<*>,
val dispatchReceiver: DataFlowVariable?, val dispatchReceiver: DataFlowVariable?,
val extensionReceiver: DataFlowVariable? val extensionReceiver: DataFlowVariable?
) { ) {
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.references.FirThisReference
import org.jetbrains.kotlin.fir.resolve.calls.FirNamedReferenceWithCandidate import org.jetbrains.kotlin.fir.resolve.calls.FirNamedReferenceWithCandidate
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirAccessorSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirAccessorSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
@@ -92,7 +92,7 @@ internal val FirExpression.coneType: ConeKotlinType
get() = typeRef.coneType get() = typeRef.coneType
@DfaInternals @DfaInternals
internal val FirElement.symbol: AbstractFirBasedSymbol<*>? internal val FirElement.symbol: FirBasedSymbol<*>?
get() = when (this) { get() = when (this) {
is FirResolvable -> symbol is FirResolvable -> symbol
is FirSymbolOwner<*> -> symbol is FirSymbolOwner<*> -> symbol
@@ -105,7 +105,7 @@ internal val FirElement.symbol: AbstractFirBasedSymbol<*>?
} }
@DfaInternals @DfaInternals
internal val FirResolvable.symbol: AbstractFirBasedSymbol<*>? internal val FirResolvable.symbol: FirBasedSymbol<*>?
get() = when (val reference = calleeReference) { get() = when (val reference = calleeReference) {
is FirThisReference -> reference.boundSymbol is FirThisReference -> reference.boundSymbol
is FirResolvedNamedReference -> reference.resolvedSymbol is FirResolvedNamedReference -> reference.resolvedSymbol
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.calls.Candidate import org.jetbrains.kotlin.fir.resolve.calls.Candidate
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
@@ -45,7 +45,7 @@ class ConeUnresolvedNameError(val name: Name) : ConeUnresolvedError() {
} }
class ConeHiddenCandidateError( class ConeHiddenCandidateError(
val candidateSymbol: AbstractFirBasedSymbol<*> val candidateSymbol: FirBasedSymbol<*>
) : ConeDiagnostic() { ) : ConeDiagnostic() {
override val reason: String get() = "HIDDEN: ${describeSymbol(candidateSymbol)} is invisible" override val reason: String get() = "HIDDEN: ${describeSymbol(candidateSymbol)} is invisible"
} }
@@ -75,7 +75,7 @@ class ConeAmbiguityError(val name: Name, val applicability: CandidateApplicabili
override val reason: String get() = "Ambiguity: $name, ${candidates.map { describeSymbol(it.symbol) }}" override val reason: String get() = "Ambiguity: $name, ${candidates.map { describeSymbol(it.symbol) }}"
} }
class ConeOperatorAmbiguityError(val candidates: Collection<AbstractFirBasedSymbol<*>>) : ConeDiagnostic() { class ConeOperatorAmbiguityError(val candidates: Collection<FirBasedSymbol<*>>) : ConeDiagnostic() {
override val reason: String get() = "Operator overload ambiguity. Compatible candidates: ${candidates.map { describeSymbol(it) }}" override val reason: String get() = "Operator overload ambiguity. Compatible candidates: ${candidates.map { describeSymbol(it) }}"
} }
@@ -137,7 +137,7 @@ class ConeUnsupportedDynamicType() : ConeDiagnostic() {
override val reason: String get() = "Dynamic types are not supported in this context" override val reason: String get() = "Dynamic types are not supported in this context"
} }
private fun describeSymbol(symbol: AbstractFirBasedSymbol<*>): String { private fun describeSymbol(symbol: FirBasedSymbol<*>): String {
return when (symbol) { return when (symbol) {
is FirClassLikeSymbol<*> -> symbol.classId.asString() is FirClassLikeSymbol<*> -> symbol.classId.asString()
is FirCallableSymbol<*> -> symbol.callableId.toString() is FirCallableSymbol<*> -> symbol.callableId.toString()
@@ -75,7 +75,7 @@ fun FirSymbolProvider.getClassDeclaredPropertySymbols(classId: ClassId, name: Na
return classMemberScope?.getProperties(name).orEmpty() return classMemberScope?.getProperties(name).orEmpty()
} }
inline fun <reified T : AbstractFirBasedSymbol<*>> FirSymbolProvider.getSymbolByTypeRef(typeRef: FirTypeRef): T? { inline fun <reified T : FirBasedSymbol<*>> FirSymbolProvider.getSymbolByTypeRef(typeRef: FirTypeRef): T? {
val lookupTag = typeRef.coneTypeSafe<ConeLookupTagBasedType>()?.lookupTag ?: return null val lookupTag = typeRef.coneTypeSafe<ConeLookupTagBasedType>()?.lookupTag ?: return null
return getSymbolByLookupTag(lookupTag) as? T return getSymbolByLookupTag(lookupTag) as? T
} }
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.remapArguments
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.writeResultType import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.writeResultType
import org.jetbrains.kotlin.fir.scopes.impl.FirIntegerOperatorCall import org.jetbrains.kotlin.fir.scopes.impl.FirIntegerOperatorCall
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
@@ -225,7 +225,7 @@ class FirCallCompletionResultsWriterTransformer(
return result return result
} }
private val AbstractFirBasedSymbol<*>.isArrayConstructorWithLambda: Boolean private val FirBasedSymbol<*>.isArrayConstructorWithLambda: Boolean
get() { get() {
val constructor = (this as? FirConstructorSymbol)?.fir ?: return false val constructor = (this as? FirConstructorSymbol)?.fir ?: return false
if (constructor.valueParameters.size != 2) return false if (constructor.valueParameters.size != 2) return false
@@ -9,10 +9,10 @@ import org.jetbrains.kotlin.fir.FirRenderer
import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
object FirPhaseCheckingPhaseManager : FirPhaseManager() { object FirPhaseCheckingPhaseManager : FirPhaseManager() {
override fun ensureResolved(symbol: AbstractFirBasedSymbol<*>, requiredPhase: FirResolvePhase) { override fun ensureResolved(symbol: FirBasedSymbol<*>, requiredPhase: FirResolvePhase) {
val fir = symbol.fir as FirDeclaration val fir = symbol.fir as FirDeclaration
val availablePhase = fir.resolvePhase val availablePhase = fir.resolvePhase
require(availablePhase >= requiredPhase) { require(availablePhase >= requiredPhase) {
@@ -8,11 +8,11 @@ package org.jetbrains.kotlin.fir.resolve.transformers
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSessionComponent import org.jetbrains.kotlin.fir.FirSessionComponent
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
abstract class FirPhaseManager : FirSessionComponent { abstract class FirPhaseManager : FirSessionComponent {
abstract fun ensureResolved( abstract fun ensureResolved(
symbol: AbstractFirBasedSymbol<*>, symbol: FirBasedSymbol<*>,
requiredPhase: FirResolvePhase = FirResolvePhase.DECLARATIONS requiredPhase: FirResolvePhase = FirResolvePhase.DECLARATIONS
) )
} }
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition
import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
import org.jetbrains.kotlin.fir.resolve.symbolProvider import org.jetbrains.kotlin.fir.resolve.symbolProvider
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
@@ -306,7 +306,7 @@ private object WhenOnSealedClassExhaustivenessChecker : WhenExhaustivenessChecke
destination: MutableCollection<WhenMissingCase> destination: MutableCollection<WhenMissingCase>
) { ) {
val allSubclasses = subjectType.toSymbol(session)?.collectAllSubclasses(session) ?: return val allSubclasses = subjectType.toSymbol(session)?.collectAllSubclasses(session) ?: return
val checkedSubclasses = mutableSetOf<AbstractFirBasedSymbol<*>>() val checkedSubclasses = mutableSetOf<FirBasedSymbol<*>>()
whenExpression.accept(ConditionChecker, Flags(allSubclasses, checkedSubclasses, session)) whenExpression.accept(ConditionChecker, Flags(allSubclasses, checkedSubclasses, session))
(allSubclasses - checkedSubclasses).mapNotNullTo(destination) { (allSubclasses - checkedSubclasses).mapNotNullTo(destination) {
when (it) { when (it) {
@@ -318,8 +318,8 @@ private object WhenOnSealedClassExhaustivenessChecker : WhenExhaustivenessChecke
} }
private class Flags( private class Flags(
val allSubclasses: Set<AbstractFirBasedSymbol<*>>, val allSubclasses: Set<FirBasedSymbol<*>>,
val checkedSubclasses: MutableSet<AbstractFirBasedSymbol<*>>, val checkedSubclasses: MutableSet<FirBasedSymbol<*>>,
val session: FirSession val session: FirSession
) )
@@ -357,7 +357,7 @@ private object WhenOnSealedClassExhaustivenessChecker : WhenExhaustivenessChecke
processBranch(symbol, isNegated, data) processBranch(symbol, isNegated, data)
} }
private fun processBranch(symbolToCheck: AbstractFirBasedSymbol<*>, isNegated: Boolean, flags: Flags) { private fun processBranch(symbolToCheck: FirBasedSymbol<*>, isNegated: Boolean, flags: Flags) {
val subclassesOfType = symbolToCheck.collectAllSubclasses(flags.session) val subclassesOfType = symbolToCheck.collectAllSubclasses(flags.session)
if (subclassesOfType.none { it in flags.allSubclasses }) { if (subclassesOfType.none { it in flags.allSubclasses }) {
return return
@@ -368,11 +368,11 @@ private object WhenOnSealedClassExhaustivenessChecker : WhenExhaustivenessChecke
} }
private fun AbstractFirBasedSymbol<*>.collectAllSubclasses(session: FirSession): Set<AbstractFirBasedSymbol<*>> { private fun FirBasedSymbol<*>.collectAllSubclasses(session: FirSession): Set<FirBasedSymbol<*>> {
return mutableSetOf<AbstractFirBasedSymbol<*>>().apply { collectAllSubclassesTo(this, session) } return mutableSetOf<FirBasedSymbol<*>>().apply { collectAllSubclassesTo(this, session) }
} }
private fun AbstractFirBasedSymbol<*>.collectAllSubclassesTo(destination: MutableSet<AbstractFirBasedSymbol<*>>, session: FirSession) { private fun FirBasedSymbol<*>.collectAllSubclassesTo(destination: MutableSet<FirBasedSymbol<*>>, session: FirSession) {
if (this !is FirRegularClassSymbol) { if (this !is FirRegularClassSymbol) {
destination.add(this) destination.add(this)
return return
@@ -11,13 +11,13 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.coneTypeSafe import org.jetbrains.kotlin.fir.types.coneTypeSafe
fun AbstractFirBasedSymbol<*>.ensureResolved( fun FirBasedSymbol<*>.ensureResolved(
requiredPhase: FirResolvePhase, requiredPhase: FirResolvePhase,
// TODO: Currently, the parameter is unused but it's needed to guarantee that all call-sites are able to supply use-site session // TODO: Currently, the parameter is unused but it's needed to guarantee that all call-sites are able to supply use-site session
// TODO: Decide which one session should be used and probably get rid of the parameter if use-site session is not needed // TODO: Decide which one session should be used and probably get rid of the parameter if use-site session is not needed
@@ -35,7 +35,7 @@ fun FirSymbolOwner<*>.ensureResolved(
symbol.ensureResolved(requiredPhase, useSiteSession) symbol.ensureResolved(requiredPhase, useSiteSession)
} }
fun AbstractFirBasedSymbol<*>.ensureResolvedForCalls( fun FirBasedSymbol<*>.ensureResolvedForCalls(
useSiteSession: FirSession, useSiteSession: FirSession,
) { ) {
val fir = fir as FirDeclaration val fir = fir as FirDeclaration
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.fir.expressions.builder.buildArgumentList
import org.jetbrains.kotlin.fir.expressions.builder.buildArrayOfCall import org.jetbrains.kotlin.fir.expressions.builder.buildArrayOfCall
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.resolve.calls.FirNamedReferenceWithCandidate import org.jetbrains.kotlin.fir.resolve.calls.FirNamedReferenceWithCandidate
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.types.isArrayType import org.jetbrains.kotlin.fir.types.isArrayType
/** /**
@@ -68,7 +68,7 @@ internal class FirArrayOfCallTransformer {
} }
private fun FirFunctionCall.getOriginalFunction(): FirCallableDeclaration<*>? { private fun FirFunctionCall.getOriginalFunction(): FirCallableDeclaration<*>? {
val symbol: AbstractFirBasedSymbol<*>? = when (val reference = calleeReference) { val symbol: FirBasedSymbol<*>? = when (val reference = calleeReference) {
is FirResolvedNamedReference -> reference.resolvedSymbol is FirResolvedNamedReference -> reference.resolvedSymbol
is FirNamedReferenceWithCandidate -> reference.candidateSymbol is FirNamedReferenceWithCandidate -> reference.candidateSymbol
else -> null else -> null
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclarationDataRegistry
import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
import org.jetbrains.kotlin.fir.resolvedTypeFromPrototype import org.jetbrains.kotlin.fir.resolvedTypeFromPrototype
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -49,5 +49,5 @@ var FirDeclarationAttributes.fakeOverrideSubstitution: FakeOverrideSubstitution?
data class FakeOverrideSubstitution( data class FakeOverrideSubstitution(
val substitutor: ConeSubstitutor, val substitutor: ConeSubstitutor,
val baseSymbol: AbstractFirBasedSymbol<*> val baseSymbol: FirBasedSymbol<*>
) )
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.scopes.FirOverrideChecker import org.jetbrains.kotlin.fir.scopes.FirOverrideChecker
import org.jetbrains.kotlin.fir.scopes.FirTypeScope import org.jetbrains.kotlin.fir.scopes.FirTypeScope
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
abstract class AbstractFirOverrideScope( abstract class AbstractFirOverrideScope(
@@ -49,9 +49,9 @@ abstract class AbstractFirOverrideScope(
protected open fun FirCallableSymbol<*>.getOverridden(overrideCandidates: Set<FirCallableSymbol<*>>): FirCallableSymbol<*>? { protected open fun FirCallableSymbol<*>.getOverridden(overrideCandidates: Set<FirCallableSymbol<*>>): FirCallableSymbol<*>? {
if (overrideByBase.containsKey(this)) return overrideByBase[this] if (overrideByBase.containsKey(this)) return overrideByBase[this]
val baseDeclaration = (this as AbstractFirBasedSymbol<*>).fir as FirCallableMemberDeclaration<*> val baseDeclaration = (this as FirBasedSymbol<*>).fir as FirCallableMemberDeclaration<*>
val override = overrideCandidates.firstOrNull { val override = overrideCandidates.firstOrNull {
val overrideCandidate = (it as AbstractFirBasedSymbol<*>).fir as FirCallableMemberDeclaration<*> val overrideCandidate = (it as FirBasedSymbol<*>).fir as FirCallableMemberDeclaration<*>
baseDeclaration.modality != Modality.FINAL && similarFunctionsOrBothProperties(overrideCandidate, baseDeclaration) baseDeclaration.modality != Modality.FINAL && similarFunctionsOrBothProperties(overrideCandidate, baseDeclaration)
} // TODO: two or more overrides for one fun? } // TODO: two or more overrides for one fun?
overrideByBase[this] = override overrideByBase[this] = override
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLookupTagWithFixedSymbol import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLookupTagWithFixedSymbol
import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef
@@ -188,7 +188,7 @@ fun ConeKotlinType.isUnsafeVarianceType(session: FirSession): Boolean {
return type.attributes.unsafeVarianceType != null return type.attributes.unsafeVarianceType != null
} }
fun ConeKotlinType.toSymbol(session: FirSession): AbstractFirBasedSymbol<*>? { fun ConeKotlinType.toSymbol(session: FirSession): FirBasedSymbol<*>? {
return (this as? ConeLookupTagBasedType)?.lookupTag?.toSymbol(session) return (this as? ConeLookupTagBasedType)?.lookupTag?.toSymbol(session)
} }
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.fir package org.jetbrains.kotlin.fir
import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.visitors.*
interface FirSymbolOwner<E> : FirElement where E : FirSymbolOwner<E>, E : FirDeclaration { interface FirSymbolOwner<E> : FirElement where E : FirSymbolOwner<E>, E : FirDeclaration {
override val source: FirSourceElement? override val source: FirSourceElement?
val symbol: AbstractFirBasedSymbol<E> val symbol: FirBasedSymbol<E>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitSymbolOwner(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitSymbolOwner(this, data)
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.references
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirBackingFieldReference : FirResolvedNamedReference() { abstract class FirBackingFieldReference : FirResolvedNamedReference() {
abstract override val source: FirSourceElement? abstract override val source: FirSourceElement?
abstract override val name: Name abstract override val name: Name
abstract override val candidateSymbol: AbstractFirBasedSymbol<*>? abstract override val candidateSymbol: FirBasedSymbol<*>?
abstract override val resolvedSymbol: FirBackingFieldSymbol abstract override val resolvedSymbol: FirBackingFieldSymbol
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitBackingFieldReference(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitBackingFieldReference(this, data)
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.references
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirDelegateFieldReference : FirResolvedNamedReference() { abstract class FirDelegateFieldReference : FirResolvedNamedReference() {
abstract override val source: FirSourceElement? abstract override val source: FirSourceElement?
abstract override val name: Name abstract override val name: Name
abstract override val candidateSymbol: AbstractFirBasedSymbol<*>? abstract override val candidateSymbol: FirBasedSymbol<*>?
abstract override val resolvedSymbol: FirDelegateFieldSymbol<*> abstract override val resolvedSymbol: FirDelegateFieldSymbol<*>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitDelegateFieldReference(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitDelegateFieldReference(this, data)
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirErrorNamedReference : FirNamedReference(), FirDiagnosticHolder { abstract class FirErrorNamedReference : FirNamedReference(), FirDiagnosticHolder {
abstract override val source: FirSourceElement? abstract override val source: FirSourceElement?
abstract override val name: Name abstract override val name: Name
abstract override val candidateSymbol: AbstractFirBasedSymbol<*>? abstract override val candidateSymbol: FirBasedSymbol<*>?
abstract override val diagnostic: ConeDiagnostic abstract override val diagnostic: ConeDiagnostic
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitErrorNamedReference(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitErrorNamedReference(this, data)
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.references
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirNamedReference : FirReference() { abstract class FirNamedReference : FirReference() {
abstract override val source: FirSourceElement? abstract override val source: FirSourceElement?
abstract val name: Name abstract val name: Name
abstract val candidateSymbol: AbstractFirBasedSymbol<*>? abstract val candidateSymbol: FirBasedSymbol<*>?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitNamedReference(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitNamedReference(this, data)
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.references
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.resolve.calls.CallableReferenceMappedArguments import org.jetbrains.kotlin.fir.resolve.calls.CallableReferenceMappedArguments
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -21,8 +21,8 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirResolvedCallableReference : FirResolvedNamedReference() { abstract class FirResolvedCallableReference : FirResolvedNamedReference() {
abstract override val source: FirSourceElement? abstract override val source: FirSourceElement?
abstract override val name: Name abstract override val name: Name
abstract override val candidateSymbol: AbstractFirBasedSymbol<*>? abstract override val candidateSymbol: FirBasedSymbol<*>?
abstract override val resolvedSymbol: AbstractFirBasedSymbol<*> abstract override val resolvedSymbol: FirBasedSymbol<*>
abstract val inferredTypeArguments: List<ConeKotlinType> abstract val inferredTypeArguments: List<ConeKotlinType>
abstract val mappedArguments: CallableReferenceMappedArguments abstract val mappedArguments: CallableReferenceMappedArguments
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.references
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -19,8 +19,8 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirResolvedNamedReference : FirNamedReference() { abstract class FirResolvedNamedReference : FirNamedReference() {
abstract override val source: FirSourceElement? abstract override val source: FirSourceElement?
abstract override val name: Name abstract override val name: Name
abstract override val candidateSymbol: AbstractFirBasedSymbol<*>? abstract override val candidateSymbol: FirBasedSymbol<*>?
abstract val resolvedSymbol: AbstractFirBasedSymbol<*> abstract val resolvedSymbol: FirBasedSymbol<*>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitResolvedNamedReference(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitResolvedNamedReference(this, data)
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.references
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirThisReference : FirReference() { abstract class FirThisReference : FirReference() {
abstract override val source: FirSourceElement? abstract override val source: FirSourceElement?
abstract val labelName: String? abstract val labelName: String?
abstract val boundSymbol: AbstractFirBasedSymbol<*>? abstract val boundSymbol: FirBasedSymbol<*>?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitThisReference(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitThisReference(this, data)
@@ -26,5 +26,5 @@ abstract class FirThisReference : FirReference() {
override fun <E: FirElement, D> transform(transformer: FirTransformer<D>, data: D): E = override fun <E: FirElement, D> transform(transformer: FirTransformer<D>, data: D): E =
transformer.transformThisReference(this, data) as E transformer.transformThisReference(this, data) as E
abstract fun replaceBoundSymbol(newBoundSymbol: AbstractFirBasedSymbol<*>?) abstract fun replaceBoundSymbol(newBoundSymbol: FirBasedSymbol<*>?)
} }
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.references.FirBackingFieldReference import org.jetbrains.kotlin.fir.references.FirBackingFieldReference
import org.jetbrains.kotlin.fir.references.impl.FirBackingFieldReferenceImpl import org.jetbrains.kotlin.fir.references.impl.FirBackingFieldReferenceImpl
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.name.Name
@FirBuilderDsl @FirBuilderDsl
class FirBackingFieldReferenceBuilder { class FirBackingFieldReferenceBuilder {
var source: FirSourceElement? = null var source: FirSourceElement? = null
var candidateSymbol: AbstractFirBasedSymbol<*>? = null var candidateSymbol: FirBasedSymbol<*>? = null
lateinit var resolvedSymbol: FirBackingFieldSymbol lateinit var resolvedSymbol: FirBackingFieldSymbol
fun build(): FirBackingFieldReference { fun build(): FirBackingFieldReference {
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
import org.jetbrains.kotlin.fir.references.impl.FirDelegateFieldReferenceImpl import org.jetbrains.kotlin.fir.references.impl.FirDelegateFieldReferenceImpl
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.name.Name
@FirBuilderDsl @FirBuilderDsl
class FirDelegateFieldReferenceBuilder { class FirDelegateFieldReferenceBuilder {
var source: FirSourceElement? = null var source: FirSourceElement? = null
var candidateSymbol: AbstractFirBasedSymbol<*>? = null var candidateSymbol: FirBasedSymbol<*>? = null
lateinit var resolvedSymbol: FirDelegateFieldSymbol<*> lateinit var resolvedSymbol: FirDelegateFieldSymbol<*>
fun build(): FirDelegateFieldReference { fun build(): FirDelegateFieldReference {
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.impl.FirErrorNamedReferenceImpl import org.jetbrains.kotlin.fir.references.impl.FirErrorNamedReferenceImpl
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.name.Name
@FirBuilderDsl @FirBuilderDsl
class FirErrorNamedReferenceBuilder { class FirErrorNamedReferenceBuilder {
var source: FirSourceElement? = null var source: FirSourceElement? = null
var candidateSymbol: AbstractFirBasedSymbol<*>? = null var candidateSymbol: FirBasedSymbol<*>? = null
lateinit var diagnostic: ConeDiagnostic lateinit var diagnostic: ConeDiagnostic
fun build(): FirErrorNamedReference { fun build(): FirErrorNamedReference {
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.references.FirThisReference
import org.jetbrains.kotlin.fir.references.impl.FirExplicitThisReference import org.jetbrains.kotlin.fir.references.impl.FirExplicitThisReference
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.references.FirThisReference
import org.jetbrains.kotlin.fir.references.impl.FirImplicitThisReference import org.jetbrains.kotlin.fir.references.impl.FirImplicitThisReference
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.visitors.*
@FirBuilderDsl @FirBuilderDsl
class FirImplicitThisReferenceBuilder { class FirImplicitThisReferenceBuilder {
var boundSymbol: AbstractFirBasedSymbol<*>? = null var boundSymbol: FirBasedSymbol<*>? = null
fun build(): FirThisReference { fun build(): FirThisReference {
return FirImplicitThisReference( return FirImplicitThisReference(
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.references.impl.FirPropertyFromParameterResolvedNamedReference import org.jetbrains.kotlin.fir.references.impl.FirPropertyFromParameterResolvedNamedReference
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.name.Name
class FirPropertyFromParameterResolvedNamedReferenceBuilder { class FirPropertyFromParameterResolvedNamedReferenceBuilder {
var source: FirSourceElement? = null var source: FirSourceElement? = null
lateinit var name: Name lateinit var name: Name
lateinit var resolvedSymbol: AbstractFirBasedSymbol<*> lateinit var resolvedSymbol: FirBasedSymbol<*>
@OptIn(FirImplementationDetail::class) @OptIn(FirImplementationDetail::class)
fun build(): FirResolvedNamedReference { fun build(): FirResolvedNamedReference {
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference
import org.jetbrains.kotlin.fir.references.impl.FirResolvedCallableReferenceImpl import org.jetbrains.kotlin.fir.references.impl.FirResolvedCallableReferenceImpl
import org.jetbrains.kotlin.fir.resolve.calls.CallableReferenceMappedArguments import org.jetbrains.kotlin.fir.resolve.calls.CallableReferenceMappedArguments
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.name.Name
class FirResolvedCallableReferenceBuilder { class FirResolvedCallableReferenceBuilder {
var source: FirSourceElement? = null var source: FirSourceElement? = null
lateinit var name: Name lateinit var name: Name
lateinit var resolvedSymbol: AbstractFirBasedSymbol<*> lateinit var resolvedSymbol: FirBasedSymbol<*>
val inferredTypeArguments: MutableList<ConeKotlinType> = mutableListOf() val inferredTypeArguments: MutableList<ConeKotlinType> = mutableListOf()
lateinit var mappedArguments: CallableReferenceMappedArguments lateinit var mappedArguments: CallableReferenceMappedArguments
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.references.impl.FirResolvedNamedReferenceImpl import org.jetbrains.kotlin.fir.references.impl.FirResolvedNamedReferenceImpl
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.name.Name
class FirResolvedNamedReferenceBuilder { class FirResolvedNamedReferenceBuilder {
var source: FirSourceElement? = null var source: FirSourceElement? = null
lateinit var name: Name lateinit var name: Name
lateinit var resolvedSymbol: AbstractFirBasedSymbol<*> lateinit var resolvedSymbol: FirBasedSymbol<*>
fun build(): FirResolvedNamedReference { fun build(): FirResolvedNamedReference {
return FirResolvedNamedReferenceImpl( return FirResolvedNamedReferenceImpl(
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.name.Name
class FirSimpleNamedReferenceBuilder { class FirSimpleNamedReferenceBuilder {
var source: FirSourceElement? = null var source: FirSourceElement? = null
lateinit var name: Name lateinit var name: Name
var candidateSymbol: AbstractFirBasedSymbol<*>? = null var candidateSymbol: FirBasedSymbol<*>? = null
@OptIn(FirImplementationDetail::class) @OptIn(FirImplementationDetail::class)
fun build(): FirNamedReference { fun build(): FirNamedReference {
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.references.impl
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.references.FirBackingFieldReference import org.jetbrains.kotlin.fir.references.FirBackingFieldReference
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.visitors.*
internal class FirBackingFieldReferenceImpl( internal class FirBackingFieldReferenceImpl(
override val source: FirSourceElement?, override val source: FirSourceElement?,
override val candidateSymbol: AbstractFirBasedSymbol<*>?, override val candidateSymbol: FirBasedSymbol<*>?,
override val resolvedSymbol: FirBackingFieldSymbol, override val resolvedSymbol: FirBackingFieldSymbol,
) : FirBackingFieldReference() { ) : FirBackingFieldReference() {
override val name: Name get() = Name.identifier("\$field") override val name: Name get() = Name.identifier("\$field")
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.references.impl
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.visitors.*
internal class FirDelegateFieldReferenceImpl( internal class FirDelegateFieldReferenceImpl(
override val source: FirSourceElement?, override val source: FirSourceElement?,
override val candidateSymbol: AbstractFirBasedSymbol<*>?, override val candidateSymbol: FirBasedSymbol<*>?,
override val resolvedSymbol: FirDelegateFieldSymbol<*>, override val resolvedSymbol: FirDelegateFieldSymbol<*>,
) : FirDelegateFieldReference() { ) : FirDelegateFieldReference() {
override val name: Name get() = Name.identifier("\$delegate") override val name: Name get() = Name.identifier("\$delegate")
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.references.impl
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.visitors.*
internal class FirErrorNamedReferenceImpl( internal class FirErrorNamedReferenceImpl(
override val source: FirSourceElement?, override val source: FirSourceElement?,
override val candidateSymbol: AbstractFirBasedSymbol<*>?, override val candidateSymbol: FirBasedSymbol<*>?,
override val diagnostic: ConeDiagnostic, override val diagnostic: ConeDiagnostic,
) : FirErrorNamedReference() { ) : FirErrorNamedReference() {
override val name: Name = Name.special("<${diagnostic.reason}>") override val name: Name = Name.special("<${diagnostic.reason}>")
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.references.impl
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.references.FirThisReference
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -19,7 +19,7 @@ internal class FirExplicitThisReference(
override val source: FirSourceElement?, override val source: FirSourceElement?,
override val labelName: String?, override val labelName: String?,
) : FirThisReference() { ) : FirThisReference() {
override var boundSymbol: AbstractFirBasedSymbol<*>? = null override var boundSymbol: FirBasedSymbol<*>? = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {} override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
@@ -27,7 +27,7 @@ internal class FirExplicitThisReference(
return this return this
} }
override fun replaceBoundSymbol(newBoundSymbol: AbstractFirBasedSymbol<*>?) { override fun replaceBoundSymbol(newBoundSymbol: FirBasedSymbol<*>?) {
boundSymbol = newBoundSymbol boundSymbol = newBoundSymbol
} }
} }
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.references.impl
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.references.FirThisReference
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
/* /*
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/ */
internal class FirImplicitThisReference( internal class FirImplicitThisReference(
override val boundSymbol: AbstractFirBasedSymbol<*>?, override val boundSymbol: FirBasedSymbol<*>?,
) : FirThisReference() { ) : FirThisReference() {
override val source: FirSourceElement? get() = null override val source: FirSourceElement? get() = null
override val labelName: String? get() = null override val labelName: String? get() = null
@@ -27,5 +27,5 @@ internal class FirImplicitThisReference(
return this return this
} }
override fun replaceBoundSymbol(newBoundSymbol: AbstractFirBasedSymbol<*>?) {} override fun replaceBoundSymbol(newBoundSymbol: FirBasedSymbol<*>?) {}
} }
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.references.impl
import org.jetbrains.kotlin.fir.FirImplementationDetail import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -20,9 +20,9 @@ import org.jetbrains.kotlin.fir.visitors.*
class FirPropertyFromParameterResolvedNamedReference @FirImplementationDetail constructor( class FirPropertyFromParameterResolvedNamedReference @FirImplementationDetail constructor(
override val source: FirSourceElement?, override val source: FirSourceElement?,
override val name: Name, override val name: Name,
override val resolvedSymbol: AbstractFirBasedSymbol<*>, override val resolvedSymbol: FirBasedSymbol<*>,
) : FirResolvedNamedReference() { ) : FirResolvedNamedReference() {
override val candidateSymbol: AbstractFirBasedSymbol<*>? get() = null override val candidateSymbol: FirBasedSymbol<*>? get() = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {} override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.references.impl
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference
import org.jetbrains.kotlin.fir.resolve.calls.CallableReferenceMappedArguments import org.jetbrains.kotlin.fir.resolve.calls.CallableReferenceMappedArguments
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -21,11 +21,11 @@ import org.jetbrains.kotlin.fir.visitors.*
internal class FirResolvedCallableReferenceImpl( internal class FirResolvedCallableReferenceImpl(
override val source: FirSourceElement?, override val source: FirSourceElement?,
override val name: Name, override val name: Name,
override val resolvedSymbol: AbstractFirBasedSymbol<*>, override val resolvedSymbol: FirBasedSymbol<*>,
override val inferredTypeArguments: MutableList<ConeKotlinType>, override val inferredTypeArguments: MutableList<ConeKotlinType>,
override val mappedArguments: CallableReferenceMappedArguments, override val mappedArguments: CallableReferenceMappedArguments,
) : FirResolvedCallableReference() { ) : FirResolvedCallableReference() {
override val candidateSymbol: AbstractFirBasedSymbol<*>? get() = null override val candidateSymbol: FirBasedSymbol<*>? get() = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {} override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.references.impl
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -19,9 +19,9 @@ import org.jetbrains.kotlin.fir.visitors.*
internal class FirResolvedNamedReferenceImpl( internal class FirResolvedNamedReferenceImpl(
override val source: FirSourceElement?, override val source: FirSourceElement?,
override val name: Name, override val name: Name,
override val resolvedSymbol: AbstractFirBasedSymbol<*>, override val resolvedSymbol: FirBasedSymbol<*>,
) : FirResolvedNamedReference() { ) : FirResolvedNamedReference() {
override val candidateSymbol: AbstractFirBasedSymbol<*>? get() = null override val candidateSymbol: FirBasedSymbol<*>? get() = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {} override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.references.impl
import org.jetbrains.kotlin.fir.FirImplementationDetail import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.visitors.*
open class FirSimpleNamedReference @FirImplementationDetail constructor( open class FirSimpleNamedReference @FirImplementationDetail constructor(
override val source: FirSourceElement?, override val source: FirSourceElement?,
override val name: Name, override val name: Name,
override val candidateSymbol: AbstractFirBasedSymbol<*>?, override val candidateSymbol: FirBasedSymbol<*>?,
) : FirNamedReference() { ) : FirNamedReference() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {} override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.impl.* import org.jetbrains.kotlin.fir.expressions.impl.*
import org.jetbrains.kotlin.fir.references.* import org.jetbrains.kotlin.fir.references.*
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
@@ -1051,7 +1051,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM
print("*") print("*")
} }
private fun AbstractFirBasedSymbol<*>.render(): String { private fun FirBasedSymbol<*>.render(): String {
return when (this) { return when (this) {
is FirCallableSymbol<*> -> callableId.toString() is FirCallableSymbol<*> -> callableId.toString()
is FirClassLikeSymbol<*> -> classId.toString() is FirClassLikeSymbol<*> -> classId.toString()
@@ -1117,7 +1117,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM
print("|") print("|")
} }
private fun AbstractFirBasedSymbol<*>.unwrapIntersectionOverrides(): AbstractFirBasedSymbol<*> { private fun FirBasedSymbol<*>.unwrapIntersectionOverrides(): FirBasedSymbol<*> {
(this as? FirCallableSymbol<*>)?.baseForIntersectionOverride?.let { return it.unwrapIntersectionOverrides() } (this as? FirCallableSymbol<*>)?.baseForIntersectionOverride?.let { return it.unwrapIntersectionOverrides() }
return this return this
} }
@@ -1,21 +0,0 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.symbols
import org.jetbrains.kotlin.fir.FirSymbolOwner
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
abstract class AbstractFirBasedSymbol<E> : FirBasedSymbol<E> where E : FirSymbolOwner<E>, E : FirDeclaration {
private var _fir: E? = null
override val fir: E
get() = _fir
?: error("Fir is not initialized for $this")
override fun bind(e: E) {
_fir = e
}
}
@@ -8,8 +8,14 @@ package org.jetbrains.kotlin.fir.symbols
import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.FirSymbolOwner
import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration
interface FirBasedSymbol<E> where E : FirSymbolOwner<E>, E : FirDeclaration { abstract class FirBasedSymbol<E> where E : FirSymbolOwner<E>, E : FirDeclaration {
val fir: E private var _fir: E? = null
fun bind(e: E) val fir: E
get() = _fir
?: error("Fir is not initialized for $this")
fun bind(e: E) {
_fir = e
}
} }
@@ -6,8 +6,8 @@
package org.jetbrains.kotlin.fir.symbols.impl package org.jetbrains.kotlin.fir.symbols.impl
import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
class FirAnonymousInitializerSymbol : AbstractFirBasedSymbol<FirAnonymousInitializer>() { class FirAnonymousInitializerSymbol : FirBasedSymbol<FirAnonymousInitializer>() {
override fun toString(): String = "${this::class.simpleName} <init>" override fun toString(): String = "${this::class.simpleName} <init>"
} }
@@ -9,10 +9,10 @@ import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.declarations.FirFunction import org.jetbrains.kotlin.fir.declarations.FirFunction
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.CallableId
abstract class FirCallableSymbol<D : FirCallableDeclaration<D>> : AbstractFirBasedSymbol<D>() { abstract class FirCallableSymbol<D : FirCallableDeclaration<D>> : FirBasedSymbol<D>() {
abstract val callableId: CallableId abstract val callableId: CallableId
override fun toString(): String = "${this::class.simpleName} $callableId" override fun toString(): String = "${this::class.simpleName} $callableId"
@@ -7,10 +7,10 @@ package org.jetbrains.kotlin.fir.symbols.impl
import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.FirSymbolOwner
import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag
sealed class FirClassifierSymbol<E> : AbstractFirBasedSymbol<E>() sealed class FirClassifierSymbol<E> : FirBasedSymbol<E>()
where E : FirSymbolOwner<E>, E : FirDeclaration { where E : FirSymbolOwner<E>, E : FirDeclaration {
abstract fun toLookupTag(): ConeClassifierLookupTag abstract fun toLookupTag(): ConeClassifierLookupTag
} }
@@ -48,7 +48,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
symbolOwner.configure { symbolOwner.configure {
withArg("E", symbolOwner, declaration) withArg("E", symbolOwner, declaration)
+symbolWithPackage("fir.symbols", "AbstractFirBasedSymbol", "E") +symbolWithPackage("fir.symbols", "FirBasedSymbol", "E")
} }
typeParameterRef.configure { typeParameterRef.configure {
@@ -560,11 +560,11 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
namedReference.configure { namedReference.configure {
+name +name
+field("candidateSymbol", abstractFirBasedSymbolType, "*", nullable = true) +field("candidateSymbol", firBasedSymbolType, "*", nullable = true)
} }
resolvedNamedReference.configure { resolvedNamedReference.configure {
+field("resolvedSymbol", abstractFirBasedSymbolType, "*") +field("resolvedSymbol", firBasedSymbolType, "*")
} }
resolvedCallableReference.configure { resolvedCallableReference.configure {
@@ -587,7 +587,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
thisReference.configure { thisReference.configure {
+stringField("labelName", nullable = true) +stringField("labelName", nullable = true)
+field("boundSymbol", abstractFirBasedSymbolType, "*", nullable = true, withReplace = true) +field("boundSymbol", firBasedSymbolType, "*", nullable = true, withReplace = true)
} }
typeRef.configure { typeRef.configure {
@@ -63,7 +63,7 @@ val implicitUnitTypeRefType = generatedType("types.impl", "FirImplicitUnitTypeRe
val resolvePhaseType = type("fir.declarations", "FirResolvePhase") val resolvePhaseType = type("fir.declarations", "FirResolvePhase")
val stubReferenceType = generatedType("references.impl", "FirStubReference") val stubReferenceType = generatedType("references.impl", "FirStubReference")
val abstractFirBasedSymbolType = type("fir.symbols", "AbstractFirBasedSymbol") val firBasedSymbolType = type("fir.symbols", "FirBasedSymbol")
val backingFieldSymbolType = type("fir.symbols.impl", "FirBackingFieldSymbol") val backingFieldSymbolType = type("fir.symbols.impl", "FirBackingFieldSymbol")
val delegateFieldSymbolType = type("fir.symbols.impl", "FirDelegateFieldSymbol") val delegateFieldSymbolType = type("fir.symbols.impl", "FirDelegateFieldSymbol")
val classSymbolType = type("fir.symbols.impl", "FirClassSymbol") val classSymbolType = type("fir.symbols.impl", "FirClassSymbol")
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.expressions.FirSafeCallExpression import org.jetbrains.kotlin.fir.expressions.FirSafeCallExpression
import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
@@ -280,7 +280,7 @@ class FirDiagnosticsHandler(testServices: TestServices) : FirAnalysisHandler(tes
private fun getTypeOfCall( private fun getTypeOfCall(
reference: FirNamedReference, reference: FirNamedReference,
resolvedSymbol: AbstractFirBasedSymbol<*>? resolvedSymbol: FirBasedSymbol<*>?
): String { ): String {
if (resolvedSymbol == null) return TypeOfCall.UNRESOLVED.nameToRender if (resolvedSymbol == null) return TypeOfCall.UNRESOLVED.nameToRender
@@ -307,7 +307,7 @@ class FirDiagnosticsHandler(testServices: TestServices) : FirAnalysisHandler(tes
} }
} }
private fun AbstractFirBasedSymbol<*>.fqNameUnsafe(): FqNameUnsafe? = when (this) { private fun FirBasedSymbol<*>.fqNameUnsafe(): FqNameUnsafe? = when (this) {
is FirClassLikeSymbol<*> -> classId.asSingleFqName().toUnsafe() is FirClassLikeSymbol<*> -> classId.asSingleFqName().toUnsafe()
is FirCallableSymbol<*> -> callableId.asFqNameForDebugInfo().toUnsafe() is FirCallableSymbol<*> -> callableId.asFqNameForDebugInfo().toUnsafe()
else -> null else -> null
@@ -13,7 +13,7 @@ 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.symbolProvider import org.jetbrains.kotlin.fir.resolve.symbolProvider
import org.jetbrains.kotlin.fir.scopes.* import org.jetbrains.kotlin.fir.scopes.*
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol 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.render import org.jetbrains.kotlin.fir.types.render
@@ -66,10 +66,10 @@ class FirScopeDumpHandler(testServices: TestServices) : FirAnalysisHandler(testS
} }
private class SymbolCounter { private class SymbolCounter {
private val map = mutableMapOf<AbstractFirBasedSymbol<*>, Int>() private val map = mutableMapOf<FirBasedSymbol<*>, Int>()
private var counter = 0 private var counter = 0
fun getIndex(symbol: AbstractFirBasedSymbol<*>): Int { fun getIndex(symbol: FirBasedSymbol<*>): Int {
return map.computeIfAbsent(symbol) { counter++ } return map.computeIfAbsent(symbol) { counter++ }
} }
} }
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.FirControlFlowGraphRenderVisitor import org.jetbrains.kotlin.fir.resolve.dfa.cfg.FirControlFlowGraphRenderVisitor
import org.jetbrains.kotlin.fir.resolve.transformers.createAllCompilerResolveProcessors import org.jetbrains.kotlin.fir.resolve.transformers.createAllCompilerResolveProcessors
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
@@ -228,7 +228,7 @@ abstract class AbstractFirDiagnosticsTest : AbstractFirBaseDiagnosticsTest() {
} }
} }
private fun AbstractFirBasedSymbol<*>.fqNameUnsafe(): FqNameUnsafe? = when (this) { private fun FirBasedSymbol<*>.fqNameUnsafe(): FqNameUnsafe? = when (this) {
is FirClassLikeSymbol<*> -> classId.asSingleFqName().toUnsafe() is FirClassLikeSymbol<*> -> classId.asSingleFqName().toUnsafe()
is FirCallableSymbol<*> -> callableId.asFqNameForDebugInfo().toUnsafe() is FirCallableSymbol<*> -> callableId.asFqNameForDebugInfo().toUnsafe()
else -> null else -> null
@@ -236,7 +236,7 @@ abstract class AbstractFirDiagnosticsTest : AbstractFirBaseDiagnosticsTest() {
private fun getTypeOfCall( private fun getTypeOfCall(
reference: FirNamedReference, reference: FirNamedReference,
resolvedSymbol: AbstractFirBasedSymbol<*>? resolvedSymbol: FirBasedSymbol<*>?
): String { ): String {
if (resolvedSymbol == null) return TypeOfCall.UNRESOLVED.nameToRender if (resolvedSymbol == null) return TypeOfCall.UNRESOLVED.nameToRender
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.references.*
import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.firUnsafe import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.firUnsafe
import org.jetbrains.kotlin.fir.scopes.impl.delegatedWrapperData import org.jetbrains.kotlin.fir.scopes.impl.delegatedWrapperData
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol 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.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
@@ -465,7 +465,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
return current return current
} }
private fun renderImplicitReceiver(symbol: AbstractFirBasedSymbol<*>, psi: PsiElement?) { private fun renderImplicitReceiver(symbol: FirBasedSymbol<*>, psi: PsiElement?) {
val receiverType = (symbol.fir as? FirCallableMemberDeclaration<*>)?.dispatchReceiverType ?: return val receiverType = (symbol.fir as? FirCallableMemberDeclaration<*>)?.dispatchReceiverType ?: return
val implicitReceiverIndex = implicitReceivers.indexOf(receiverType) val implicitReceiverIndex = implicitReceivers.indexOf(receiverType)
if (implicitReceiverIndex != -1) addAnnotation("this@$implicitReceiverIndex", psi) if (implicitReceiverIndex != -1) addAnnotation("this@$implicitReceiverIndex", psi)
@@ -837,7 +837,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
data.append("(vararg $valueParameter): $name${typeParameters.trim()}") // TODO change "T" to concrete type is array is primitive data.append("(vararg $valueParameter): $name${typeParameters.trim()}") // TODO change "T" to concrete type is array is primitive
} }
private fun AbstractFirBasedSymbol<*>.isLocalDeclaration(): Boolean { private fun FirBasedSymbol<*>.isLocalDeclaration(): Boolean {
return when (val fir = this.fir) { return when (val fir = this.fir) {
is FirConstructor -> fir.returnTypeRef.coneType.isLocal() is FirConstructor -> fir.returnTypeRef.coneType.isLocal()
is FirCallableDeclaration<*> -> { is FirCallableDeclaration<*> -> {
@@ -853,7 +853,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
} }
// id == packageName + className // id == packageName + className
private fun getSymbolId(symbol: AbstractFirBasedSymbol<*>?): String { private fun getSymbolId(symbol: FirBasedSymbol<*>?): String {
return when (symbol) { return when (symbol) {
is FirCallableSymbol<*> -> { is FirCallableSymbol<*> -> {
if (symbol.isLocalDeclaration()) { if (symbol.isLocalDeclaration()) {
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.transformers.FirPhaseManager import org.jetbrains.kotlin.fir.resolve.transformers.FirPhaseManager
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache
import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.FirLazyDeclarationResolver import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.FirLazyDeclarationResolver
import org.jetbrains.kotlin.idea.fir.low.level.api.sessions.FirSessionInvalidator import org.jetbrains.kotlin.idea.fir.low.level.api.sessions.FirSessionInvalidator
@@ -22,7 +22,7 @@ internal class IdeFirPhaseManager(
private val sessionInvalidator: FirSessionInvalidator, private val sessionInvalidator: FirSessionInvalidator,
) : FirPhaseManager() { ) : FirPhaseManager() {
override fun ensureResolved( override fun ensureResolved(
symbol: AbstractFirBasedSymbol<*>, symbol: FirBasedSymbol<*>,
requiredPhase: FirResolvePhase requiredPhase: FirResolvePhase
) { ) {
val fir = symbol.fir as FirDeclaration val fir = symbol.fir as FirDeclaration
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.psi import org.jetbrains.kotlin.fir.psi
import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
@@ -71,7 +71,7 @@ internal class KtToFirMapping(firElement: FirElement, recorder: FirElementsRecor
} }
} }
internal sealed class ReanalyzableStructureElement<KT : KtDeclaration, S : AbstractFirBasedSymbol<*>>( internal sealed class ReanalyzableStructureElement<KT : KtDeclaration, S : FirBasedSymbol<*>>(
firFile: FirFile, firFile: FirFile,
val firSymbol: S, val firSymbol: S,
lockProvider: LockProvider<FirFile>, lockProvider: LockProvider<FirFile>,
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.FirSymbolOwner
import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousInitializerSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousInitializerSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
@@ -30,7 +30,7 @@ internal fun FirElement.renderWithClassName(renderMode: FirRenderer.RenderMode =
"${this::class.simpleName} `${render(renderMode)}`" "${this::class.simpleName} `${render(renderMode)}`"
internal fun AbstractFirBasedSymbol<*>.name(): String = when (this) { internal fun FirBasedSymbol<*>.name(): String = when (this) {
is FirCallableSymbol<*> -> callableId.callableName.asString() is FirCallableSymbol<*> -> callableId.callableName.asString()
is FirClassLikeSymbol<*> -> classId.shortClassName.asString() is FirClassLikeSymbol<*> -> classId.shortClassName.asString()
is FirAnonymousInitializerSymbol -> "<init>" is FirAnonymousInitializerSymbol -> "<init>"
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.checkers.generator.diagnostics.model.DiagnosticP
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol 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.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -136,7 +136,7 @@ private object FirToKtConversionCreator {
) )
private val typeMapping: Map<KClass<*>, HLFunctionCallConversion> = mapOf( private val typeMapping: Map<KClass<*>, HLFunctionCallConversion> = mapOf(
AbstractFirBasedSymbol::class to HLFunctionCallConversion( FirBasedSymbol::class to HLFunctionCallConversion(
"firSymbolBuilder.buildSymbol({0}.fir as FirDeclaration)", "firSymbolBuilder.buildSymbol({0}.fir as FirDeclaration)",
KtSymbol::class.createType(), KtSymbol::class.createType(),
importsToAdd = listOf("org.jetbrains.kotlin.fir.declarations.FirDeclaration") importsToAdd = listOf("org.jetbrains.kotlin.fir.declarations.FirDeclaration")
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.FirSymbolOwner
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.scopes.* import org.jetbrains.kotlin.fir.scopes.*
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirIntersectionOverrideFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirIntersectionOverrideFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirIntersectionOverridePropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirIntersectionOverridePropertySymbol
@@ -139,7 +139,7 @@ internal class KtFirSymbolDeclarationOverridesProvider(
} }
} }
private fun AbstractFirBasedSymbol<*>.getIntersectionOverriddenSymbols(): Collection<FirCallableSymbol<*>> { private fun FirBasedSymbol<*>.getIntersectionOverriddenSymbols(): Collection<FirCallableSymbol<*>> {
require(this is FirCallableSymbol<*>) { require(this is FirCallableSymbol<*>) {
"Required FirCallableSymbol but ${this::class} found" "Required FirCallableSymbol but ${this::class} found"
} }
@@ -1079,8 +1079,8 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
} }
add(FirErrors.NONE_APPLICABLE) { firDiagnostic -> add(FirErrors.NONE_APPLICABLE) { firDiagnostic ->
NoneApplicableImpl( NoneApplicableImpl(
firDiagnostic.a.map { abstractFirBasedSymbol -> firDiagnostic.a.map { firBasedSymbol ->
firSymbolBuilder.buildSymbol(abstractFirBasedSymbol.fir as FirDeclaration) firSymbolBuilder.buildSymbol(firBasedSymbol.fir as FirDeclaration)
}, },
firDiagnostic as FirPsiDiagnostic, firDiagnostic as FirPsiDiagnostic,
token, token,
@@ -1214,8 +1214,8 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
} }
add(FirErrors.OVERLOAD_RESOLUTION_AMBIGUITY) { firDiagnostic -> add(FirErrors.OVERLOAD_RESOLUTION_AMBIGUITY) { firDiagnostic ->
OverloadResolutionAmbiguityImpl( OverloadResolutionAmbiguityImpl(
firDiagnostic.a.map { abstractFirBasedSymbol -> firDiagnostic.a.map { firBasedSymbol ->
firSymbolBuilder.buildSymbol(abstractFirBasedSymbol.fir as FirDeclaration) firSymbolBuilder.buildSymbol(firBasedSymbol.fir as FirDeclaration)
}, },
firDiagnostic as FirPsiDiagnostic, firDiagnostic as FirPsiDiagnostic,
token, token,
@@ -1223,8 +1223,8 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
} }
add(FirErrors.ASSIGN_OPERATOR_AMBIGUITY) { firDiagnostic -> add(FirErrors.ASSIGN_OPERATOR_AMBIGUITY) { firDiagnostic ->
AssignOperatorAmbiguityImpl( AssignOperatorAmbiguityImpl(
firDiagnostic.a.map { abstractFirBasedSymbol -> firDiagnostic.a.map { firBasedSymbol ->
firSymbolBuilder.buildSymbol(abstractFirBasedSymbol.fir as FirDeclaration) firSymbolBuilder.buildSymbol(firBasedSymbol.fir as FirDeclaration)
}, },
firDiagnostic as FirPsiDiagnostic, firDiagnostic as FirPsiDiagnostic,
token, token,
@@ -1232,8 +1232,8 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
} }
add(FirErrors.ITERATOR_AMBIGUITY) { firDiagnostic -> add(FirErrors.ITERATOR_AMBIGUITY) { firDiagnostic ->
IteratorAmbiguityImpl( IteratorAmbiguityImpl(
firDiagnostic.a.map { abstractFirBasedSymbol -> firDiagnostic.a.map { firBasedSymbol ->
firSymbolBuilder.buildSymbol(abstractFirBasedSymbol.fir as FirDeclaration) firSymbolBuilder.buildSymbol(firBasedSymbol.fir as FirDeclaration)
}, },
firDiagnostic as FirPsiDiagnostic, firDiagnostic as FirPsiDiagnostic,
token, token,
@@ -1241,8 +1241,8 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
} }
add(FirErrors.HAS_NEXT_FUNCTION_AMBIGUITY) { firDiagnostic -> add(FirErrors.HAS_NEXT_FUNCTION_AMBIGUITY) { firDiagnostic ->
HasNextFunctionAmbiguityImpl( HasNextFunctionAmbiguityImpl(
firDiagnostic.a.map { abstractFirBasedSymbol -> firDiagnostic.a.map { firBasedSymbol ->
firSymbolBuilder.buildSymbol(abstractFirBasedSymbol.fir as FirDeclaration) firSymbolBuilder.buildSymbol(firBasedSymbol.fir as FirDeclaration)
}, },
firDiagnostic as FirPsiDiagnostic, firDiagnostic as FirPsiDiagnostic,
token, token,
@@ -1250,8 +1250,8 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
} }
add(FirErrors.NEXT_AMBIGUITY) { firDiagnostic -> add(FirErrors.NEXT_AMBIGUITY) { firDiagnostic ->
NextAmbiguityImpl( NextAmbiguityImpl(
firDiagnostic.a.map { abstractFirBasedSymbol -> firDiagnostic.a.map { firBasedSymbol ->
firSymbolBuilder.buildSymbol(abstractFirBasedSymbol.fir as FirDeclaration) firSymbolBuilder.buildSymbol(firBasedSymbol.fir as FirDeclaration)
}, },
firDiagnostic as FirPsiDiagnostic, firDiagnostic as FirPsiDiagnostic,
token, token,
@@ -1745,8 +1745,8 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
} }
add(FirErrors.CONFLICTING_OVERLOADS) { firDiagnostic -> add(FirErrors.CONFLICTING_OVERLOADS) { firDiagnostic ->
ConflictingOverloadsImpl( ConflictingOverloadsImpl(
firDiagnostic.a.map { abstractFirBasedSymbol -> firDiagnostic.a.map { firBasedSymbol ->
firSymbolBuilder.buildSymbol(abstractFirBasedSymbol.fir as FirDeclaration) firSymbolBuilder.buildSymbol(firBasedSymbol.fir as FirDeclaration)
}, },
firDiagnostic as FirPsiDiagnostic, firDiagnostic as FirPsiDiagnostic,
token, token,
@@ -1754,8 +1754,8 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
} }
add(FirErrors.REDECLARATION) { firDiagnostic -> add(FirErrors.REDECLARATION) { firDiagnostic ->
RedeclarationImpl( RedeclarationImpl(
firDiagnostic.a.map { abstractFirBasedSymbol -> firDiagnostic.a.map { firBasedSymbol ->
firSymbolBuilder.buildSymbol(abstractFirBasedSymbol.fir as FirDeclaration) firSymbolBuilder.buildSymbol(firBasedSymbol.fir as FirDeclaration)
}, },
firDiagnostic as FirPsiDiagnostic, firDiagnostic as FirPsiDiagnostic,
token, token,
@@ -2150,8 +2150,8 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
add(FirErrors.COMPONENT_FUNCTION_AMBIGUITY) { firDiagnostic -> add(FirErrors.COMPONENT_FUNCTION_AMBIGUITY) { firDiagnostic ->
ComponentFunctionAmbiguityImpl( ComponentFunctionAmbiguityImpl(
firDiagnostic.a, firDiagnostic.a,
firDiagnostic.b.map { abstractFirBasedSymbol -> firDiagnostic.b.map { firBasedSymbol ->
firSymbolBuilder.buildSymbol(abstractFirBasedSymbol.fir as FirDeclaration) firSymbolBuilder.buildSymbol(firBasedSymbol.fir as FirDeclaration)
}, },
firDiagnostic as FirPsiDiagnostic, firDiagnostic as FirPsiDiagnostic,
token, token,
@@ -2442,8 +2442,8 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
} }
add(FirErrors.HAS_NEXT_FUNCTION_NONE_APPLICABLE) { firDiagnostic -> add(FirErrors.HAS_NEXT_FUNCTION_NONE_APPLICABLE) { firDiagnostic ->
HasNextFunctionNoneApplicableImpl( HasNextFunctionNoneApplicableImpl(
firDiagnostic.a.map { abstractFirBasedSymbol -> firDiagnostic.a.map { firBasedSymbol ->
firSymbolBuilder.buildSymbol(abstractFirBasedSymbol.fir as FirDeclaration) firSymbolBuilder.buildSymbol(firBasedSymbol.fir as FirDeclaration)
}, },
firDiagnostic as FirPsiDiagnostic, firDiagnostic as FirPsiDiagnostic,
token, token,
@@ -2451,8 +2451,8 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
} }
add(FirErrors.NEXT_NONE_APPLICABLE) { firDiagnostic -> add(FirErrors.NEXT_NONE_APPLICABLE) { firDiagnostic ->
NextNoneApplicableImpl( NextNoneApplicableImpl(
firDiagnostic.a.map { abstractFirBasedSymbol -> firDiagnostic.a.map { firBasedSymbol ->
firSymbolBuilder.buildSymbol(abstractFirBasedSymbol.fir as FirDeclaration) firSymbolBuilder.buildSymbol(firBasedSymbol.fir as FirDeclaration)
}, },
firDiagnostic as FirPsiDiagnostic, firDiagnostic as FirPsiDiagnostic,
token, token,
@@ -2470,8 +2470,8 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
add(FirErrors.DELEGATE_SPECIAL_FUNCTION_AMBIGUITY) { firDiagnostic -> add(FirErrors.DELEGATE_SPECIAL_FUNCTION_AMBIGUITY) { firDiagnostic ->
DelegateSpecialFunctionAmbiguityImpl( DelegateSpecialFunctionAmbiguityImpl(
firDiagnostic.a, firDiagnostic.a,
firDiagnostic.b.map { abstractFirBasedSymbol -> firDiagnostic.b.map { firBasedSymbol ->
firSymbolBuilder.buildSymbol(abstractFirBasedSymbol.fir as FirDeclaration) firSymbolBuilder.buildSymbol(firBasedSymbol.fir as FirDeclaration)
}, },
firDiagnostic as FirPsiDiagnostic, firDiagnostic as FirPsiDiagnostic,
token, token,
@@ -2480,8 +2480,8 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
add(FirErrors.DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE) { firDiagnostic -> add(FirErrors.DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE) { firDiagnostic ->
DelegateSpecialFunctionNoneApplicableImpl( DelegateSpecialFunctionNoneApplicableImpl(
firDiagnostic.a, firDiagnostic.a,
firDiagnostic.b.map { abstractFirBasedSymbol -> firDiagnostic.b.map { firBasedSymbol ->
firSymbolBuilder.buildSymbol(abstractFirBasedSymbol.fir as FirDeclaration) firSymbolBuilder.buildSymbol(firBasedSymbol.fir as FirDeclaration)
}, },
firDiagnostic as FirPsiDiagnostic, firDiagnostic as FirPsiDiagnostic,
token, token,
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.renderWithType import org.jetbrains.kotlin.fir.renderWithType
import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.idea.fir.low.level.api.ideSessionComponents import org.jetbrains.kotlin.idea.fir.low.level.api.ideSessionComponents
import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.ir.util.IdSignature
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.ir.util.IdSignature
internal inline fun <reified D : FirDeclaration> FirScope.findDeclarationWithSignature( internal inline fun <reified D : FirDeclaration> FirScope.findDeclarationWithSignature(
signature: IdSignature, signature: IdSignature,
firSession: FirSession, firSession: FirSession,
processor: FirScope.((AbstractFirBasedSymbol<*>) -> Unit) -> Unit processor: FirScope.((FirBasedSymbol<*>) -> Unit) -> Unit
): D? { ): D? {
val signatureComposer = firSession.ideSessionComponents.signatureComposer val signatureComposer = firSession.ideSessionComponents.signatureComposer
var foundSymbol: D? = null var foundSymbol: D? = null
@@ -25,7 +25,6 @@ import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.resolve.transformers.FirImportResolveTransformer import org.jetbrains.kotlin.fir.resolve.transformers.FirImportResolveTransformer
import org.jetbrains.kotlin.fir.scopes.impl.FirExplicitSimpleImportingScope import org.jetbrains.kotlin.fir.scopes.impl.FirExplicitSimpleImportingScope
import org.jetbrains.kotlin.fir.scopes.processClassifiersByName import org.jetbrains.kotlin.fir.scopes.processClassifiersByName
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
@@ -52,7 +51,7 @@ internal object FirReferenceResolveHelper {
fun FirResolvedTypeRef.toTargetSymbol(session: FirSession, symbolBuilder: KtSymbolByFirBuilder): KtSymbol? { fun FirResolvedTypeRef.toTargetSymbol(session: FirSession, symbolBuilder: KtSymbolByFirBuilder): KtSymbol? {
val type = getDeclaredType() as? ConeLookupTagBasedType val type = getDeclaredType() as? ConeLookupTagBasedType
val resolvedSymbol = type?.lookupTag?.toSymbol(session) as? AbstractFirBasedSymbol<*> val resolvedSymbol = type?.lookupTag?.toSymbol(session) as? FirBasedSymbol<*>
val symbol = resolvedSymbol ?: run { val symbol = resolvedSymbol ?: run {
val diagnostic = (this as? FirErrorTypeRef)?.diagnostic val diagnostic = (this as? FirErrorTypeRef)?.diagnostic