FIR checker: fix positioning of CONFLICTING_IMPORT

FE1.0 puts it on the alias when applicable.
This commit is contained in:
Tianyu Geng
2021-10-19 16:13:05 -07:00
committed by Mikhail Glukhikh
parent 4ad5f01324
commit 52b247937e
6 changed files with 30 additions and 3 deletions
@@ -1322,7 +1322,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
parameter<Name>("name")
}
val CONFLICTING_IMPORT by error<KtImportDirective>(PositioningStrategy.IMPORT_LAST_NAME) {
val CONFLICTING_IMPORT by error<KtImportDirective>(PositioningStrategy.IMPORT_ALIAS) {
parameter<Name>("name")
}
@@ -108,6 +108,7 @@ enum class PositioningStrategy(private val strategy: String? = null) {
ENUM_MODIFIER,
FIELD_KEYWORD,
TAILREC_MODIFIER,
IMPORT_ALIAS,
PROPERTY_DELEGATE,
;
@@ -684,7 +684,7 @@ object FirErrors {
val CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON by error1<KtImportDirective, Name>(SourceElementPositioningStrategies.IMPORT_LAST_NAME)
val PACKAGE_CANNOT_BE_IMPORTED by error0<KtImportDirective>(SourceElementPositioningStrategies.IMPORT_LAST_NAME)
val CANNOT_BE_IMPORTED by error1<KtImportDirective, Name>(SourceElementPositioningStrategies.IMPORT_LAST_NAME)
val CONFLICTING_IMPORT by error1<KtImportDirective, Name>(SourceElementPositioningStrategies.IMPORT_LAST_NAME)
val CONFLICTING_IMPORT by error1<KtImportDirective, Name>(SourceElementPositioningStrategies.IMPORT_ALIAS)
val OPERATOR_RENAMED_ON_IMPORT by error0<KtImportDirective>(SourceElementPositioningStrategies.IMPORT_LAST_NAME)
// Suspend errors
@@ -879,6 +879,23 @@ object LightTreePositioningStrategies {
}
}
val IMPORT_ALIAS: LightTreePositioningStrategy = object : LightTreePositioningStrategy() {
override fun mark(
node: LighterASTNode,
startOffset: Int,
endOffset: Int,
tree: FlyweightCapableTreeStructure<LighterASTNode>
): List<TextRange> {
tree.findChildByType(node, KtNodeTypes.IMPORT_ALIAS)?.let {
tree.findChildByType(it, KtTokens.IDENTIFIER)?.let {
return markElement(it, startOffset, endOffset, tree, node)
}
}
return IMPORT_LAST_NAME.mark(node, startOffset, endOffset, tree)
}
}
val SPREAD_OPERATOR: LightTreePositioningStrategy = object : LightTreePositioningStrategy() {
override fun mark(
node: LighterASTNode,
@@ -330,6 +330,11 @@ object SourceElementPositioningStrategies {
PositioningStrategies.TAILREC_MODIFIER
)
val IMPORT_ALIAS = SourceElementPositioningStrategy(
LightTreePositioningStrategies.IMPORT_ALIAS,
PositioningStrategies.IMPORT_ALIAS
)
val PROPERTY_DELEGATE = SourceElementPositioningStrategy(
LightTreePositioningStrategies.PROPERTY_DELEGATE,
PositioningStrategies.PROPERTY_DELEGATE
@@ -46,4 +46,8 @@ import a.B
// FILE: 6.kt
import a.<!CONFLICTING_IMPORT!>B<!>
import b.<!CONFLICTING_IMPORT!>B<!>
import b.<!CONFLICTING_IMPORT!>B<!>
// FILE: 7.kt
import a.B as <!CONFLICTING_IMPORT!>Foo<!>
import b.B as <!CONFLICTING_IMPORT!>Foo<!>