IDEA-136406 Complete current statement doesn't insert a method body for default metho...
[idea/community.git] / java / java-impl / src / com / intellij / codeInsight / editorActions / smartEnter / MissingMethodBodyFixer.java
index f7f9459fcb6c1aa563424f9a97eed23387b10f3a..ae5c0423b7ffadce8223011880d3615a6eb7ad5d 100644 (file)
@@ -21,6 +21,8 @@ import com.intellij.psi.*;
 import com.intellij.psi.util.PsiTreeUtil;
 import com.intellij.util.IncorrectOperationException;
 
+import static com.intellij.psi.PsiModifier.*;
+
 /**
  * Created by IntelliJ IDEA.
  * User: max
@@ -34,8 +36,7 @@ public class MissingMethodBodyFixer implements Fixer {
     if (!(psiElement instanceof PsiMethod)) return;
     PsiMethod method = (PsiMethod) psiElement;
     final PsiClass containingClass = method.getContainingClass();
-    if (containingClass == null || containingClass.isInterface()
-        || method.hasModifierProperty(PsiModifier.ABSTRACT) || method.hasModifierProperty(PsiModifier.NATIVE)) return;
+    if (!shouldHaveBody(method)) return;
 
     final PsiCodeBlock body = method.getBody();
     final Document doc = editor.getDocument();
@@ -62,4 +63,12 @@ public class MissingMethodBodyFixer implements Fixer {
     }
     doc.insertString(endOffset, "{\n}");
   }
+
+  static boolean shouldHaveBody(PsiMethod method) {
+    PsiClass containingClass = method.getContainingClass();
+    if (containingClass == null) return false;
+    if (containingClass.isInterface() && !method.hasModifierProperty(DEFAULT)) return false;
+    if (method.hasModifierProperty(ABSTRACT)) return false;
+    return !method.hasModifierProperty(NATIVE);
+  }
 }