FIR: use enum in RawFirBuilder to indicate its mode: normals, stubs, or lazy bodies
This commit is contained in:
@@ -152,7 +152,7 @@ abstract class AbstractSimpleFileBenchmark {
|
|||||||
.uniteWith(TopDownAnalyzerFacadeForJVM.AllJavaSourcesInProjectScope(env.project))
|
.uniteWith(TopDownAnalyzerFacadeForJVM.AllJavaSourcesInProjectScope(env.project))
|
||||||
val session = createSession(env, scope)
|
val session = createSession(env, scope)
|
||||||
val firProvider = session.firProvider as FirProviderImpl
|
val firProvider = session.firProvider as FirProviderImpl
|
||||||
val builder = RawFirBuilder(session, firProvider.kotlinScopeProvider, stubMode = false)
|
val builder = RawFirBuilder(session, firProvider.kotlinScopeProvider)
|
||||||
|
|
||||||
val totalTransformer = FirTotalResolveProcessor(session)
|
val totalTransformer = FirTotalResolveProcessor(session)
|
||||||
val firFile = builder.buildFirFile(file).also(firProvider::recordFile)
|
val firFile = builder.buildFirFile(file).also(firProvider::recordFile)
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ class FirAnalyzerFacade(val session: FirSession, val languageVersionSettings: La
|
|||||||
private fun buildRawFir() {
|
private fun buildRawFir() {
|
||||||
if (firFiles != null) return
|
if (firFiles != null) return
|
||||||
val firProvider = (session.firProvider as FirProviderImpl)
|
val firProvider = (session.firProvider as FirProviderImpl)
|
||||||
val builder = RawFirBuilder(session, firProvider.kotlinScopeProvider, stubMode = false)
|
val builder = RawFirBuilder(session, firProvider.kotlinScopeProvider)
|
||||||
firFiles = ktFiles.map {
|
firFiles = ktFiles.map {
|
||||||
val firFile = builder.buildFirFile(it)
|
val firFile = builder.buildFirFile(it)
|
||||||
firProvider.recordFile(firFile)
|
firProvider.recordFile(firFile)
|
||||||
|
|||||||
+1
-1
@@ -121,7 +121,7 @@ class FirResolveModularizedTotalKotlinTest : AbstractModularizedTest() {
|
|||||||
}
|
}
|
||||||
bench.buildFiles(lightTree2Fir, allSourceFiles)
|
bench.buildFiles(lightTree2Fir, allSourceFiles)
|
||||||
} else {
|
} else {
|
||||||
val builder = RawFirBuilder(session, firProvider.kotlinScopeProvider, stubMode = false)
|
val builder = RawFirBuilder(session, firProvider.kotlinScopeProvider)
|
||||||
bench.buildFiles(builder, ktFiles)
|
bench.buildFiles(builder, ktFiles)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -13,6 +13,7 @@ import com.intellij.testFramework.LightVirtualFile
|
|||||||
import com.intellij.testFramework.TestDataPath
|
import com.intellij.testFramework.TestDataPath
|
||||||
import org.jetbrains.kotlin.fir.FirRenderer
|
import org.jetbrains.kotlin.fir.FirRenderer
|
||||||
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase
|
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase
|
||||||
|
import org.jetbrains.kotlin.fir.builder.RawFirBuilderMode
|
||||||
import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider
|
import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider
|
||||||
import org.jetbrains.kotlin.fir.lightTree.converter.DeclarationsConverter
|
import org.jetbrains.kotlin.fir.lightTree.converter.DeclarationsConverter
|
||||||
import org.jetbrains.kotlin.fir.session.FirSessionFactory
|
import org.jetbrains.kotlin.fir.session.FirSessionFactory
|
||||||
@@ -72,7 +73,7 @@ class SimpleTestCase : AbstractRawFirBuilderTestCase() {
|
|||||||
println(StringBuilder().also { FirRenderer(it).visitFile(firFromLightTreeFile) }.toString())
|
println(StringBuilder().also { FirRenderer(it).visitFile(firFromLightTreeFile) }.toString())
|
||||||
|
|
||||||
val psiFile = createPsiFile("foo", code) as KtFile
|
val psiFile = createPsiFile("foo", code) as KtFile
|
||||||
val firFromPsiFile = psiFile.toFirFile(stubMode = true)
|
val firFromPsiFile = psiFile.toFirFile(RawFirBuilderMode.STUBS)
|
||||||
println("Fir from PSI")
|
println("Fir from PSI")
|
||||||
println(StringBuilder().also { FirRenderer(it).visitFile(firFromPsiFile) }.toString())
|
println(StringBuilder().also { FirRenderer(it).visitFile(firFromPsiFile) }.toString())
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -12,6 +12,7 @@ import com.intellij.testFramework.TestDataPath
|
|||||||
import com.intellij.util.PathUtil
|
import com.intellij.util.PathUtil
|
||||||
import org.jetbrains.kotlin.fir.FirRenderer
|
import org.jetbrains.kotlin.fir.FirRenderer
|
||||||
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase
|
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase
|
||||||
|
import org.jetbrains.kotlin.fir.builder.RawFirBuilderMode
|
||||||
import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider
|
import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider
|
||||||
import org.jetbrains.kotlin.fir.session.FirSessionFactory
|
import org.jetbrains.kotlin.fir.session.FirSessionFactory
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
@@ -28,7 +29,7 @@ class TotalKotlinTest : AbstractRawFirBuilderTestCase() {
|
|||||||
if (onlyPsi) {
|
if (onlyPsi) {
|
||||||
DebugUtil.psiTreeToString(ktFile, false)
|
DebugUtil.psiTreeToString(ktFile, false)
|
||||||
} else {
|
} else {
|
||||||
val firFile = ktFile.toFirFile(stubMode = true)
|
val firFile = ktFile.toFirFile(RawFirBuilderMode.STUBS)
|
||||||
StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString()
|
StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -10,6 +10,7 @@ import com.intellij.psi.impl.DebugUtil
|
|||||||
import com.intellij.util.PathUtil
|
import com.intellij.util.PathUtil
|
||||||
import org.jetbrains.kotlin.fir.FirRenderer
|
import org.jetbrains.kotlin.fir.FirRenderer
|
||||||
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase
|
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase
|
||||||
|
import org.jetbrains.kotlin.fir.builder.RawFirBuilderMode
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.openjdk.jmh.annotations.Scope
|
import org.openjdk.jmh.annotations.Scope
|
||||||
import org.openjdk.jmh.annotations.State
|
import org.openjdk.jmh.annotations.State
|
||||||
@@ -24,7 +25,7 @@ open class Psi2FirGenerator : TreeGenerator, AbstractRawFirBuilderTestCase() {
|
|||||||
|
|
||||||
override fun generateFir(text: String, file: File, stubMode: Boolean) {
|
override fun generateFir(text: String, file: File, stubMode: Boolean) {
|
||||||
val ktFile = createPsiFile(FileUtil.getNameWithoutExtension(PathUtil.getFileName(file.path)), text) as KtFile
|
val ktFile = createPsiFile(FileUtil.getNameWithoutExtension(PathUtil.getFileName(file.path)), text) as KtFile
|
||||||
val firFile = ktFile.toFirFile(stubMode)
|
val firFile = ktFile.toFirFile(RawFirBuilderMode.stubs(stubMode))
|
||||||
StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString()
|
StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -13,6 +13,7 @@ import junit.framework.TestCase
|
|||||||
import org.jetbrains.kotlin.checkers.BaseDiagnosticsTest.Companion.DIAGNOSTIC_IN_TESTDATA_PATTERN
|
import org.jetbrains.kotlin.checkers.BaseDiagnosticsTest.Companion.DIAGNOSTIC_IN_TESTDATA_PATTERN
|
||||||
import org.jetbrains.kotlin.fir.FirRenderer
|
import org.jetbrains.kotlin.fir.FirRenderer
|
||||||
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase
|
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase
|
||||||
|
import org.jetbrains.kotlin.fir.builder.RawFirBuilderMode
|
||||||
import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider
|
import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider
|
||||||
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
|
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
|
||||||
import org.jetbrains.kotlin.fir.lightTree.walkTopDown
|
import org.jetbrains.kotlin.fir.lightTree.walkTopDown
|
||||||
@@ -65,7 +66,7 @@ class TreesCompareTest : AbstractRawFirBuilderTestCase() {
|
|||||||
|
|
||||||
//psi
|
//psi
|
||||||
val ktFile = createPsiFile(FileUtil.getNameWithoutExtension(PathUtil.getFileName(file.path)), text) as KtFile
|
val ktFile = createPsiFile(FileUtil.getNameWithoutExtension(PathUtil.getFileName(file.path)), text) as KtFile
|
||||||
val firFileFromPsi = ktFile.toFirFile(stubMode)
|
val firFileFromPsi = ktFile.toFirFile(RawFirBuilderMode.stubs(stubMode))
|
||||||
val treeFromPsi = StringBuilder().also { FirRenderer(it).visitFile(firFileFromPsi) }.toString()
|
val treeFromPsi = StringBuilder().also { FirRenderer(it).visitFile(firFileFromPsi) }.toString()
|
||||||
|
|
||||||
//light tree
|
//light tree
|
||||||
@@ -91,7 +92,7 @@ class TreesCompareTest : AbstractRawFirBuilderTestCase() {
|
|||||||
|
|
||||||
//psi
|
//psi
|
||||||
val ktFile = createPsiFile(FileUtil.getNameWithoutExtension(PathUtil.getFileName(file.path)), text) as KtFile
|
val ktFile = createPsiFile(FileUtil.getNameWithoutExtension(PathUtil.getFileName(file.path)), text) as KtFile
|
||||||
val firFileFromPsi = ktFile.toFirFile(stubMode = false)
|
val firFileFromPsi = ktFile.toFirFile()
|
||||||
val treeFromPsi = StringBuilder().also { FirRenderer(it).visitFile(firFileFromPsi) }.toString()
|
val treeFromPsi = StringBuilder().also { FirRenderer(it).visitFile(firFileFromPsi) }.toString()
|
||||||
.replace("<Unsupported LValue.*?>".toRegex(), "<Unsupported LValue>")
|
.replace("<Unsupported LValue.*?>".toRegex(), "<Unsupported LValue>")
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
|
|||||||
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
|
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.builder.*
|
import org.jetbrains.kotlin.fir.expressions.builder.*
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionStub
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirSingleExpressionBlock
|
import org.jetbrains.kotlin.fir.expressions.impl.FirSingleExpressionBlock
|
||||||
import org.jetbrains.kotlin.fir.references.builder.*
|
import org.jetbrains.kotlin.fir.references.builder.*
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
|
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
|
||||||
@@ -49,9 +50,11 @@ import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
|||||||
import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
||||||
|
|
||||||
class RawFirBuilder(
|
class RawFirBuilder(
|
||||||
session: FirSession, val baseScopeProvider: FirScopeProvider, val stubMode: Boolean, val lazyBodiesMode: Boolean = false
|
session: FirSession, val baseScopeProvider: FirScopeProvider, val mode: RawFirBuilderMode = RawFirBuilderMode.NORMAL
|
||||||
) : BaseFirBuilder<PsiElement>(session) {
|
) : BaseFirBuilder<PsiElement>(session) {
|
||||||
|
|
||||||
|
private val stubMode get() = mode == RawFirBuilderMode.STUBS
|
||||||
|
|
||||||
fun buildFirFile(file: KtFile): FirFile {
|
fun buildFirFile(file: KtFile): FirFile {
|
||||||
return file.accept(Visitor(), Unit) as FirFile
|
return file.accept(Visitor(), Unit) as FirFile
|
||||||
}
|
}
|
||||||
@@ -74,7 +77,7 @@ class RawFirBuilder(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun buildDeclaration(declaration: KtDeclaration): FirDeclaration {
|
private fun buildDeclaration(declaration: KtDeclaration): FirDeclaration {
|
||||||
assert(!stubMode) { "Building FIR declarations isn't supported in stub mode" }
|
assert(mode == RawFirBuilderMode.NORMAL) { "Building FIR declarations isn't supported in stub or lazy mode mode" }
|
||||||
setupContextForPosition(declaration)
|
setupContextForPosition(declaration)
|
||||||
return declaration.accept(Visitor(), Unit) as FirDeclaration
|
return declaration.accept(Visitor(), Unit) as FirDeclaration
|
||||||
}
|
}
|
||||||
@@ -258,7 +261,7 @@ class RawFirBuilder(
|
|||||||
when {
|
when {
|
||||||
!hasBody() ->
|
!hasBody() ->
|
||||||
null to null
|
null to null
|
||||||
lazyBodiesMode -> {
|
mode == RawFirBuilderMode.LAZY_BODIES -> {
|
||||||
val block = buildLazyBlock {
|
val block = buildLazyBlock {
|
||||||
source = bodyExpression?.toFirSourceElement()
|
source = bodyExpression?.toFirSourceElement()
|
||||||
?: error("hasBody() == true but body is null")
|
?: error("hasBody() == true but body is null")
|
||||||
@@ -1196,12 +1199,12 @@ class RawFirBuilder(
|
|||||||
val isVar = isVar
|
val isVar = isVar
|
||||||
val propertyInitializer = when {
|
val propertyInitializer = when {
|
||||||
!hasInitializer() -> null
|
!hasInitializer() -> null
|
||||||
lazyBodiesMode -> buildLazyExpression {
|
mode == RawFirBuilderMode.LAZY_BODIES -> buildLazyExpression {
|
||||||
source = initializer?.toFirSourceElement()
|
source = initializer?.toFirSourceElement()
|
||||||
}
|
}
|
||||||
else -> {
|
mode == RawFirBuilderMode.STUBS -> buildExpressionStub()
|
||||||
{ initializer }.toFirExpression("Should have initializer")
|
else -> initializer.toFirExpression("Should have initializer")
|
||||||
}
|
|
||||||
}
|
}
|
||||||
val delegateExpression by lazy { delegate?.expression }
|
val delegateExpression by lazy { delegate?.expression }
|
||||||
val propertySource = toFirSourceElement()
|
val propertySource = toFirSourceElement()
|
||||||
@@ -2080,3 +2083,29 @@ class RawFirBuilder(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum class RawFirBuilderMode {
|
||||||
|
/**
|
||||||
|
* Build every expression and every body
|
||||||
|
*/
|
||||||
|
NORMAL,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build [org.jetbrains.kotlin.fir.expressions.impl.FirExpressionStub] for expressions
|
||||||
|
*/
|
||||||
|
STUBS,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build [org.jetbrains.kotlin.fir.expressions.impl.FirLazyBlock] for function bodies, constructors & getters/setters
|
||||||
|
* Build [org.jetbrains.kotlin.fir.expressions.impl.FirLazyExpression] for property initializers
|
||||||
|
*/
|
||||||
|
LAZY_BODIES;
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun lazyBodies(lazyBodies: Boolean): RawFirBuilderMode =
|
||||||
|
if (lazyBodies) LAZY_BODIES else NORMAL
|
||||||
|
|
||||||
|
fun stubs(stubs: Boolean): RawFirBuilderMode =
|
||||||
|
if (stubs) STUBS else NORMAL
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
+1
-1
@@ -59,7 +59,7 @@ abstract class AbstractPartialRawFirBuilderTestCase : AbstractRawFirBuilderTestC
|
|||||||
|
|
||||||
val session = FirSessionFactory.createEmptySession()
|
val session = FirSessionFactory.createEmptySession()
|
||||||
|
|
||||||
val firElement = buildFirElement(RawFirBuilder(session, StubFirScopeProvider, false), elementToBuild)
|
val firElement = buildFirElement(RawFirBuilder(session, StubFirScopeProvider), elementToBuild)
|
||||||
|
|
||||||
val firDump = firElement.render(FirRenderer.RenderMode.WithFqNames)
|
val firDump = firElement.render(FirRenderer.RenderMode.WithFqNames)
|
||||||
val expectedPath = filePath.replace(".kt", ".txt")
|
val expectedPath = filePath.replace(".kt", ".txt")
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@ import java.io.File
|
|||||||
abstract class AbstractRawFirBuilderLazyBodiesTestCase : AbstractRawFirBuilderTestCase() {
|
abstract class AbstractRawFirBuilderLazyBodiesTestCase : AbstractRawFirBuilderTestCase() {
|
||||||
override fun doRawFirTest(filePath: String) {
|
override fun doRawFirTest(filePath: String) {
|
||||||
val file = createKtFile(filePath)
|
val file = createKtFile(filePath)
|
||||||
val firFile = file.toFirFile(stubMode = false, bodyStubMode = true)
|
val firFile = file.toFirFile(RawFirBuilderMode.LAZY_BODIES)
|
||||||
val firFileDump = StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString()
|
val firFileDump = StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString()
|
||||||
val expectedPath = filePath.replace(".kt", ".lazyBodies.txt")
|
val expectedPath = filePath.replace(".kt", ".lazyBodies.txt")
|
||||||
KotlinTestUtils.assertEqualsToFile(File(expectedPath), firFileDump)
|
KotlinTestUtils.assertEqualsToFile(File(expectedPath), firFileDump)
|
||||||
|
|||||||
+1
-1
@@ -39,7 +39,7 @@ abstract class AbstractRawFirBuilderSourceElementMappingTestCase : AbstractRawFi
|
|||||||
}
|
}
|
||||||
elements.single() as KtElement
|
elements.single() as KtElement
|
||||||
}
|
}
|
||||||
val firFile = ktFile.toFirFile(stubMode = false)
|
val firFile = ktFile.toFirFile()
|
||||||
val foundElement = run {
|
val foundElement = run {
|
||||||
val foundElements = FindElementVisitor.find(firFile, selectedExpression)
|
val foundElements = FindElementVisitor.find(firFile, selectedExpression)
|
||||||
if (foundElements.size != 1) {
|
if (foundElements.size != 1) {
|
||||||
|
|||||||
+3
-3
@@ -61,7 +61,7 @@ abstract class AbstractRawFirBuilderTestCase : KtParsingTestCase(
|
|||||||
|
|
||||||
protected open fun doRawFirTest(filePath: String) {
|
protected open fun doRawFirTest(filePath: String) {
|
||||||
val file = createKtFile(filePath)
|
val file = createKtFile(filePath)
|
||||||
val firFile = file.toFirFile(stubMode = false)
|
val firFile = file.toFirFile(RawFirBuilderMode.NORMAL)
|
||||||
val firFileDump = StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString()
|
val firFileDump = StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString()
|
||||||
val expectedPath = filePath.replace(".kt", ".txt")
|
val expectedPath = filePath.replace(".kt", ".txt")
|
||||||
KotlinTestUtils.assertEqualsToFile(File(expectedPath), firFileDump)
|
KotlinTestUtils.assertEqualsToFile(File(expectedPath), firFileDump)
|
||||||
@@ -74,9 +74,9 @@ abstract class AbstractRawFirBuilderTestCase : KtParsingTestCase(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun KtFile.toFirFile(stubMode: Boolean, bodyStubMode: Boolean = false): FirFile {
|
protected fun KtFile.toFirFile(mode: RawFirBuilderMode = RawFirBuilderMode.NORMAL): FirFile {
|
||||||
val session = FirSessionFactory.createEmptySession()
|
val session = FirSessionFactory.createEmptySession()
|
||||||
return RawFirBuilder(session, StubFirScopeProvider, stubMode, bodyStubMode).buildFirFile(this)
|
return RawFirBuilder(session, StubFirScopeProvider, mode).buildFirFile(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirElement.traverseChildren(result: MutableSet<FirElement> = hashSetOf()): MutableSet<FirElement> {
|
private fun FirElement.traverseChildren(result: MutableSet<FirElement> = hashSetOf()): MutableSet<FirElement> {
|
||||||
|
|||||||
+3
-3
@@ -59,7 +59,7 @@ class RawFirBuilderTotalKotlinTestCase : AbstractRawFirBuilderTestCase() {
|
|||||||
val ktFile = createKtFile(file.toRelativeString(root))
|
val ktFile = createKtFile(file.toRelativeString(root))
|
||||||
val firFile: FirFile
|
val firFile: FirFile
|
||||||
time += measureNanoTime {
|
time += measureNanoTime {
|
||||||
firFile = ktFile.toFirFile(stubMode)
|
firFile = ktFile.toFirFile(RawFirBuilderMode.stubs(stubMode))
|
||||||
}
|
}
|
||||||
totalLength += StringBuilder().also { FirRenderer(it).visitFile(firFile) }.length
|
totalLength += StringBuilder().also { FirRenderer(it).visitFile(firFile) }.length
|
||||||
counter++
|
counter++
|
||||||
@@ -180,7 +180,7 @@ class RawFirBuilderTotalKotlinTestCase : AbstractRawFirBuilderTestCase() {
|
|||||||
if ("testData" in path || "resources" in path || "api/js" in path.replace('\\', '/')) continue
|
if ("testData" in path || "resources" in path || "api/js" in path.replace('\\', '/')) continue
|
||||||
if (file.extension != "kt") continue
|
if (file.extension != "kt") continue
|
||||||
val ktFile = createKtFile(file.toRelativeString(root))
|
val ktFile = createKtFile(file.toRelativeString(root))
|
||||||
val firFile = ktFile.toFirFile(stubMode = false)
|
val firFile = ktFile.toFirFile()
|
||||||
try {
|
try {
|
||||||
firFile.checkConsistency()
|
firFile.checkConsistency()
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
@@ -207,7 +207,7 @@ class RawFirBuilderTotalKotlinTestCase : AbstractRawFirBuilderTestCase() {
|
|||||||
if ("testData" in path || "resources" in path || "api/js" in path.replace('\\', '/')) continue
|
if ("testData" in path || "resources" in path || "api/js" in path.replace('\\', '/')) continue
|
||||||
if (file.extension != "kt") continue
|
if (file.extension != "kt") continue
|
||||||
val ktFile = createKtFile(file.toRelativeString(root))
|
val ktFile = createKtFile(file.toRelativeString(root))
|
||||||
val firFile: FirFile = ktFile.toFirFile(stubMode = false)
|
val firFile: FirFile = ktFile.toFirFile()
|
||||||
val psiSetViaFir = mutableSetOf<KtElement>()
|
val psiSetViaFir = mutableSetOf<KtElement>()
|
||||||
val psiSetDirect = mutableSetOf<KtElement>()
|
val psiSetDirect = mutableSetOf<KtElement>()
|
||||||
firFile.accept(object : FirVisitorVoid() {
|
firFile.accept(object : FirVisitorVoid() {
|
||||||
|
|||||||
+1
-1
@@ -118,7 +118,7 @@ abstract class AbstractFirBaseDiagnosticsTest : BaseDiagnosticsTest() {
|
|||||||
firFile
|
firFile
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
val firBuilder = RawFirBuilder(session, firProvider.kotlinScopeProvider, false)
|
val firBuilder = RawFirBuilder(session, firProvider.kotlinScopeProvider)
|
||||||
ktFiles.mapTo(firFiles) {
|
ktFiles.mapTo(firFiles) {
|
||||||
val firFile = firBuilder.buildFirFile(it)
|
val firFile = firBuilder.buildFirFile(it)
|
||||||
firProvider.recordFile(firFile)
|
firProvider.recordFile(firFile)
|
||||||
|
|||||||
+1
-1
@@ -33,7 +33,7 @@ abstract class AbstractFirVisualizer : AbstractVisualizer() {
|
|||||||
val session = createSession(environment, scope)
|
val session = createSession(environment, scope)
|
||||||
|
|
||||||
val firProvider = (session.firProvider as FirProviderImpl)
|
val firProvider = (session.firProvider as FirProviderImpl)
|
||||||
val builder = RawFirBuilder(session, firProvider.kotlinScopeProvider, stubMode = false)
|
val builder = RawFirBuilder(session, firProvider.kotlinScopeProvider)
|
||||||
|
|
||||||
val transformer = FirTotalResolveProcessor(session)
|
val transformer = FirTotalResolveProcessor(session)
|
||||||
val firFiles = ktFiles.map {
|
val firFiles = ktFiles.map {
|
||||||
|
|||||||
+2
-1
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.idea.fir.low.level.api.file.builder
|
package org.jetbrains.kotlin.idea.fir.low.level.api.file.builder
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
|
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
|
||||||
|
import org.jetbrains.kotlin.fir.builder.RawFirBuilderMode
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
|
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
|
||||||
@@ -33,7 +34,7 @@ internal class FirFileBuilder(
|
|||||||
cache: ModuleFileCache,
|
cache: ModuleFileCache,
|
||||||
lazyBodiesMode: Boolean
|
lazyBodiesMode: Boolean
|
||||||
): FirFile = cache.fileCached(ktFile) {
|
): FirFile = cache.fileCached(ktFile) {
|
||||||
RawFirBuilder(cache.session, scopeProvider, stubMode = false, lazyBodiesMode = lazyBodiesMode).buildFirFile(ktFile)
|
RawFirBuilder(cache.session, scopeProvider, RawFirBuilderMode.lazyBodies(lazyBodiesMode)).buildFirFile(ktFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getBuiltFirFileOrNull(ktFile: KtFile, cache: ModuleFileCache): FirFile? =
|
fun getBuiltFirFileOrNull(ktFile: KtFile, cache: ModuleFileCache): FirFile? =
|
||||||
|
|||||||
+1
-1
@@ -78,7 +78,7 @@ internal object FirLazyBodiesCalculator {
|
|||||||
|
|
||||||
private fun createRawFirBuilder(firDeclaration: FirDeclaration): RawFirBuilder {
|
private fun createRawFirBuilder(firDeclaration: FirDeclaration): RawFirBuilder {
|
||||||
val scopeProvider = firDeclaration.session.firIdeProvider.kotlinScopeProvider
|
val scopeProvider = firDeclaration.session.firIdeProvider.kotlinScopeProvider
|
||||||
return RawFirBuilder(firDeclaration.session, scopeProvider, stubMode = false)
|
return RawFirBuilder(firDeclaration.session, scopeProvider)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val FIRST_PHASE_WHICH_NEEDS_BODIES = FirResolvePhase.CONTRACTS
|
private val FIRST_PHASE_WHICH_NEEDS_BODIES = FirResolvePhase.CONTRACTS
|
||||||
|
|||||||
+2
-2
@@ -97,11 +97,11 @@ internal class FirIdeProvider(
|
|||||||
// TODO move out of here
|
// TODO move out of here
|
||||||
// used only for completion
|
// used only for completion
|
||||||
fun buildFunctionWithBody(ktNamedFunction: KtNamedFunction): FirFunction<*> {
|
fun buildFunctionWithBody(ktNamedFunction: KtNamedFunction): FirFunction<*> {
|
||||||
return RawFirBuilder(session, kotlinScopeProvider, stubMode = false).buildFunctionWithBody(ktNamedFunction)
|
return RawFirBuilder(session, kotlinScopeProvider).buildFunctionWithBody(ktNamedFunction)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun buildPropertyWithBody(ktNamedFunction: KtProperty): FirProperty {
|
fun buildPropertyWithBody(ktNamedFunction: KtProperty): FirProperty {
|
||||||
return RawFirBuilder(session, kotlinScopeProvider, stubMode = false).buildPropertyWithBody(ktNamedFunction)
|
return RawFirBuilder(session, kotlinScopeProvider).buildPropertyWithBody(ktNamedFunction)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -75,7 +75,7 @@ abstract class AbstractFirMultiModuleResolveTest : AbstractMultiModuleTest() {
|
|||||||
sessions += session
|
sessions += session
|
||||||
|
|
||||||
val firProvider = (session.firProvider as FirProviderImpl)
|
val firProvider = (session.firProvider as FirProviderImpl)
|
||||||
val builder = RawFirBuilder(session, firProvider.kotlinScopeProvider, stubMode = false)
|
val builder = RawFirBuilder(session, firProvider.kotlinScopeProvider)
|
||||||
val psiManager = PsiManager.getInstance(project)
|
val psiManager = PsiManager.getInstance(project)
|
||||||
|
|
||||||
val ideaModuleInfo = session.moduleInfo.cast<IdeaModuleInfo>()
|
val ideaModuleInfo = session.moduleInfo.cast<IdeaModuleInfo>()
|
||||||
|
|||||||
+2
-1
@@ -9,6 +9,7 @@ import org.jetbrains.annotations.TestOnly
|
|||||||
import org.jetbrains.kotlin.builtins.StandardNames
|
import org.jetbrains.kotlin.builtins.StandardNames
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
|
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
|
||||||
|
import org.jetbrains.kotlin.fir.builder.RawFirBuilderMode
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
@@ -116,7 +117,7 @@ object KtDeclarationAndFirDeclarationEqualityChecker {
|
|||||||
|
|
||||||
private fun KtTypeReference.toKotlinTypReference(session: FirSession): FirTypeRef {
|
private fun KtTypeReference.toKotlinTypReference(session: FirSession): FirTypeRef {
|
||||||
// Maybe resolve all types here to not to work with FirTypeRef directly
|
// Maybe resolve all types here to not to work with FirTypeRef directly
|
||||||
return RawFirBuilder(session, DummyScopeProvider, stubMode = true).buildTypeReference(this)
|
return RawFirBuilder(session, DummyScopeProvider, RawFirBuilderMode.STUBS).buildTypeReference(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ConeKotlinType.renderTypeAsKotlinType(): String {
|
private fun ConeKotlinType.renderTypeAsKotlinType(): String {
|
||||||
|
|||||||
Reference in New Issue
Block a user