diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/TypeParameterDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/TypeParameterDescriptor.java index dd01df6d884..939104ff740 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/TypeParameterDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/TypeParameterDescriptor.java @@ -73,7 +73,7 @@ public class TypeParameterDescriptor extends DeclarationDescriptorImpl implement this, annotations, false, - "&" + name, + name, Collections.emptyList(), upperBounds); } diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java index f3c8838cae5..55299ca3379 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java @@ -104,12 +104,15 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns if (!returnType.equals(stdlib.getTuple0Type())) { bodyBuilder.append(": ").append(returnType.toString()); } - bodyBuilder.append("{"); + final String initializer = defaultInitializer(returnType, stdlib); if (initializer != null) { - bodyBuilder.append("return " ).append(initializer); + bodyBuilder.append(" = ").append(initializer); } - bodyBuilder.append("}"); + else { + bodyBuilder.append("{").append("throw UnsupportedOperationException()").append("}"); + } + return JetPsiFactory.createFunction(project, bodyBuilder.toString()); } diff --git a/idea/testData/codeInsight/overrideImplement/genericMethod.kt.after b/idea/testData/codeInsight/overrideImplement/genericMethod.kt.after index f55e765fc4e..8ec50fce31e 100644 --- a/idea/testData/codeInsight/overrideImplement/genericMethod.kt.after +++ b/idea/testData/codeInsight/overrideImplement/genericMethod.kt.after @@ -4,7 +4,5 @@ trait G { class GC() : G { - override fun foo(t: Int): Int { - return 0 - } + override fun foo(t: Int): Int = 0 } diff --git a/idea/testData/codeInsight/overrideImplement/javaInterfaceMethod/foo/Impl.kt.after b/idea/testData/codeInsight/overrideImplement/javaInterfaceMethod/foo/Impl.kt.after index f0e3fb14e49..6554a1fc9fb 100644 --- a/idea/testData/codeInsight/overrideImplement/javaInterfaceMethod/foo/Impl.kt.after +++ b/idea/testData/codeInsight/overrideImplement/javaInterfaceMethod/foo/Impl.kt.after @@ -2,7 +2,5 @@ import foo.Intf class Impl(): Intf { - override fun getFooBar(): String? { - return null - } + override fun getFooBar(): String? = null } diff --git a/idea/testData/codeInsight/overrideImplement/javaParameters/foo/Impl.kt.after b/idea/testData/codeInsight/overrideImplement/javaParameters/foo/Impl.kt.after index a20e435f471..da4335ee7f9 100644 --- a/idea/testData/codeInsight/overrideImplement/javaParameters/foo/Impl.kt.after +++ b/idea/testData/codeInsight/overrideImplement/javaParameters/foo/Impl.kt.after @@ -3,5 +3,6 @@ import foo.Intf class Impl(): Intf { override fun fooBar(i: Int, s: Array?, foo: Any?) { + throw UnsupportedOperationException() } } diff --git a/idea/testData/codeInsight/overrideImplement/traitGenericOverride.kt b/idea/testData/codeInsight/overrideImplement/traitGenericOverride.kt new file mode 100644 index 00000000000..b2387d42ad4 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/traitGenericOverride.kt @@ -0,0 +1,7 @@ +trait G { + fun foo(t : T) : T +} + +class GC() : G { + +} \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/traitGenericOverride.kt.after b/idea/testData/codeInsight/overrideImplement/traitGenericOverride.kt.after new file mode 100644 index 00000000000..4ef321e0344 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/traitGenericOverride.kt.after @@ -0,0 +1,10 @@ +trait G { + fun foo(t : T) : T +} + +class GC() : G { + + override fun foo(t: T): T { + throw UnsupportedOperationException() + } +} \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/traitNullableFunction.kt b/idea/testData/codeInsight/overrideImplement/traitNullableFunction.kt new file mode 100644 index 00000000000..e1dcebe7663 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/traitNullableFunction.kt @@ -0,0 +1,7 @@ +trait Some { + fun foo(some : Int?) : Int +} + +class SomeOther : Some { + +} \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/traitNullableFunction.kt.after b/idea/testData/codeInsight/overrideImplement/traitNullableFunction.kt.after new file mode 100644 index 00000000000..5ad1f152481 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/traitNullableFunction.kt.after @@ -0,0 +1,8 @@ +trait Some { + fun foo(some : Int?) : Int +} + +class SomeOther : Some { + + override fun foo(some: Int?): Int = 0 +} \ 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 8d528827964..42d1948e86e 100644 --- a/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java @@ -46,6 +46,14 @@ public class OverrideImplementTest extends LightCodeInsightFixtureTestCase { doFileTest(); } + public void testTraitGenericOverride() { + doFileTest(); + } + + public void testTraitNullableFunction() { + doFileTest(); + } + private void doFileTest() { myFixture.configureByFile(getTestName(true) + ".kt"); doImplement();