Delete companion manually during pull up

This commit is contained in:
Mikhail Glukhikh
2018-01-30 16:14:48 +03:00
parent 7c6a217579
commit d88b5746c7
2 changed files with 17 additions and 17 deletions
@@ -28,10 +28,10 @@ import com.intellij.usageView.UsageViewBundle
import com.intellij.usageView.UsageViewDescriptor import com.intellij.usageView.UsageViewDescriptor
import org.jetbrains.kotlin.idea.codeInliner.UsageReplacementStrategy import org.jetbrains.kotlin.idea.codeInliner.UsageReplacementStrategy
import org.jetbrains.kotlin.idea.codeInliner.replaceUsages import org.jetbrains.kotlin.idea.codeInliner.replaceUsages
import org.jetbrains.kotlin.idea.refactoring.pullUp.deleteWithCompanion
import org.jetbrains.kotlin.idea.references.KtSimpleNameReference import org.jetbrains.kotlin.idea.references.KtSimpleNameReference
import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.idea.util.application.runReadAction
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
class KotlinInlineCallableProcessor( class KotlinInlineCallableProcessor(
project: Project, project: Project,
@@ -70,14 +70,7 @@ class KotlinInlineCallableProcessor(
postAction = { postAction = {
if (deleteAfter) { if (deleteAfter) {
if (usages.size == simpleNameUsages.size) { if (usages.size == simpleNameUsages.size) {
val containingClass = declaration.containingClassOrObject declaration.deleteWithCompanion()
if (containingClass is KtObjectDeclaration
&& containingClass.isCompanion()
&& containingClass.declarations.size == 1) {
containingClass.delete()
} else {
declaration.delete()
}
statementToDelete?.delete() statementToDelete?.delete()
} else { } else {
CommonRefactoringUtil.showErrorHint( CommonRefactoringUtil.showErrorHint(
@@ -50,10 +50,7 @@ import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.allChildren import org.jetbrains.kotlin.psi.psiUtil.*
import org.jetbrains.kotlin.psi.psiUtil.asAssignment
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
import org.jetbrains.kotlin.psi.psiUtil.parameterIndex
import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
@@ -359,7 +356,7 @@ class KotlinPullUpHelper(
private fun removeOriginalMemberOrAddOverride(member: KtCallableDeclaration) { private fun removeOriginalMemberOrAddOverride(member: KtCallableDeclaration) {
if (member.isAbstract()) { if (member.isAbstract()) {
member.delete() member.deleteWithCompanion()
} }
else { else {
member.addModifier(KtTokens.OVERRIDE_KEYWORD) member.addModifier(KtTokens.OVERRIDE_KEYWORD)
@@ -393,7 +390,7 @@ class KotlinPullUpHelper(
(member.parent as? KtParameterList)?.removeParameter(member) (member.parent as? KtParameterList)?.removeParameter(member)
} }
else { else {
member.delete() member.deleteWithCompanion()
} }
newField newField
} }
@@ -448,7 +445,7 @@ class KotlinPullUpHelper(
} }
val movedMember = addMemberToTarget(memberCopy, data.targetClass as KtClass) as KtClassOrObject val movedMember = addMemberToTarget(memberCopy, data.targetClass as KtClass) as KtClassOrObject
member.delete() member.deleteWithCompanion()
return movedMember return movedMember
} }
@@ -510,7 +507,7 @@ class KotlinPullUpHelper(
} }
} }
else { else {
member.delete() member.deleteWithCompanion()
} }
} }
@@ -642,3 +639,13 @@ class KotlinPullUpHelper(
} }
} }
internal fun KtNamedDeclaration.deleteWithCompanion() {
val containingClass = this.containingClassOrObject
if (containingClass is KtObjectDeclaration && containingClass.isCompanion() && containingClass.declarations.size == 1) {
containingClass.delete()
} else {
this.delete()
}
}