[Analysis API] Invert the 'isAutonomousDeclaration' flag

This commit is contained in:
Yan Zhulanow
2023-11-22 18:23:26 +09:00
committed by Space Team
parent 087398edd7
commit ae6b690d4f
4 changed files with 12 additions and 8 deletions
@@ -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
}
}
@@ -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)
}
@@ -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 {
@@ -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<FirDeclaration>? {
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)