RawFirBuilder: optimize package name calculation in compiler mode

This commit is contained in:
Mikhail Glukhikh
2021-07-14 18:42:27 +03:00
committed by Space
parent dcc54101a7
commit 40c3c317b2
19 changed files with 103 additions and 46 deletions
@@ -9,7 +9,8 @@ import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.builtins.StandardNames
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
import org.jetbrains.kotlin.fir.builder.RawFirBuilderMode
import org.jetbrains.kotlin.fir.builder.BodyBuildingMode
import org.jetbrains.kotlin.fir.builder.PsiHandlingMode
import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.FirFunction
import org.jetbrains.kotlin.fir.resolve.ScopeSession
@@ -135,7 +136,8 @@ object KtDeclarationAndFirDeclarationEqualityChecker {
return RawFirBuilder(
createEmptySession(),
DummyScopeProvider,
RawFirBuilderMode.STUBS
psiMode = PsiHandlingMode.IDE,
bodyBuildingMode = BodyBuildingMode.STUBS
).buildTypeReference(this)
}
@@ -6,7 +6,8 @@
package org.jetbrains.kotlin.idea.fir.low.level.api.file.builder
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
import org.jetbrains.kotlin.fir.builder.RawFirBuilderMode
import org.jetbrains.kotlin.fir.builder.BodyBuildingMode
import org.jetbrains.kotlin.fir.builder.PsiHandlingMode
import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.idea.fir.low.level.api.FirPhaseRunner
@@ -31,7 +32,12 @@ internal class FirFileBuilder(
cache: ModuleFileCache,
preferLazyBodies: Boolean
): FirFile = cache.fileCached(ktFile) {
RawFirBuilder(cache.session, scopeProvider, RawFirBuilderMode.lazyBodies(preferLazyBodies)).buildFirFile(ktFile)
RawFirBuilder(
cache.session,
scopeProvider,
psiMode = PsiHandlingMode.IDE,
bodyBuildingMode = BodyBuildingMode.lazyBodies(preferLazyBodies)
).buildFirFile(ktFile)
}
}
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.builder.PsiHandlingMode
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
@@ -22,7 +23,7 @@ internal fun buildFileFirAnnotation(
val replacementApplier = replacement?.Applier()
val builder = object : RawFirBuilder(session, baseScopeProvider) {
val builder = object : RawFirBuilder(session, baseScopeProvider, psiMode = PsiHandlingMode.IDE) {
inner class VisitorWithReplacement : Visitor() {
override fun convertElement(element: KtElement): FirElement? =
super.convertElement(replacementApplier?.tryReplace(element) ?: element)
@@ -8,7 +8,8 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
import org.jetbrains.kotlin.fir.builder.RawFirBuilderMode
import org.jetbrains.kotlin.fir.builder.BodyBuildingMode
import org.jetbrains.kotlin.fir.builder.PsiHandlingMode
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.utils.isInner
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
@@ -24,7 +25,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor(
private val declarationToBuild: KtDeclaration,
private val functionsToRebind: Set<FirFunction>? = null,
private val replacementApplier: RawFirReplacement.Applier? = null
) : RawFirBuilder(session, baseScopeProvider, RawFirBuilderMode.NORMAL) {
) : RawFirBuilder(session, baseScopeProvider, psiMode = PsiHandlingMode.IDE, bodyBuildingMode = BodyBuildingMode.NORMAL) {
companion object {
fun buildWithReplacement(
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.builder.PsiHandlingMode
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.types.FirUserTypeRef
@@ -16,7 +17,7 @@ internal fun buildFirUserTypeRef(
session: FirSession,
baseScopeProvider: FirScopeProvider
): FirUserTypeRef {
val builder = object : RawFirBuilder(session, baseScopeProvider) {
val builder = object : RawFirBuilder(session, baseScopeProvider, psiMode = PsiHandlingMode.IDE) {
fun build(): FirUserTypeRef = Visitor().visitTypeReference(typeReference, Unit) as FirUserTypeRef
}
builder.context.packageFqName = typeReference.containingKtFile.packageFqName
@@ -8,7 +8,8 @@ package org.jetbrains.kotlin.idea.fir.low.level.api
import junit.framework.TestCase
import org.jetbrains.kotlin.fir.FirRenderer
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
import org.jetbrains.kotlin.fir.builder.RawFirBuilderMode
import org.jetbrains.kotlin.fir.builder.BodyBuildingMode
import org.jetbrains.kotlin.fir.builder.PsiHandlingMode
import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.FirLazyBodiesCalculator
import org.jetbrains.kotlin.idea.fir.low.level.api.providers.firIdeProvider
import org.jetbrains.kotlin.idea.fir.low.level.api.test.base.AbstractLowLevelApiSingleFileTest
@@ -22,9 +23,21 @@ abstract class AbstractFirLazyBodiesCalculatorTest : AbstractLowLevelApiSingleFi
val session = resolveState.rootModuleSession
val provider = session.firIdeProvider.kotlinScopeProvider
val laziedFirFile = RawFirBuilder(session, provider, RawFirBuilderMode.LAZY_BODIES).buildFirFile(ktFile)
val laziedFirFile = RawFirBuilder(
session,
provider,
psiMode = PsiHandlingMode.IDE,
bodyBuildingMode = BodyBuildingMode.LAZY_BODIES
).buildFirFile(ktFile)
FirLazyBodiesCalculator.calculateLazyBodies(laziedFirFile)
val fullFirFile = RawFirBuilder(session, provider, RawFirBuilderMode.NORMAL).buildFirFile(ktFile)
val fullFirFile = RawFirBuilder(
session,
provider,
psiMode = PsiHandlingMode.IDE,
bodyBuildingMode = BodyBuildingMode.NORMAL
).buildFirFile(ktFile)
val laziedFirFileDump = StringBuilder().also { FirRenderer(it).visitFile(laziedFirFile) }.toString()
val fullFirFileDump = StringBuilder().also { FirRenderer(it).visitFile(fullFirFile) }.toString()
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.fir.low.level.api
import junit.framework.TestCase
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.builder.PsiHandlingMode
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.resolve.ScopeSession
@@ -106,7 +107,7 @@ abstract class AbstractPartialRawFirBuilderTestCase : AbstractLowLevelApiSingleF
}
val session = FirSessionFactory.createEmptySession()
val firBuilder = RawFirBuilder(session, scopeProvider)
val firBuilder = RawFirBuilder(session, scopeProvider, PsiHandlingMode.IDE)
val original = firBuilder.buildFirFile(file)
val designationBuilder = DesignationBuilder(elementToBuild)