diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiFactory.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiFactory.java index ce49e79196f..98fe1b8d487 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiFactory.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiFactory.java @@ -147,6 +147,11 @@ public class JetPsiFactory { return function.getBodyExpression(); } + public static JetClassBody createEmptyClassBody(Project project) { + JetClass aClass = createClass(project, "class A(){}"); + return aClass.getBody(); + } + public static JetParameter createParameter(Project project, String name, String type) { JetNamedFunction function = createFunction(project, "fun foo(" + name + " : " + type + ") {}"); return function.getValueParameters().get(0); diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java index 9fd363325d3..781abd15869 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java @@ -68,9 +68,10 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns JetClassOrObject classOrObject, List selectedElements ) { - final JetClassBody body = classOrObject.getBody(); + JetClassBody body = classOrObject.getBody(); + Project project = classOrObject.getProject(); if (body == null) { - return; + body = JetPsiFactory.createEmptyClassBody(project); } PsiElement afterAnchor = findInsertAfterAnchor(editor, body); @@ -87,6 +88,11 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns elementsToCompact.add((JetElement) added); } ReferenceToClassesShortening.compactReferenceToClasses(elementsToCompact); + + if (!body.isPhysical()) { + classOrObject.add(JetPsiFactory.createWhiteSpace(project)); + classOrObject.add(body); + } } @Nullable diff --git a/idea/testData/codeInsight/overrideImplement/emptyClassBodyFunctionMethod.kt b/idea/testData/codeInsight/overrideImplement/emptyClassBodyFunctionMethod.kt new file mode 100644 index 00000000000..207375dd207 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/emptyClassBodyFunctionMethod.kt @@ -0,0 +1,6 @@ +// From KT-1254 +trait T { + fun Foo() : (String) -> Unit +} + +class C : T \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/emptyClassBodyFunctionMethod.kt.after b/idea/testData/codeInsight/overrideImplement/emptyClassBodyFunctionMethod.kt.after new file mode 100644 index 00000000000..a45b0a7ee27 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/emptyClassBodyFunctionMethod.kt.after @@ -0,0 +1,10 @@ +// From KT-1254 +trait T { + fun Foo() : (String) -> Unit +} + +class C : T { + override fun Foo(): (String) -> Unit { + throw UnsupportedOperationException() + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java b/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java index 6f649a1b5c3..b7fe069ca3d 100644 --- a/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java @@ -54,6 +54,10 @@ public class OverrideImplementTest extends LightCodeInsightFixtureTestCase { myFixture.setTestDataPath(PluginTestCaseBase.getTestDataPathBase() + "/codeInsight/overrideImplement"); } + public void testEmptyClassBodyFunctionMethod() { + doImplementFileTest(); + } + public void testFunctionMethod() { doImplementFileTest(); }