diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinNameSuggester.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinNameSuggester.kt index 390976c0cb9..1398d5f70d5 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinNameSuggester.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinNameSuggester.kt @@ -16,15 +16,12 @@ package org.jetbrains.kotlin.idea.core -import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.util.text.StringUtil -import com.intellij.util.ArrayUtil import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.lexer.JetLexer import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode +import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.types.ErrorUtils import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.types.TypeUtils @@ -50,14 +47,14 @@ public object KotlinNameSuggester { * * * @return possible names */ - public fun suggestNamesByExpressionAndType(expression: JetExpression, validator: (String) -> Boolean, defaultName: String?): List { - val result = ArrayList() + public fun suggestNamesByExpressionAndType(expression: JetExpression, bindingContext: BindingContext, validator: (String) -> Boolean, defaultName: String?): Collection { + val result = LinkedHashSet() - val bindingContext = expression.analyze(BodyResolveMode.FULL) - val jetType = bindingContext.getType(expression) - if (jetType != null) { - result.addNamesByType(jetType, validator) + val type = bindingContext.getType(expression) + if (type != null) { + result.addNamesByType(type, validator) } + result.addNamesByExpression(expression, validator) if (result.isEmpty()) { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.java b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.java index 33c533c3306..f96c783dee7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.java +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.java @@ -43,6 +43,7 @@ import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetValVar; import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers; import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.resolve.BindingContext; +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode; import org.jetbrains.kotlin.types.JetType; import org.jetbrains.kotlin.types.checker.JetTypeChecker; @@ -105,10 +106,12 @@ public abstract class ChangeFunctionSignatureFix extends JetIntentionAction suggestedNames = KotlinNameSuggester.INSTANCE$.suggestNamesByExpressionAndType(expression, validator, "value"); + final Collection suggestedNames = KotlinNameSuggester.INSTANCE$.suggestNamesByExpressionAndType( + expression, ResolvePackage.analyze(expression, BodyResolveMode.PARTIAL), validator, "value"); final Ref propertyRef = new Ref(); final ArrayList references = new ArrayList(); final Ref reference = new Ref(); final Runnable introduceRunnable = introduceVariable( - expression, suggestedNames.get(0), allReplaces, commonContainer, + expression, suggestedNames.iterator().next(), allReplaces, commonContainer, commonParent, replaceOccurrence, propertyRef, references, reference, finalNoTypeInference, expressionType, bindingContext); CommandProcessor.getInstance().executeCommand(project, new Runnable() { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinVariableInplaceIntroducer.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinVariableInplaceIntroducer.kt index de5058a4d2a..d4de5a32ae8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinVariableInplaceIntroducer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinVariableInplaceIntroducer.kt @@ -44,7 +44,7 @@ public class KotlinVariableInplaceIntroducer( val addedVariable: JetProperty, val originalExpression: JetExpression?, val occurrencesToReplace: Array, - suggestedNames: List, + suggestedNames: Collection, val isVar: Boolean, val doNotChangeVar: Boolean, val expressionType: JetType?, diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/nameSuggester/JetNameSuggesterTest.kt b/idea/tests/org/jetbrains/kotlin/idea/refactoring/nameSuggester/JetNameSuggesterTest.kt index f54ac1bfd09..af58246171e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/nameSuggester/JetNameSuggesterTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/nameSuggester/JetNameSuggesterTest.kt @@ -18,14 +18,14 @@ package org.jetbrains.kotlin.idea.refactoring.nameSuggester import com.intellij.openapi.util.text.StringUtil import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase -import org.jetbrains.kotlin.idea.test.PluginTestCaseBase +import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.core.KotlinNameSuggester import org.jetbrains.kotlin.idea.refactoring.JetRefactoringUtil +import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.psi.JetExpression import org.jetbrains.kotlin.psi.JetFile +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.test.JetTestUtils - -import java.util.Arrays import kotlin.test.assertEquals public class JetNameSuggesterTest : LightCodeInsightFixtureTestCase() { @@ -69,7 +69,7 @@ public class JetNameSuggesterTest : LightCodeInsightFixtureTestCase() { try { JetRefactoringUtil.selectExpression(myFixture.getEditor(), file, object : JetRefactoringUtil.SelectExpressionCallback { override fun run(expression: JetExpression) { - val names = KotlinNameSuggester.suggestNamesByExpressionAndType(expression, { true }, "value").sort() + val names = KotlinNameSuggester.suggestNamesByExpressionAndType(expression, expression.analyze(BodyResolveMode.PARTIAL), { true }, "value").sort() val result = StringUtil.join(names, "\n").trim() assertEquals(expectedResultText, result) }