diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt index d03be3d0b48..a832f3c7c19 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt @@ -1322,7 +1322,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { parameter("name") } - val CONFLICTING_IMPORT by error(PositioningStrategy.IMPORT_LAST_NAME) { + val CONFLICTING_IMPORT by error(PositioningStrategy.IMPORT_ALIAS) { parameter("name") } diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/model/RegularDiagnosticData.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/model/RegularDiagnosticData.kt index 53fa7af7e3d..3d533ebf64f 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/model/RegularDiagnosticData.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/model/RegularDiagnosticData.kt @@ -108,6 +108,7 @@ enum class PositioningStrategy(private val strategy: String? = null) { ENUM_MODIFIER, FIELD_KEYWORD, TAILREC_MODIFIER, + IMPORT_ALIAS, PROPERTY_DELEGATE, ; diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index 89a87e80c78..f4ed3ab9124 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -684,7 +684,7 @@ object FirErrors { val CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON by error1(SourceElementPositioningStrategies.IMPORT_LAST_NAME) val PACKAGE_CANNOT_BE_IMPORTED by error0(SourceElementPositioningStrategies.IMPORT_LAST_NAME) val CANNOT_BE_IMPORTED by error1(SourceElementPositioningStrategies.IMPORT_LAST_NAME) - val CONFLICTING_IMPORT by error1(SourceElementPositioningStrategies.IMPORT_LAST_NAME) + val CONFLICTING_IMPORT by error1(SourceElementPositioningStrategies.IMPORT_ALIAS) val OPERATOR_RENAMED_ON_IMPORT by error0(SourceElementPositioningStrategies.IMPORT_LAST_NAME) // Suspend errors diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategies.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategies.kt index bf94d5adbb7..c26634698db 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategies.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategies.kt @@ -879,6 +879,23 @@ object LightTreePositioningStrategies { } } + val IMPORT_ALIAS: LightTreePositioningStrategy = object : LightTreePositioningStrategy() { + override fun mark( + node: LighterASTNode, + startOffset: Int, + endOffset: Int, + tree: FlyweightCapableTreeStructure + ): List { + 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, diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/SourceElementPositioningStrategies.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/SourceElementPositioningStrategies.kt index 4c2715ef224..7109fbc96eb 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/SourceElementPositioningStrategies.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/SourceElementPositioningStrategies.kt @@ -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 diff --git a/compiler/testData/diagnostics/tests/imports/ImportClassClash.kt b/compiler/testData/diagnostics/tests/imports/ImportClassClash.kt index feca12d623c..96d9b43ccef 100644 --- a/compiler/testData/diagnostics/tests/imports/ImportClassClash.kt +++ b/compiler/testData/diagnostics/tests/imports/ImportClassClash.kt @@ -46,4 +46,8 @@ import a.B // FILE: 6.kt import a.B -import b.B \ No newline at end of file +import b.B + +// FILE: 7.kt +import a.B as Foo +import b.B as Foo