From 06e767279bc0fdb6483fb00a08630705ffa09bd8 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 22 Jul 2016 20:06:46 +0300 Subject: [PATCH] Extract Function/Parameter/Type Alias: Automatically quote declaration name when necessary #KT-13157 Fixed --- ChangeLog.md | 1 + .../extractFunction/ui/KotlinExtractFunctionDialog.java | 3 ++- .../introduce/extractionEngine/extractorUtil.kt | 2 +- .../introduceParameter/KotlinIntroduceParameterDialog.kt | 5 +++-- .../introduceParameter/KotlinIntroduceParameterHandler.kt | 7 ++----- .../introduce/introduceTypeAlias/introduceTypeAliasImpl.kt | 3 ++- .../ui/KotlinIntroduceTypeAliasDialog.java | 3 ++- 7 files changed, 13 insertions(+), 11 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index df52abf4e9c..c7666155c1c 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -243,6 +243,7 @@ Using 'this' as function argument in constructor of non-final class - [`KT-12945`](https://youtrack.jetbrains.com/issue/KT-12945) Rename: Fix function description in super method warning dialog - [`KT-12922`](https://youtrack.jetbrains.com/issue/KT-12922) Introduce Variable: Do not suggest expressions without type - [`KT-12943`](https://youtrack.jetbrains.com/issue/KT-12943) Rename: Show function signatures in "Rename Overloads" dialog +- [`KT-13157`](https://youtrack.jetbrains.com/issue/KT-13157) Extract Function: Automatically quote function name if necessary ##### New features diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractFunction/ui/KotlinExtractFunctionDialog.java b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractFunction/ui/KotlinExtractFunctionDialog.java index 6c720642d84..9cd8c227efe 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractFunction/ui/KotlinExtractFunctionDialog.java +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractFunction/ui/KotlinExtractFunctionDialog.java @@ -31,6 +31,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.idea.KotlinFileType; import org.jetbrains.kotlin.idea.core.KotlinNameSuggester; +import org.jetbrains.kotlin.idea.core.UtilsKt; import org.jetbrains.kotlin.idea.refactoring.KotlinRefactoringUtilKt; import org.jetbrains.kotlin.idea.refactoring.KotlinRefactoringBundle; import org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine.*; @@ -91,7 +92,7 @@ public class KotlinExtractFunctionDialog extends DialogWrapper { } private String getFunctionName() { - return functionNameField.getEnteredName(); + return UtilsKt.quoteIfNeeded(functionNameField.getEnteredName()); } private String getVisibility() { 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 e3486f4e0c5..d6b1c7c546e 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 @@ -270,7 +270,7 @@ private fun makeCall( } } - val calleeName = declaration.name + val calleeName = declaration.name?.quoteIfNeeded() val callText = when (declaration) { is KtNamedFunction -> { val argumentsText = arguments.joinToString(separator = ", ", prefix = "(", postfix = ")") diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterDialog.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterDialog.kt index fb4a8c20bb8..479f0b20919 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterDialog.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterDialog.kt @@ -27,6 +27,7 @@ import com.intellij.ui.NonFocusableCheckBox import com.intellij.usageView.BaseUsageViewDescriptor import com.intellij.usageView.UsageInfo import org.jetbrains.kotlin.idea.KotlinFileType +import org.jetbrains.kotlin.idea.core.quoteIfNeeded import org.jetbrains.kotlin.idea.refactoring.isMultiLine import org.jetbrains.kotlin.idea.refactoring.runRefactoringWithPostprocessing import org.jetbrains.kotlin.idea.refactoring.validateElement @@ -230,7 +231,7 @@ class KotlinIntroduceParameterDialog private constructor( override fun canRun() { val psiFactory = KtPsiFactory(myProject) - psiFactory.createSimpleName(nameField.enteredName).validateElement("Invalid parameter name") + psiFactory.createSimpleName(nameField.enteredName.quoteIfNeeded()).validateElement("Invalid parameter name") psiFactory.createType(typeField.enteredName).validateElement("Invalid parameter type") } @@ -256,7 +257,7 @@ class KotlinIntroduceParameterDialog private constructor( return KtPsiFactory(myProject).createExpression(text) } - val chosenName = nameField.enteredName + val chosenName = nameField.enteredName.quoteIfNeeded() var chosenType = typeField.enteredName var newArgumentValue = descriptor.newArgumentValue var newReplacer = descriptor.occurrenceReplacer 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 e9938188a4c..c915fda9915 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 @@ -37,10 +37,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils -import org.jetbrains.kotlin.idea.core.KotlinNameSuggester -import org.jetbrains.kotlin.idea.core.NewDeclarationNameValidator -import org.jetbrains.kotlin.idea.core.moveInsideParenthesesAndReplaceWith -import org.jetbrains.kotlin.idea.core.replaced +import org.jetbrains.kotlin.idea.core.* import org.jetbrains.kotlin.idea.refactoring.KotlinRefactoringBundle import org.jetbrains.kotlin.idea.refactoring.changeSignature.* import org.jetbrains.kotlin.idea.refactoring.introduce.* @@ -319,7 +316,7 @@ open class KotlinIntroduceParameterHandler( originalRange = originalExpression.toRange(), callable = targetParent, callableDescriptor = functionDescriptor, - newParameterName = suggestedNames.first(), + newParameterName = suggestedNames.first().quoteIfNeeded(), newParameterTypeText = IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_IN_TYPES.renderType(replacementType), argumentValue = originalExpression, withDefaultValue = false, diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceTypeAlias/introduceTypeAliasImpl.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceTypeAlias/introduceTypeAliasImpl.kt index 9df389d3d97..809b725bfb0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceTypeAlias/introduceTypeAliasImpl.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceTypeAlias/introduceTypeAliasImpl.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor import org.jetbrains.kotlin.idea.core.CollectingNameValidator import org.jetbrains.kotlin.idea.core.KotlinNameSuggester import org.jetbrains.kotlin.idea.core.compareDescriptors +import org.jetbrains.kotlin.idea.core.quoteIfNeeded import org.jetbrains.kotlin.idea.util.getResolutionScope import org.jetbrains.kotlin.idea.util.psi.patternMatching.KotlinPsiRange import org.jetbrains.kotlin.idea.util.psi.patternMatching.KotlinPsiUnifier @@ -149,7 +150,7 @@ fun IntroduceTypeAliasDescriptor.validate(): IntroduceTypeAliasDescriptorWithCon } fun findDuplicates(typeAlias: KtTypeAlias): Map Unit> { - val aliasName = typeAlias.name ?: return emptyMap() + val aliasName = typeAlias.name?.quoteIfNeeded() ?: return emptyMap() val typeAliasDescriptor = typeAlias.resolveToDescriptor() as TypeAliasDescriptor val unifierParameters = typeAliasDescriptor.declaredTypeParameters.map { UnifierParameter(it, null) } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceTypeAlias/ui/KotlinIntroduceTypeAliasDialog.java b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceTypeAlias/ui/KotlinIntroduceTypeAliasDialog.java index 788c49c3c6a..d3cb2fb288b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceTypeAlias/ui/KotlinIntroduceTypeAliasDialog.java +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceTypeAlias/ui/KotlinIntroduceTypeAliasDialog.java @@ -29,6 +29,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.idea.KotlinFileType; import org.jetbrains.kotlin.idea.core.KotlinNameSuggester; +import org.jetbrains.kotlin.idea.core.UtilsKt; import org.jetbrains.kotlin.idea.refactoring.KotlinRefactoringUtilKt; import org.jetbrains.kotlin.idea.refactoring.introduce.introduceTypeAlias.IntroduceTypeAliasDescriptor; import org.jetbrains.kotlin.idea.refactoring.introduce.introduceTypeAlias.IntroduceTypeAliasImplKt; @@ -93,7 +94,7 @@ public class KotlinIntroduceTypeAliasDialog extends DialogWrapper { } private String getAliasName() { - return aliasNameField.getEnteredName(); + return UtilsKt.quoteIfNeeded(aliasNameField.getEnteredName()); } @Nullable