From c478f1d347254532fcbea0d4a09260be3aa8ffce Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 26 Jun 2015 18:56:26 +0300 Subject: [PATCH] Renamed methods --- .../completion/handlers/GenerateLambda.kt | 2 +- .../kotlin/idea/core/KotlinNameSuggester.kt | 109 +++++++++--------- .../intentions/IterateExpressionIntention.kt | 2 +- .../ChangeFunctionLiteralSignatureFix.java | 2 +- .../quickfix/ChangeFunctionSignatureFix.java | 6 +- .../quickfix/DeprecatedSymbolUsageFixBase.kt | 4 +- .../callableBuilder/CallableBuilder.kt | 4 +- .../callableBuilder/CallableInfo.kt | 2 +- .../callableBuilder/templateExpressions.kt | 2 +- .../changeSignature/JetChangeSignatureData.kt | 2 +- .../extractableAnalysisUtil.kt | 8 +- .../extractionEngine/extractorUtil.kt | 4 +- .../KotlinIntroduceParameterHandler.kt | 2 +- .../KotlinIntroduceVariableHandler.java | 2 +- .../nameSuggester/JetNameSuggesterTest.kt | 2 +- 15 files changed, 78 insertions(+), 75 deletions(-) diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/handlers/GenerateLambda.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/handlers/GenerateLambda.kt index 64701d63691..fb00b1f4899 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/handlers/GenerateLambda.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/handlers/GenerateLambda.kt @@ -102,7 +102,7 @@ private fun buildTemplate(lambdaType: JetType, explicitParameterTypes: Boolean, template.addTextSegment(", ") } //TODO: check for names in scope - template.addVariable(ParameterNameExpression(KotlinNameSuggester.suggestNames(parameterType, { true }, "p")), true) + template.addVariable(ParameterNameExpression(KotlinNameSuggester.suggestNamesByType(parameterType, { true }, "p")), true) if (explicitParameterTypes) { template.addTextSegment(": " + IdeDescriptorRenderers.SOURCE_CODE.renderType(parameterType)) } 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 dfdacb7b2cf..a2a3c998b4b 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 @@ -38,7 +38,7 @@ public object KotlinNameSuggester { var name = name ?: return if ("class" == name) name = "clazz" if (!isIdentifier(name)) return - result.add(validateName(name, validator)) + result.add(suggestNameByName(name, validator)) } /** @@ -57,85 +57,92 @@ public object KotlinNameSuggester { * * * @return possible names */ - public fun suggestNames(expression: JetExpression, validator: (String) -> Boolean, defaultName: String?): Array { + public fun suggestNamesByExpressionAndType(expression: JetExpression, validator: (String) -> Boolean, defaultName: String?): Array { val result = ArrayList() val bindingContext = expression.analyze(BodyResolveMode.FULL) val jetType = bindingContext.getType(expression) if (jetType != null) { - addNamesForType(result, jetType, validator) + addNamesByType(result, jetType, validator) + } + addNamesByExpression(result, expression, validator) + + if (result.isEmpty()) { + addName(result, defaultName, validator) } - addNamesForExpression(result, expression, validator) - if (result.isEmpty()) addName(result, defaultName, validator) return ArrayUtil.toStringArray(result) } - public fun suggestNames(type: JetType, validator: (String) -> Boolean, defaultName: String?): Array { + public fun suggestNamesByType(type: JetType, validator: (String) -> Boolean, defaultName: String? = null): Array { val result = ArrayList() - addNamesForType(result, type, validator) - if (result.isEmpty()) addName(result, defaultName, validator) + + addNamesByType(result, type, validator) + + if (result.isEmpty()) { + addName(result, defaultName, validator) + } + return ArrayUtil.toStringArray(result) } - public fun suggestNamesForType(jetType: JetType, validator: (String) -> Boolean): Array { + public fun suggestNamesByExpressionOnly(expression: JetExpression, validator: (String) -> Boolean, defaultName: String? = null): Array { val result = ArrayList() - addNamesForType(result, jetType, validator) + + addNamesByExpression(result, expression, validator) + + if (result.isEmpty()) { + addName(result, defaultName, validator) + } + return ArrayUtil.toStringArray(result) } - jvmOverloads public fun suggestNamesForExpression(expression: JetExpression, validator: (String) -> Boolean, defaultName: String? = null): Array { - val result = ArrayList() - addNamesForExpression(result, expression, validator) - if (result.isEmpty()) addName(result, defaultName, validator) - return ArrayUtil.toStringArray(result) - } - - private val COMMON_TYPE_PARAMETER_NAMES = arrayOf("T", "U", "V", "W", "X", "Y", "Z") + private val COMMON_TYPE_PARAMETER_NAMES = listOf("T", "U", "V", "W", "X", "Y", "Z") public fun suggestNamesForTypeParameters(count: Int, validator: (String) -> Boolean): Array { val result = ArrayList() for (i in 0..count - 1) { - result.add(validateNameWithVariants(validator, *COMMON_TYPE_PARAMETER_NAMES)) + result.add(suggestNameByMultipleNames(COMMON_TYPE_PARAMETER_NAMES, validator)) } return ArrayUtil.toStringArray(result) } - private fun addNamesForType(result: ArrayList, jetType: JetType, validator: (String) -> Boolean) { - var jetType = jetType + private fun addNamesByType(result: ArrayList, type: JetType, validator: (String) -> Boolean) { + var type = TypeUtils.makeNotNullable(type) // wipe out '?' val builtIns = KotlinBuiltIns.getInstance() val typeChecker = JetTypeChecker.DEFAULT - jetType = TypeUtils.makeNotNullable(jetType) // wipe out '?' - if (ErrorUtils.containsErrorType(jetType)) return - if (typeChecker.equalTypes(builtIns.getBooleanType(), jetType)) { + if (ErrorUtils.containsErrorType(type)) return + + if (typeChecker.equalTypes(builtIns.getBooleanType(), type)) { addName(result, "b", validator) } - else if (typeChecker.equalTypes(builtIns.getIntType(), jetType)) { + else if (typeChecker.equalTypes(builtIns.getIntType(), type)) { addName(result, "i", validator) } - else if (typeChecker.equalTypes(builtIns.getByteType(), jetType)) { + else if (typeChecker.equalTypes(builtIns.getByteType(), type)) { addName(result, "byte", validator) } - else if (typeChecker.equalTypes(builtIns.getLongType(), jetType)) { + else if (typeChecker.equalTypes(builtIns.getLongType(), type)) { addName(result, "l", validator) } - else if (typeChecker.equalTypes(builtIns.getFloatType(), jetType)) { + else if (typeChecker.equalTypes(builtIns.getFloatType(), type)) { addName(result, "fl", validator) } - else if (typeChecker.equalTypes(builtIns.getDoubleType(), jetType)) { + else if (typeChecker.equalTypes(builtIns.getDoubleType(), type)) { addName(result, "d", validator) } - else if (typeChecker.equalTypes(builtIns.getShortType(), jetType)) { + else if (typeChecker.equalTypes(builtIns.getShortType(), type)) { addName(result, "sh", validator) } - else if (typeChecker.equalTypes(builtIns.getCharType(), jetType)) { + else if (typeChecker.equalTypes(builtIns.getCharType(), type)) { addName(result, "c", validator) } - else if (typeChecker.equalTypes(builtIns.getStringType(), jetType)) { + else if (typeChecker.equalTypes(builtIns.getStringType(), type)) { addName(result, "s", validator) } - else if (KotlinBuiltIns.isArray(jetType) || KotlinBuiltIns.isPrimitiveArray(jetType)) { - val elementType = KotlinBuiltIns.getInstance().getArrayElementType(jetType) + else if (KotlinBuiltIns.isArray(type) || KotlinBuiltIns.isPrimitiveArray(type)) { + val elementType = KotlinBuiltIns.getInstance().getArrayElementType(type) if (typeChecker.equalTypes(builtIns.getBooleanType(), elementType)) { addName(result, "booleans", validator) } @@ -172,16 +179,12 @@ public object KotlinNameSuggester { } } else { - addForClassType(result, jetType, validator) - } - } - - private fun addForClassType(result: ArrayList, jetType: JetType, validator: (String) -> Boolean) { - val descriptor = jetType.getConstructor().getDeclarationDescriptor() - if (descriptor != null) { - val className = descriptor.getName() - if (!className.isSpecial()) { - addCamelNames(result, className.asString(), validator) + val descriptor = type.getConstructor().getDeclarationDescriptor() + if (descriptor != null) { + val className = descriptor.getName() + if (!className.isSpecial()) { + addCamelNames(result, className.asString(), validator) + } } } } @@ -254,13 +257,13 @@ public object KotlinNameSuggester { return matcher.replaceAll("") } - private fun addNamesForExpression(result: ArrayList, expression: JetExpression?, validator: (String) -> Boolean) { + private fun addNamesByExpression(result: ArrayList, expression: JetExpression?, validator: (String) -> Boolean) { if (expression == null) return expression.accept(object : JetVisitorVoid() { override fun visitQualifiedExpression(expression: JetQualifiedExpression) { val selectorExpression = expression.getSelectorExpression() - addNamesForExpression(result, selectorExpression, validator) + addNamesByExpression(result, selectorExpression, validator) } override fun visitSimpleNameExpression(expression: JetSimpleNameExpression) { @@ -274,11 +277,11 @@ public object KotlinNameSuggester { } override fun visitCallExpression(expression: JetCallExpression) { - addNamesForExpression(result, expression.getCalleeExpression(), validator) + addNamesByExpression(result, expression.getCalleeExpression(), validator) } override fun visitPostfixExpression(expression: JetPostfixExpression) { - addNamesForExpression(result, expression.getBaseExpression(), validator) + addNamesByExpression(result, expression.getBaseExpression(), validator) } }) } @@ -299,10 +302,10 @@ public object KotlinNameSuggester { * @param name to check it in scope * @return name or nameI, where I is number */ - public fun validateName(name: String, validator: (String) -> Boolean): String { - if (validator.invoke(name)) return name + public fun suggestNameByName(name: String, validator: (String) -> Boolean): String { + if (validator(name)) return name var i = 1 - while (!validator.invoke(name + i)) { + while (!validator(name + i)) { ++i } @@ -315,12 +318,12 @@ public object KotlinNameSuggester { * @param names to check it in scope * @return name or nameI, where name is one of variants and I is a number */ - public fun validateNameWithVariants(validator: (String) -> Boolean, vararg names: String): String { + public fun suggestNameByMultipleNames(names: Collection, validator: (String) -> Boolean): String { var i = 0 while (true) { for (name in names) { val candidate = if (i > 0) name + i else name - if (validator.invoke(candidate)) return candidate + if (validator(candidate)) return candidate } i++ } diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/IterateExpressionIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/IterateExpressionIntention.kt index ebb9d78e421..daaa98bd5d3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/IterateExpressionIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/IterateExpressionIntention.kt @@ -59,7 +59,7 @@ public class IterateExpressionIntention : JetSelfTargetingIntention Boolean): Name { val name = if (nameSuggestion != null) - KotlinNameSuggester.validateName(nameSuggestion, validator) + KotlinNameSuggester.suggestNameByName(nameSuggestion, validator) else - KotlinNameSuggester.suggestNamesForExpression(value, validator, "t").first() + KotlinNameSuggester.suggestNamesByExpressionOnly(value, validator, "t").first() return Name.identifier(name) } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt index 0f3263b6019..18476025816 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt @@ -622,7 +622,7 @@ class CallableBuilder(val config: CallableBuilderConfiguration) { } val validator = CollectingNameValidator { scope.getClassifier(Name.identifier(it)) == null } - val typeParameterNames = allTypeParametersNotInScope.map { KotlinNameSuggester.validateName(it.getName().asString(), validator) } + val typeParameterNames = allTypeParametersNotInScope.map { KotlinNameSuggester.suggestNameByName(it.getName().asString(), validator) } return allTypeParametersNotInScope.zip(typeParameterNames).toMap() } @@ -820,7 +820,7 @@ class CallableBuilder(val config: CallableBuilderConfiguration) { // figure out suggested names for each type option val parameterTypeToNamesMap = HashMap>() typeCandidates[parameter.typeInfo]!!.forEach { typeCandidate -> - val suggestedNames = KotlinNameSuggester.suggestNamesForType(typeCandidate.theType, { true }) + val suggestedNames = KotlinNameSuggester.suggestNamesByType(typeCandidate.theType, { true }) parameterTypeToNamesMap[typeCandidate.renderedType!!] = suggestedNames } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableInfo.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableInfo.kt index 9cb75ec9116..59c8ae38576 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableInfo.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableInfo.kt @@ -43,7 +43,7 @@ abstract class TypeInfo(val variance: Variance) { class ByExpression(val expression: JetExpression, variance: Variance): TypeInfo(variance) { override val possibleNamesFromExpression: Array by Delegates.lazy { - KotlinNameSuggester.suggestNamesForExpression(expression, { true }) + KotlinNameSuggester.suggestNamesByExpressionOnly(expression, { true }) } override fun getPossibleTypes(builder: CallableBuilder): List = diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/templateExpressions.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/templateExpressions.kt index 0ea087336a0..34c59500c74 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/templateExpressions.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/templateExpressions.kt @@ -95,7 +95,7 @@ private class ParameterNameExpression( // ensure there are no conflicts val validator = CollectingNameValidator(parameterNames) - return names.map { LookupElementBuilder.create(KotlinNameSuggester.validateName(it, validator)) }.toTypedArray() + return names.map { LookupElementBuilder.create(KotlinNameSuggester.suggestNameByName(it, validator)) }.toTypedArray() } } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureData.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureData.kt index 0c5bcac467e..0788fb1eff4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureData.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureData.kt @@ -82,7 +82,7 @@ public class JetChangeSignatureData( } } ?: CollectingNameValidator(paramNames) val receiverType = baseDescriptor.getExtensionReceiverParameter()?.getType() ?: return null - val receiverName = KotlinNameSuggester.suggestNames(receiverType, validator, "receiver").first() + val receiverName = KotlinNameSuggester.suggestNamesByType(receiverType, validator, "receiver").first() return JetParameterInfo(functionDescriptor = baseDescriptor, name = receiverName, type = receiverType) } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt index c07cbe44c9d..0e8a33a6e91 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt @@ -756,9 +756,9 @@ private fun ExtractionData.inferParametersInfo( with (parameter) { if (currentName == null) { - currentName = KotlinNameSuggester.suggestNames(getParameterType(options.allowSpecialClassNames), varNameValidator, "p").first() + currentName = KotlinNameSuggester.suggestNamesByType(getParameterType(options.allowSpecialClassNames), varNameValidator, "p").first() } - mirrorVarName = if (descriptorToExtract in modifiedVarDescriptors) KotlinNameSuggester.validateName(name, varNameValidator) else null + mirrorVarName = if (descriptorToExtract in modifiedVarDescriptors) KotlinNameSuggester.suggestNameByName(name, varNameValidator) else null info.parameters.add(this) } } @@ -915,13 +915,13 @@ private fun ExtractionData.suggestFunctionNames(returnType: JetType): List val property = expr.getStrictParentOfType() if (property?.getInitializer() == expr) { - property?.getName()?.let { functionNames.add(KotlinNameSuggester.validateName("get" + it.capitalize(), validator)) } + property?.getName()?.let { functionNames.add(KotlinNameSuggester.suggestNameByName("get" + it.capitalize(), validator)) } } } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractorUtil.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractorUtil.kt index b664367fdb5..3103b09beb1 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractorUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractorUtil.kt @@ -279,7 +279,7 @@ private fun makeCall( } else { val varNameValidator = NameValidatorImpl(block, anchorInBlock, NameValidatorImpl.Target.PROPERTIES) - val resultVal = KotlinNameSuggester.suggestNames(extractableDescriptor.returnType, varNameValidator, null).first() + val resultVal = KotlinNameSuggester.suggestNamesByType(extractableDescriptor.returnType, varNameValidator, null).first() block.addBefore(psiFactory.createDeclaration("val $resultVal = $callText"), anchorInBlock) block.addBefore(newLine, anchorInBlock) controlFlow.outputValueBoxer.getUnboxingExpressions(resultVal) @@ -513,7 +513,7 @@ fun ExtractionGeneratorConfiguration.generateDeclaration( val (defaultExpression, expressionToUnifyWith) = if (!generatorOptions.inTempFile && defaultValue != null && descriptor.controlFlow.outputValueBoxer.boxingRequired && lastExpression!!.isMultiLine()) { val varNameValidator = NameValidatorImpl(body, lastExpression, NameValidatorImpl.Target.PROPERTIES) - val resultVal = KotlinNameSuggester.suggestNames(defaultValue.valueType, varNameValidator, null).first() + val resultVal = KotlinNameSuggester.suggestNamesByType(defaultValue.valueType, varNameValidator, null).first() val newDecl = body.addBefore(psiFactory.createDeclaration("val $resultVal = ${lastExpression!!.getText()}"), lastExpression) as JetProperty body.addBefore(psiFactory.createNewLine(), lastExpression) psiFactory.createExpression(resultVal) to newDecl.getInitializer()!! 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 23dc0535228..c040c693940 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 @@ -235,7 +235,7 @@ public open class KotlinIntroduceParameterHandler( else -> null } ?: throw AssertionError("Body element is not found: ${targetParent.getElementTextWithContext()}") val nameValidator = NameValidatorImpl(body, null, NameValidatorImpl.Target.PROPERTIES) - val suggestedNames = linkedSetOf(*KotlinNameSuggester.suggestNames(replacementType, nameValidator, "p")) + val suggestedNames = linkedSetOf(*KotlinNameSuggester.suggestNamesByType(replacementType, nameValidator, "p")) val parametersUsages = findInternalUsagesOfParametersAndReceiver(targetParent, functionDescriptor) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java index 4d539903d34..9398b961028 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.java @@ -197,7 +197,7 @@ public class KotlinIntroduceVariableHandler extends KotlinIntroduceHandlerBase { calculateAnchor(commonParent, commonContainer, allReplaces), NameValidatorImpl.Target.PROPERTIES ); - final String[] suggestedNames = KotlinNameSuggester.INSTANCE$.suggestNames(expression, validator, "value"); + final String[] suggestedNames = KotlinNameSuggester.INSTANCE$.suggestNamesByExpressionAndType(expression, validator, "value"); final Ref propertyRef = new Ref(); final ArrayList references = new ArrayList(); final Ref reference = new Ref(); 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 848a30579d7..cce2ec494b0 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/nameSuggester/JetNameSuggesterTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/nameSuggester/JetNameSuggesterTest.kt @@ -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.suggestNames(expression, { true }, "value") + val names = KotlinNameSuggester.suggestNamesByExpressionAndType(expression, { true }, "value") Arrays.sort(names) val result = StringUtil.join(names, "\n").trim() assertEquals(expectedResultText, result)