diff --git a/ChangeLog.md b/ChangeLog.md index 70d2eb1a681..a6bbbd8f763 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -227,6 +227,7 @@ - [`KT-7851`](https://youtrack.jetbrains.com/issue/KT-7851) Respect naming conventions in automatic variable rename - [`KT-8044`](https://youtrack.jetbrains.com/issue/KT-8044), [`KT-9432`](https://youtrack.jetbrains.com/issue/KT-9432) Support @JvmName annotation in rename refactoring - [`KT-8512`](https://youtrack.jetbrains.com/issue/KT-8512) Support "Rename tests" options in Rename dialog +- [`KT-9168`](https://youtrack.jetbrains.com/issue/KT-9168) Support rename of synthetic properties - [`KT-10578`](https://youtrack.jetbrains.com/issue/KT-10578) Support automatic test renaming for facade files - [`KT-12657`](https://youtrack.jetbrains.com/issue/KT-12657) Rename implicit usages of annotation method 'value' - [`KT-12759`](https://youtrack.jetbrains.com/issue/KT-12759) Suggest renaming both property accessors with matching @JvmName when renaming one of them from Java diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/JavaMemberByKotlinReferenceInplaceRenameHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/JavaMemberByKotlinReferenceInplaceRenameHandler.kt index 5cc7ffcea9a..254bae191f8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/JavaMemberByKotlinReferenceInplaceRenameHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/JavaMemberByKotlinReferenceInplaceRenameHandler.kt @@ -25,6 +25,7 @@ import com.intellij.psi.PsiNameIdentifierOwner import com.intellij.refactoring.rename.inplace.MemberInplaceRenameHandler import com.intellij.refactoring.rename.inplace.MemberInplaceRenamer import org.jetbrains.kotlin.asJava.unwrapped +import org.jetbrains.kotlin.idea.references.SyntheticPropertyAccessorReference import org.jetbrains.kotlin.psi.KtPsiUtil import org.jetbrains.kotlin.psi.KtSimpleNameExpression import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType @@ -41,9 +42,11 @@ class JavaMemberByKotlinReferenceInplaceRenameHandler : MemberInplaceRenameHandl } override fun isAvailable(element: PsiElement?, editor: Editor, file: PsiFile): Boolean { - return super.isAvailable(element, editor, file) - && element?.unwrapped is PsiMember - && file.findElementAt(editor.caretModel.offset)?.getNonStrictParentOfType() != null + if (!super.isAvailable(element, editor, file)) return false + if (element?.unwrapped !is PsiMember) return false + val refExpr = file.findElementAt(editor.caretModel.offset)?.getNonStrictParentOfType() ?: return false + if (refExpr.references.any { (it as? SyntheticPropertyAccessorReference)?.resolve() != null }) return false + return true } override fun createMemberRenamer(element: PsiElement, elementToRename: PsiNameIdentifierOwner, editor: Editor): MemberInplaceRenamer {