diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/KotlinUnusedImportInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/KotlinUnusedImportInspection.kt index d8c3125285a..0886a8ae7c6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/KotlinUnusedImportInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/KotlinUnusedImportInspection.kt @@ -41,6 +41,7 @@ import com.intellij.psi.PsiFile import com.intellij.psi.PsiWhiteSpace import com.intellij.psi.util.PsiUtilBase import com.intellij.util.DocumentUtil +import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.core.targetDescriptors import org.jetbrains.kotlin.idea.imports.KotlinImportOptimizer import org.jetbrains.kotlin.idea.imports.OptimizedImportsBuilder @@ -91,6 +92,7 @@ class KotlinUnusedImportInspection : AbstractKotlinInspection() { val importPaths = HashSet(directives.size) val unusedImports = ArrayList() + val resolutionFacade = file.getResolutionFacade() for (directive in directives) { val importPath = directive.importPath ?: continue if (importPath.alias != null) continue // highlighting of unused alias imports not supported yet @@ -98,11 +100,13 @@ class KotlinUnusedImportInspection : AbstractKotlinInspection() { val isUsed = when { !importPaths.add(importPath) -> false importPath.isAllUnder -> importPath.fqName in parentFqNames - else -> importPath.fqName in fqNames + importPath.fqName in fqNames -> true + // case for type alias + else -> directive.targetDescriptors(resolutionFacade).firstOrNull()?.let { it.importableFqName in fqNames } ?: false } if (!isUsed) { - if (directive.targetDescriptors().isEmpty()) continue // do not highlight unresolved imports as unused + if (directive.targetDescriptors(resolutionFacade).isEmpty()) continue // do not highlight unresolved imports as unused unusedImports += directive } } diff --git a/idea/testData/quickfix/optimizeImports/notRemoveImportsForTypeAliases2.before.Dependency.kt b/idea/testData/quickfix/optimizeImports/notRemoveImportsForTypeAliases2.before.Dependency.kt new file mode 100644 index 00000000000..3ec477b28b6 --- /dev/null +++ b/idea/testData/quickfix/optimizeImports/notRemoveImportsForTypeAliases2.before.Dependency.kt @@ -0,0 +1,5 @@ +package test + +import MyEnum + +typealias Other = MyEnum \ No newline at end of file diff --git a/idea/testData/quickfix/optimizeImports/notRemoveImportsForTypeAliases2.before.Main.kt b/idea/testData/quickfix/optimizeImports/notRemoveImportsForTypeAliases2.before.Main.kt new file mode 100644 index 00000000000..0301fda0ef4 --- /dev/null +++ b/idea/testData/quickfix/optimizeImports/notRemoveImportsForTypeAliases2.before.Main.kt @@ -0,0 +1,10 @@ +// "Optimize imports" "false" +// ACTION: Introduce import alias + +import test.Other.HELLO + +val ONE = HELLO + +enum class MyEnum { + HELLO +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java index d3c4740920d..581df73140d 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java @@ -3291,6 +3291,11 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes public void testNotRemoveImportsForTypeAliases() throws Exception { runTest("idea/testData/quickfix/optimizeImports/notRemoveImportsForTypeAliases.before.Main.kt"); } + + @TestMetadata("notRemoveImportsForTypeAliases2.before.Main.kt") + public void testNotRemoveImportsForTypeAliases2() throws Exception { + runTest("idea/testData/quickfix/optimizeImports/notRemoveImportsForTypeAliases2.before.Main.kt"); + } } @TestMetadata("idea/testData/quickfix/override")