From c80826aab434ed95454cdf85490f8164618a39c1 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 17 Nov 2015 20:06:52 +0300 Subject: [PATCH] Minor: Allow passing explicit type to KotlinNameSuggester.suggestByExpressionAndType --- .../kotlin/idea/core/KotlinNameSuggester.kt | 16 +++++++++------- .../macro/SuggestVariableNameMacro.kt | 2 +- .../idea/quickfix/ChangeFunctionSignatureFix.kt | 2 +- .../KotlinIntroduceVariableHandler.kt | 2 +- .../nameSuggester/KotlinNameSuggesterTest.kt | 2 +- 5 files changed, 13 insertions(+), 11 deletions(-) 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 6087bdb1e94..c4d1a370263 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 @@ -18,7 +18,6 @@ package org.jetbrains.kotlin.idea.core import com.intellij.openapi.util.text.StringUtil import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.lexer.KotlinLexer import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* @@ -26,7 +25,6 @@ import org.jetbrains.kotlin.psi.psiUtil.getOutermostParenthesizerOrThis import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.callUtil.getParentResolvedCall import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.ErrorUtils import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.TypeUtils @@ -37,15 +35,19 @@ import java.util.* import java.util.regex.Pattern public object KotlinNameSuggester { - - public fun suggestNamesByExpressionAndType(expression: KtExpression, bindingContext: BindingContext, validator: (String) -> Boolean, defaultName: String?): Collection { + public fun suggestNamesByExpressionAndType( + expression: KtExpression, + type: KotlinType?, + bindingContext: BindingContext?, + validator: (String) -> Boolean, + defaultName: String? + ): Collection { val result = LinkedHashSet() result.addNamesByExpression(expression, bindingContext, validator) - val type = bindingContext.getType(expression) - if (type != null) { - result.addNamesByType(type, validator) + (type ?: bindingContext?.getType(expression))?.let { + result.addNamesByType(it, validator) } if (result.isEmpty()) { diff --git a/idea/idea-live-templates/src/org/jetbrains/kotlin/idea/liveTemplates/macro/SuggestVariableNameMacro.kt b/idea/idea-live-templates/src/org/jetbrains/kotlin/idea/liveTemplates/macro/SuggestVariableNameMacro.kt index c3eb6230ae0..fae6cc4b7ab 100644 --- a/idea/idea-live-templates/src/org/jetbrains/kotlin/idea/liveTemplates/macro/SuggestVariableNameMacro.kt +++ b/idea/idea-live-templates/src/org/jetbrains/kotlin/idea/liveTemplates/macro/SuggestVariableNameMacro.kt @@ -63,7 +63,7 @@ class SuggestVariableNameMacro : Macro() { val initializer = (declaration as? KtWithExpressionInitializer)?.initializer if (initializer != null) { val bindingContext = initializer.analyze(BodyResolveMode.PARTIAL) - return KotlinNameSuggester.suggestNamesByExpressionAndType(initializer, bindingContext, nameValidator, null) + return KotlinNameSuggester.suggestNamesByExpressionAndType(initializer, null, bindingContext, nameValidator, null) } val parent = declaration.parent diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt index 66211fe8229..51bbef5be8d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt @@ -69,7 +69,7 @@ abstract class ChangeFunctionSignatureFix( } else if (expression != null) { val bindingContext = expression.analyze(BodyResolveMode.PARTIAL) - return KotlinNameSuggester.suggestNamesByExpressionAndType(expression, bindingContext, validator, "param").first() + return KotlinNameSuggester.suggestNamesByExpressionAndType(expression, null, bindingContext, validator, "param").first() } else { return KotlinNameSuggester.suggestNameByName("param", validator) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.kt index cbb5229a1c4..aba3ce4cc74 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.kt @@ -439,7 +439,7 @@ object KotlinIntroduceVariableHandler : KotlinIntroduceHandlerBase() { calculateAnchor(commonParent, commonContainer, allReplaces), NewDeclarationNameValidator.Target.VARIABLES ) - val suggestedNames = KotlinNameSuggester.suggestNamesByExpressionAndType(expression, bindingContext, validator, "value") + val suggestedNames = KotlinNameSuggester.suggestNamesByExpressionAndType(expression, null, bindingContext, validator, "value") val introduceVariableContext = IntroduceVariableContext( expression, suggestedNames.iterator().next(), allReplaces, commonContainer, commonParent, replaceOccurrence, noTypeInference, expressionType, bindingContext, resolutionFacade diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/nameSuggester/KotlinNameSuggesterTest.kt b/idea/tests/org/jetbrains/kotlin/idea/refactoring/nameSuggester/KotlinNameSuggesterTest.kt index 61041c45875..63ca4586ac6 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/nameSuggester/KotlinNameSuggesterTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/nameSuggester/KotlinNameSuggesterTest.kt @@ -78,7 +78,7 @@ public class KotlinNameSuggesterTest : LightCodeInsightFixtureTestCase() { } KotlinRefactoringUtil.selectExpression(myFixture.getEditor(), file, object : KotlinRefactoringUtil.SelectExpressionCallback { override fun run(expression: KtExpression?) { - val names = KotlinNameSuggester.suggestNamesByExpressionAndType(expression!!, expression.analyze(BodyResolveMode.PARTIAL), { true }, "value").sorted() + val names = KotlinNameSuggester.suggestNamesByExpressionAndType(expression!!, null, expression.analyze(BodyResolveMode.PARTIAL), { true }, "value").sorted() val result = StringUtil.join(names, "\n").trim() assertEquals(expectedResultText, result) }