diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10CallResolver.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10CallResolver.kt index 6fe0b970e1c..9c17a1d6539 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10CallResolver.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10CallResolver.kt @@ -13,7 +13,8 @@ import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.KtF import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.KtFe10DescPropertyGetterSymbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.KtFe10DescPropertySetterSymbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.KtFe10DescValueParameterSymbol -import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.callableId +import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.calculateCallableId +import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.callableIdIfNotLocal import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtCallableSymbol import org.jetbrains.kotlin.analysis.api.diagnostics.KtNonBoundToPsiErrorDiagnostic import org.jetbrains.kotlin.analysis.api.impl.base.components.AbstractKtCallResolver @@ -141,7 +142,7 @@ internal class KtFe10CallResolver( val variableSymbol = variableDescriptor.toKtCallableSymbol(analysisContext) as? KtVariableLikeSymbol ?: return null val substitutor = KtSubstitutor.Empty(token) - return if (resolvedCall.functionCall.resultingDescriptor.callableId in kotlinFunctionInvokeCallableIds) { + return if (resolvedCall.functionCall.resultingDescriptor.callableIdIfNotLocal in kotlinFunctionInvokeCallableIds) { KtFunctionalTypeVariableCall(variableSymbol, argumentMapping, getTarget(callableSymbol), substitutor, token) } else { KtVariableWithInvokeFunctionCall(variableSymbol, argumentMapping, getTarget(callableSymbol), substitutor, token) diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescConstructorSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescConstructorSymbol.kt index bd7f95d7af5..8644223e04a 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescConstructorSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescConstructorSymbol.kt @@ -55,8 +55,8 @@ internal class KtFe10DescConstructorSymbol( return pointerByPsi } - val callableId = descriptor.callableId - if (callableId != null && !callableId.isLocal) { + val callableId = descriptor.callableIdIfNotLocal + if (callableId != null) { val signature = descriptor.getSymbolPointerSignature(analysisContext) return KtFe10DescFunctionLikeSymbolPointer(callableId, signature) } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescFunctionSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescFunctionSymbol.kt index 271b038f970..7cbc96d769e 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescFunctionSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescFunctionSymbol.kt @@ -64,7 +64,7 @@ internal class KtFe10DescFunctionSymbol( get() = withValidityAssertion { descriptor.ktHasStableParameterNames } override val callableIdIfNonLocal: CallableId? - get() = withValidityAssertion { descriptor.callableId } + get() = withValidityAssertion { descriptor.callableIdIfNotLocal } override val annotatedType: KtTypeAndAnnotations get() = withValidityAssertion { descriptor.returnTypeOrNothing.toKtTypeAndAnnotations(analysisContext) } @@ -87,8 +87,8 @@ internal class KtFe10DescFunctionSymbol( return pointerByPsi } - val callableId = descriptor.callableId - if (callableId != null && !callableId.isLocal) { + val callableId = descriptor.callableIdIfNotLocal + if (callableId != null) { val signature = descriptor.getSymbolPointerSignature(analysisContext) return KtFe10DescFunctionLikeSymbolPointer(callableId, signature) } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescJavaFieldSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescJavaFieldSymbol.kt index 326442aba05..4e178e1f4a5 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescJavaFieldSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescJavaFieldSymbol.kt @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.KtFe10DescMemberSymbol -import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.callableId +import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.callableIdIfNotLocal import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtTypeAndAnnotations import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.KtJavaFieldSymbol @@ -34,7 +34,7 @@ internal class KtFe10DescJavaFieldSymbol( get() = withValidityAssertion { !descriptor.isVar } override val callableIdIfNonLocal: CallableId? - get() = withValidityAssertion { descriptor.callableId } + get() = withValidityAssertion { descriptor.callableIdIfNotLocal } override val annotatedType: KtTypeAndAnnotations get() = withValidityAssertion { descriptor.returnType.toKtTypeAndAnnotations(analysisContext) } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescKotlinPropertySymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescKotlinPropertySymbol.kt index bb780e5310b..51a0ff23cc4 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescKotlinPropertySymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescKotlinPropertySymbol.kt @@ -64,7 +64,7 @@ internal class KtFe10DescKotlinPropertySymbol( get() = withValidityAssertion { descriptor.setter != null } override val callableIdIfNonLocal: CallableId? - get() = withValidityAssertion { descriptor.callableId } + get() = withValidityAssertion { descriptor.callableIdIfNotLocal } override val initializer: KtConstantValue? get() = withValidityAssertion { descriptor.compileTimeInitializer?.toKtConstantValue() } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescPropertyGetterSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescPropertyGetterSymbol.kt index 05fa46c9010..3a7580b7f1f 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescPropertyGetterSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescPropertyGetterSymbol.kt @@ -47,7 +47,7 @@ internal class KtFe10DescPropertyGetterSymbol( get() = withValidityAssertion { val propertyDescriptor = descriptor.correspondingProperty return if (propertyDescriptor is SyntheticPropertyDescriptor) { - propertyDescriptor.getMethod.callableId + propertyDescriptor.getMethod.callableIdIfNotLocal } else { null } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescPropertySetterSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescPropertySetterSymbol.kt index 25855e2a317..aeaac380fc6 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescPropertySetterSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescPropertySetterSymbol.kt @@ -50,7 +50,7 @@ internal class KtFe10DescPropertySetterSymbol( get() = withValidityAssertion { val propertyDescriptor = descriptor.correspondingProperty return if (propertyDescriptor is SyntheticPropertyDescriptor) { - propertyDescriptor.getMethod.callableId + propertyDescriptor.getMethod.callableIdIfNotLocal } else { null } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSamConstructorSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSamConstructorSymbol.kt index 82fd1dec1b6..015e6fa263d 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSamConstructorSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSamConstructorSymbol.kt @@ -36,7 +36,7 @@ internal class KtFe10DescSamConstructorSymbol( get() = withValidityAssertion { descriptor.ktHasStableParameterNames } override val callableIdIfNonLocal: CallableId? - get() = withValidityAssertion { descriptor.callableId } + get() = withValidityAssertion { descriptor.callableIdIfNotLocal } override val annotatedType: KtTypeAndAnnotations get() = withValidityAssertion { descriptor.returnTypeOrNothing.toKtTypeAndAnnotations(analysisContext) } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSyntheticJavaPropertySymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSyntheticJavaPropertySymbol.kt index 731280b5d38..c182ac4ccc4 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSyntheticJavaPropertySymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSyntheticJavaPropertySymbol.kt @@ -78,7 +78,7 @@ internal class KtFe10DescSyntheticJavaPropertySymbol( get() = withValidityAssertion { descriptor.compileTimeInitializer?.toKtConstantValue() } override val callableIdIfNonLocal: CallableId? - get() = withValidityAssertion { descriptor.callableId } + get() = withValidityAssertion { descriptor.callableIdIfNotLocal } override val annotatedType: KtTypeAndAnnotations get() = withValidityAssertion { descriptor.type.toKtTypeAndAnnotations(analysisContext) } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSyntheticJavaPropertySymbolForOverride.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSyntheticJavaPropertySymbolForOverride.kt index d9c63b832da..3430866c8c6 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSyntheticJavaPropertySymbolForOverride.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSyntheticJavaPropertySymbolForOverride.kt @@ -78,7 +78,7 @@ internal class KtFe10DescSyntheticJavaPropertySymbolForOverride( get() = withValidityAssertion { descriptor.compileTimeInitializer?.toKtConstantValue() } override val callableIdIfNonLocal: CallableId? - get() = withValidityAssertion { descriptor.callableId } + get() = withValidityAssertion { descriptor.callableIdIfNotLocal } override val annotatedType: KtTypeAndAnnotations get() = withValidityAssertion { descriptor.type.toKtTypeAndAnnotations(analysisContext) } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/base/Kt1DescUtils.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/base/Kt1DescUtils.kt index 46558817e80..72a194df055 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/base/Kt1DescUtils.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/base/Kt1DescUtils.kt @@ -235,31 +235,39 @@ internal fun ConstantValue<*>.toKtConstantValue(): KtConstantValue { } } -internal val CallableMemberDescriptor.callableId: CallableId? - get() { - var current: DeclarationDescriptor = containingDeclaration +internal val CallableMemberDescriptor.callableIdIfNotLocal: CallableId? + get() = calculateCallableId(allowLocal = false) - val localName = mutableListOf() - val className = mutableListOf() +internal fun CallableMemberDescriptor.calculateCallableId(allowLocal: Boolean): CallableId? { + var current: DeclarationDescriptor = containingDeclaration - while (true) { - when (current) { - is PackageFragmentDescriptor -> { - return CallableId( - packageName = current.fqName, - className = if (className.isNotEmpty()) FqName.fromSegments(className.asReversed()) else null, - callableName = name, - pathToLocal = if (localName.isNotEmpty()) FqName.fromSegments(localName.asReversed()) else null - ) - } - is ClassDescriptor -> className += current.name.asString() - is PropertyAccessorDescriptor -> {} // Filter out property accessors - is CallableDescriptor -> localName += current.name.asString() + val localName = mutableListOf() + val className = mutableListOf() + + while (true) { + when (current) { + is PackageFragmentDescriptor -> { + return CallableId( + packageName = current.fqName, + className = if (className.isNotEmpty()) FqName.fromSegments(className.asReversed()) else null, + callableName = name, + pathToLocal = if (localName.isNotEmpty()) FqName.fromSegments(localName.asReversed()) else null + ) } + is ClassDescriptor -> className += current.name.asString() + is PropertyAccessorDescriptor -> {} // Filter out property accessors + is CallableDescriptor -> { + if (!allowLocal) { + return null + } - current = current.containingDeclaration ?: return null + localName += current.name.asString() + } } + + current = current.containingDeclaration ?: return null } +} internal fun getSymbolDescriptor(symbol: KtSymbol): DeclarationDescriptor? { return when (symbol) { diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiEnumEntrySymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiEnumEntrySymbol.kt index eec5d7baafa..a30dd371687 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiEnumEntrySymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiEnumEntrySymbol.kt @@ -11,7 +11,7 @@ import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtTypeAndAnnotations import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.KtFe10PsiSymbol -import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.callableId +import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.callableIdIfNonLocal import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.createErrorTypeAndAnnotations import org.jetbrains.kotlin.analysis.api.descriptors.utils.cached import org.jetbrains.kotlin.analysis.api.symbols.KtEnumEntrySymbol @@ -44,7 +44,7 @@ internal class KtFe10PsiEnumEntrySymbol( } override val callableIdIfNonLocal: CallableId? - get() = withValidityAssertion { psi.callableId } + get() = withValidityAssertion { psi.callableIdIfNonLocal } override val annotatedType: KtTypeAndAnnotations get() = withValidityAssertion { diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiFunctionSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiFunctionSymbol.kt index 6996697812e..6d0abde1e86 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiFunctionSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiFunctionSymbol.kt @@ -73,7 +73,7 @@ internal class KtFe10PsiFunctionSymbol( get() = withValidityAssertion { true } override val callableIdIfNonLocal: CallableId? - get() = withValidityAssertion { psi.callableId } + get() = withValidityAssertion { psi.callableIdIfNonLocal } override val annotatedType: KtTypeAndAnnotations get() = withValidityAssertion { descriptor?.returnType?.toKtTypeAndAnnotations(analysisContext) ?: createErrorTypeAndAnnotations() } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiKotlinPropertySymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiKotlinPropertySymbol.kt index ed4d4cf1aea..407477f3c65 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiKotlinPropertySymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiKotlinPropertySymbol.kt @@ -96,7 +96,7 @@ internal class KtFe10PsiKotlinPropertySymbol( get() = withValidityAssertion { !psi.isVar } override val callableIdIfNonLocal: CallableId? - get() = withValidityAssertion { psi.callableId } + get() = withValidityAssertion { psi.callableIdIfNonLocal } override val annotatedType: KtTypeAndAnnotations get() = withValidityAssertion { descriptor?.type?.toKtTypeAndAnnotations(analysisContext) ?: createErrorTypeAndAnnotations() } diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiPropertyGetterSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiPropertyGetterSymbol.kt index c8dab8e47c7..64db2ac3835 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiPropertyGetterSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiPropertyGetterSymbol.kt @@ -64,7 +64,7 @@ internal class KtFe10PsiPropertyGetterSymbol( get() = withValidityAssertion { true } override val callableIdIfNonLocal: CallableId? - get() = withValidityAssertion { psi.property.callableId } + get() = withValidityAssertion { psi.property.callableIdIfNonLocal } override val annotatedType: KtTypeAndAnnotations get() = withValidityAssertion { diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/base/KtFe10PsiSymbolUtils.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/base/KtFe10PsiSymbolUtils.kt index dd860df0cf9..43e2ee80097 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/base/KtFe10PsiSymbolUtils.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/base/KtFe10PsiSymbolUtils.kt @@ -68,34 +68,45 @@ internal val KtElement.ktSymbolKind: KtSymbolKind else -> KtSymbolKind.LOCAL } -internal val KtDeclaration.callableId: CallableId? - get() { - val selfName = this.name ?: return null - val containingFile = this.containingKtFile +internal val KtDeclaration.callableIdIfNonLocal: CallableId? + get() = calculateCallableId(allowLocal = false) - var current = this.getElementParentDeclaration() +internal fun KtDeclaration.calculateCallableId(allowLocal: Boolean): CallableId? { + val selfName = this.name ?: return null + val containingFile = this.containingKtFile - val localName = mutableListOf() - val className = mutableListOf() + var current = this.getElementParentDeclaration() - while (current != null) { - when (current) { - is KtClassOrObject -> className += current.name ?: return null - is KtPropertyAccessor -> {} // Filter out property accessors - is KtCallableDeclaration -> localName += current.name ?: return null + val localName = mutableListOf() + val className = mutableListOf() + + while (current != null) { + when (current) { + is KtClassOrObject -> { + className += current.name ?: return null + } + is KtPropertyAccessor -> { + // Filter out property accessors + } + is KtCallableDeclaration -> { + if (!allowLocal) { + return null + } + localName += current.name ?: return null } - - current = current.getElementParentDeclaration() } - return CallableId( - packageName = containingFile.packageFqName, - className = if (className.isNotEmpty()) FqName.fromSegments(className.asReversed()) else null, - callableName = Name.identifier(selfName), - pathToLocal = if (localName.isNotEmpty()) FqName.fromSegments(localName.asReversed()) else null - ) + current = current.getElementParentDeclaration() } + return CallableId( + packageName = containingFile.packageFqName, + className = if (className.isNotEmpty()) FqName.fromSegments(className.asReversed()) else null, + callableName = Name.identifier(selfName), + pathToLocal = if (localName.isNotEmpty()) FqName.fromSegments(localName.asReversed()) else null + ) +} + internal fun PsiElement.getResolutionScope(bindingContext: BindingContext): LexicalScope? { for (parent in parentsWithSelf) { if (parent is KtElement) {