Change Signature: Drop 'override' keyword when changing function/property, but not its overriden declarations
#KT-9470 Fixed
This commit is contained in:
+7
-1
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.getJavaMethodDescriptor
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
||||
import org.jetbrains.kotlin.idea.codeInsight.shorten.addToShorteningWaitSet
|
||||
import org.jetbrains.kotlin.idea.core.refactoring.createPrimaryConstructorIfAbsent
|
||||
import org.jetbrains.kotlin.idea.core.refactoring.dropOverrideKeywordIfNecessary
|
||||
import org.jetbrains.kotlin.idea.core.refactoring.replaceListPsiAndKeepDelimiters
|
||||
import org.jetbrains.kotlin.idea.core.setVisibility
|
||||
import org.jetbrains.kotlin.idea.core.toKeywordToken
|
||||
@@ -52,7 +53,8 @@ class KotlinCallableDefinitionUsage<T : PsiElement>(
|
||||
function: T,
|
||||
val originalCallableDescriptor: CallableDescriptor,
|
||||
baseFunction: KotlinCallableDefinitionUsage<PsiElement>?,
|
||||
private val samCallType: KotlinType?
|
||||
private val samCallType: KotlinType?,
|
||||
private val canDropOverride: Boolean = true
|
||||
) : KotlinUsageInfo<T>(function) {
|
||||
val baseFunction: KotlinCallableDefinitionUsage<*> = baseFunction ?: this
|
||||
|
||||
@@ -139,6 +141,10 @@ class KotlinCallableDefinitionUsage<T : PsiElement>(
|
||||
changeVisibility(changeInfo, element)
|
||||
}
|
||||
|
||||
if (canDropOverride) {
|
||||
dropOverrideKeywordIfNecessary(element)
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
+5
-3
@@ -25,11 +25,11 @@ import com.intellij.refactoring.introduceParameter.IntroduceParameterMethodUsage
|
||||
import com.intellij.usageView.UsageInfo
|
||||
import com.intellij.util.containers.MultiMap
|
||||
import org.jetbrains.kotlin.asJava.unwrapped
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.getJavaMethodDescriptor
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
||||
import org.jetbrains.kotlin.idea.core.refactoring.dropOverrideKeywordIfNecessary
|
||||
import org.jetbrains.kotlin.idea.core.refactoring.j2k
|
||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinChangeInfo
|
||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinChangeSignatureData
|
||||
@@ -45,7 +45,7 @@ import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
||||
import java.util.Collections
|
||||
import java.util.*
|
||||
|
||||
public class KotlinIntroduceParameterMethodUsageProcessor : IntroduceParameterMethodUsagesProcessor {
|
||||
override fun isMethodUsage(usage: UsageInfo): Boolean = (usage.getElement() as? KtElement)?.let {
|
||||
@@ -92,7 +92,9 @@ public class KotlinIntroduceParameterMethodUsageProcessor : IntroduceParameterMe
|
||||
.map { it.unwrapped }
|
||||
.filterIsInstance<KtFunction>()
|
||||
return (kotlinFunctions + element).all {
|
||||
KotlinCallableDefinitionUsage(it, changeInfo.originalBaseFunctionDescriptor, null, null).processUsage(changeInfo, it, usages)
|
||||
KotlinCallableDefinitionUsage(it, changeInfo.originalBaseFunctionDescriptor, null, null, false).processUsage(changeInfo, it, usages)
|
||||
}.apply {
|
||||
dropOverrideKeywordIfNecessary(element)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -59,6 +59,7 @@ import com.intellij.util.VisibilityUtil
|
||||
import com.intellij.util.containers.MultiMap
|
||||
import org.jetbrains.kotlin.asJava.KtLightMethod
|
||||
import org.jetbrains.kotlin.asJava.LightClassUtil
|
||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
@@ -74,6 +75,7 @@ import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
||||
import org.jetbrains.kotlin.idea.util.string.collapseSpaces
|
||||
import org.jetbrains.kotlin.j2k.ConverterSettings
|
||||
import org.jetbrains.kotlin.j2k.JavaToKotlinConverter
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.codeFragmentUtil.suppressDiagnosticsInDebugMode
|
||||
@@ -760,4 +762,11 @@ fun KtExpression.removeTemplateEntryBracesIfPossible(): KtExpression {
|
||||
val intention = RemoveCurlyBracesFromTemplateIntention()
|
||||
val newEntry = if (intention.isApplicableTo(parent)) intention.applyTo(parent) else parent
|
||||
return newEntry.expression!!
|
||||
}
|
||||
|
||||
fun dropOverrideKeywordIfNecessary(element: KtNamedDeclaration) {
|
||||
val callableDescriptor = element.resolveToDescriptor() as? CallableDescriptor ?: return
|
||||
if (callableDescriptor.overriddenDescriptors.isEmpty()) {
|
||||
element.removeModifier(KtTokens.OVERRIDE_KEYWORD)
|
||||
}
|
||||
}
|
||||
@@ -26,6 +26,7 @@ import com.intellij.usageView.UsageInfo
|
||||
import org.jetbrains.kotlin.asJava.KtLightMethod
|
||||
import org.jetbrains.kotlin.asJava.LightClassUtil
|
||||
import org.jetbrains.kotlin.asJava.unwrapped
|
||||
import org.jetbrains.kotlin.idea.core.refactoring.dropOverrideKeywordIfNecessary
|
||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
||||
import org.jetbrains.kotlin.psi.KtFunction
|
||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
||||
|
||||
@@ -37,6 +37,7 @@ 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.core.refactoring.dropOverrideKeywordIfNecessary
|
||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||
|
||||
@@ -20,12 +20,8 @@ import com.intellij.psi.PsiElement
|
||||
import com.intellij.refactoring.rename.UnresolvableCollisionUsageInfo
|
||||
import com.intellij.refactoring.util.MoveRenameUsageInfo
|
||||
import com.intellij.usageView.UsageInfo
|
||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
||||
import org.jetbrains.kotlin.idea.refactoring.KotlinRefactoringBundle
|
||||
import org.jetbrains.kotlin.idea.references.AbstractKtReference
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
||||
import java.util.*
|
||||
|
||||
fun checkConflictsAndReplaceUsageInfos(result: MutableList<UsageInfo>) {
|
||||
@@ -54,9 +50,3 @@ class UnresolvableConventionViolationUsageInfo(
|
||||
) : UnresolvableCollisionUsageInfo(element, referencedElement) {
|
||||
override fun getDescription(): String = KotlinRefactoringBundle.message("naming.convention.will.be.violated.after.rename")
|
||||
}
|
||||
|
||||
fun dropOverrideKeywordIfNecessary(element: KtNamedDeclaration) {
|
||||
if ((element.resolveToDescriptor() as CallableDescriptor).overriddenDescriptors.isEmpty()) {
|
||||
element.removeModifier(KtTokens.OVERRIDE_KEYWORD)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user