FIR LT: Introduce source file abstraction, carry it from parsing to IR
along with source lines mapping, allows to "emulate" usage of the PSI files which allows to extract source file and line mapping info on every stage from source element. It makes sense to use this mapping for the error reporting too.
This commit is contained in:
@@ -6,6 +6,8 @@
|
||||
package org.jetbrains.kotlin.fir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.KtSourceFile
|
||||
import org.jetbrains.kotlin.KtSourceFileLinesMapping
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.FirPackageDirective
|
||||
@@ -29,7 +31,8 @@ abstract class FirFile : FirDeclaration() {
|
||||
abstract val imports: List<FirImport>
|
||||
abstract val declarations: List<FirDeclaration>
|
||||
abstract val name: String
|
||||
abstract val path: String?
|
||||
abstract val sourceFile: KtSourceFile?
|
||||
abstract val sourceFileLinesMapping: KtSourceFileLinesMapping?
|
||||
abstract override val symbol: FirFileSymbol
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitFile(this, data)
|
||||
|
||||
+6
-2
@@ -7,6 +7,8 @@ package org.jetbrains.kotlin.fir.declarations.builder
|
||||
|
||||
import kotlin.contracts.*
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.KtSourceFile
|
||||
import org.jetbrains.kotlin.KtSourceFileLinesMapping
|
||||
import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.FirPackageDirective
|
||||
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
|
||||
@@ -39,7 +41,8 @@ class FirFileBuilder : FirAnnotationContainerBuilder {
|
||||
val imports: MutableList<FirImport> = mutableListOf()
|
||||
val declarations: MutableList<FirDeclaration> = mutableListOf()
|
||||
lateinit var name: String
|
||||
var path: String? = null
|
||||
var sourceFile: KtSourceFile? = null
|
||||
var sourceFileLinesMapping: KtSourceFileLinesMapping? = null
|
||||
|
||||
override fun build(): FirFile {
|
||||
return FirFileImpl(
|
||||
@@ -53,7 +56,8 @@ class FirFileBuilder : FirAnnotationContainerBuilder {
|
||||
imports,
|
||||
declarations,
|
||||
name,
|
||||
path,
|
||||
sourceFile,
|
||||
sourceFileLinesMapping,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
package org.jetbrains.kotlin.fir.declarations.impl
|
||||
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.KtSourceFile
|
||||
import org.jetbrains.kotlin.KtSourceFileLinesMapping
|
||||
import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.FirPackageDirective
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
@@ -35,7 +37,8 @@ internal class FirFileImpl(
|
||||
override val imports: MutableList<FirImport>,
|
||||
override val declarations: MutableList<FirDeclaration>,
|
||||
override val name: String,
|
||||
override val path: String?,
|
||||
override val sourceFile: KtSourceFile?,
|
||||
override val sourceFileLinesMapping: KtSourceFileLinesMapping?,
|
||||
) : FirFile() {
|
||||
override val symbol: FirFileSymbol = FirFileSymbol()
|
||||
|
||||
|
||||
+2
-1
@@ -415,7 +415,8 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
+fieldList(import).withTransform()
|
||||
+declarations.withTransform()
|
||||
+stringField("name")
|
||||
+stringField("path", nullable = true)
|
||||
+field("sourceFile", sourceFileType, nullable = true)
|
||||
+field("sourceFileLinesMapping", sourceFileLinesMappingType, nullable = true)
|
||||
+symbol("FirFileSymbol")
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
package org.jetbrains.kotlin.fir.tree.generator
|
||||
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.KtSourceFile
|
||||
import org.jetbrains.kotlin.KtSourceFileLinesMapping
|
||||
import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
@@ -23,6 +25,8 @@ import org.jetbrains.kotlin.types.SmartcastStability
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
|
||||
val sourceElementType = type(KtSourceElement::class)
|
||||
val sourceFileType = type(KtSourceFile::class)
|
||||
val sourceFileLinesMappingType = type(KtSourceFileLinesMapping::class)
|
||||
val jumpTargetType = type("fir", "FirTarget")
|
||||
val constKindType = type("types", "ConstantValueKind")
|
||||
val operationType = type("fir.expressions", "FirOperation")
|
||||
|
||||
Reference in New Issue
Block a user