Unused symbol: handling of import as alias not only for objects / enums #KT-11933 Fixed

This commit is contained in:
Mikhail Glukhikh
2016-08-10 15:44:53 +03:00
parent e01e08402c
commit 13975778c5
8 changed files with 74 additions and 3 deletions
@@ -244,6 +244,9 @@ class UnusedSymbolInspection : AbstractKotlinInspection() {
val import = ref.element.getParentOfType<KtImportDirective>(false)
if (import != null) {
if (import.aliasName != null && import.aliasName != declaration.name) {
return false
}
// check if we import member(s) from object or enum and search for their usages
if (declaration is KtObjectDeclaration || (declaration is KtClass && declaration.isEnum())) {
if (import.isAllUnder) {
@@ -251,9 +254,6 @@ 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
+10
View File
@@ -0,0 +1,10 @@
// "Safe delete 'Imported'" "false"
// ACTION: Create test
// ACTION: Move 'ImportedClass' to separate file
import ImportedClass as ClassAlias
class <caret>ImportedClass
fun use() {
ClassAlias().hashCode()
}
+11
View File
@@ -0,0 +1,11 @@
// "Safe delete 'useMe'" "false"
// ACTION: Convert function to property
// ACTION: Convert to block body
// ACTION: Create test
// ACTION: Specify return type explicitly
import useMe as used
fun <caret>useMe() = 0
fun foo() = used()
@@ -0,0 +1,5 @@
import Imported as Alias
fun foo() {
Alias.hashCode()
}
@@ -0,0 +1,3 @@
// "Safe delete 'Imported'" "false"
// ACTION: Create test
object <caret>Imported
+9
View File
@@ -0,0 +1,9 @@
// "Safe delete 'usedVar'" "false"
// ACTION: Specify type explicitly
import usedVar as used
var <caret>usedVar = 0
fun foo() {
used++
}
@@ -1529,6 +1529,21 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes
}
@TestMetadata("idea/testData/quickfix/removeUnused")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class RemoveUnused extends AbstractQuickFixMultiFileTest {
public void testAllFilesPresentInRemoveUnused() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/removeUnused"), Pattern.compile("^(\\w+)\\.((before\\.Main\\.\\w+)|(test))$"), true);
}
@TestMetadata("usedObjectAsAliasMulti.before.Main.kt")
public void testUsedObjectAsAliasMulti() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/removeUnused/usedObjectAsAliasMulti.before.Main.kt");
doTestWithExtraFile(fileName);
}
}
@TestMetadata("idea/testData/quickfix/suppress")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
@@ -6856,11 +6856,29 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
doTest(fileName);
}
@TestMetadata("usedClassAsAlias.kt")
public void testUsedClassAsAlias() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/removeUnused/usedClassAsAlias.kt");
doTest(fileName);
}
@TestMetadata("usedFunAsAlias.kt")
public void testUsedFunAsAlias() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/removeUnused/usedFunAsAlias.kt");
doTest(fileName);
}
@TestMetadata("usedObjectAsAlias.kt")
public void testUsedObjectAsAlias() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/removeUnused/usedObjectAsAlias.kt");
doTest(fileName);
}
@TestMetadata("usedVarAsAlias.kt")
public void testUsedVarAsAlias() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/removeUnused/usedVarAsAlias.kt");
doTest(fileName);
}
}
@TestMetadata("idea/testData/quickfix/removeUnusedReceiver")