Change Signature: Fix descriptor comparison when receiver type is changed

#KT-9201 Fixed
This commit is contained in:
Alexey Sedunov
2015-10-26 20:39:30 +03:00
parent 937b8725c6
commit b9ed3b91be
4 changed files with 18 additions and 1 deletions
@@ -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));
}
@@ -0,0 +1,5 @@
open class Older { fun upper() {} }
class Younger : Older()
public fun outer(younger: Older) {
younger.upper()
}
@@ -0,0 +1,3 @@
open class Older { fun upper() {} }
class Younger : Older()
public fun Younger.<caret>outer() { upper() }
@@ -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<Editor> editors = null;
private static final String[] EXTENSIONS = {".kt", ".java"};