From b2990b74ef6f5b621037387fcbcd7dfdccec4bec Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 4 Nov 2011 18:20:56 +0100 Subject: [PATCH] one more test; generate 'return' for primitive type return values --- .../plugin/codeInsight/ImplementMethodsHandler.java | 11 ++++++++++- .../codeInsight/overrideImplement/genericMethod.kt | 7 +++++++ .../overrideImplement/genericMethod.kt.after | 10 ++++++++++ .../plugin/codeInsight/OverrideImplementTest.java | 12 +++++++++++- 4 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 idea/testData/codeInsight/overrideImplement/genericMethod.kt create mode 100644 idea/testData/codeInsight/overrideImplement/genericMethod.kt.after diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/ImplementMethodsHandler.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/ImplementMethodsHandler.java index fb1b8eb80d3..921ff3a4938 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/ImplementMethodsHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/ImplementMethodsHandler.java @@ -115,13 +115,22 @@ public class ImplementMethodsHandler implements LanguageCodeInsightActionHandler } bodyBuilder.append(")"); final JetType returnType = descriptor.getReturnType(); - if (!returnType.equals(JetStandardLibrary.getJetStandardLibrary(project).getTuple0Type())) { + final JetStandardLibrary stdlib = JetStandardLibrary.getJetStandardLibrary(project); + if (!returnType.equals(stdlib.getTuple0Type())) { bodyBuilder.append(": ").append(returnType.toString()); } bodyBuilder.append("{"); if (returnType.isNullable()) { bodyBuilder.append("return null"); } + else if (returnType.equals(stdlib.getIntType()) || returnType.equals(stdlib.getLongType()) || + returnType.equals(stdlib.getShortType()) || returnType.equals(stdlib.getByteType()) || + returnType.equals(stdlib.getFloatType()) || returnType.equals(stdlib.getDoubleType())) { + bodyBuilder.append("return 0"); + } + else if (returnType.equals(stdlib.getBooleanType())) { + bodyBuilder.append("return false"); + } bodyBuilder.append("}"); return JetPsiFactory.createFunction(project, bodyBuilder.toString()); } diff --git a/idea/testData/codeInsight/overrideImplement/genericMethod.kt b/idea/testData/codeInsight/overrideImplement/genericMethod.kt new file mode 100644 index 00000000000..3c7e6d8de5b --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/genericMethod.kt @@ -0,0 +1,7 @@ +trait G { + fun foo(t : T) : T +} + +class GC() : G { + +} diff --git a/idea/testData/codeInsight/overrideImplement/genericMethod.kt.after b/idea/testData/codeInsight/overrideImplement/genericMethod.kt.after new file mode 100644 index 00000000000..f55e765fc4e --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/genericMethod.kt.after @@ -0,0 +1,10 @@ +trait G { + fun foo(t : T) : T +} + +class GC() : G { + + override fun foo(t: Int): Int { + return 0 + } +} diff --git a/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java b/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java index de80e8a49a6..c821b510dd6 100644 --- a/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java @@ -37,10 +37,21 @@ public class OverrideImplementTest extends LightCodeInsightFixtureTestCase { public void testJavaParameters() { doDirectoryTest(); } + + public void testGenericMethod() { + myFixture.configureByFile("genericMethod.kt"); + doImplement(); + myFixture.checkResultByFile("genericMethod.kt.after"); + } private void doDirectoryTest() { myFixture.copyDirectoryToProject(getTestName(true), ""); myFixture.configureFromTempProjectFile("foo/Impl.kt"); + doImplement(); + myFixture.checkResultByFile(getTestName(true) + "/foo/Impl.kt.after"); + } + + private void doImplement() { final PsiElement elementAtCaret = myFixture.getFile().findElementAt(myFixture.getEditor().getCaretModel().getOffset()); final JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(elementAtCaret, JetClassOrObject.class); final Set descriptors = ImplementMethodsHandler.collectMethodsToImplement(classOrObject); @@ -52,6 +63,5 @@ public class OverrideImplementTest extends LightCodeInsightFixtureTestCase { ImplementMethodsHandler.membersFromDescriptors(descriptors)); } }.execute(); - myFixture.checkResultByFile(getTestName(true) + "/foo/Impl.kt.after"); } }