diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionToPropertyIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionToPropertyIntention.kt index 6898e29b48b..ac19626a170 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionToPropertyIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionToPropertyIntention.kt @@ -48,9 +48,9 @@ import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.psi.psiUtil.siblings import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor -import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns import org.jetbrains.kotlin.types.expressions.OperatorConventions import org.jetbrains.kotlin.types.typeUtil.supertypes import java.util.* @@ -60,9 +60,8 @@ public class ConvertFunctionToPropertyIntention : JetSelfTargetingIntention(project, descriptor, context, getText()) { + descriptor: FunctionDescriptor + ): CallableRefactoring(project, descriptor, getText()) { private val elementsToShorten = ArrayList() private val newName: String by lazy { @@ -123,7 +122,7 @@ public class ConvertFunctionToPropertyIntention : JetSelfTargetingIntention(javaClass(), "Convert property to function"), LowPriorityAction { private inner class Converter( project: Project, - descriptor: CallableDescriptor, - context: BindingContext - ): CallableRefactoring(project, descriptor, context, getText()) { + descriptor: CallableDescriptor + ): CallableRefactoring(project, descriptor, getText()) { private val newName: String = JvmAbi.getterName(callableDescriptor.name.asString()) private fun convertProperty(originalProperty: JetProperty, psiFactory: JetPsiFactory) { @@ -102,7 +101,7 @@ public class ConvertPropertyToFunctionIntention : JetSelfTargetingIntention() { @@ -88,6 +87,6 @@ public class ChangeFunctionLiteralSignatureFix extends ChangeFunctionSignatureFi public boolean forcePerformForSelectedFunctionOnly() { return false; } - }, bindingContext, getContext(), getText()); + }, getContext(), getText()); } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt index 695f5784026..f23f6a9f57f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt @@ -45,7 +45,6 @@ import org.jetbrains.kotlin.psi.ValueArgument import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode -import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.types.checker.JetTypeChecker abstract class ChangeFunctionSignatureFix( @@ -92,13 +91,11 @@ abstract class ChangeFunctionSignatureFix( protected fun getNewParameterInfo( functionDescriptor: FunctionDescriptor, - bindingContext: BindingContext, argument: ValueArgument, validator: Function1): JetParameterInfo { val name = getNewArgumentName(argument, validator) val expression = argument.getArgumentExpression() - var type: JetType? = if (expression != null) bindingContext.getType(expression) else null - type = if (type != null) type else functionDescriptor.builtIns.nullableAnyType + val type = expression?.let { it.analyze().getType(it) } ?: functionDescriptor.builtIns.nullableAnyType val parameterInfo = JetParameterInfo(functionDescriptor, -1, name, type, null, null, JetValVar.None, null) parameterInfo.currentTypeText = IdeDescriptorRenderers.SOURCE_CODE.renderType(type) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveFunctionParametersFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveFunctionParametersFix.kt index 5926b6893cf..a2bae65e194 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveFunctionParametersFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveFunctionParametersFix.kt @@ -22,13 +22,11 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor import org.jetbrains.kotlin.idea.JetBundle -import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetChangeSignatureConfiguration import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetMethodDescriptor import org.jetbrains.kotlin.idea.refactoring.changeSignature.modify import org.jetbrains.kotlin.idea.refactoring.changeSignature.runChangeSignature import org.jetbrains.kotlin.psi.JetFile -import org.jetbrains.kotlin.resolve.BindingContext class RemoveFunctionParametersFix( context: PsiElement, @@ -41,12 +39,11 @@ class RemoveFunctionParametersFix( } override fun invoke(project: Project, editor: Editor?, file: JetFile) { - val bindingContext = file.analyzeFully() runChangeSignature( project, functionDescriptor, object : JetChangeSignatureConfiguration { - override fun configure(originalDescriptor: JetMethodDescriptor, bindingContext: BindingContext): JetMethodDescriptor { + override fun configure(originalDescriptor: JetMethodDescriptor): JetMethodDescriptor { return originalDescriptor.modify { descriptor -> val index = functionDescriptor.valueParameters.indexOf(parameterToRemove) descriptor.removeParameter(if (descriptor.receiver != null) index + 1 else index) @@ -56,7 +53,6 @@ class RemoveFunctionParametersFix( override fun performSilently(affectedFunctions: Collection) = false override fun forcePerformForSelectedFunctionOnly() = false }, - bindingContext, context, text) } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterFromUsageFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterFromUsageFactory.kt index fc278b183bb..e5648ee95da 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterFromUsageFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterFromUsageFactory.kt @@ -41,8 +41,7 @@ abstract class CreateParameterFromUsageFactory: CreateFromUsageF return QuickFixWithDelegateFactory { quickFixDataFactory(originalElementPointer)?.let { data -> CreateParameterFromUsageFix(data.parameterInfo.callableDescriptor as FunctionDescriptor, - data.context, - data.parameterInfo, + data.parameterInfo, data.originalExpression) } ?: NullQuickFix } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterFromUsageFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterFromUsageFix.kt index 5a26bb30c2a..025ecb28c3b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterFromUsageFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterFromUsageFix.kt @@ -25,11 +25,9 @@ import org.jetbrains.kotlin.idea.quickfix.createFromUsage.CreateFromUsageFixBase import org.jetbrains.kotlin.idea.refactoring.changeSignature.* import org.jetbrains.kotlin.psi.JetElement import org.jetbrains.kotlin.psi.JetFile -import org.jetbrains.kotlin.resolve.BindingContext public class CreateParameterFromUsageFix( val functionDescriptor: FunctionDescriptor, - val bindingContext: BindingContext, val parameterInfo: JetParameterInfo, val defaultValueContext: E ) : CreateFromUsageFixBase(defaultValueContext) { @@ -41,13 +39,13 @@ public class CreateParameterFromUsageFix( override fun invoke(project: Project, editor: Editor?, file: JetFile) { val config = object : JetChangeSignatureConfiguration { - override fun configure(originalDescriptor: JetMethodDescriptor, bindingContext: BindingContext): JetMethodDescriptor { + override fun configure(originalDescriptor: JetMethodDescriptor): JetMethodDescriptor { return originalDescriptor.modify { it.addParameter(parameterInfo) } } override fun performSilently(affectedFunctions: Collection): Boolean = false } - runChangeSignature(project, functionDescriptor, config, bindingContext, defaultValueContext, text) + runChangeSignature(project, functionDescriptor, config, defaultValueContext, text) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/CallableRefactoring.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/CallableRefactoring.kt index 409409091d9..4cd7f69bb8e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/CallableRefactoring.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/CallableRefactoring.kt @@ -33,6 +33,7 @@ import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DELEGATION import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.FAKE_OVERRIDE import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.SYNTHESIZED import org.jetbrains.kotlin.idea.JetBundle +import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil import org.jetbrains.kotlin.psi.JetBlockExpression @@ -49,7 +50,6 @@ import java.util.* public abstract class CallableRefactoring( val project: Project, val callableDescriptor: T, - val bindingContext: BindingContext, val commandName: String) { private val LOG = Logger.getInstance(javaClass>()) @@ -183,11 +183,12 @@ fun getAffectedCallables(project: Project, descriptorsForChange: Collection): Boolean = false fun forcePerformForSelectedFunctionOnly(): Boolean = false @@ -64,20 +64,17 @@ fun JetMethodDescriptor.modify(action: (JetMutableMethodDescriptor) -> Unit): Je public fun runChangeSignature(project: Project, callableDescriptor: CallableDescriptor, configuration: JetChangeSignatureConfiguration, - bindingContext: BindingContext, defaultValueContext: PsiElement, commandName: String? = null): Boolean { - return JetChangeSignature(project, callableDescriptor, configuration, bindingContext, defaultValueContext, commandName).run() + return JetChangeSignature(project, callableDescriptor, configuration, defaultValueContext, commandName).run() } public class JetChangeSignature(project: Project, callableDescriptor: CallableDescriptor, val configuration: JetChangeSignatureConfiguration, - bindingContext: BindingContext, val defaultValueContext: PsiElement, commandName: String?): CallableRefactoring(project, callableDescriptor, - bindingContext, commandName ?: ChangeSignatureHandler.REFACTORING_NAME) { private val LOG = Logger.getInstance(javaClass()) @@ -205,7 +202,7 @@ public class JetChangeSignature(project: Project, } val originalDescriptor = JetChangeSignatureData(baseDescriptor, functionDeclaration, descriptorsForSignatureChange) - return configuration.configure(originalDescriptor, bindingContext) + return configuration.configure(originalDescriptor) } private fun preferContainedInClass(descriptorsForSignatureChange: Collection): CallableDescriptor { @@ -225,10 +222,9 @@ public fun createChangeInfo( project: Project, callableDescriptor: CallableDescriptor, configuration: JetChangeSignatureConfiguration, - bindingContext: BindingContext, defaultValueContext: PsiElement ): JetChangeInfo? { - val jetChangeSignature = JetChangeSignature(project, callableDescriptor, configuration, bindingContext, defaultValueContext, null) + val jetChangeSignature = JetChangeSignature(project, callableDescriptor, configuration, defaultValueContext, null) val declarations = if (callableDescriptor is CallableMemberDescriptor) { OverrideResolver.getDeepestSuperDeclarations(callableDescriptor) } else listOf(callableDescriptor) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureHandler.kt index 811b31f661a..195caa052ec 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureHandler.kt @@ -18,7 +18,6 @@ package org.jetbrains.kotlin.idea.refactoring.changeSignature import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.actionSystem.DataContext -import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.ScrollType import com.intellij.openapi.project.Project @@ -27,7 +26,6 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import com.intellij.psi.PsiMethod import com.intellij.psi.util.PsiTreeUtil -import com.intellij.refactoring.BaseRefactoringProcessor import com.intellij.refactoring.HelpID import com.intellij.refactoring.RefactoringBundle import com.intellij.refactoring.changeSignature.ChangeSignatureHandler @@ -151,7 +149,7 @@ public class JetChangeSignatureHandler : ChangeSignatureHandler { return } - runChangeSignature(project, callableDescriptor, JetChangeSignatureConfiguration.Empty, bindingContext, context, null) + runChangeSignature(project, callableDescriptor, JetChangeSignatureConfiguration.Empty, context, null) } private fun getDescriptor(bindingContext: BindingContext, element: PsiElement): DeclarationDescriptor? { 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 f9ecaf7279c..6e436d417d6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureUsageProcessor.java +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureUsageProcessor.java @@ -621,7 +621,7 @@ public class JetChangeSignatureUsageProcessor implements ChangeSignatureUsagePro else if (function instanceof JetFunction) parametersScope = CallableRefactoringKt.getBodyScope((JetFunction) function, bindingContext); - JetScope callableScope = CallableRefactoringKt.getContainingScope(oldDescriptor, bindingContext); + JetScope callableScope = CallableRefactoringKt.getContainingScope(oldDescriptor); JetMethodDescriptor.Kind kind = JetChangeInfoKt.getKind(changeInfo); if (!kind.isConstructor() && callableScope != null && !info.getNewName().isEmpty()) { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt index 49bd17d47b2..2e24c518f42 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt @@ -124,7 +124,7 @@ fun getParametersToRemove( fun IntroduceParameterDescriptor.performRefactoring() { runWriteAction { val config = object : JetChangeSignatureConfiguration { - override fun configure(originalDescriptor: JetMethodDescriptor, bindingContext: BindingContext): JetMethodDescriptor { + override fun configure(originalDescriptor: JetMethodDescriptor): JetMethodDescriptor { return originalDescriptor.modify { methodDescriptor -> if (!withDefaultValue) { val parameters = callable.getValueParameters() @@ -153,7 +153,7 @@ fun IntroduceParameterDescriptor.performRefactoring() { } val project = callable.getProject(); - val changeSignature = { runChangeSignature(project, callableDescriptor, config, callable.analyze(), callable, INTRODUCE_PARAMETER) } + val changeSignature = { runChangeSignature(project, callableDescriptor, config, callable, INTRODUCE_PARAMETER) } changeSignature.runRefactoringWithPostprocessing(project, "refactoring.changeSignature") { try { occurrencesToReplace.forEach { occurrenceReplacer(it) } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinParameterProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinParameterProcessor.kt index f3455072e32..72f09b06e24 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinParameterProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinParameterProcessor.kt @@ -21,6 +21,7 @@ import com.intellij.refactoring.listeners.RefactoringElementListener import com.intellij.usageView.UsageInfo import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetChangeSignatureConfiguration import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetMethodDescriptor import org.jetbrains.kotlin.idea.refactoring.changeSignature.modify @@ -41,8 +42,7 @@ public class RenameKotlinParameterProcessor : RenameKotlinPsiProcessor() { val paramIndex = function.getValueParameters().indexOf(element) assert(paramIndex != -1, { "couldn't find parameter in parent ${element.getElementTextWithContext()}" }) - val context = function.analyze() - val functionDescriptor = context[BindingContext.DECLARATION_TO_DESCRIPTOR, function] as? FunctionDescriptor ?: return + val functionDescriptor = function.resolveToDescriptor() as? FunctionDescriptor ?: return val parameterDescriptor = functionDescriptor.getValueParameters()[paramIndex] val parameterNameChangedOnOverride = parameterDescriptor.getOverriddenDescriptors().any { @@ -50,7 +50,7 @@ public class RenameKotlinParameterProcessor : RenameKotlinPsiProcessor() { } val changeSignatureConfiguration = object : JetChangeSignatureConfiguration { - override fun configure(originalDescriptor: JetMethodDescriptor, bindingContext: BindingContext): JetMethodDescriptor { + override fun configure(originalDescriptor: JetMethodDescriptor): JetMethodDescriptor { val paramInfoIndex = if (functionDescriptor.getExtensionReceiverParameter() != null) paramIndex + 1 else paramIndex return originalDescriptor.modify { it.renameParameter(paramInfoIndex, newName) } } @@ -60,6 +60,6 @@ public class RenameKotlinParameterProcessor : RenameKotlinPsiProcessor() { override fun forcePerformForSelectedFunctionOnly() = parameterNameChangedOnOverride } - runChangeSignature(element.getProject(), functionDescriptor, changeSignatureConfiguration, context, element, "Rename parameter") + runChangeSignature(element.getProject(), functionDescriptor, changeSignatureConfiguration, element, "Rename parameter") } } 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 ded042775d8..99eb03c0e84 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java @@ -250,7 +250,7 @@ public class JetChangeSignatureTest extends KotlinCodeInsightTestCase { JetChangeSignatureConfiguration empty = new JetChangeSignatureConfiguration() { @NotNull @Override - public JetMethodDescriptor configure(@NotNull JetMethodDescriptor originalDescriptor, @NotNull BindingContext bindingContext) { + public JetMethodDescriptor configure(@NotNull JetMethodDescriptor originalDescriptor) { return originalDescriptor; } @@ -264,10 +264,9 @@ public class JetChangeSignatureTest extends KotlinCodeInsightTestCase { return false; } }; - BindingContext context = ResolutionUtils.analyze(method, BodyResolveMode.FULL); JetChangeSignatureKt - .runChangeSignature(getProject(), JetChangeInfoKt.getOriginalBaseFunctionDescriptor(changeInfo), empty, context, method, "test"); + .runChangeSignature(getProject(), JetChangeInfoKt.getOriginalBaseFunctionDescriptor(changeInfo), empty, method, "test"); } catch (RuntimeException e) { assertTrue(e.getMessage().startsWith("Refactoring cannot be")); @@ -1406,7 +1405,7 @@ public class JetChangeSignatureTest extends KotlinCodeInsightTestCase { assertNotNull(callableDescriptor); return JetChangeSignatureKt.createChangeInfo( - project, callableDescriptor, JetChangeSignatureConfiguration.Empty.INSTANCE$, bindingContext, context + project, callableDescriptor, JetChangeSignatureConfiguration.Empty.INSTANCE$, context ); }