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.caches.resolve.resolveToDescriptor
|
||||||
import org.jetbrains.kotlin.idea.codeInsight.shorten.addToShorteningWaitSet
|
import org.jetbrains.kotlin.idea.codeInsight.shorten.addToShorteningWaitSet
|
||||||
import org.jetbrains.kotlin.idea.core.refactoring.createPrimaryConstructorIfAbsent
|
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.refactoring.replaceListPsiAndKeepDelimiters
|
||||||
import org.jetbrains.kotlin.idea.core.setVisibility
|
import org.jetbrains.kotlin.idea.core.setVisibility
|
||||||
import org.jetbrains.kotlin.idea.core.toKeywordToken
|
import org.jetbrains.kotlin.idea.core.toKeywordToken
|
||||||
@@ -52,7 +53,8 @@ class KotlinCallableDefinitionUsage<T : PsiElement>(
|
|||||||
function: T,
|
function: T,
|
||||||
val originalCallableDescriptor: CallableDescriptor,
|
val originalCallableDescriptor: CallableDescriptor,
|
||||||
baseFunction: KotlinCallableDefinitionUsage<PsiElement>?,
|
baseFunction: KotlinCallableDefinitionUsage<PsiElement>?,
|
||||||
private val samCallType: KotlinType?
|
private val samCallType: KotlinType?,
|
||||||
|
private val canDropOverride: Boolean = true
|
||||||
) : KotlinUsageInfo<T>(function) {
|
) : KotlinUsageInfo<T>(function) {
|
||||||
val baseFunction: KotlinCallableDefinitionUsage<*> = baseFunction ?: this
|
val baseFunction: KotlinCallableDefinitionUsage<*> = baseFunction ?: this
|
||||||
|
|
||||||
@@ -139,6 +141,10 @@ class KotlinCallableDefinitionUsage<T : PsiElement>(
|
|||||||
changeVisibility(changeInfo, element)
|
changeVisibility(changeInfo, element)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (canDropOverride) {
|
||||||
|
dropOverrideKeywordIfNecessary(element)
|
||||||
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-3
@@ -25,11 +25,11 @@ import com.intellij.refactoring.introduceParameter.IntroduceParameterMethodUsage
|
|||||||
import com.intellij.usageView.UsageInfo
|
import com.intellij.usageView.UsageInfo
|
||||||
import com.intellij.util.containers.MultiMap
|
import com.intellij.util.containers.MultiMap
|
||||||
import org.jetbrains.kotlin.asJava.unwrapped
|
import org.jetbrains.kotlin.asJava.unwrapped
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.getJavaMethodDescriptor
|
import org.jetbrains.kotlin.idea.caches.resolve.getJavaMethodDescriptor
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
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.core.refactoring.j2k
|
||||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinChangeInfo
|
import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinChangeInfo
|
||||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinChangeSignatureData
|
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.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch
|
import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
||||||
import java.util.Collections
|
import java.util.*
|
||||||
|
|
||||||
public class KotlinIntroduceParameterMethodUsageProcessor : IntroduceParameterMethodUsagesProcessor {
|
public class KotlinIntroduceParameterMethodUsageProcessor : IntroduceParameterMethodUsagesProcessor {
|
||||||
override fun isMethodUsage(usage: UsageInfo): Boolean = (usage.getElement() as? KtElement)?.let {
|
override fun isMethodUsage(usage: UsageInfo): Boolean = (usage.getElement() as? KtElement)?.let {
|
||||||
@@ -92,7 +92,9 @@ public class KotlinIntroduceParameterMethodUsageProcessor : IntroduceParameterMe
|
|||||||
.map { it.unwrapped }
|
.map { it.unwrapped }
|
||||||
.filterIsInstance<KtFunction>()
|
.filterIsInstance<KtFunction>()
|
||||||
return (kotlinFunctions + element).all {
|
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 com.intellij.util.containers.MultiMap
|
||||||
import org.jetbrains.kotlin.asJava.KtLightMethod
|
import org.jetbrains.kotlin.asJava.KtLightMethod
|
||||||
import org.jetbrains.kotlin.asJava.LightClassUtil
|
import org.jetbrains.kotlin.asJava.LightClassUtil
|
||||||
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
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.idea.util.string.collapseSpaces
|
||||||
import org.jetbrains.kotlin.j2k.ConverterSettings
|
import org.jetbrains.kotlin.j2k.ConverterSettings
|
||||||
import org.jetbrains.kotlin.j2k.JavaToKotlinConverter
|
import org.jetbrains.kotlin.j2k.JavaToKotlinConverter
|
||||||
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
import org.jetbrains.kotlin.name.FqNameUnsafe
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.codeFragmentUtil.suppressDiagnosticsInDebugMode
|
import org.jetbrains.kotlin.psi.codeFragmentUtil.suppressDiagnosticsInDebugMode
|
||||||
@@ -761,3 +763,10 @@ fun KtExpression.removeTemplateEntryBracesIfPossible(): KtExpression {
|
|||||||
val newEntry = if (intention.isApplicableTo(parent)) intention.applyTo(parent) else parent
|
val newEntry = if (intention.isApplicableTo(parent)) intention.applyTo(parent) else parent
|
||||||
return newEntry.expression!!
|
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.KtLightMethod
|
||||||
import org.jetbrains.kotlin.asJava.LightClassUtil
|
import org.jetbrains.kotlin.asJava.LightClassUtil
|
||||||
import org.jetbrains.kotlin.asJava.unwrapped
|
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.idea.util.application.runReadAction
|
||||||
import org.jetbrains.kotlin.psi.KtFunction
|
import org.jetbrains.kotlin.psi.KtFunction
|
||||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
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.descriptors.ValueParameterDescriptor
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
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.idea.util.application.runReadAction
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
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.rename.UnresolvableCollisionUsageInfo
|
||||||
import com.intellij.refactoring.util.MoveRenameUsageInfo
|
import com.intellij.refactoring.util.MoveRenameUsageInfo
|
||||||
import com.intellij.usageView.UsageInfo
|
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.refactoring.KotlinRefactoringBundle
|
||||||
import org.jetbrains.kotlin.idea.references.AbstractKtReference
|
import org.jetbrains.kotlin.idea.references.AbstractKtReference
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
|
||||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
fun checkConflictsAndReplaceUsageInfos(result: MutableList<UsageInfo>) {
|
fun checkConflictsAndReplaceUsageInfos(result: MutableList<UsageInfo>) {
|
||||||
@@ -54,9 +50,3 @@ class UnresolvableConventionViolationUsageInfo(
|
|||||||
) : UnresolvableCollisionUsageInfo(element, referencedElement) {
|
) : UnresolvableCollisionUsageInfo(element, referencedElement) {
|
||||||
override fun getDescription(): String = KotlinRefactoringBundle.message("naming.convention.will.be.violated.after.rename")
|
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