Delete/Move: Delete entire file when deleting top-level class or object and no other top-level declarations are present. Ask the user confirmation if deletion if caused by the Move refactoring

#KT-8033 Fixed
This commit is contained in:
Alexey Sedunov
2015-06-15 16:17:57 +03:00
parent e1e818858e
commit dda271d38d
4 changed files with 23 additions and 16 deletions
@@ -16,10 +16,13 @@
package org.jetbrains.kotlin.psi
import com.intellij.lang.ASTNode
import com.intellij.lang.ASTNode
import com.intellij.navigation.ItemPresentation
import com.intellij.navigation.ItemPresentationProviders
import com.intellij.psi.PsiElement
import com.intellij.psi.impl.CheckUtil
import com.intellij.psi.impl.source.codeStyle.CodeEditUtil
import com.intellij.psi.stubs.IStubElementType
import org.jetbrains.kotlin.JetNodeTypes
import org.jetbrains.kotlin.lexer.JetTokens
@@ -62,4 +65,16 @@ abstract public class JetClassOrObject : JetTypeParameterListOwnerStub<KotlinCla
public fun getSecondaryConstructors(): List<JetSecondaryConstructor> = getBody()?.getSecondaryConstructors().orEmpty()
public fun isAnnotation(): Boolean = hasModifier(JetTokens.ANNOTATION_KEYWORD)
public override fun delete() {
CheckUtil.checkWritable(this);
val file = getContainingJetFile();
if (!isTopLevel() || file.getDeclarations().size() > 1) {
CodeEditUtil.removeChild(getParent().getNode(), getNode());
}
else {
file.delete();
}
}
}