Minor: Allow passing explicit type to KotlinNameSuggester.suggestByExpressionAndType
This commit is contained in:
@@ -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<String> {
|
||||
public fun suggestNamesByExpressionAndType(
|
||||
expression: KtExpression,
|
||||
type: KotlinType?,
|
||||
bindingContext: BindingContext?,
|
||||
validator: (String) -> Boolean,
|
||||
defaultName: String?
|
||||
): Collection<String> {
|
||||
val result = LinkedHashSet<String>()
|
||||
|
||||
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()) {
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+1
-1
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user