FIR IDE: fixes after rebase

This commit is contained in:
Ilya Kirillov
2021-06-20 22:18:39 +02:00
parent cf04be5207
commit f20dd8b673
11 changed files with 17 additions and 21 deletions
@@ -15,9 +15,6 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.realPsi import org.jetbrains.kotlin.fir.realPsi
import org.jetbrains.kotlin.fir.resolve.symbolProvider import org.jetbrains.kotlin.fir.resolve.symbolProvider
import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo
import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo
import org.jetbrains.kotlin.idea.caches.project.getModuleInfo
import org.jetbrains.kotlin.idea.fir.low.level.api.annotations.InternalForInline import org.jetbrains.kotlin.idea.fir.low.level.api.annotations.InternalForInline
import org.jetbrains.kotlin.idea.fir.low.level.api.api.DiagnosticCheckerFilter import org.jetbrains.kotlin.idea.fir.low.level.api.api.DiagnosticCheckerFilter
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.fir.renderWithType
import org.jetbrains.kotlin.fir.resolve.firProvider import org.jetbrains.kotlin.fir.resolve.firProvider
import org.jetbrains.kotlin.fir.resolve.toFirRegularClass import org.jetbrains.kotlin.fir.resolve.toFirRegularClass
import org.jetbrains.kotlin.idea.fir.low.level.api.util.getContainingFile import org.jetbrains.kotlin.idea.fir.low.level.api.util.getContainingFile
import org.jetbrains.kotlin.idea.util.ifFalse
class FirDeclarationDesignationWithFile( class FirDeclarationDesignationWithFile(
path: List<FirDeclaration>, path: List<FirDeclaration>,
@@ -77,7 +76,7 @@ private fun collectDesignationPath(declaration: FirDeclaration): List<FirDeclara
require(containingClass is FirRegularClass) { require(containingClass is FirRegularClass) {
"FirRegularClass as containing declaration expected but found ${containingClass.renderWithType()}" "FirRegularClass as containing declaration expected but found ${containingClass.renderWithType()}"
} }
return containingClass.isLocal.ifFalse { containingClass.collectForNonLocal().asReversed() } return if (!containingClass.isLocal) containingClass.collectForNonLocal().asReversed() else null
} }
fun FirDeclaration.collectDesignation(firFile: FirFile): FirDeclarationDesignationWithFile = fun FirDeclaration.collectDesignation(firFile: FirFile): FirDeclarationDesignationWithFile =
@@ -36,8 +36,6 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.providers.firIdeProvider
import org.jetbrains.kotlin.idea.fir.low.level.api.sessions.FirIdeSourcesSession import org.jetbrains.kotlin.idea.fir.low.level.api.sessions.FirIdeSourcesSession
import org.jetbrains.kotlin.idea.fir.low.level.api.util.getElementTextInContext import org.jetbrains.kotlin.idea.fir.low.level.api.util.getElementTextInContext
import org.jetbrains.kotlin.idea.fir.low.level.api.util.originalDeclaration import org.jetbrains.kotlin.idea.fir.low.level.api.util.originalDeclaration
import org.jetbrains.kotlin.idea.util.getElementTextInContext
import org.jetbrains.kotlin.idea.util.ifTrue
import org.jetbrains.kotlin.idea.fir.low.level.api.util.parentOfType import org.jetbrains.kotlin.idea.fir.low.level.api.util.parentOfType
import org.jetbrains.kotlin.idea.fir.low.level.api.util.parentsOfType import org.jetbrains.kotlin.idea.fir.low.level.api.util.parentsOfType
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
@@ -252,7 +250,7 @@ object LowLevelFirApiFacadeForResolveOnAir {
val isInBodyReplacement = isInBodyReplacement(nonLocalDeclaration, replacement) val isInBodyReplacement = isInBodyReplacement(nonLocalDeclaration, replacement)
return state.rootModuleSession.cache.firFileLockProvider.runCustomResolveUnderLock(originalFirFile, true) { return state.rootModuleSession.cache.firFileLockProvider.runCustomResolveUnderLock(originalFirFile, true) {
val copiedFirDeclaration = isInBodyReplacement.ifTrue { val copiedFirDeclaration = if (isInBodyReplacement) {
when (originalDeclaration) { when (originalDeclaration) {
is FirSimpleFunction -> is FirSimpleFunction ->
originalDeclaration.withBodyFrom(newDeclarationWithReplacement as FirSimpleFunction) originalDeclaration.withBodyFrom(newDeclarationWithReplacement as FirSimpleFunction)
@@ -263,7 +261,7 @@ object LowLevelFirApiFacadeForResolveOnAir {
is FirTypeAlias -> newDeclarationWithReplacement is FirTypeAlias -> newDeclarationWithReplacement
else -> error("Not supported type ${originalDeclaration::class.simpleName}") else -> error("Not supported type ${originalDeclaration::class.simpleName}")
} }
} ?: newDeclarationWithReplacement } else newDeclarationWithReplacement
val onAirDesignation = FirDeclarationDesignationWithFile( val onAirDesignation = FirDeclarationDesignationWithFile(
path = originalDesignation.path, path = originalDesignation.path,
@@ -26,7 +26,6 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.LazyTransformerF
import org.jetbrains.kotlin.idea.fir.low.level.api.util.checkCanceled import org.jetbrains.kotlin.idea.fir.low.level.api.util.checkCanceled
import org.jetbrains.kotlin.idea.fir.low.level.api.util.ensurePhase import org.jetbrains.kotlin.idea.fir.low.level.api.util.ensurePhase
import org.jetbrains.kotlin.idea.fir.low.level.api.util.findSourceNonLocalFirDeclaration import org.jetbrains.kotlin.idea.fir.low.level.api.util.findSourceNonLocalFirDeclaration
import org.jetbrains.kotlin.idea.util.ifTrue
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.* import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.*
import org.jetbrains.kotlin.idea.fir.low.level.api.util.* import org.jetbrains.kotlin.idea.fir.low.level.api.util.*
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
@@ -160,7 +159,7 @@ internal class FirLazyDeclarationResolver(private val firFileBuilder: FirFileBui
val transformersToApply = designations.mapNotNull { val transformersToApply = designations.mapNotNull {
val needToResolve = it.resolvePhaseForAllDeclarations(includeDeclarationPhase = false) < currentPhase val needToResolve = it.resolvePhaseForAllDeclarations(includeDeclarationPhase = false) < currentPhase
needToResolve.ifTrue { if (needToResolve) {
LazyTransformerFactory.createLazyTransformer( LazyTransformerFactory.createLazyTransformer(
phase = currentPhase, phase = currentPhase,
designation = it, designation = it,
@@ -172,7 +171,7 @@ internal class FirLazyDeclarationResolver(private val firFileBuilder: FirFileBui
firProviderInterceptor = null, firProviderInterceptor = null,
checkPCE = checkPCE, checkPCE = checkPCE,
) )
} } else null
} }
if (transformersToApply.isEmpty()) continue if (transformersToApply.isEmpty()) continue
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve package org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve
import com.intellij.psi.util.parentOfType
import org.jetbrains.kotlin.fir.FirFakeSourceElement import org.jetbrains.kotlin.fir.FirFakeSourceElement
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
@@ -17,6 +16,7 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.getNonLocalCo
import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.FirFileBuilder import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.FirFileBuilder
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.util.findSourceNonLocalFirDeclaration import org.jetbrains.kotlin.idea.fir.low.level.api.util.findSourceNonLocalFirDeclaration
import org.jetbrains.kotlin.idea.fir.low.level.api.util.parentOfType
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.idea.fir.low.level.api.transformers package org.jetbrains.kotlin.idea.fir.low.level.api.transformers
import org.jetbrains.annotations.TestOnly import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.idea.fir.low.level.api.FirPhaseRunner import org.jetbrains.kotlin.idea.fir.low.level.api.FirPhaseRunner
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.fir.scopes.FirTypeScope
import org.jetbrains.kotlin.fir.session.FirSessionFactory import org.jetbrains.kotlin.fir.session.FirSessionFactory
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationUntypedDesignation
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
import org.jetbrains.kotlin.idea.fir.low.level.api.compiler.based.FrontendApiSingleTestDataFileTest import org.jetbrains.kotlin.idea.fir.low.level.api.compiler.based.FrontendApiSingleTestDataFileTest
import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.RawFirNonLocalDeclarationBuilder import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.RawFirNonLocalDeclarationBuilder
@@ -34,6 +34,7 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.test.base.DeclarationProvider
import org.jetbrains.kotlin.idea.fir.low.level.api.test.base.KotlinOutOfBlockModificationTrackerFactoryTestImpl import org.jetbrains.kotlin.idea.fir.low.level.api.test.base.KotlinOutOfBlockModificationTrackerFactoryTestImpl
import org.jetbrains.kotlin.idea.fir.low.level.api.test.base.KtPackageProviderTestImpl import org.jetbrains.kotlin.idea.fir.low.level.api.test.base.KtPackageProviderTestImpl
import org.jetbrains.kotlin.idea.fir.low.level.api.test.base.SealedClassInheritorsProviderTestImpl import org.jetbrains.kotlin.idea.fir.low.level.api.test.base.SealedClassInheritorsProviderTestImpl
import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.TargetPlatform
@@ -129,7 +130,13 @@ abstract class FrontendApiTestWithTestdata : AbstractKotlinCompilerTest() {
if (ignoreTest(filePath, configuration)) { if (ignoreTest(filePath, configuration)) {
return return
} }
super.runTest(filePath) val oldEnableDeepEnsure = FirLazyTransformerForIDE.enableDeepEnsure
try {
FirLazyTransformerForIDE.enableDeepEnsure = true
super.runTest(filePath)
} finally {
FirLazyTransformerForIDE.enableDeepEnsure = oldEnableDeepEnsure
}
} }
private fun ignoreTest(filePath: String, configuration: TestConfiguration): Boolean { private fun ignoreTest(filePath: String, configuration: TestConfiguration): Boolean {
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.idea.asJava.applyIf
import org.jetbrains.kotlin.idea.fir.low.level.api.api.tryCollectDesignation import org.jetbrains.kotlin.idea.fir.low.level.api.api.tryCollectDesignation
import org.jetbrains.kotlin.idea.frontend.api.components.KtTypeRendererOptions import org.jetbrains.kotlin.idea.frontend.api.components.KtTypeRendererOptions
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.idea.util.ifTrue
import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.renderer.render import org.jetbrains.kotlin.renderer.render
@@ -201,7 +200,7 @@ internal class ConeTypeIdeRenderer(
else -> error("Invalid declaration ${declaration.renderWithType()}") else -> error("Invalid declaration ${declaration.renderWithType()}")
} ?: return listOf(declaration) } ?: return listOf(declaration)
return containingClass.isLocal.ifTrue { containingClass.collectForLocal().reversed() } return if(containingClass.isLocal) { containingClass.collectForLocal().reversed() } else null
} }
private fun StringBuilder.renderTypeConstructorAndArguments(type: ConeClassLikeType) { private fun StringBuilder.renderTypeConstructorAndArguments(type: ConeClassLikeType) {
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtTypeAndAnnotations import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtTypeAndAnnotations
import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.idea.frontend.api.types.KtType
import org.jetbrains.kotlin.idea.util.ifTrue
internal class KtFirTypeAndAnnotations<T : FirDeclaration>( internal class KtFirTypeAndAnnotations<T : FirDeclaration>(
private val containingDeclaration: FirRefWithValidityCheck<T>, private val containingDeclaration: FirRefWithValidityCheck<T>,
@@ -65,9 +64,9 @@ internal fun FirRefWithValidityCheck<FirClass<*>>.superTypesAndAnnotationsList(b
internal fun FirRefWithValidityCheck<FirRegularClass>.superTypesAndAnnotationsListForRegularClass(builder: KtSymbolByFirBuilder): List<KtTypeAndAnnotations> { internal fun FirRefWithValidityCheck<FirRegularClass>.superTypesAndAnnotationsListForRegularClass(builder: KtSymbolByFirBuilder): List<KtTypeAndAnnotations> {
return withFir { fir -> return withFir { fir ->
(fir.resolvePhase >= FirResolvePhase.SUPER_TYPES).ifTrue { if(fir.resolvePhase >= FirResolvePhase.SUPER_TYPES) {
fir.superTypeRefs.mapToTypeAndAnnotations(this, builder) fir.superTypeRefs.mapToTypeAndAnnotations(this, builder)
} } else null
} ?: withFirWithPossibleResolveInside(ResolveType.NoResolve) { fir -> } ?: withFirWithPossibleResolveInside(ResolveType.NoResolve) { fir ->
fir.resolveSupertypesInTheAir(builder.rootSession).mapToTypeAndAnnotations(this, builder) fir.resolveSupertypesInTheAir(builder.rootSession).mapToTypeAndAnnotations(this, builder)
} }