Reuse Java safe delete for Kotlin classes and objects

This commit is contained in:
Alexey Sedunov
2014-01-20 15:24:55 +04:00
parent d432c10251
commit 5cfb07072c
13 changed files with 78 additions and 46 deletions
@@ -372,14 +372,13 @@ public class JetPsiUtil {
public static void deleteClass(@NotNull JetClassOrObject clazz) {
CheckUtil.checkWritable(clazz);
JetFile file = (JetFile) clazz.getContainingFile();
List<JetDeclaration> declarations = file.getDeclarations();
if (declarations.size() == 1) {
file.delete();
}
else {
if (isLocal(clazz) || file.getDeclarations().size() > 1) {
PsiElement parent = clazz.getParent();
CodeEditUtil.removeChild(parent.getNode(), clazz.getNode());
}
else {
file.delete();
}
}
@Nullable
@@ -39,6 +39,8 @@ import com.intellij.psi.search.SearchScope
import com.intellij.psi.search.PsiSearchScopeUtil
import org.jetbrains.jet.lang.psi.JetClassBody
import org.jetbrains.jet.lang.psi.JetParameterList
import org.jetbrains.jet.lang.psi.JetNamedDeclaration
import com.intellij.psi.PsiNamedElement
fun PsiElement.getParentByTypesAndPredicate<T: PsiElement>(
strict : Boolean = false, vararg parentClasses : Class<T>, predicate: (T) -> Boolean
@@ -170,4 +172,7 @@ fun JetDeclaration.isOverridable(): Boolean {
return klass.isTrait() ||
hasModifier(JetTokens.ABSTRACT_KEYWORD) || hasModifier(JetTokens.OPEN_KEYWORD) || hasModifier(JetTokens.OVERRIDE_KEYWORD)
}
}
val PsiElement.namedNavigationElement: PsiNamedElement?
get() = getNavigationElement()?.getParentByType(javaClass<PsiNamedElement>())