From b9ed3b91be7eda73636e8435966d10c18d8ae949 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Mon, 26 Oct 2015 20:39:30 +0300 Subject: [PATCH] Change Signature: Fix descriptor comparison when receiver type is changed #KT-9201 Fixed --- .../changeSignature/JetChangeSignatureUsageProcessor.java | 3 ++- .../ImplicitThisToParameterWithChangedTypeAfter.kt | 5 +++++ .../ImplicitThisToParameterWithChangedTypeBefore.kt | 3 +++ .../changeSignature/JetChangeSignatureTest.java | 8 ++++++++ 4 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 idea/testData/refactoring/changeSignature/ImplicitThisToParameterWithChangedTypeAfter.kt create mode 100644 idea/testData/refactoring/changeSignature/ImplicitThisToParameterWithChangedTypeBefore.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureUsageProcessor.java b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureUsageProcessor.java index 5e96f887ac1..9eeecbbad7d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureUsageProcessor.java +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureUsageProcessor.java @@ -55,6 +55,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.JavaResolutionUtils; import org.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils; import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde; import org.jetbrains.kotlin.idea.codeInsight.JetFileReferencesResolver; +import org.jetbrains.kotlin.idea.core.DescriptorUtilsKt; import org.jetbrains.kotlin.idea.core.refactoring.JetRefactoringUtilKt; import org.jetbrains.kotlin.idea.refactoring.CallableRefactoringKt; import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.*; @@ -420,7 +421,7 @@ public class JetChangeSignatureUsageProcessor implements ChangeSignatureUsagePro @NotNull ThisReceiver receiverValue ) { DeclarationDescriptor targetDescriptor = receiverValue.getDeclarationDescriptor(); - if (targetDescriptor == callableDescriptor) { + if (DescriptorUtilsKt.compareDescriptors(callElement.getProject(), targetDescriptor, callableDescriptor)) { assert originalReceiverInfo != null : "No original receiver info provided: " + functionUsageInfo.getDeclaration().getText(); result.add(new JetImplicitThisToParameterUsage(callElement, originalReceiverInfo, functionUsageInfo)); } diff --git a/idea/testData/refactoring/changeSignature/ImplicitThisToParameterWithChangedTypeAfter.kt b/idea/testData/refactoring/changeSignature/ImplicitThisToParameterWithChangedTypeAfter.kt new file mode 100644 index 00000000000..0c0dbca5162 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/ImplicitThisToParameterWithChangedTypeAfter.kt @@ -0,0 +1,5 @@ +open class Older { fun upper() {} } +class Younger : Older() +public fun outer(younger: Older) { + younger.upper() +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/ImplicitThisToParameterWithChangedTypeBefore.kt b/idea/testData/refactoring/changeSignature/ImplicitThisToParameterWithChangedTypeBefore.kt new file mode 100644 index 00000000000..68b5c1dfea2 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/ImplicitThisToParameterWithChangedTypeBefore.kt @@ -0,0 +1,3 @@ +open class Older { fun upper() {} } +class Younger : Older() +public fun Younger.outer() { upper() } \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java index a0f88351b9b..36b7e13677f 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java @@ -1332,6 +1332,14 @@ public class JetChangeSignatureTest extends KotlinCodeInsightTestCase { doTest(changeInfo); } + public void testImplicitThisToParameterWithChangedType() throws Exception { + JetChangeInfo changeInfo = getChangeInfo(); + //noinspection ConstantConditions + changeInfo.getReceiverParameterInfo().setCurrentTypeText("Older"); + changeInfo.setReceiverParameterInfo(null); + doTest(changeInfo); + } + private List editors = null; private static final String[] EXTENSIONS = {".kt", ".java"};