diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java index e336657a7cfa..317b3db20dce 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java @@ -537,12 +537,26 @@ public class GenerateMembersUtil { PsiClass base = containingClass == null ? null : containingClass.getSuperClass(); PsiMethod overridden = base == null ? null : base.findMethodBySignature(method, true); + boolean emptyTemplate = true; + PsiCodeBlock body = method.getBody(); + if (body != null) { + PsiJavaToken lBrace = body.getLBrace(); + int left = lBrace != null ? lBrace.getStartOffsetInParent() + 1 : 0; + PsiJavaToken rBrace = body.getRBrace(); + int right = rBrace != null ? rBrace.getStartOffsetInParent() : body.getTextLength(); + emptyTemplate = StringUtil.isEmptyOrSpaces(body.getText().substring(left, right)); + } + if (overridden == null) { - CreateFromUsageUtils.setupMethodBody(method, containingClass); + if (emptyTemplate) { + CreateFromUsageUtils.setupMethodBody(method, containingClass); + } return; } - OverrideImplementUtil.setupMethodBody(method, overridden, containingClass); + if (emptyTemplate) { + OverrideImplementUtil.setupMethodBody(method, overridden, containingClass); + } OverrideImplementUtil.annotateOnOverrideImplement(method, base, overridden); } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/GenerateMembersUtilTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/GenerateMembersUtilTest.java index 519558650aed..220a571d5759 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/GenerateMembersUtilTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/GenerateMembersUtilTest.java @@ -4,10 +4,8 @@ import com.intellij.JavaTestUtil; import com.intellij.codeInsight.generation.GenerateMembersUtil; import com.intellij.codeInsight.generation.GenerationInfo; import com.intellij.codeInsight.generation.PsiGenerationInfo; -import com.intellij.psi.JavaPsiFacade; -import com.intellij.psi.PsiElementFactory; -import com.intellij.psi.PsiMethod; -import com.intellij.psi.PsiType; +import com.intellij.lang.java.JavaLanguage; +import com.intellij.psi.*; import com.intellij.testFramework.LightCodeInsightTestCase; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -53,4 +51,22 @@ public class GenerateMembersUtilTest extends LightCodeInsightTestCase { members.get(0).positionCaret(myEditor, true); checkResultByFile(null, BASE_PATH + getTestName(false) + "_after.java", true); } + + public void testSetupGeneratedMethodNotOverridingInitialBody() throws Exception { + String methodText = "public void tearDown() {\n //comment\n }"; + PsiElementFactory factory = JavaPsiFacade.getElementFactory(getProject()); + PsiMethod method = factory.createMethodFromText(methodText, null); + GenerateMembersUtil.setupGeneratedMethod(method); + assertEquals(methodText, method.getText()); + + //empty template + PsiJavaFile file = (PsiJavaFile)PsiFileFactory.getInstance(getProject()) + .createFileFromText(JavaLanguage.INSTANCE, "class A {void foo() {}}\n class B extends A {void foo() {}\n}"); + + method = file.getClasses()[1].getMethods()[0]; + GenerateMembersUtil.setupGeneratedMethod(method); + assertEquals("@Override void foo() {\n" + + " super.foo();\n" + + " }", method.getText()); + } }