From c95e11cc7e09923cc723b10e583a580d5acc69da Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 13 May 2016 19:25:14 +0300 Subject: [PATCH] Import as alias with another name is now counted as usage itself #KT-11933 Fixed --- .../kotlin/idea/inspections/UnusedSymbolInspection.kt | 3 +++ .../findObjectUsages/kotlinImportedObjectUsages.0.kt | 4 ++++ .../kotlinImportedObjectUsages.results.txt | 1 + .../navigation/implementations/ObjectImported.kt | 5 +++++ .../quickfix/removeUnused/usedObjectAsAlias.kt | 10 ++++++++++ .../kotlin/findUsages/FindUsagesTestGenerated.java | 6 ++++++ .../KotlinGotoImplementationTestGenerated.java | 6 ++++++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 6 ++++++ 8 files changed, 41 insertions(+) create mode 100644 idea/testData/findUsages/kotlin/findObjectUsages/kotlinImportedObjectUsages.0.kt create mode 100644 idea/testData/findUsages/kotlin/findObjectUsages/kotlinImportedObjectUsages.results.txt create mode 100644 idea/testData/navigation/implementations/ObjectImported.kt create mode 100644 idea/testData/quickfix/removeUnused/usedObjectAsAlias.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt index 7630e9d90c3..3c83a496f29 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt @@ -251,6 +251,9 @@ class UnusedSymbolInspection : AbstractKotlinInspection() { as? KtClassOrObject ?: return true return importedFrom.declarations.none { it is KtNamedDeclaration && hasNonTrivialUsages(it) } } + else if (import.aliasName != null && import.aliasName != declaration.name) { + return false + } else { if (import.importedFqName != declaration.fqName) { val importedDeclaration = import.importedReference?.getQualifiedElementSelector()?.mainReference?.resolve() as? KtNamedDeclaration diff --git a/idea/testData/findUsages/kotlin/findObjectUsages/kotlinImportedObjectUsages.0.kt b/idea/testData/findUsages/kotlin/findObjectUsages/kotlinImportedObjectUsages.0.kt new file mode 100644 index 00000000000..8d7752b74ed --- /dev/null +++ b/idea/testData/findUsages/kotlin/findObjectUsages/kotlinImportedObjectUsages.0.kt @@ -0,0 +1,4 @@ +// PSI_ELEMENT: org.jetbrains.kotlin.psi.KtObjectDeclaration +import Imported as Alias + +object Imported diff --git a/idea/testData/findUsages/kotlin/findObjectUsages/kotlinImportedObjectUsages.results.txt b/idea/testData/findUsages/kotlin/findObjectUsages/kotlinImportedObjectUsages.results.txt new file mode 100644 index 00000000000..b3beb91925b --- /dev/null +++ b/idea/testData/findUsages/kotlin/findObjectUsages/kotlinImportedObjectUsages.results.txt @@ -0,0 +1 @@ +Usage in import 2 import Imported as Alias diff --git a/idea/testData/navigation/implementations/ObjectImported.kt b/idea/testData/navigation/implementations/ObjectImported.kt new file mode 100644 index 00000000000..de0e6e7c5bd --- /dev/null +++ b/idea/testData/navigation/implementations/ObjectImported.kt @@ -0,0 +1,5 @@ +import Imported as Alias + +object Imported + +// REF: ().Imported diff --git a/idea/testData/quickfix/removeUnused/usedObjectAsAlias.kt b/idea/testData/quickfix/removeUnused/usedObjectAsAlias.kt new file mode 100644 index 00000000000..88d13dbd3f5 --- /dev/null +++ b/idea/testData/quickfix/removeUnused/usedObjectAsAlias.kt @@ -0,0 +1,10 @@ +// "Safe delete 'Imported'" "false" +// ACTION: Create test +// ACTION: Move 'Imported' to separate file +import Imported as Alias + +object Imported + +fun use() { + Alias.hashCode() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java b/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java index e062ca16a9b..63df840e580 100644 --- a/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/findUsages/FindUsagesTestGenerated.java @@ -744,6 +744,12 @@ public class FindUsagesTestGenerated extends AbstractFindUsagesTest { doTest(fileName); } + @TestMetadata("kotlinImportedObjectUsages.0.kt") + public void testKotlinImportedObjectUsages() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findObjectUsages/kotlinImportedObjectUsages.0.kt"); + doTest(fileName); + } + @TestMetadata("kotlinLocalObjectUsages1.0.kt") public void testKotlinLocalObjectUsages1() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findObjectUsages/kotlinLocalObjectUsages1.0.kt"); diff --git a/idea/tests/org/jetbrains/kotlin/idea/navigation/KotlinGotoImplementationTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/navigation/KotlinGotoImplementationTestGenerated.java index aa218d395c1..70d5e094a1f 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/navigation/KotlinGotoImplementationTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/navigation/KotlinGotoImplementationTestGenerated.java @@ -125,6 +125,12 @@ public class KotlinGotoImplementationTestGenerated extends AbstractKotlinGotoImp doTest(fileName); } + @TestMetadata("ObjectImported.kt") + public void testObjectImported() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/navigation/implementations/ObjectImported.kt"); + doTest(fileName); + } + @TestMetadata("OverridesInEnumEntries.kt") public void testOverridesInEnumEntries() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/navigation/implementations/OverridesInEnumEntries.kt"); diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index de005f6bfef..f844006867c 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -6477,6 +6477,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/removeUnused/unusedTypeParameter.kt"); doTest(fileName); } + + @TestMetadata("usedObjectAsAlias.kt") + public void testUsedObjectAsAlias() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/removeUnused/usedObjectAsAlias.kt"); + doTest(fileName); + } } @TestMetadata("idea/testData/quickfix/removeUnusedReceiver")