Rename: Drop 'override' keyword when renaming function/property without bases
#KT-4790 Fixed
This commit is contained in:
+10
@@ -20,11 +20,15 @@ import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiMethod
|
||||
import com.intellij.psi.search.SearchScope
|
||||
import com.intellij.refactoring.listeners.RefactoringElementListener
|
||||
import com.intellij.refactoring.rename.RenameJavaMethodProcessor
|
||||
import com.intellij.usageView.UsageInfo
|
||||
import org.jetbrains.kotlin.asJava.KotlinLightMethod
|
||||
import org.jetbrains.kotlin.asJava.LightClassUtil
|
||||
import org.jetbrains.kotlin.asJava.unwrapped
|
||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
||||
import org.jetbrains.kotlin.psi.JetFunction
|
||||
import org.jetbrains.kotlin.psi.JetNamedDeclaration
|
||||
import org.jetbrains.kotlin.psi.JetNamedFunction
|
||||
import org.jetbrains.kotlin.psi.JetSecondaryConstructor
|
||||
|
||||
@@ -57,6 +61,12 @@ public class RenameKotlinFunctionProcessor : RenameKotlinPsiProcessor() {
|
||||
}
|
||||
}
|
||||
|
||||
override fun renameElement(element: PsiElement?, newName: String?, usages: Array<out UsageInfo>?, listener: RefactoringElementListener?) {
|
||||
super.renameElement(element, newName, usages, listener)
|
||||
|
||||
(element?.unwrapped as? JetNamedDeclaration)?.let { dropOverrideKeywordIfNecessary(it) }
|
||||
}
|
||||
|
||||
private fun wrapPsiMethod(element: PsiElement?): PsiMethod? = when (element) {
|
||||
is KotlinLightMethod -> element
|
||||
is JetNamedFunction, is JetSecondaryConstructor -> runReadAction {
|
||||
|
||||
+6
-5
@@ -32,17 +32,16 @@ import com.intellij.refactoring.util.RefactoringUtil
|
||||
import com.intellij.usageView.UsageInfo
|
||||
import org.jetbrains.kotlin.asJava.LightClassUtil
|
||||
import org.jetbrains.kotlin.asJava.namedUnwrappedElement
|
||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
||||
import org.jetbrains.kotlin.lexer.JetTokens
|
||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.JetCallableDeclaration
|
||||
import org.jetbrains.kotlin.psi.JetClassOrObject
|
||||
import org.jetbrains.kotlin.psi.JetParameter
|
||||
import org.jetbrains.kotlin.psi.JetProperty
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||
import org.jetbrains.kotlin.resolve.OverrideResolver
|
||||
@@ -113,7 +112,7 @@ public class RenameKotlinPropertyProcessor : RenamePsiElementProcessor() {
|
||||
return
|
||||
}
|
||||
|
||||
val name = (element as PsiNamedElement).getName()!!
|
||||
val name = (element as JetNamedDeclaration).getName()!!
|
||||
val oldGetterName = JvmAbi.getterName(name)
|
||||
val oldSetterName = JvmAbi.setterName(name)
|
||||
|
||||
@@ -143,6 +142,8 @@ public class RenameKotlinPropertyProcessor : RenamePsiElementProcessor() {
|
||||
refKindUsages[UsageKind.SIMPLE_PROPERTY_USAGE]?.toTypedArray() ?: arrayOf<UsageInfo>(),
|
||||
null)
|
||||
|
||||
dropOverrideKeywordIfNecessary(element)
|
||||
|
||||
listener?.elementRenamed(element)
|
||||
}
|
||||
|
||||
|
||||
@@ -21,8 +21,12 @@ import com.intellij.usageView.UsageInfo
|
||||
import java.util.ArrayList
|
||||
import com.intellij.refactoring.util.MoveRenameUsageInfo
|
||||
import com.intellij.refactoring.rename.UnresolvableCollisionUsageInfo
|
||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
||||
import org.jetbrains.kotlin.idea.refactoring.JetRefactoringBundle
|
||||
import org.jetbrains.kotlin.idea.references.AbstractJetReference
|
||||
import org.jetbrains.kotlin.lexer.JetTokens
|
||||
import org.jetbrains.kotlin.psi.JetNamedDeclaration
|
||||
|
||||
fun checkConflictsAndReplaceUsageInfos(result: MutableList<UsageInfo>) {
|
||||
val usagesToAdd = ArrayList<UsageInfo>()
|
||||
@@ -50,3 +54,9 @@ class UnresolvableConventionViolationUsageInfo(
|
||||
) : UnresolvableCollisionUsageInfo(element, referencedElement) {
|
||||
override fun getDescription(): String = JetRefactoringBundle.message("naming.convention.will.be.violated.after.rename")
|
||||
}
|
||||
|
||||
fun dropOverrideKeywordIfNecessary(element: JetNamedDeclaration) {
|
||||
if ((element.resolveToDescriptor() as CallableDescriptor).overriddenDescriptors.isEmpty()) {
|
||||
element.removeModifier(JetTokens.OVERRIDE_KEYWORD)
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
class A(val n: Int) {
|
||||
override fun foo(other: Any?): Boolean = other is A && other.n == n
|
||||
fun foo(other: Any?): Boolean = other is A && other.n == n
|
||||
}
|
||||
|
||||
fun test() {
|
||||
|
||||
Reference in New Issue
Block a user