From 566ed0112f7d5f4bd27312a01819ce19bc639d10 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 24 May 2016 16:37:32 +0300 Subject: [PATCH] Rename: Fixed in-place rename of Kotlin expression referring Java declaration #KT-9157 Fixed --- .idea/dictionaries/Alexey_Sedunov.xml | 8 +++ ChangeLog.md | 1 + idea/src/META-INF/plugin.xml | 1 + ...erByKotlinReferenceInplaceRenameHandler.kt | 52 +++++++++++++++++++ 4 files changed, 62 insertions(+) create mode 100644 .idea/dictionaries/Alexey_Sedunov.xml create mode 100644 idea/src/org/jetbrains/kotlin/idea/refactoring/rename/JavaMemberByKotlinReferenceInplaceRenameHandler.kt diff --git a/.idea/dictionaries/Alexey_Sedunov.xml b/.idea/dictionaries/Alexey_Sedunov.xml new file mode 100644 index 00000000000..9d420d9569d --- /dev/null +++ b/.idea/dictionaries/Alexey_Sedunov.xml @@ -0,0 +1,8 @@ + + + + inplace + renamer + + + \ No newline at end of file diff --git a/ChangeLog.md b/ChangeLog.md index b12ae3f5aed..baa6bf4d036 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -173,6 +173,7 @@ ###### Issues fixed - [`KT-9156`](https://youtrack.jetbrains.com/issue/KT-9156) Quote non-identifier names in Kotlin references +- [`KT-9157`](https://youtrack.jetbrains.com/issue/KT-9157) Fixed in-place rename of Kotlin expression referring Java declaration #### Java to Kotlin converter diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 54338791434..2c98b79d893 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -427,6 +427,7 @@ + diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/JavaMemberByKotlinReferenceInplaceRenameHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/JavaMemberByKotlinReferenceInplaceRenameHandler.kt new file mode 100644 index 00000000000..5cc7ffcea9a --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/JavaMemberByKotlinReferenceInplaceRenameHandler.kt @@ -0,0 +1,52 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.refactoring.rename + +import com.intellij.openapi.command.impl.StartMarkAction +import com.intellij.openapi.editor.Editor +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiFile +import com.intellij.psi.PsiMember +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.psi.KtPsiUtil +import org.jetbrains.kotlin.psi.KtSimpleNameExpression +import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType + +class JavaMemberByKotlinReferenceInplaceRenameHandler : MemberInplaceRenameHandler() { + class Renamer( + elementToRename: PsiNameIdentifierOwner, + element: PsiElement, + editor: Editor + ) : MemberInplaceRenamer(elementToRename, element, editor) { + override fun performRefactoringRename(newName: String, markAction: StartMarkAction) { + super.performRefactoringRename(KtPsiUtil.unquoteIdentifier(newName), markAction) + } + } + + 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 + } + + override fun createMemberRenamer(element: PsiElement, elementToRename: PsiNameIdentifierOwner, editor: Editor): MemberInplaceRenamer { + return Renamer(elementToRename, element, editor) + } +}