diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/ImportsUtils.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/ImportsUtils.kt index 5fa5d2bc370..ae22019fdc6 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/ImportsUtils.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/ImportsUtils.kt @@ -66,13 +66,14 @@ fun DeclarationDescriptor.canBeReferencedViaImport(): Boolean { return !name.isSpecial } - val parentClass = containingDeclaration as? ClassDescriptor ?: return false - if (!parentClass.canBeReferencedViaImport()) return false + //Both TypeAliasDescriptor and ClassDescriptor + val parentClassifier = containingDeclaration as? ClassifierDescriptorWithTypeParameters ?: return false + if (!parentClassifier.canBeReferencedViaImport()) return false return when (this) { - is ConstructorDescriptor -> !parentClass.isInner // inner class constructors can't be referenced via import - is ClassDescriptor -> true - else -> parentClass.kind == ClassKind.OBJECT + is ConstructorDescriptor -> !parentClassifier.isInner // inner class constructors can't be referenced via import + is ClassDescriptor, is TypeAliasDescriptor -> true + else -> parentClassifier is ClassDescriptor && parentClassifier.kind == ClassKind.OBJECT } } diff --git a/idea/testData/editor/optimizeImports/jvm/KT13766.kt b/idea/testData/editor/optimizeImports/jvm/KT13766.kt deleted file mode 100644 index a25f759bc9c..00000000000 --- a/idea/testData/editor/optimizeImports/jvm/KT13766.kt +++ /dev/null @@ -1,22 +0,0 @@ -import java.util.* - -class Outer { - - private abstract class Base { - - protected sealed class Sealed { - object OOO : Sealed() - } - - typealias OOO = Sealed.OOO - } - - private class Derived : Base() { - - fun foo(): Sealed { - ArrayList() - return OOO - } - - } -} \ No newline at end of file diff --git a/idea/testData/editor/optimizeImports/jvm/KT13766.kt.after b/idea/testData/editor/optimizeImports/jvm/KT13766.kt.after deleted file mode 100644 index 0aa6138df89..00000000000 --- a/idea/testData/editor/optimizeImports/jvm/KT13766.kt.after +++ /dev/null @@ -1,22 +0,0 @@ -import java.util.ArrayList - -class Outer { - - private abstract class Base { - - protected sealed class Sealed { - object OOO : Sealed() - } - - typealias OOO = Sealed.OOO - } - - private class Derived : Base() { - - fun foo(): Sealed { - ArrayList() - return OOO - } - - } -} \ No newline at end of file diff --git a/idea/testData/inspections/unusedImport/noUnusedImportsForTypeAliasesUsages.Dependency.kt b/idea/testData/inspections/unusedImport/noUnusedImportsForTypeAliasesUsages.Dependency.kt new file mode 100644 index 00000000000..cb42ea84a31 --- /dev/null +++ b/idea/testData/inspections/unusedImport/noUnusedImportsForTypeAliasesUsages.Dependency.kt @@ -0,0 +1,7 @@ +package p1 + +class Some +typealias SomeAlias = Some + +annotation class Ann +typealias AnnAlias = Ann \ No newline at end of file diff --git a/idea/testData/inspections/unusedImport/noUnusedImportsForTypeAliasesUsages.kt b/idea/testData/inspections/unusedImport/noUnusedImportsForTypeAliasesUsages.kt new file mode 100644 index 00000000000..25622d2475d --- /dev/null +++ b/idea/testData/inspections/unusedImport/noUnusedImportsForTypeAliasesUsages.kt @@ -0,0 +1,5 @@ +import p1.SomeAlias +import p1.AnnAlias + +@AnnAlias +val some = SomeAlias() \ No newline at end of file diff --git a/idea/testData/quickfix/optimizeImports/notRemoveImportsForTypeAliases.before.Dependency.kt b/idea/testData/quickfix/optimizeImports/notRemoveImportsForTypeAliases.before.Dependency.kt new file mode 100644 index 00000000000..cb42ea84a31 --- /dev/null +++ b/idea/testData/quickfix/optimizeImports/notRemoveImportsForTypeAliases.before.Dependency.kt @@ -0,0 +1,7 @@ +package p1 + +class Some +typealias SomeAlias = Some + +annotation class Ann +typealias AnnAlias = Ann \ No newline at end of file diff --git a/idea/testData/quickfix/optimizeImports/notRemoveImportsForTypeAliases.before.Main.kt b/idea/testData/quickfix/optimizeImports/notRemoveImportsForTypeAliases.before.Main.kt new file mode 100644 index 00000000000..e9aa4370478 --- /dev/null +++ b/idea/testData/quickfix/optimizeImports/notRemoveImportsForTypeAliases.before.Main.kt @@ -0,0 +1,7 @@ +// "Optimize imports" "false" + +import p1.SomeAlias +import p1.AnnAlias + +@AnnAlias +val some = SomeAlias() \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/imports/JvmOptimizeImportsTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/imports/JvmOptimizeImportsTestGenerated.java index 16f5c9e83d2..f597f7082ca 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/imports/JvmOptimizeImportsTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/imports/JvmOptimizeImportsTestGenerated.java @@ -104,12 +104,6 @@ public class JvmOptimizeImportsTestGenerated extends AbstractJvmOptimizeImportsT doTest(fileName); } - @TestMetadata("KT13766.kt") - public void testKT13766() throws Exception { - String fileName = KotlinTestUtils.navigationMetadata("idea/testData/editor/optimizeImports/jvm/KT13766.kt"); - doTest(fileName); - } - @TestMetadata("Kt1850FullQualified.kt") public void testKt1850FullQualified() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/editor/optimizeImports/jvm/Kt1850FullQualified.kt"); diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java index cf8966fe9b2..e85443da402 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java @@ -1801,6 +1801,21 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes } + @TestMetadata("idea/testData/quickfix/optimizeImports") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class OptimizeImports extends AbstractQuickFixMultiFileTest { + public void testAllFilesPresentInOptimizeImports() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/optimizeImports"), Pattern.compile("^(\\w+)\\.((before\\.Main\\.\\w+)|(test))$"), TargetBackend.ANY, true); + } + + @TestMetadata("notRemoveImportsForTypeAliases.before.Main.kt") + public void testNotRemoveImportsForTypeAliases() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/optimizeImports/notRemoveImportsForTypeAliases.before.Main.kt"); + doTestWithExtraFile(fileName); + } + } + @TestMetadata("idea/testData/quickfix/override") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)