[IR] Extract some common code into AbstractIrFileEntry
This commit is contained in:
@@ -30,3 +30,39 @@ interface IrFileEntry {
|
|||||||
fun getColumnNumber(offset: Int): Int
|
fun getColumnNumber(offset: Int): Int
|
||||||
fun getLineAndColumnNumbers(offset: Int): LineAndColumn
|
fun getLineAndColumnNumbers(offset: Int): LineAndColumn
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abstract class AbstractIrFileEntry : IrFileEntry {
|
||||||
|
protected abstract val lineStartOffsets: IntArray
|
||||||
|
|
||||||
|
override fun getLineNumber(offset: Int): Int {
|
||||||
|
if (offset < 0) return UNDEFINED_LINE_NUMBER
|
||||||
|
val index = lineStartOffsets.binarySearch(offset)
|
||||||
|
return if (index >= 0) index else -index - 2
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getColumnNumber(offset: Int): Int {
|
||||||
|
if (offset < 0) return UNDEFINED_COLUMN_NUMBER
|
||||||
|
val lineNumber = getLineNumber(offset)
|
||||||
|
if (lineNumber < 0) return UNDEFINED_COLUMN_NUMBER
|
||||||
|
return offset - lineStartOffsets[lineNumber]
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getLineAndColumnNumbers(offset: Int): LineAndColumn {
|
||||||
|
if (offset < 0) return LineAndColumn(UNDEFINED_LINE_NUMBER, UNDEFINED_COLUMN_NUMBER)
|
||||||
|
val lineNumber = getLineNumber(offset)
|
||||||
|
if (lineNumber < 0) return LineAndColumn(lineNumber, UNDEFINED_COLUMN_NUMBER)
|
||||||
|
val columnNumber = offset - lineStartOffsets[lineNumber]
|
||||||
|
return LineAndColumn(lineNumber, columnNumber)
|
||||||
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|||||||
@@ -10,11 +10,11 @@ import com.intellij.psi.PsiFile
|
|||||||
import com.intellij.psi.util.PsiTreeUtil
|
import com.intellij.psi.util.PsiTreeUtil
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
class PsiIrFileEntry(val psiFile: PsiFile) : IrFileEntry {
|
class PsiIrFileEntry(val psiFile: PsiFile) : AbstractIrFileEntry() {
|
||||||
private val psiFileName = psiFile.virtualFile?.path ?: psiFile.name
|
private val psiFileName = psiFile.virtualFile?.path ?: psiFile.name
|
||||||
|
|
||||||
override val maxOffset: Int
|
override val maxOffset: Int
|
||||||
private val lineStartOffsets: IntArray
|
override val lineStartOffsets: IntArray
|
||||||
private val fileViewProvider = psiFile.viewProvider
|
private val fileViewProvider = psiFile.viewProvider
|
||||||
|
|
||||||
init {
|
init {
|
||||||
@@ -23,38 +23,6 @@ class PsiIrFileEntry(val psiFile: PsiFile) : IrFileEntry {
|
|||||||
lineStartOffsets = IntArray(document.lineCount) { document.getLineStartOffset(it) }
|
lineStartOffsets = IntArray(document.lineCount) { document.getLineStartOffset(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getLineNumber(offset: Int): Int {
|
|
||||||
if (offset < 0) return UNDEFINED_LINE_NUMBER
|
|
||||||
val index = lineStartOffsets.binarySearch(offset)
|
|
||||||
return if (index >= 0) index else -index - 2
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getColumnNumber(offset: Int): Int {
|
|
||||||
if (offset < 0) return UNDEFINED_COLUMN_NUMBER
|
|
||||||
val lineNumber = getLineNumber(offset)
|
|
||||||
if (lineNumber < 0) return UNDEFINED_COLUMN_NUMBER
|
|
||||||
return offset - lineStartOffsets[lineNumber]
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getLineAndColumnNumbers(offset: Int): LineAndColumn {
|
|
||||||
if (offset < 0) return LineAndColumn(UNDEFINED_LINE_NUMBER, UNDEFINED_COLUMN_NUMBER)
|
|
||||||
val lineNumber = getLineNumber(offset)
|
|
||||||
if (lineNumber < 0) return LineAndColumn(lineNumber, UNDEFINED_COLUMN_NUMBER)
|
|
||||||
val columnNumber = offset - lineStartOffsets[lineNumber]
|
|
||||||
return LineAndColumn(lineNumber, columnNumber)
|
|
||||||
}
|
|
||||||
|
|
||||||
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 getRecognizableName(): String = psiFileName
|
private fun getRecognizableName(): String = psiFileName
|
||||||
|
|
||||||
override val name: String get() = getRecognizableName()
|
override val name: String get() = getRecognizableName()
|
||||||
|
|||||||
@@ -260,46 +260,26 @@ val IrFileEntry.lineStartOffsets: IntArray
|
|||||||
|
|
||||||
class NaiveSourceBasedFileEntryImpl(
|
class NaiveSourceBasedFileEntryImpl(
|
||||||
override val name: String,
|
override val name: String,
|
||||||
private val lineStartOffsets: IntArray = intArrayOf(),
|
override val lineStartOffsets: IntArray = intArrayOf(),
|
||||||
override val maxOffset: Int = UNDEFINED_OFFSET
|
override val maxOffset: Int = UNDEFINED_OFFSET
|
||||||
) : IrFileEntry {
|
) : AbstractIrFileEntry() {
|
||||||
val lineStartOffsetsAreEmpty: Boolean
|
val lineStartOffsetsAreEmpty: Boolean
|
||||||
get() = lineStartOffsets.isEmpty()
|
get() = lineStartOffsets.isEmpty()
|
||||||
|
|
||||||
override fun getLineNumber(offset: Int): Int {
|
override fun getLineNumber(offset: Int): Int {
|
||||||
if (offset == SYNTHETIC_OFFSET) return 0
|
if (offset == SYNTHETIC_OFFSET) return 0
|
||||||
if (offset < 0) return UNDEFINED_LINE_NUMBER
|
return super.getLineNumber(offset)
|
||||||
val index = lineStartOffsets.binarySearch(offset)
|
|
||||||
return if (index >= 0) index else -index - 2
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getColumnNumber(offset: Int): Int {
|
override fun getColumnNumber(offset: Int): Int {
|
||||||
if (offset == SYNTHETIC_OFFSET) return 0
|
if (offset == SYNTHETIC_OFFSET) return 0
|
||||||
if (offset < 0) return UNDEFINED_COLUMN_NUMBER
|
return super.getColumnNumber(offset)
|
||||||
val lineNumber = getLineNumber(offset)
|
|
||||||
if (lineNumber < 0) return UNDEFINED_COLUMN_NUMBER
|
|
||||||
return offset - lineStartOffsets[lineNumber]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getLineAndColumnNumbers(offset: Int): LineAndColumn {
|
override fun getLineAndColumnNumbers(offset: Int): LineAndColumn {
|
||||||
if (offset == SYNTHETIC_OFFSET) return LineAndColumn(0, 0)
|
if (offset == SYNTHETIC_OFFSET) return LineAndColumn(0, 0)
|
||||||
if (offset < 0) return LineAndColumn(UNDEFINED_LINE_NUMBER, UNDEFINED_COLUMN_NUMBER)
|
return super.getLineAndColumnNumbers(offset)
|
||||||
val lineNumber = getLineNumber(offset)
|
|
||||||
if (lineNumber < 0) return LineAndColumn(lineNumber, UNDEFINED_COLUMN_NUMBER)
|
|
||||||
val columnNumber = offset - lineStartOffsets[lineNumber]
|
|
||||||
return LineAndColumn(lineNumber, columnNumber)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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? {
|
private fun IrClass.getPropertyDeclaration(name: String): IrProperty? {
|
||||||
|
|||||||
Reference in New Issue
Block a user