Add case for private nested class/object in KotlinSafeDeleteProcessor

This commit is contained in:
Dmitry Gridin
2019-03-25 19:46:41 +07:00
parent 4495c653cb
commit ce1ec49625
5 changed files with 20 additions and 11 deletions
@@ -519,12 +519,5 @@ class SafeDeleteFix(declaration: KtDeclaration) : LocalQuickFix {
}
private fun safeDelete(project: Project, declaration: PsiElement) {
if (declaration is KtNamedDeclaration && declaration.isPrivateNestedClassOrObject) {
runWriteAction {
declaration.containingKtFile.importDirectives.forEach {
if (it.importedFqName == declaration.fqName) it.delete()
}
}
}
SafeDeleteHandler.invoke(project, arrayOf(declaration), false)
}
@@ -54,10 +54,7 @@ import org.jetbrains.kotlin.idea.util.liftToExpected
import org.jetbrains.kotlin.idea.util.runOnExpectAndAllActuals
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch
import org.jetbrains.kotlin.psi.psiUtil.hasActualModifier
import org.jetbrains.kotlin.psi.psiUtil.parameterIndex
import org.jetbrains.kotlin.psi.psiUtil.*
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.utils.SmartSet
@@ -131,6 +128,11 @@ class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() {
findKotlinParameterUsages(declaration)
}
if (declaration is KtNamedDeclaration && declaration.isPrivateNestedClassOrObject) {
declaration.containingKtFile.importDirectives.mapNotNullTo(usages) {
if (it.importedFqName == declaration.fqName) SafeDeleteImportDirectiveUsageInfo(it, declaration) else null
}
}
return getSearchInfo(declaration)
}
@@ -0,0 +1,7 @@
import TestClass.NamedObject
class TestClass{
private object NamedObject<caret> {
const val CONST = "abc"
}
}
@@ -0,0 +1,2 @@
class TestClass{
}
@@ -190,6 +190,11 @@ public class SafeDeleteTestGenerated extends AbstractSafeDeleteTest {
runTest("idea/testData/refactoring/safeDelete/deleteObject/kotlinObject/nestedObject2.kt");
}
@TestMetadata("nestedObject3.kt")
public void testNestedObject3() throws Exception {
runTest("idea/testData/refactoring/safeDelete/deleteObject/kotlinObject/nestedObject3.kt");
}
@TestMetadata("noUsages.kt")
public void testNoUsages() throws Exception {
runTest("idea/testData/refactoring/safeDelete/deleteObject/kotlinObject/noUsages.kt");