[FIR] Don't use positioning strategies from FE 1.0
This commit is contained in:
committed by
TeamCityServer
parent
00069b1d2f
commit
c32aecb7ae
+17
-8
@@ -8,29 +8,38 @@ package org.jetbrains.kotlin.fir.analysis.diagnostics
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.cfg.UnreachableCode
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticMarker
|
||||
import org.jetbrains.kotlin.diagnostics.PositioningStrategy
|
||||
import org.jetbrains.kotlin.fir.FirPsiSourceElement
|
||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||
import org.jetbrains.kotlin.fir.psi
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
||||
|
||||
abstract class FirPsiPositioningStrategy<in E : PsiElement> : PositioningStrategy<E>(),
|
||||
FirDiagnosticPositioningStrategy<FirPsiSourceElement>
|
||||
|
||||
object FirPsiPositioningStrategies {
|
||||
|
||||
val UNREACHABLE_CODE = object : FirPsiPositioningStrategy<PsiElement>() {
|
||||
|
||||
override fun markFirDiagnostic(element: FirPsiSourceElement, diagnostic: FirDiagnostic): List<TextRange> {
|
||||
val UNREACHABLE_CODE = object : PositioningStrategy<PsiElement>() {
|
||||
override fun markDiagnostic(diagnostic: DiagnosticMarker): List<TextRange> {
|
||||
//todo it is better to implement arguments extraction in FirDiagnosticFactory, but kotlin struggle with checking types in it atm
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val typed = diagnostic as FirDiagnosticWithParameters2<Set<FirSourceElement>, Set<FirSourceElement>>
|
||||
val source = diagnostic.element as FirPsiSourceElement
|
||||
return UnreachableCode.getUnreachableTextRanges(
|
||||
element.psi as KtElement,
|
||||
source.psi as KtElement,
|
||||
typed.a.mapNotNull { it.psi as? KtElement }.toSet(),
|
||||
typed.b.mapNotNull { it.psi as? KtElement }.toSet()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
val ACTUAL_DECLARATION_NAME = object : PositioningStrategy<PsiElement>() {
|
||||
override fun markDiagnostic(diagnostic: DiagnosticMarker): List<TextRange> {
|
||||
require(diagnostic is FirDiagnostic)
|
||||
val element = diagnostic.element.psi ?: return emptyList()
|
||||
(element as? KtNamedDeclaration)?.nameIdentifier?.let { nameIdentifier ->
|
||||
return mark(nameIdentifier)
|
||||
}
|
||||
return mark(element)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-7
@@ -16,13 +16,8 @@ import org.jetbrains.kotlin.lexer.KtSingleValueToken
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.lexer.KtTokens.WHITE_SPACE
|
||||
|
||||
interface FirDiagnosticPositioningStrategy<E : FirSourceElement> {
|
||||
fun markFirDiagnostic(element: E, diagnostic: FirDiagnostic): List<TextRange>
|
||||
}
|
||||
|
||||
open class LightTreePositioningStrategy : FirDiagnosticPositioningStrategy<FirSourceElement> {
|
||||
|
||||
override fun markFirDiagnostic(element: FirSourceElement, diagnostic: FirDiagnostic): List<TextRange> {
|
||||
open class LightTreePositioningStrategy {
|
||||
open fun markFirDiagnostic(element: FirSourceElement, diagnostic: FirDiagnostic): List<TextRange> {
|
||||
return mark(element.lighterASTNode, element.startOffset, element.endOffset, element.treeStructure)
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -284,7 +284,7 @@ object SourceElementPositioningStrategies {
|
||||
|
||||
val ACTUAL_DECLARATION_NAME = SourceElementPositioningStrategy(
|
||||
LightTreePositioningStrategies.ACTUAL_DECLARATION_NAME,
|
||||
PositioningStrategies.DEFAULT // TODO
|
||||
FirPsiPositioningStrategies.ACTUAL_DECLARATION_NAME
|
||||
)
|
||||
|
||||
val LABEL = SourceElementPositioningStrategy(
|
||||
|
||||
Reference in New Issue
Block a user