From cbc0a60006961623a1bbeed07c3427351eaa9a01 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Thu, 28 May 2015 23:18:00 +0300 Subject: [PATCH] Moving more PSI modification methods to psiModificationUtils.kt --- .../kotlin/psi/psiUtil/jetPsiUtil.kt | 38 ------------------ .../kotlin/idea/core/psiModificationUtils.kt | 39 +++++++++++++++++++ .../safeDelete/KotlinSafeDeleteProcessor.kt | 2 +- .../SafeDeleteTypeArgumentListUsageInfo.kt | 2 +- 4 files changed, 41 insertions(+), 40 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/jetPsiUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/jetPsiUtil.kt index 81108c2beb7..134d4aba39f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/jetPsiUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/jetPsiUtil.kt @@ -141,44 +141,6 @@ public fun JetDeclaration.isExtensionDeclaration(): Boolean { public fun JetClassOrObject.isObjectLiteral(): Boolean = this is JetObjectDeclaration && isObjectLiteral() -//TODO: git rid of this method -public fun PsiElement.deleteElementAndCleanParent() { - val parent = getParent() - - deleteElementWithDelimiters(this) - deleteChildlessElement(parent, this.javaClass) -} - -// Delete element if it doesn't contain children of a given type -private fun deleteChildlessElement(element: PsiElement, childClass: Class) { - if (PsiTreeUtil.getChildrenOfType(element, childClass) == null) { - element.delete() - } -} - -// Delete given element and all the elements separating it from the neighboring elements of the same class -private fun deleteElementWithDelimiters(element: PsiElement) { - val paramBefore = PsiTreeUtil.getPrevSiblingOfType(element, element.javaClass) - - val from: PsiElement - val to: PsiElement - if (paramBefore != null) { - from = paramBefore.getNextSibling() - to = element - } - else { - val paramAfter = PsiTreeUtil.getNextSiblingOfType(element, element.javaClass) - - from = element - to = if (paramAfter != null) paramAfter.getPrevSibling() else element - } - - val parent = element.getParent() - - parent.deleteChildRange(from, to) -} - - public fun PsiElement.parameterIndex(): Int { val parent = getParent() return when { diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt index 460194415a8..cf4d3a324fe 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt @@ -18,7 +18,9 @@ package org.jetbrains.kotlin.idea.core import com.intellij.psi.PsiElement import com.intellij.psi.PsiWhiteSpace +import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.psiUtil import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.callUtil.getValueArgumentsInParentheses @@ -109,4 +111,41 @@ public fun JetBlockExpression.appendElement(element: JetElement): JetElement { rBrace.getPrevSibling()!! } return addAfter(element, anchor)!! as JetElement +} + +//TODO: git rid of this method +public fun PsiElement.deleteElementAndCleanParent() { + val parent = getParent() + + deleteElementWithDelimiters(this) + deleteChildlessElement(parent, this.javaClass) +} + +// Delete element if it doesn't contain children of a given type +private fun deleteChildlessElement(element: PsiElement, childClass: Class) { + if (PsiTreeUtil.getChildrenOfType(element, childClass) == null) { + element.delete() + } +} + +// Delete given element and all the elements separating it from the neighboring elements of the same class +private fun deleteElementWithDelimiters(element: PsiElement) { + val paramBefore = PsiTreeUtil.getPrevSiblingOfType(element, element.javaClass) + + val from: PsiElement + val to: PsiElement + if (paramBefore != null) { + from = paramBefore.getNextSibling() + to = element + } + else { + val paramAfter = PsiTreeUtil.getNextSiblingOfType(element, element.javaClass) + + from = element + to = if (paramAfter != null) paramAfter.getPrevSibling() else element + } + + val parent = element.getParent() + + parent.deleteChildRange(from, to) } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt index c8c590bad0b..608aef3f8d1 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt @@ -42,7 +42,7 @@ import org.jetbrains.kotlin.idea.references.JetReference import org.jetbrains.kotlin.idea.search.usagesSearch.processDelegationCallConstructorUsages import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.deleteElementAndCleanParent +import org.jetbrains.kotlin.idea.core.deleteElementAndCleanParent import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.kotlin.resolve.BindingContext import java.util.ArrayList diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/SafeDeleteTypeArgumentListUsageInfo.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/SafeDeleteTypeArgumentListUsageInfo.kt index 85c01c5def7..45025d9375d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/SafeDeleteTypeArgumentListUsageInfo.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/SafeDeleteTypeArgumentListUsageInfo.kt @@ -18,7 +18,7 @@ package org.jetbrains.kotlin.idea.refactoring.safeDelete import com.intellij.refactoring.safeDelete.usageInfo.SafeDeleteReferenceSimpleDeleteUsageInfo import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.deleteElementAndCleanParent +import org.jetbrains.kotlin.idea.core.deleteElementAndCleanParent public class SafeDeleteTypeArgumentListUsageInfo( typeProjection: JetTypeProjection, parameter: JetTypeParameter