From ae6b690d4fd3aab9d4ee593625da589610baa732 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Wed, 22 Nov 2023 18:23:26 +0900 Subject: [PATCH] [Analysis API] Invert the 'isAutonomousDeclaration' flag --- .../api/fir/api/LowLevelFirApiFacadeForResolveOnAir.kt | 4 ++-- .../level/api/fir/element/builder/FirElementBuilder.kt | 8 ++++++-- .../low/level/api/fir/file/structure/FileStructure.kt | 4 ++-- .../analysis/low/level/api/fir/util/declarationUtils.kt | 4 ++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/LowLevelFirApiFacadeForResolveOnAir.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/LowLevelFirApiFacadeForResolveOnAir.kt index e1f74f2f1f5..69bd5ee1cde 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/LowLevelFirApiFacadeForResolveOnAir.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/LowLevelFirApiFacadeForResolveOnAir.kt @@ -11,8 +11,8 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveSessionDepend import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FileTowerProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerContextProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerDataContextAllElementsCollector -import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.canBePartOfParentDeclaration import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.getNonLocalContainingOrThisDeclaration +import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.isAutonomousDeclaration import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.KtToFirMapping import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.RawFirNonLocalDeclarationBuilder import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.RawFirReplacement @@ -59,7 +59,7 @@ object LowLevelFirApiFacadeForResolveOnAir { private fun PsiElement.onAirGetNonLocalContainingOrThisDeclaration(): KtElement? { return getNonLocalContainingOrThisDeclarationCodeFragmentAware { declaration -> - declaration.isApplicableForOnAirResolve() && !declaration.canBePartOfParentDeclaration + declaration.isApplicableForOnAirResolve() && declaration.isAutonomousDeclaration } } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/element/builder/FirElementBuilder.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/element/builder/FirElementBuilder.kt index d72e7e73b3e..b1d54bed0b0 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/element/builder/FirElementBuilder.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/element/builder/FirElementBuilder.kt @@ -261,7 +261,11 @@ private fun KtDeclaration.isPartOf(callableDeclaration: KtCallableDeclaration): internal val KtTypeParameter.containingDeclaration: KtDeclaration? get() = (parent as? KtTypeParameterList)?.parent as? KtDeclaration -internal val KtDeclaration.canBePartOfParentDeclaration: Boolean get() = this is KtPropertyAccessor || this is KtParameter || this is KtTypeParameter +internal val KtDeclaration.isAutonomousDeclaration: Boolean + get() = when (this) { + is KtPropertyAccessor, is KtParameter, is KtTypeParameter -> false + else -> true + } internal fun PsiElement.getNonLocalContainingOrThisDeclaration(predicate: (KtDeclaration) -> Boolean = { true }): KtDeclaration? { return getNonLocalContainingDeclaration(parentsWithSelf, predicate) @@ -310,7 +314,7 @@ internal fun getNonLocalContainingDeclaration( } } is KtDeclaration -> { - if (parent.canBePartOfParentDeclaration) { + if (!parent.isAutonomousDeclaration) { if (predicate(parent)) { propose(parent) } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/FileStructure.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/FileStructure.kt index 9b28e5e1db5..0ac795f296f 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/FileStructure.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/file/structure/FileStructure.kt @@ -10,8 +10,8 @@ import com.intellij.psi.PsiErrorElement import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveComponents import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter -import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.canBePartOfParentDeclaration import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.getNonLocalContainingOrThisDeclaration +import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.isAutonomousDeclaration import org.jetbrains.kotlin.analysis.low.level.api.fir.util.codeFragment import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries import org.jetbrains.kotlin.analysis.low.level.api.fir.util.findSourceByTraversingWholeTree @@ -85,7 +85,7 @@ internal class FileStructure private constructor( private fun getStructureKtElement(element: KtElement): KtDeclaration? { val container = element.getNonLocalContainingOrThisDeclaration { - !it.canBePartOfParentDeclaration + it.isAutonomousDeclaration } val resultedContainer = when { diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/declarationUtils.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/declarationUtils.kt index 0c6f39bf8d9..5e6b8c63079 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/declarationUtils.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/declarationUtils.kt @@ -10,9 +10,9 @@ import com.intellij.psi.PsiFile import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirInternals import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession -import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.canBePartOfParentDeclaration import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.containingDeclaration import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.getNonLocalContainingOrThisDeclaration +import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.isAutonomousDeclaration import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirFileBuilder import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirProvider import org.jetbrains.kotlin.fir.declarations.* @@ -91,7 +91,7 @@ internal fun KtDeclaration.findSourceNonLocalFirDeclaration(firFile: FirFile, pr @KtAnalysisApiInternals fun collectUseSiteContainers(element: PsiElement, resolveSession: LLFirResolveSession): List? { - val containingDeclaration = element.getNonLocalContainingOrThisDeclaration { !it.canBePartOfParentDeclaration } ?: return null + val containingDeclaration = element.getNonLocalContainingOrThisDeclaration { it.isAutonomousDeclaration } ?: return null val containingFile = containingDeclaration.containingKtFile val firFile = resolveSession.getOrBuildFirFile(containingFile) return FirElementFinder.findPathToDeclarationWithTarget(firFile, containingDeclaration)