From bd6031fea124f32b6dd9553d56d1e517fbdfd4e2 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 24 Apr 2015 17:33:35 +0300 Subject: [PATCH] Change Signature: Initialize JetFunctionCallUsage delegate early to ensure consistent analysis results --- .../JetChangeSignatureUsageProcessor.java | 22 ++++++++++--------- .../usages/JavaMethodDeferredKotlinUsage.kt | 2 +- .../JetConstructorDelegationCallUsage.kt | 13 ++++++----- 3 files changed, 20 insertions(+), 17 deletions(-) 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 b5219542dd5..bf075c66e60 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureUsageProcessor.java +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureUsageProcessor.java @@ -119,7 +119,7 @@ public class JetChangeSignatureUsageProcessor implements ChangeSignatureUsagePro private static void findOneMethodUsages( @NotNull JetFunctionDefinitionUsage functionUsageInfo, - JetChangeInfo changeInfo, + final JetChangeInfo changeInfo, final Set result ) { boolean isInherited = functionUsageInfo.isInherited(); @@ -194,15 +194,17 @@ public class JetChangeSignatureUsageProcessor implements ChangeSignatureUsagePro } } - UsagesSearchPackage.processDelegationCallConstructorUsages(functionPsi, functionPsi.getUseScope(), - new Function1() { - @Override - public Unit invoke(JetConstructorDelegationCall element) { - result.add(new JetConstructorDelegationCallUsage(element)); - return null; - } - }); - + UsagesSearchPackage.processDelegationCallConstructorUsages( + functionPsi, + functionPsi.getUseScope(), + new Function1() { + @Override + public Unit invoke(JetConstructorDelegationCall element) { + result.add(new JetConstructorDelegationCallUsage(element, changeInfo)); + return null; + } + } + ); } private static void processInternalReferences( diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/JavaMethodDeferredKotlinUsage.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/JavaMethodDeferredKotlinUsage.kt index aefcb07b8a4..35d6bd10c62 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/JavaMethodDeferredKotlinUsage.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/JavaMethodDeferredKotlinUsage.kt @@ -50,7 +50,7 @@ public class JavaConstructorDeferredUsageInDelegationCall( ): JavaMethodDeferredKotlinUsage(delegationCall) { override fun resolve(javaMethodChangeInfo: JetChangeInfo): JavaMethodKotlinUsageWithDelegate { return object : JavaMethodKotlinUsageWithDelegate(delegationCall, javaMethodChangeInfo) { - override val delegateUsage = JetConstructorDelegationCallUsage(delegationCall) + override val delegateUsage = JetConstructorDelegationCallUsage(delegationCall, javaMethodChangeInfo) } } } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/JetConstructorDelegationCallUsage.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/JetConstructorDelegationCallUsage.kt index f24fa956ef3..5dfd37b2718 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/JetConstructorDelegationCallUsage.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/JetConstructorDelegationCallUsage.kt @@ -16,15 +16,17 @@ package org.jetbrains.kotlin.idea.refactoring.changeSignature.usages -import com.intellij.psi.util.PsiTreeUtil -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetChangeInfo -import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.psi.JetConstructorDelegationCall import org.jetbrains.kotlin.psi.JetPsiFactory import org.jetbrains.kotlin.psi.JetSecondaryConstructor -public class JetConstructorDelegationCallUsage(call: JetConstructorDelegationCall) : JetUsageInfo(call) { +public class JetConstructorDelegationCallUsage( + call: JetConstructorDelegationCall, + changeInfo: JetChangeInfo +) : JetUsageInfo(call) { + val delegate = JetFunctionCallUsage(call, changeInfo.methodDescriptor.originalPrimaryFunction) + override fun processUsage(changeInfo: JetChangeInfo, element: JetConstructorDelegationCall): Boolean { val isThisCall = element.isCallToThis() @@ -34,8 +36,7 @@ public class JetConstructorDelegationCallUsage(call: JetConstructorDelegationCal elementToWorkWith = constructor.replaceImplicitDelegationCallWithExplicit(isThisCall) } - val result = JetFunctionCallUsage( - elementToWorkWith, changeInfo.methodDescriptor.originalPrimaryFunction).processUsage(changeInfo, elementToWorkWith) + val result = delegate.processUsage(changeInfo, elementToWorkWith) if (changeInfo.getNewParametersCount() == 0 && !isThisCall && !elementToWorkWith.isImplicit()) { (elementToWorkWith.getParent() as? JetSecondaryConstructor)?.getColon()?.delete()