[kotlin] Adapt to changes in 'containingSymbol' and 'containingDeclaration'

^KT-69535

GitOrigin-RevId: 59dfdb3fea56a3858be459988e41640b8ed53ae5
This commit is contained in:
Yan Zhulanow
2024-06-30 04:07:05 +09:00
committed by intellij-monorepo-bot
parent f85553a22a
commit ace6572a1c
53 changed files with 91 additions and 91 deletions

View File

@@ -42,7 +42,7 @@ internal class UsePlatformProcessAwaitExitInspection : LocalInspectionTool() {
val calledMethodName = calledSymbol.name.identifier
if (isNotForbidden(calledMethodName)) return false
if (calledSymbol.valueParameters.isNotEmpty()) return false
val className = (calledSymbol.containingSymbol?.psi as? PsiClass)?.qualifiedName ?: return false
val className = (calledSymbol.containingDeclaration?.psi as? PsiClass)?.qualifiedName ?: return false
return className == "java.lang.Process"
}
}

View File

@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.idea.base.projectStructure.languageVersionSettings
context(KaSession)
@ApiStatus.Internal
fun isSoftDeprecatedEnumValuesMethodAndEntriesPropertyExists(symbol: KaCallableSymbol): Boolean {
val enumClassSymbol = (symbol.containingSymbol as? KaClassSymbol) ?: return false
val enumClassSymbol = (symbol.containingDeclaration as? KaClassSymbol) ?: return false
return isSoftDeprecatedEnumValuesMethod(symbol, enumClassSymbol) &&
getEntriesPropertyOfEnumClass(enumClassSymbol) != null
}

View File

@@ -57,7 +57,7 @@ object KotlinIconProvider {
is KaTypeParameterSymbol -> IconManager.getInstance().getPlatformIcon(PlatformIcons.Class)
is KaTypeAliasSymbol -> KotlinIcons.TYPE_ALIAS
is KaEnumEntrySymbol -> KotlinIcons.ENUM
is KaConstructorSymbol -> symbol.containingSymbol?.let { getIconFor(it) }
is KaConstructorSymbol -> symbol.containingDeclaration?.let { getIconFor(it) }
else -> null
}

View File

@@ -44,7 +44,7 @@ internal object SymbolBasedGenericTestIconProvider : AbstractGenericTestIconProv
return true
}
val containingSymbol = symbol.containingSymbol as? KaClassSymbol ?: return false
val containingSymbol = symbol.containingDeclaration as? KaClassSymbol ?: return false
return isIgnored(containingSymbol)
}
}

View File

@@ -81,7 +81,7 @@ private fun getTargetClasses(
context(KaSession)
private val KaDeclarationSymbol.parentsWithSelf: Sequence<KaDeclarationSymbol>
get() = generateSequence(this) { it.containingSymbol }
get() = generateSequence(this) { it.containingDeclaration }
private fun createReplaceString(targetClasses: List<KaNamedClassOrObjectSymbol>): String {
return targetClasses.mapIndexed { index, c ->

View File

@@ -84,7 +84,7 @@ private fun KaDeclarationSymbol?.getInlineCallSiteVisibility(): Visibility? {
}
result = visibility
}
declaration = declaration.containingSymbol
declaration = declaration.containingDeclaration
}
return result
}

View File

