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:
@@ -186,7 +186,8 @@ val IrFileEntry.lineStartOffsets: IntArray
|
||||
|
||||
class NaiveSourceBasedFileEntryImpl(
|
||||
override val name: String,
|
||||
private val lineStartOffsets: IntArray = intArrayOf()
|
||||
private val lineStartOffsets: IntArray = intArrayOf(),
|
||||
override val maxOffset: Int = UNDEFINED_OFFSET
|
||||
) : IrFileEntry {
|
||||
val lineStartOffsetsAreEmpty: Boolean
|
||||
get() = lineStartOffsets.isEmpty()
|
||||
@@ -215,15 +216,19 @@ class NaiveSourceBasedFileEntryImpl(
|
||||
if (offset == SYNTHETIC_OFFSET) return 0
|
||||
if (offset < 0) return -1
|
||||
val lineNumber = getLineNumber(offset)
|
||||
return offset - lineStartOffsets[lineNumber]
|
||||
return if (lineNumber < 0) -1 else offset - lineStartOffsets[lineNumber]
|
||||
}
|
||||
|
||||
override val maxOffset: Int
|
||||
get() = UNDEFINED_OFFSET
|
||||
|
||||
override fun getSourceRangeInfo(beginOffset: Int, endOffset: Int): SourceRangeInfo {
|
||||
return SourceRangeInfo(name, beginOffset, -1, -1, endOffset, -1, -1)
|
||||
}
|
||||
override fun getSourceRangeInfo(beginOffset: Int, endOffset: Int): SourceRangeInfo =
|
||||
SourceRangeInfo(
|
||||
filePath = name,
|
||||
startOffset = beginOffset,
|
||||
startLineNumber = getLineNumber(beginOffset),
|
||||
startColumnNumber = getColumnNumber(beginOffset),
|
||||
endOffset = endOffset,
|
||||
endLineNumber = getLineNumber(endOffset),
|
||||
endColumnNumber = getColumnNumber(endOffset)
|
||||
)
|
||||
}
|
||||
|
||||
private fun IrClass.getPropertyDeclaration(name: String): IrProperty? {
|
||||
|
||||
Reference in New Issue
Block a user