Fix parameter changing in refactorings

Do not try to create new identifier if inherited name is invalid,
e.g. it's a destructuring declaration.

See KotlinChangeSignatureTest.testSAMRenameParam
This commit is contained in:
Denis Zharkov
2016-09-16 18:03:15 +03:00
parent 72d027d968
commit 6e12fe3a78
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.idea.refactoring.dropOverrideKeywordIfNecessary
import org.jetbrains.kotlin.idea.refactoring.replaceListPsiAndKeepDelimiters
import org.jetbrains.kotlin.idea.core.ShortenReferences
import org.jetbrains.kotlin.idea.core.ShortenReferences.Options
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext
import org.jetbrains.kotlin.psi.psiUtil.getValueParameterList
@@ -260,7 +261,11 @@ class KotlinCallableDefinitionUsage<T : PsiElement>(
parameter.setTypeReference(psiFactory.createType(renderedType))
}
val newIdentifier = psiFactory.createIdentifier(parameterInfo.getInheritedName(this))
parameter.nameIdentifier?.replace(newIdentifier)
val inheritedName = parameterInfo.getInheritedName(this)
if (Name.isValidIdentifier(inheritedName)) {
val newIdentifier = psiFactory.createIdentifier(inheritedName)
parameter.nameIdentifier?.replace(newIdentifier)
}
}
}