@@ -76,7 +76,7 @@ private fun computeElementContext(element: KtNamedDeclaration): ElementContext?
val allOverriddenSymbols = symbol.allOverriddenSymbols.toList()
for (overriddenSymbol in retainNonOverridableMembers(allOverriddenSymbols)) {
val overriddenMember = overriddenSymbol.psi
val containingSymbol = overriddenSymbol.containingSymbol
val containingSymbol = overriddenSymbol.containingDeclaration
if (overriddenMember == null || overriddenMember !is KtCallableDeclaration || !overriddenMember.canRefactorElement() ||
containingSymbol !is KaNamedSymbol || overriddenMember.modifierList?.hasModifier(KtTokens.OPEN_KEYWORD) == true
) {

View File

@@ -48,10 +48,10 @@ internal object SpecifyOverrideExplicitlyFixFactory {
val delegateTargetSymbol = specifier.getSymbol() ?: return@ModCommandBased emptyList()
if (delegateTargetSymbol is KaValueParameterSymbol &&
delegateTargetSymbol.containingSymbol.let {
delegateTargetSymbol.containingDeclaration.let {
it is KaConstructorSymbol &&
it.isPrimary &&
it.containingSymbol == delegatedDeclaration.containingSymbol
it.containingDeclaration == delegatedDeclaration.containingDeclaration
}
) {
val delegateParameter = delegateTargetSymbol.psi as? KtParameter

View File

@@ -343,7 +343,7 @@ class ImportQuickFix(
}
context(KaSession)
private fun KaNamedClassOrObjectSymbol.isNested(): Boolean = containingSymbol is KaNamedClassOrObjectSymbol
private fun KaNamedClassOrObjectSymbol.isNested(): Boolean = containingDeclaration is KaNamedClassOrObjectSymbol
context(KaSession)
private fun KaDeclarationSymbol.getImportKind(): ImportFixHelper.ImportKind? = when {

View File

@@ -48,7 +48,7 @@ fun isStringPlusExpressionWithoutNewLineInOperands(expression: KtBinaryExpressio
if (expression.expressionType?.isString != true) return false
val plusOperation = expression.operationReference.mainReference.resolveToSymbol() as? KaCallableSymbol
val classContainingPlus = plusOperation?.containingSymbol as? KaNamedClassOrObjectSymbol
val classContainingPlus = plusOperation?.containingDeclaration as? KaNamedClassOrObjectSymbol
return if (classContainingPlus != null) {
classContainingPlus.classId?.asSingleFqName() == StandardNames.FqNames.string.toSafe()
} else {

View File

@@ -49,7 +49,7 @@ abstract class EnumValuesSoftDeprecateInspectionBase : DeprecationCollectingInsp
analyze(callExpression) {
val resolvedCall = callExpression.resolveToCall()?.successfulFunctionCallOrNull() ?: return
val resolvedCallSymbol = resolvedCall.partiallyAppliedSymbol.symbol
val enumClassSymbol = (resolvedCallSymbol.containingSymbol as? KaClassSymbol) ?: return
val enumClassSymbol = (resolvedCallSymbol.containingDeclaration as? KaClassSymbol) ?: return
if (!isSoftDeprecatedEnumValuesMethod(resolvedCallSymbol, enumClassSymbol)) {
return
@@ -92,7 +92,7 @@ abstract class EnumValuesSoftDeprecateInspectionBase : DeprecationCollectingInsp
context(KaSession)
private fun createQuickFix(callExpression: KtCallExpression, symbol: KaFunctionSymbol): LocalQuickFix? {
val enumClassSymbol = symbol.containingSymbol as? KaClassSymbol
val enumClassSymbol = symbol.containingDeclaration as? KaClassSymbol
val enumClassQualifiedName = enumClassSymbol?.classId?.asFqNameString() ?: return null
return createQuickFix(getReplaceFixType(callExpression), enumClassQualifiedName)
}

View File

@@ -167,7 +167,7 @@ internal class EqualsOrHashCodeInspection : AbstractKotlinInspection() {
analyze(targetClass) {
val classSymbol = targetClass.getClassOrObjectSymbol() ?: return@analyze
val equalsMethod = findEqualsMethodForClass(classSymbol) as? KaNamedFunctionSymbol ?: return@analyze
val superContainingEqualsMethod = equalsMethod.containingSymbol ?: return@analyze
val superContainingEqualsMethod = equalsMethod.containingDeclaration ?: return@analyze
val parameterName = equalsMethod.valueParameters.singleOrNull()?.name?.asString() ?: return@analyze
@@ -303,7 +303,7 @@ internal class EqualsOrHashCodeInspection : AbstractKotlinInspection() {
val classSymbol = targetClass.getClassOrObjectSymbol() ?: return@analyze
val hashCodeMethod = findHashCodeMethodForClass(classSymbol) as? KaNamedFunctionSymbol ?: return@analyze
val superContainingHashCodeMethod = hashCodeMethod.containingSymbol ?: return@analyze
val superContainingHashCodeMethod = hashCodeMethod.containingDeclaration ?: return@analyze
/**
* TODO: We have to add a wizard to select members used for hashCode. See how

View File

@@ -55,7 +55,7 @@ internal class RemoveRedundantQualifierNameInspection : AbstractKotlinInspection
}
},
callableShortenStrategy = { callableSymbol ->
val containingSymbol = callableSymbol.containingSymbol
val containingSymbol = callableSymbol.containingDeclaration
if (callableSymbol !is KaEnumEntrySymbol && (containingSymbol.isEnumClass() || containingSymbol.isEnumCompanionObject())) {
ShortenStrategy.DO_NOT_SHORTEN
@@ -96,7 +96,7 @@ context (KaSession)
private fun KaDeclarationSymbol.getContainingClassForCompanionObject(): KaNamedClassOrObjectSymbol? {
if (this !is KaClassSymbol || this.classKind != KaClassKind.COMPANION_OBJECT) return null
val containingClass = containingSymbol as? KaNamedClassOrObjectSymbol
val containingClass = containingDeclaration as? KaNamedClassOrObjectSymbol
return containingClass?.takeIf { it.companionObject == this }
}

View File

@@ -101,6 +101,6 @@ internal class SelfAssignmentInspection : KotlinApplicableInspectionBase.Simple<
is KtNameReferenceExpression -> return receiverExpression.mainReference.resolveToSymbol()
}
return callSymbol.containingSymbol as? KaClassSymbol
return callSymbol.containingDeclaration as? KaClassSymbol
}
}

View File

@@ -274,7 +274,7 @@ class KotlinFunctionCallInstruction(
val constructedClass = (((expr.resolveToCall() as? KaSuccessCallInfo)
?.call as? KaCallableMemberCall<*, *>)
?.partiallyAppliedSymbol?.symbol as? KaConstructorSymbol)
?.containingSymbol as? KaClassSymbol
?.containingDeclaration as? KaClassSymbol
if (constructedClass != null) {
// Set exact class type for constructor
return TypeConstraints.exactClass(constructedClass.classDef())

View File

@@ -143,7 +143,7 @@ class KtVariableDescriptor(
if (!isTrackableProperty(symbol)) return null
val parent = expr.parent
var qualifier: DfaVariableValue? = null
if ((symbol.containingSymbol as? KaClassSymbol)?.classKind == KaClassKind.OBJECT) {
if ((symbol.containingDeclaration as? KaClassSymbol)?.classKind == KaClassKind.OBJECT) {
// property in an object: singleton, can track
return varFactory.createVariableValue(symbol.variableDescriptor(), null)
}
@@ -163,7 +163,7 @@ class KtVariableDescriptor(
if (functionLiteral != null && type != null) {
qualifier = varFactory.createVariableValue(KtLambdaThisVariableDescriptor(functionLiteral, type.toDfType()))
} else {
val classOrObject = symbol.containingSymbol as? KaClassSymbol
val classOrObject = symbol.containingDeclaration as? KaClassSymbol
if (classOrObject != null) {
val dfType = TypeConstraints.exactClass(classOrObject.classDef()).instanceOf().asDfType()
qualifier = varFactory.createVariableValue(KtThisDescriptor(dfType))

View File

@@ -399,7 +399,7 @@ private fun isExtensionFunctionType(type: KaType): Boolean {
context(KaSession)
private fun KaNamedFunctionSymbol.overloadedFunctions(lambdaArgument: KtLambdaExpression): List<KaNamedFunctionSymbol> {
val scope = when (val containingSymbol = this.containingSymbol) {
val scope = when (val containingSymbol = this.containingDeclaration) {
is KaClassSymbol -> containingSymbol.memberScope
else -> lambdaArgument.containingKtFile.scopeContext(lambdaArgument).compositeScope()
}

View File

@@ -158,7 +158,7 @@ private fun isReferenceToObjectMemberOrUnresolved(qualifiedAccess: KtExpression)
else -> return false
} as? KaSymbolWithKind ?: return true
if (referencedSymbol is KaConstructorSymbol) return false
return (referencedSymbol.containingSymbol as? KaClassSymbol)?.classKind?.isObject ?: true
return (referencedSymbol.containingDeclaration as? KaClassSymbol)?.classKind?.isObject ?: true
}
private fun KaDeclarationSymbol.isEnum(): Boolean = safeAs<KaClassSymbol>()?.classKind == KaClassKind.ENUM_CLASS

View File

@@ -143,7 +143,7 @@ class KotlinCallHierarchyNodeDescriptor(
is KtClassOrObject -> {
when {
element is KtObjectDeclaration && element.isCompanion() -> {
val containingDescriptor = declarationSymbol.containingSymbol
val containingDescriptor = declarationSymbol.containingDeclaration
if (containingDescriptor !is KaClassSymbol) return null
declarationSymbol = containingDescriptor
elementText = renderClassOrObject(declarationSymbol)
@@ -172,7 +172,7 @@ class KotlinCallHierarchyNodeDescriptor(
if (elementText == null) return null
var containerText: String? = null
var containerDescriptor = declarationSymbol.containingSymbol
var containerDescriptor = declarationSymbol.containingDeclaration
while (containerDescriptor != null) {
if (containerDescriptor is KaPackageSymbol) {
break
@@ -182,7 +182,7 @@ class KotlinCallHierarchyNodeDescriptor(
val identifier = name.identifier
containerText = if (containerText != null) "$identifier.$containerText" else identifier
}
containerDescriptor = containerDescriptor.containingSymbol
containerDescriptor = containerDescriptor.containingDeclaration
}
return if (containerText != null) "$containerText.$elementText" else elementText
}
@@ -192,7 +192,7 @@ class KotlinCallHierarchyNodeDescriptor(
context(KaSession)
@OptIn(KaExperimentalApi::class)
fun renderNamedFunction(symbol: KaFunctionSymbol): String? {
val name = ((symbol as? KaNamedFunctionSymbol)?.name ?: ((symbol as? KaConstructorSymbol)?.containingSymbol as? KaClassSymbol)?.name)?.asString() ?: return null
val name = ((symbol as? KaNamedFunctionSymbol)?.name ?: ((symbol as? KaConstructorSymbol)?.containingDeclaration as? KaClassSymbol)?.name)?.asString() ?: return null
val paramTypes =
StringUtil.join(
symbol.valueParameters,

View File

@@ -148,7 +148,7 @@ private fun computeLocalDocumentation(element: PsiElement, originalElement: PsiE
context(KaSession)
private fun getContainerInfo(ktDeclaration: KtDeclaration): HtmlChunk {
val containingSymbol = ktDeclaration.symbol.containingSymbol
val containingSymbol = ktDeclaration.symbol.containingDeclaration
val fqName = (containingSymbol as? KaClassLikeSymbol)?.classId?.asFqNameString()
?: (ktDeclaration.containingFile as? KtFile)?.packageFqName?.takeIf { !it.isRoot }?.asString()
@@ -199,7 +199,7 @@ private fun @receiver:Nls StringBuilder.renderEnumSpecialFunction(
val symbol = referenceExpression.resolveToCall()?.successfulFunctionCallOrNull()?.partiallyAppliedSymbol?.symbol as? KaNamedSymbol
val name = symbol?.name?.asString()
if (name != null && symbol is KaDeclarationSymbol) {
val containingClass = symbol.containingSymbol as? KaClassSymbol
val containingClass = symbol.containingDeclaration as? KaClassSymbol
val superClasses = containingClass?.superTypes?.mapNotNull { t -> t.expandedSymbol }
val kdoc = superClasses?.firstNotNullOfOrNull { superClass ->
val navigationElement = superClass.psi?.navigationElement
@@ -308,7 +308,7 @@ private fun findKDoc(symbol: KaSymbol): KDocContent? {
}
if (symbol is KaValueParameterSymbol) {
val containingSymbol = symbol.containingSymbol as? KaNamedFunctionSymbol
val containingSymbol = symbol.containingDeclaration as? KaNamedFunctionSymbol
if (containingSymbol != null) {
val idx = containingSymbol.valueParameters.indexOf(symbol)
containingSymbol.getExpectsForActual().filterIsInstance<KaNamedFunctionSymbol>().mapNotNull { expectFunction ->

View File

@@ -248,7 +248,7 @@ internal class KotlinIdeDeclarationRenderer(
symbol is KaClassSymbol -> !(symbol.classKind == KaClassKind.INTERFACE && symbol.modality == KaSymbolModality.ABSTRACT || symbol.classKind.isObject && symbol.modality == KaSymbolModality.FINAL)
symbol is KaCallableSymbol -> {
symbol.modality == KaSymbolModality.OPEN || symbol.containingSymbol != null && symbol.modality == KaSymbolModality.FINAL || symbol.modality == KaSymbolModality.ABSTRACT
symbol.modality == KaSymbolModality.OPEN || symbol.containingDeclaration != null && symbol.modality == KaSymbolModality.FINAL || symbol.modality == KaSymbolModality.ABSTRACT
}
else -> false
@@ -425,7 +425,7 @@ internal class KotlinIdeDeclarationRenderer(
}
val qName = when (owner) {
is KaClassType -> owner.classId.asSingleFqName()
is KaTypeParameterType -> owner.symbol.containingSymbol?.getFqNameIfPackageOrNonLocal()?.child(name)
is KaTypeParameterType -> owner.symbol.containingDeclaration?.getFqNameIfPackageOrNonLocal()?.child(name)
?: FqName.topLevel(name)
else -> FqName.topLevel(name)
@@ -498,7 +498,7 @@ internal class KotlinIdeDeclarationRenderer(
if (callableSymbol is KaNamedSymbol) {
declarationRenderer.nameRenderer.renderName(analysisSession, callableSymbol, declarationRenderer, printer)
} else if (callableSymbol is KaConstructorSymbol) {
(callableSymbol.containingSymbol as? KaNamedSymbol)?.let {
(callableSymbol.containingDeclaration as? KaNamedSymbol)?.let {
printer.append(highlight(it.name.renderName()) {
asClassName
})
@@ -664,7 +664,7 @@ internal class KotlinIdeDeclarationRenderer(
printer: PrettyPrinter
): Unit = with(analysisSession) {
if (symbol is KaClassSymbol && symbol.classKind == KaClassKind.COMPANION_OBJECT && symbol.name == SpecialNames.DEFAULT_NAME_FOR_COMPANION_OBJECT) {
val className = (symbol.containingSymbol as? KaClassSymbol)?.name
val className = (symbol.containingDeclaration as? KaClassSymbol)?.name
if (className != null) {
printer.append(highlight("of ") { asInfo } )
printer.append(highlight(className.renderName()) { asClassName } )

View File

@@ -90,7 +90,7 @@ object K2CreateFunctionFromUsageUtil {
val ktType = variable.returnType
val symbol = variable.symbol as? KaCallableSymbol
val parameterType = symbol?.receiverType ?: (variable.symbol
.containingSymbol as? KaNamedClassOrObjectSymbol)?.defaultType ?: builtinTypes.nullableAny
.containingDeclaration as? KaNamedClassOrObjectSymbol)?.defaultType ?: builtinTypes.nullableAny
buildClassType(ClassId.fromString("kotlin/properties/$delegateClassName")) {
argument(parameterType)
argument(ktType)

View File

@@ -176,7 +176,7 @@ internal class KotlinFirStructureElementPresentation(
}
}
val containingSymbol = symbol?.containingSymbol
val containingSymbol = symbol?.containingDeclaration
if (ktElement is KtDeclaration && containingSymbol == ktElement.symbol) {
return null

View File

@@ -78,7 +78,7 @@ private fun checkDispatchReceiver(target: CallTarget): Boolean {
dispatchReceiver = dispatchReceiver.original
}
val containingClass = target.symbol.containingSymbol as? KaClassSymbol ?: return true
val containingClass = target.symbol.containingDeclaration as? KaClassSymbol ?: return true
if (dispatchReceiver is KaExplicitReceiverValue) {
if (dispatchReceiver.isSafeNavigation) {
@@ -92,7 +92,7 @@ private fun checkDispatchReceiver(target: CallTarget): Boolean {
receiverSymbol.isOperator
&& receiverSymbol.name.asString() == "invoke"
&& containingClass.classKind.isObject
&& receiverSymbol.containingSymbol == containingClass
&& receiverSymbol.containingDeclaration == containingClass
}
is KaClassSymbol -> {
receiverSymbol.classKind.isObject

View File

@@ -59,7 +59,7 @@ internal class AnonymousTemplateEditingListener(private val psiFile: PsiFile, pr
if (symbol is KaNamedClassOrObjectSymbol) {
yield(symbol)
} else if (symbol is KaConstructorSymbol) {
val containingClassSymbol = symbol.containingSymbol as? KaNamedClassOrObjectSymbol
val containingClassSymbol = symbol.containingDeclaration as? KaNamedClassOrObjectSymbol
if (containingClassSymbol != null) {
yield(containingClassSymbol)
}

View File

@@ -48,7 +48,7 @@ internal val MatchingHandler.withinHierarchyTextFilterSet: Boolean
context(KaSession)
fun KtExpression.findDispatchReceiver(): KaType? {
val symbol = resolveToCall()?.successfulFunctionCallOrNull()?.partiallyAppliedSymbol?.symbol ?: return null
val containingClass = symbol.containingSymbol as? KaClassSymbol ?: return null
val containingClass = symbol.containingDeclaration as? KaClassSymbol ?: return null
val classId = containingClass.classId ?: return null
val fromKotlinPkg = classId.packageFqName.asString().startsWith("kotlin")
val isFunctionCall = classId.relativeClassName.asString().startsWith("Function")

View File

@@ -62,12 +62,12 @@ object AddQualifiersUtil {
fun isTopLevelCallable(callableSymbol: KaSymbol): Boolean {
if (callableSymbol is KaConstructorSymbol) {
val containingClassSymbol = callableSymbol.containingSymbol
if (containingClassSymbol?.containingSymbol == null) {
val containingClassSymbol = callableSymbol.containingDeclaration
if (containingClassSymbol?.containingDeclaration == null) {
return true
}
}
return callableSymbol is KaCallableSymbol && callableSymbol.containingSymbol == null
return callableSymbol is KaCallableSymbol && callableSymbol.containingDeclaration == null
}
if (isTopLevelCallable(contextSymbol)) return false

View File

@@ -98,7 +98,7 @@ fun KtReference.resolveCompanionObjectShortReferenceToContainingClassSymbol(): K
// class name reference resolves to companion
if (expression.name == symbol.name?.asString()) return null
val containingSymbol = symbol.containingSymbol as? KaNamedClassOrObjectSymbol
val containingSymbol = symbol.containingDeclaration as? KaNamedClassOrObjectSymbol
return containingSymbol?.takeIf { it.companionObject == symbol }
}

View File

@@ -38,7 +38,7 @@ private fun getAssociatedClass(symbol: KaSymbol): KaClassSymbol? {
if (symbol !is KaCallableSymbol) return null
return when (symbol) {
is KaNamedFunctionSymbol, is KaPropertySymbol ->
if (symbol.isExtension) symbol.receiverType?.expandedSymbol else symbol.containingSymbol as? KaClassSymbol
if (symbol.isExtension) symbol.receiverType?.expandedSymbol else symbol.containingDeclaration as? KaClassSymbol
is KaVariableSymbol -> {
val variableType = symbol.returnType as? KaFunctionType
variableType?.receiverType?.expandedSymbol

View File

@@ -43,6 +43,6 @@ fun KtNameReferenceExpression.getImplicitLambdaParameterSymbol(): KaValueParamet
context(KaSession)
fun KaValueParameterSymbol.getFunctionLiteralByImplicitLambdaParameterSymbol(): KtFunctionLiteral? {
if (!isImplicitLambdaParameter) return null
val lambda = containingSymbol as? KaAnonymousFunctionSymbol ?: return null
val lambda = containingDeclaration as? KaAnonymousFunctionSymbol ?: return null
return lambda.psi as? KtFunctionLiteral
}

View File

@@ -47,10 +47,10 @@ fun KtModifierKeywordToken.toVisibility(): Visibility = when (this) {
context(KaSession)
private fun explicitVisibilityRequired(symbol: KaSymbolWithVisibility): Boolean {
if ((symbol as? KaConstructorSymbol)?.isPrimary == true) return false // 1
if (symbol is KaPropertySymbol && (symbol.containingSymbol as? KaNamedClassOrObjectSymbol)?.isData == true) return false // 2
if (symbol is KaPropertySymbol && (symbol.containingDeclaration as? KaNamedClassOrObjectSymbol)?.isData == true) return false // 2
if ((symbol as? KaCallableSymbol)?.allOverriddenSymbols?.any() == true) return false // 3
if (symbol is KaPropertyAccessorSymbol) return false // 4
if (symbol is KaPropertySymbol && (symbol.containingSymbol as? KaClassSymbol)?.classKind == KaClassKind.ANNOTATION_CLASS) return false // 5
if (symbol is KaPropertySymbol && (symbol.containingDeclaration as? KaClassSymbol)?.classKind == KaClassKind.ANNOTATION_CLASS) return false // 5
return true
}

View File

@@ -112,7 +112,7 @@ internal abstract class FirCompletionContributorBase<C : KotlinRawPositionContex
val symbol = signature.symbol
val name = when (symbol) {
is KaNamedSymbol -> symbol.name
is KaConstructorSymbol -> (symbol.containingSymbol as? KaNamedClassOrObjectSymbol)?.name
is KaConstructorSymbol -> (symbol.containingDeclaration as? KaNamedClassOrObjectSymbol)?.name
else -> null
} ?: return

View File

@@ -165,7 +165,7 @@ internal object CallableMetadataProvider {
private fun getExpectedNonExtensionReceiver(symbol: KaCallableSymbol): KaClassSymbol? {
val containingClass = symbol.originalContainingClassForOverride
return if (symbol is KaConstructorSymbol && (containingClass as? KaNamedClassOrObjectSymbol)?.isInner == true) {
containingClass.containingSymbol as? KaClassSymbol
containingClass.containingDeclaration as? KaClassSymbol
} else {
containingClass
}
@@ -305,7 +305,7 @@ internal object CallableMetadataProvider {
private fun isExtensionCallOnTypeParameterReceiver(symbol: KaCallableSymbol): Boolean {
val originalSymbol = symbol.fakeOverrideOriginal
val receiverParameterType = originalSymbol.receiverType as? KaTypeParameterType ?: return false
val parameterTypeOwner = receiverParameterType.symbol.containingSymbol ?: return false
val parameterTypeOwner = receiverParameterType.symbol.containingDeclaration ?: return false
return parameterTypeOwner == originalSymbol
}
}

View File

@@ -198,5 +198,5 @@ private fun isEnumEntriesProperty(symbol: KaCallableSymbol): Boolean {
return symbol is KaPropertySymbol &&
symbol.isStatic &&
symbol.callableId?.callableName == StandardNames.ENUM_ENTRIES &&
(symbol.containingSymbol as? KaClassSymbol)?.classKind == KaClassKind.ENUM_CLASS
(symbol.containingDeclaration as? KaClassSymbol)?.classKind == KaClassKind.ENUM_CLASS
}

View File

@@ -634,7 +634,7 @@ object KotlinUnusedSymbolUtil {
private fun KtCallableDeclaration.canBeHandledByLightMethods(symbol: KaDeclarationSymbol?): Boolean {
return when {
symbol is KaConstructorSymbol -> {
val classSymbol = symbol.containingSymbol as? KaNamedClassOrObjectSymbol ?: return false
val classSymbol = symbol.containingDeclaration as? KaNamedClassOrObjectSymbol ?: return false
!classSymbol.isInline && !classSymbol.visibility.isPrivateOrPrivateToThis()
}
hasModifier(KtTokens.INTERNAL_KEYWORD) -> false

View File

@@ -63,7 +63,7 @@ internal class TypeHighlighter(holder: HighlightInfoHolder) : KotlinSemanticAnal
private fun isAnnotationCall(expression: KtSimpleNameExpression, target: KaSymbol): Boolean {
val isKotlinAnnotation = target is KaConstructorSymbol
&& target.isPrimary
&& (target.containingSymbol as? KaClassSymbol)?.classKind == KaClassKind.ANNOTATION_CLASS
&& (target.containingDeclaration as? KaClassSymbol)?.classKind == KaClassKind.ANNOTATION_CLASS
if (!isKotlinAnnotation) {
val targetIsAnnotation = when (val targePsi = target.psi) {

View File

@@ -58,10 +58,10 @@ fun KaFunctionSymbol.getJvmInternalClassName(): String? {
context(KaSession)
@ApiStatus.Internal
fun KaFunctionSymbol.getContainingClassOrObjectSymbol(): KaClassSymbol? {
var symbol = containingSymbol
var symbol = containingDeclaration
while (symbol != null) {
if (symbol is KaClassSymbol) return symbol
symbol = symbol.containingSymbol
symbol = symbol.containingDeclaration
}
return null
}

View File

@@ -112,7 +112,7 @@ internal class KotlinK2FindUsagesSupport : KotlinFindUsagesSupport {
is KaFunctionCall<*> -> {
val constructorSymbol = call.symbol as? KaConstructorSymbol ?: return@withResolvedCall false
val constructedClassSymbol =
constructorSymbol.containingSymbol as? KaClassLikeSymbol ?: return@withResolvedCall false
constructorSymbol.containingDeclaration as? KaClassLikeSymbol ?: return@withResolvedCall false
val classOrObjectSymbol = ktClassOrObject.getClassOrObjectSymbol()
fun KaClassLikeSymbol.getExpectsOrSelf(): List<KaDeclarationSymbol> = (listOf(this).takeIf { isExpect } ?: getExpectsForActual())

View File

@@ -62,7 +62,7 @@ internal class KotlinK2SearchUsagesSupport : KotlinSearchUsagesSupport {
return superSymbol == this || isSubClassOf(superSymbol)
}
return searchTargetContainerSymbol.isInheritorOrSelf(invokeSymbol.containingSymbol as? KaClassSymbol) ||
return searchTargetContainerSymbol.isInheritorOrSelf(invokeSymbol.containingDeclaration as? KaClassSymbol) ||
searchTargetContainerSymbol.isInheritorOrSelf(invokeSymbol.receiverParameter?.type?.expandedSymbol)
}
}
@@ -155,8 +155,8 @@ internal class KotlinK2SearchUsagesSupport : KotlinSearchUsagesSupport {
return@any false
}
val candidateContainer = candidateSymbol.containingSymbol
val container = declarationSymbol.containingSymbol
val candidateContainer = candidateSymbol.containingDeclaration
val container = declarationSymbol.containingDeclaration
if (candidateContainer == null && container == null) { //top level functions should be from the same package
declaration.containingKtFile.packageFqName == candidateDeclaration.containingKtFile.packageFqName
} else if (candidateContainer != null && container != null) { //instance functions should be from the same class/function or same hierarchy
@@ -171,7 +171,7 @@ internal class KotlinK2SearchUsagesSupport : KotlinSearchUsagesSupport {
override fun isExtensionOfDeclarationClassUsage(reference: PsiReference, declaration: KtNamedDeclaration): Boolean {
if (declaration !is KtCallableDeclaration) return false
val container = analyze(declaration) {
(declaration.symbol.containingSymbol as? KaClassSymbol)?.psi?.originalElement as? KtClassOrObject ?: return false
(declaration.symbol.containingDeclaration as? KaClassSymbol)?.psi?.originalElement as? KtClassOrObject ?: return false
}
return reference.unwrappedTargets.filterIsInstance<KtDeclaration>().any { candidateDeclaration ->
@@ -257,7 +257,7 @@ internal class KotlinK2SearchUsagesSupport : KotlinSearchUsagesSupport {
context(KaSession)
private fun getContainingClassType(symbol: KaCallableSymbol): KaType? {
val containingSymbol = symbol.containingSymbol ?: return null
val containingSymbol = symbol.containingDeclaration ?: return null
val classSymbol = containingSymbol as? KaNamedClassOrObjectSymbol ?: return null
return classSymbol.defaultType
}
@@ -372,7 +372,7 @@ internal class KotlinK2SearchUsagesSupport : KotlinSearchUsagesSupport {
is KaDelegatedConstructorCall -> {
val constructorSymbol = call.symbol
val declarationSymbol = ((ktDeclaration.originalElement as? KtDeclaration)?.takeUnless { ktDeclaration.containingFile == element.containingFile } ?: ktDeclaration).symbol
constructorSymbol == declarationSymbol || constructorSymbol.containingSymbol == declarationSymbol
constructorSymbol == declarationSymbol || constructorSymbol.containingDeclaration == declarationSymbol
}
else -> false
}

View File

@@ -51,14 +51,14 @@ context(KaSession)
fun KaScope.findSiblingsByName(
symbol: KaDeclarationSymbol,
newName: Name,
containingSymbol: KaDeclarationSymbol? = symbol.containingSymbol
containingSymbol: KaDeclarationSymbol? = symbol.containingDeclaration
): Sequence<KaDeclarationSymbol> {
if (symbol is KaConstructorSymbol) {
return constructors.filter { symbol != it }
}
val callables = getCallableSymbols(newName).filter { callable ->
symbol != callable &&
((callable as? KaSymbolWithVisibility)?.visibility != KaSymbolVisibility.PRIVATE || callable.containingSymbol == containingSymbol)
((callable as? KaSymbolWithVisibility)?.visibility != KaSymbolVisibility.PRIVATE || callable.containingDeclaration == containingSymbol)
}
val classifierSymbols = getClassifierSymbols(newName)
@@ -103,7 +103,7 @@ fun checkDeclarationNewNameConflicts(
filterCandidate: (KaDeclarationSymbol) -> Boolean
) {
fun getPotentialConflictCandidates(symbol: KaDeclarationSymbol, declaration: KtNamedDeclaration, newName: Name): Sequence<KaDeclarationSymbol> {
val containingSymbol = symbol.containingSymbol ?: getPackageSymbolIfPackageExists(declaration.containingKtFile.packageFqName)
val containingSymbol = symbol.containingDeclaration ?: getPackageSymbolIfPackageExists(declaration.containingKtFile.packageFqName)
if (symbol is KaValueParameterSymbol) {
val functionLikeSymbol = containingSymbol as KaFunctionSymbol
@@ -176,7 +176,7 @@ fun checkDeclarationNewNameConflicts(
var potentialCandidates = getPotentialConflictCandidates(symbol, declaration, newName)
if (declarationSymbol is KaValueParameterSymbol && symbol is KaPropertySymbol) {
val functionLikeSymbol = declarationSymbol.containingSymbol as? KaFunctionSymbol
val functionLikeSymbol = declarationSymbol.containingDeclaration as? KaFunctionSymbol
val conflictingParameters = functionLikeSymbol?.valueParameters?.filter { it.name == newName && it != declarationSymbol }?.takeIf { it.isNotEmpty() }
if (conflictingParameters != null) {
potentialCandidates = potentialCandidates + conflictingParameters
@@ -328,7 +328,7 @@ fun registerRetargetJobOnPotentialCandidates(
findSiblingsByName(declarationSymbol, nameAsName, containingSymbol).filter { filterCandidate(it) }.forEach(retargetJob)
}
var classOrObjectSymbol = declarationSymbol.containingSymbol
var classOrObjectSymbol = declarationSymbol.containingDeclaration
val block = declaration.parent as? KtBlockExpression
if (block != null) {
classOrObjectSymbol = declaration.getParentOfType<KtFunction>(true)?.symbol as? KaFunctionSymbol
@@ -352,7 +352,7 @@ fun registerRetargetJobOnPotentialCandidates(
val companionObject = (classOrObjectSymbol as? KaNamedClassOrObjectSymbol)?.companionObject
companionObject?.memberScope?.processScope(companionObject)
classOrObjectSymbol = classOrObjectSymbol.containingSymbol
classOrObjectSymbol = classOrObjectSymbol.containingDeclaration
}
val file = declaration.containingKtFile

View File

@@ -53,7 +53,7 @@ private fun KtNamedFunction.getOverloads(): Collection<KtNamedFunction> {
val result = LinkedHashSet<KtNamedFunction>()
listOfNotNull(
getPackageSymbolIfPackageExists(containingKtFile.packageFqName)?.packageScope,
(symbol.containingSymbol as? KaClassSymbol)?.declaredMemberScope,
(symbol.containingDeclaration as? KaClassSymbol)?.declaredMemberScope,
symbol.receiverParameter?.type?.expandedSymbol?.declaredMemberScope
).flatMapTo(result) { scope ->
scope.getCallableSymbols(name).mapNotNull {

View File

@@ -67,7 +67,7 @@ object KotlinChangeSignatureHandler : KotlinChangeSignatureHandlerBase() {
val symbol = element.mainReference.resolveToSymbol()
when {
symbol is KaValueParameterSymbol && symbol.generatedPrimaryConstructorProperty == null -> null
symbol is KaConstructorSymbol && symbol.origin == KaSymbolOrigin.SOURCE_MEMBER_GENERATED -> symbol.containingSymbol
symbol is KaConstructorSymbol && symbol.origin == KaSymbolOrigin.SOURCE_MEMBER_GENERATED -> symbol.containingDeclaration
else -> symbol
}
}

View File

@@ -94,7 +94,7 @@ internal object KotlinChangeSignatureUsageSearcher {
if (partiallyAppliedSymbol != null) {
val receiverValue = partiallyAppliedSymbol.extensionReceiver ?: partiallyAppliedSymbol.dispatchReceiver
val symbol = partiallyAppliedSymbol.symbol
val containingSymbol = symbol.containingSymbol
val containingSymbol = symbol.containingDeclaration
if (receiverValue != null) {
val receiverExpression = (receiverValue as? KaExplicitReceiverValue)?.expression
?: ((receiverValue as? KaSmartCastedReceiverValue)?.original as? KaExplicitReceiverValue)?.expression

View File

@@ -203,12 +203,12 @@ class KotlinParameterInfo(
val target = ref.resolveToSymbol()
val declarationSymbol = callableDeclaration.symbol as? KaCallableSymbol ?: return null
if (target is KaValueParameterSymbol) {
if (declarationSymbol is KaFunctionSymbol && target.containingSymbol == declarationSymbol) {
if (declarationSymbol is KaFunctionSymbol && target.containingDeclaration == declarationSymbol) {
return declarationSymbol.valueParameters.indexOf(target) + (if ((callableDeclaration as? KtCallableDeclaration)?.receiverTypeReference != null) 1 else 0)
}
if (declarationSymbol.receiverParameter != null &&
(target.containingSymbol as? KaConstructorSymbol)?.containingSymbol == declarationSymbol.receiverParameter?.type?.expandedSymbol
(target.containingDeclaration as? KaConstructorSymbol)?.containingDeclaration == declarationSymbol.receiverParameter?.type?.expandedSymbol
) {
return Int.MAX_VALUE
}
@@ -229,10 +229,10 @@ class KotlinParameterInfo(
val symbol = expression.resolveToCall()?.successfulCallOrNull<KaCallableMemberCall<*, *>>()?.partiallyAppliedSymbol
(symbol?.dispatchReceiver as? KaImplicitReceiverValue)?.symbol
?.takeIf { it == declarationSymbol.receiverParameter || it == declarationSymbol.containingSymbol }
?.takeIf { it == declarationSymbol.receiverParameter || it == declarationSymbol.containingDeclaration }
?.let { return Int.MAX_VALUE }
(symbol?.extensionReceiver as? KaImplicitReceiverValue)?.symbol
?.takeIf { it == declarationSymbol.receiverParameter || it == declarationSymbol.containingSymbol }
?.takeIf { it == declarationSymbol.receiverParameter || it == declarationSymbol.containingDeclaration }
?.let { return Int.MAX_VALUE }
if (expression.parent is KtThisExpression && declarationSymbol.receiverParameter == null) {

View File

@@ -102,8 +102,8 @@ private fun createSubstitutor(inheritorDeclaration: KtDeclaration, baseFunction:
val inheritorCallable = inheritorDeclaration.symbol
val baseCallable = (baseFunction as? KtCallableDeclaration)?.symbol
?: (baseFunction as? PsiMember)?.callableSymbol ?: return null
val inheritor = inheritorCallable.containingSymbol
val base = baseCallable.containingSymbol
val inheritor = inheritorCallable.containingDeclaration
val base = baseCallable.containingDeclaration
return if (inheritor is KaClassSymbol && base is KaClassSymbol) {
createInheritanceTypeSubstitutor(inheritor, base)?.let { iSubstitutor ->
buildSubstitutor {

View File

@@ -343,7 +343,7 @@ object ChangeSignatureFixFactory {
element: PsiElement,
): List<ParameterQuickFix> {
if (symbol !is KaParameterSymbol) return emptyList()
val containingSymbol = symbol.containingSymbol as? KaFunctionSymbol ?: return emptyList()
val containingSymbol = symbol.containingDeclaration as? KaFunctionSymbol ?: return emptyList()
if (containingSymbol is KaNamedFunctionSymbol && containingSymbol.valueParameters.any { it.isVararg } ||
containingSymbol.origin == KaSymbolOrigin.SOURCE_MEMBER_GENERATED ||
containingSymbol.origin == KaSymbolOrigin.LIBRARY
@@ -413,7 +413,7 @@ internal fun getDeclarationName(functionLikeSymbol: KaFunctionSymbol): String? {
return when(functionLikeSymbol) {
is KaConstructorSymbol -> {
val constructorSymbol = functionLikeSymbol
if ((constructorSymbol.containingSymbol as? KaNamedClassOrObjectSymbol)?.isInline == true) {
if ((constructorSymbol.containingDeclaration as? KaNamedClassOrObjectSymbol)?.isInline == true) {
null
} else constructorSymbol.containingClassId?.shortClassName
}

View File

@@ -399,7 +399,7 @@ private fun getReferencedClassifierSymbol(
is KaTypeParameterSymbol -> referencedSymbol
is KaConstructorSymbol -> referencedSymbol.containingSymbol as? KaClassifierSymbol
is KaConstructorSymbol -> referencedSymbol.containingDeclaration as? KaClassifierSymbol
else -> null
}
@@ -481,7 +481,7 @@ private fun ExtractionData.getBrokenReferencesInfo(body: KtBlockExpression): Lis
val (isCompanionObject, bothReceivers) = analyze(smartCastTarget) {
val symbol = originalRefExpr.resolveToCall()?.singleCallOrNull<KaCallableMemberCall<*, *>>()?.partiallyAppliedSymbol
val receiverSymbol = (symbol?.dispatchReceiver as? KaImplicitReceiverValue)?.symbol
((receiverSymbol?.containingSymbol as? KaClassSymbol)?.classKind == KaClassKind.COMPANION_OBJECT) to
((receiverSymbol?.containingDeclaration as? KaClassSymbol)?.classKind == KaClassKind.COMPANION_OBJECT) to
(symbol?.dispatchReceiver != null && symbol.extensionReceiver != null)
}
val shouldSkipPrimaryReceiver = smartCast == null

View File

@@ -208,7 +208,7 @@ internal fun encodeInternalReferences(codeToInline: MutableCodeToInline, origina
fun isImportable(t: KtNamedDeclaration): Boolean {
analyze(t) {
val resolvedSymbol = t.symbol
val containingSymbol = resolvedSymbol.containingSymbol ?: return true
val containingSymbol = resolvedSymbol.containingDeclaration ?: return true
if (containingSymbol is KaSymbolWithMembers) {
val staticScope = containingSymbol.staticMemberScope
return resolvedSymbol in staticScope.getAllSymbols()
@@ -312,7 +312,7 @@ context(KaSession)
internal fun getThisQualifier(receiverValue: KaImplicitReceiverValue): String {
val symbol = receiverValue.symbol
return if ((symbol as? KaClassSymbol)?.classKind == KaClassKind.COMPANION_OBJECT) {
(symbol.containingSymbol as KaClassifierSymbol).name!!.asString() + "." + symbol.name!!.asString()
(symbol.containingDeclaration as KaClassifierSymbol).name!!.asString() + "." + symbol.name!!.asString()
}
else {
"this" + ((((symbol as? KaReceiverParameterSymbol)?.owningCallableSymbol ?: symbol) as? KaNamedSymbol)?.name?.let { "@$it" } ?: "")

View File

@@ -134,7 +134,7 @@ class KotlinFirSafeDeleteProcessor : SafeDeleteProcessorDelegateBase() {
fun isMultipleInheritance(function: KaSymbol): Boolean {
val superMethods = (function as? KaCallableSymbol)?.directlyOverriddenSymbols ?: return false
return superMethods.any {
val superClassSymbol = it.containingSymbol as? KaClassSymbol ?: return@any false
val superClassSymbol = it.containingDeclaration as? KaClassSymbol ?: return@any false
val superMethod = it.psi ?: return@any false
return@any !isInside(superMethod) && !superClassSymbol.isSubClassOf(elementClassSymbol)
}

View File

@@ -87,7 +87,7 @@ class KotlinSafeDeleteUsageSearcher : SafeDeleteUsageSearcher {
val superMethods =
(ktElement.symbol as? KaCallableSymbol)?.directlyOverriddenSymbols ?: return@analyze
val abstractExternalSuper = superMethods.find {
val superClassSymbol = it.containingSymbol as? KaClassSymbol ?: return@find false
val superClassSymbol = it.containingDeclaration as? KaClassSymbol ?: return@find false
if ((it as? KaSymbolWithModality)?.modality != KaSymbolModality.ABSTRACT) return@find false
return@find !superClassSymbol.isSubClassOf(elementClassSymbol)
}

View File

@@ -53,7 +53,7 @@ object ConvertReferenceToLambdaUtil {
val acceptsReceiverAsParameter = receiverSymbol is KaClassSymbol &&
!matchingParameterIsExtension &&
(callableSymbol as? KaNamedFunctionSymbol)?.isStatic != true && !receiverSymbol.classKind.isObject &&
(callableSymbol?.containingSymbol != null || callableSymbol?.isExtension == true || symbol is KaNamedClassOrObjectSymbol && symbol.isInner)
(callableSymbol?.containingDeclaration != null || callableSymbol?.isExtension == true || symbol is KaNamedClassOrObjectSymbol && symbol.isInner)
val parameterNamesAndTypes =
if (callableSymbol is KaFunctionSymbol) {

View File

@@ -159,7 +159,7 @@ sealed class K2MoveRenameUsageInfo(
val resolvedSymbol = mainReference.resolveToSymbol()
if (resolvedSymbol is KaClassSymbol && resolvedSymbol.classKind == KaClassKind.COMPANION_OBJECT) return true
if (resolvedSymbol is KaConstructorSymbol) return true
val containingSymbol = resolvedSymbol?.containingSymbol
val containingSymbol = resolvedSymbol?.containingDeclaration
if (resolvedSymbol is KaPackageSymbol) return false // ignore packages
if (containingSymbol == null) return true // top levels are static
if (containingSymbol is KaClassSymbol) {

View File

@@ -275,8 +275,8 @@ private fun createQualifiedExpression(callExpression: KtExpression, newName: Str
}
fun getExplicitQualifier(receiverValue: KaExplicitReceiverValue): String? {
val containingSymbol = appliedSymbol?.symbol?.containingSymbol
val enumClassSymbol = containingSymbol?.containingSymbol
val containingSymbol = appliedSymbol?.symbol?.containingDeclaration
val enumClassSymbol = containingSymbol?.containingDeclaration
//add companion qualifier to avoid clashes with enum entries
return if (containingSymbol is KaNamedClassOrObjectSymbol && containingSymbol.classKind == KaClassKind.COMPANION_OBJECT &&
enumClassSymbol is KaNamedClassOrObjectSymbol && enumClassSymbol.classKind == KaClassKind.ENUM_CLASS &&
@@ -305,7 +305,7 @@ private fun createQualifiedExpression(callExpression: KtExpression, newName: Str
null -> {
val symbol = appliedSymbol?.symbol
val containingSymbol = symbol?.containingSymbol
val containingSymbol = symbol?.containingDeclaration
val containerFQN =
if (containingSymbol is KaClassSymbol) {
containingSymbol.classId?.asSingleFqName()?.parent()