diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt index 22c65da754a..b5056c0144a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt @@ -51,6 +51,7 @@ import org.jetbrains.kotlin.idea.refactoring.isTrueJavaMethod import org.jetbrains.kotlin.idea.references.KtReference import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOptions import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchParameters +import org.jetbrains.kotlin.idea.search.projectScope import org.jetbrains.kotlin.idea.search.usagesSearch.processDelegationCallConstructorUsages import org.jetbrains.kotlin.idea.util.actualsForExpected import org.jetbrains.kotlin.idea.util.liftToExpected @@ -58,6 +59,7 @@ 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.resolve.BindingContext import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode @@ -97,7 +99,7 @@ class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() { return elementsToSearch.asSequence().flatMap { val searchParameters = KotlinReferencesSearchParameters( it, - it.useScope, + if (it.hasActualModifier()) it.project.projectScope() else it.useScope, kotlinOptions = KotlinReferencesSearchOptions(acceptCallableOverrides = true) ) ReferencesSearch.search(searchParameters).asSequence() @@ -265,14 +267,18 @@ class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() { } is KtSecondaryConstructor -> { - element.getRepresentativeLightMethod()?.let { method -> - findDelegationCallUsages(method) - findUsagesByJavaProcessor(method, false) - } ?: findKotlinDeclarationUsages(element) + if (element.hasActualModifier()) { + findKotlinDeclarationUsages(element) + } else { + element.getRepresentativeLightMethod()?.let { method -> + findDelegationCallUsages(method) + findUsagesByJavaProcessor(method, false) + } ?: findKotlinDeclarationUsages(element) + } } is KtNamedFunction -> { - if (element.isLocal) { + if (element.isLocal || element.hasActualModifier()) { findKotlinDeclarationUsages(element) } else { val lightMethods = element.toLightMethods() @@ -293,7 +299,7 @@ class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() { } is KtProperty -> { - if (element.isLocal) { + if (element.isLocal || element.hasActualModifier()) { findKotlinDeclarationUsages(element) } else { findUsagesByJavaProcessor(element) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt.172 b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt.172 index 46841025b82..7ad178a6abc 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt.172 +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt.172 @@ -49,6 +49,7 @@ import org.jetbrains.kotlin.idea.refactoring.isTrueJavaMethod import org.jetbrains.kotlin.idea.references.KtReference import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOptions import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchParameters +import org.jetbrains.kotlin.idea.search.projectScope import org.jetbrains.kotlin.idea.search.usagesSearch.processDelegationCallConstructorUsages import org.jetbrains.kotlin.idea.util.actualsForExpected import org.jetbrains.kotlin.idea.util.liftToExpected @@ -56,6 +57,7 @@ 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.resolve.BindingContext import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode @@ -92,7 +94,7 @@ class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() { return elementsToSearch.asSequence().flatMap { val searchParameters = KotlinReferencesSearchParameters( it, - it.useScope, + if (it.hasActualModifier()) it.project.projectScope() else it.useScope, kotlinOptions = KotlinReferencesSearchOptions(acceptCallableOverrides = true) ) ReferencesSearch.search(searchParameters) @@ -251,14 +253,18 @@ class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() { } is KtSecondaryConstructor -> { - element.getRepresentativeLightMethod()?.let { method -> - findDelegationCallUsages(method) - findUsagesByJavaProcessor(method, false) - } ?: findKotlinDeclarationUsages(element) + if (element.hasActualModifier()) { + findKotlinDeclarationUsages(element) + } else { + element.getRepresentativeLightMethod()?.let { method -> + findDelegationCallUsages(method) + findUsagesByJavaProcessor(method, false) + } ?: findKotlinDeclarationUsages(element) + } } is KtNamedFunction -> { - if (element.isLocal) { + if (element.isLocal || element.hasActualModifier()) { findKotlinDeclarationUsages(element) } else { @@ -281,7 +287,7 @@ class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() { } is KtProperty -> { - if (element.isLocal) { + if (element.isLocal || element.hasActualModifier()) { findKotlinDeclarationUsages(element) } else { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt.173 b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt.173 index 0c7102bfc3a..abf175f6ece 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt.173 +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt.173 @@ -51,6 +51,7 @@ import org.jetbrains.kotlin.idea.refactoring.isTrueJavaMethod import org.jetbrains.kotlin.idea.references.KtReference import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOptions import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchParameters +import org.jetbrains.kotlin.idea.search.projectScope import org.jetbrains.kotlin.idea.search.usagesSearch.processDelegationCallConstructorUsages import org.jetbrains.kotlin.idea.util.actualsForExpected import org.jetbrains.kotlin.idea.util.liftToExpected @@ -58,6 +59,7 @@ 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.resolve.BindingContext import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode @@ -94,7 +96,7 @@ class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() { return elementsToSearch.asSequence().flatMap { val searchParameters = KotlinReferencesSearchParameters( it, - it.useScope, + if (it.hasActualModifier()) it.project.projectScope() else it.useScope, kotlinOptions = KotlinReferencesSearchOptions(acceptCallableOverrides = true) ) ReferencesSearch.search(searchParameters) @@ -261,14 +263,18 @@ class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() { } is KtSecondaryConstructor -> { - element.getRepresentativeLightMethod()?.let { method -> - findDelegationCallUsages(method) - findUsagesByJavaProcessor(method, false) - } ?: findKotlinDeclarationUsages(element) + if (element.hasActualModifier()) { + findKotlinDeclarationUsages(element) + } else { + element.getRepresentativeLightMethod()?.let { method -> + findDelegationCallUsages(method) + findUsagesByJavaProcessor(method, false) + } ?: findKotlinDeclarationUsages(element) + } } is KtNamedFunction -> { - if (element.isLocal) { + if (element.isLocal || element.hasActualModifier()) { findKotlinDeclarationUsages(element) } else { @@ -291,7 +297,7 @@ class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() { } is KtProperty -> { - if (element.isLocal) { + if (element.isLocal || element.hasActualModifier()) { findKotlinDeclarationUsages(element) } else { diff --git a/idea/testData/refactoring/safeDeleteMultiModule/byImplClass/conflicts.txt b/idea/testData/refactoring/safeDeleteMultiModule/byImplClass/conflicts.txt index 2dcc568decf..28d9b30c812 100644 --- a/idea/testData/refactoring/safeDeleteMultiModule/byImplClass/conflicts.txt +++ b/idea/testData/refactoring/safeDeleteMultiModule/byImplClass/conflicts.txt @@ -1 +1 @@ -class test.Foo has 1 usage that is not safe to delete. +class test.Foo has 3 usages that are not safe to delete. \ No newline at end of file diff --git a/idea/testData/refactoring/safeDeleteMultiModule/byImplClassMemberFun/conflicts.txt b/idea/testData/refactoring/safeDeleteMultiModule/byImplClassMemberFun/conflicts.txt index d59ed5f87c4..7801c1c79a7 100644 --- a/idea/testData/refactoring/safeDeleteMultiModule/byImplClassMemberFun/conflicts.txt +++ b/idea/testData/refactoring/safeDeleteMultiModule/byImplClassMemberFun/conflicts.txt @@ -1 +1 @@ -function Foo.foo(Int) has 2 usages that are not safe to delete. \ No newline at end of file +function Foo.foo(Int) has 3 usages that are not safe to delete. \ No newline at end of file diff --git a/idea/testData/refactoring/safeDeleteMultiModule/byImplClassMemberVal/conflicts.txt b/idea/testData/refactoring/safeDeleteMultiModule/byImplClassMemberVal/conflicts.txt index c1d173618d8..9655e77a03d 100644 --- a/idea/testData/refactoring/safeDeleteMultiModule/byImplClassMemberVal/conflicts.txt +++ b/idea/testData/refactoring/safeDeleteMultiModule/byImplClassMemberVal/conflicts.txt @@ -1 +1 @@ -property Foo.foo has 2 usages that are not safe to delete. \ No newline at end of file +property Foo.foo has 3 usages that are not safe to delete. \ No newline at end of file diff --git a/idea/testData/refactoring/safeDeleteMultiModule/byImplClassSecondaryConstructor/conflicts.txt b/idea/testData/refactoring/safeDeleteMultiModule/byImplClassSecondaryConstructor/conflicts.txt index 84f3d45a75f..f96974acb76 100644 --- a/idea/testData/refactoring/safeDeleteMultiModule/byImplClassSecondaryConstructor/conflicts.txt +++ b/idea/testData/refactoring/safeDeleteMultiModule/byImplClassSecondaryConstructor/conflicts.txt @@ -1 +1 @@ -constructor Foo(Int) has 2 usages that are not safe to delete. +constructor Foo(Int) has 3 usages that are not safe to delete. \ No newline at end of file diff --git a/idea/testData/refactoring/safeDeleteMultiModule/byImplFun/conflicts.txt b/idea/testData/refactoring/safeDeleteMultiModule/byImplFun/conflicts.txt index 0f979ef2cfc..ec036caf54f 100644 --- a/idea/testData/refactoring/safeDeleteMultiModule/byImplFun/conflicts.txt +++ b/idea/testData/refactoring/safeDeleteMultiModule/byImplFun/conflicts.txt @@ -1 +1 @@ -function test.foo(Int) has 2 usages that are not safe to delete. \ No newline at end of file +function test.foo(Int) has 3 usages that are not safe to delete. \ No newline at end of file diff --git a/idea/testData/refactoring/safeDeleteMultiModule/byImplVal/conflicts.txt b/idea/testData/refactoring/safeDeleteMultiModule/byImplVal/conflicts.txt index 40a33e1d29a..a0459a5e086 100644 --- a/idea/testData/refactoring/safeDeleteMultiModule/byImplVal/conflicts.txt +++ b/idea/testData/refactoring/safeDeleteMultiModule/byImplVal/conflicts.txt @@ -1 +1 @@ -property test.foo has 2 usages that are not safe to delete. \ No newline at end of file +property test.foo has 3 usages that are not safe to delete. \ No newline at end of file