From a78b7fb31fb110b31e7541cbe54690f0b3fe9bf3 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 28 May 2014 20:12:19 +0400 Subject: [PATCH] Don't add initializer to extension property on override/implement --- .../OverrideImplementMethodsHandler.java | 24 ++++++++++--------- ...operty.kt => overrideExtensionProperty.kt} | 2 +- ...ter => overrideExtensionProperty.kt.after} | 5 ++-- .../overrideMutableExtensionProperty.kt | 7 ++++++ .../overrideMutableExtensionProperty.kt.after | 11 +++++++++ .../codeInsight/OverrideImplementTest.java | 6 ++++- 6 files changed, 40 insertions(+), 15 deletions(-) rename idea/testData/codeInsight/overrideImplement/{overrideExplicitProperty.kt => overrideExtensionProperty.kt} (97%) rename idea/testData/codeInsight/overrideImplement/{overrideExplicitProperty.kt.after => overrideExtensionProperty.kt.after} (50%) create mode 100644 idea/testData/codeInsight/overrideImplement/overrideMutableExtensionProperty.kt create mode 100644 idea/testData/codeInsight/overrideImplement/overrideMutableExtensionProperty.kt.after diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java index b0b17b4af0c..5ec199d9a05 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideImplementMethodsHandler.java @@ -32,7 +32,6 @@ import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; -import org.jetbrains.jet.lang.descriptors.impl.MutableClassDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.types.JetType; @@ -132,12 +131,10 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns for (DescriptorClassMember selectedElement : selectedElements) { DeclarationDescriptor descriptor = selectedElement.getDescriptor(); if (descriptor instanceof SimpleFunctionDescriptor) { - overridingMembers.add(overrideFunction(file.getProject(), - (SimpleFunctionDescriptor) descriptor)); + overridingMembers.add(overrideFunction(file.getProject(), (SimpleFunctionDescriptor) descriptor)); } else if (descriptor instanceof PropertyDescriptor) { - overridingMembers.add( - overrideProperty(file.getProject(), (PropertyDescriptor) descriptor)); + overridingMembers.add(overrideProperty(file.getProject(), (PropertyDescriptor) descriptor)); } } return overridingMembers; @@ -153,15 +150,20 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns /* copyOverrides = */ true); newDescriptor.addOverriddenDescriptor(descriptor); - StringBuilder bodyBuilder = new StringBuilder(); - String initializer = CodeInsightUtils.defaultInitializer(descriptor.getType()); - if (initializer != null) { - bodyBuilder.append(" = ").append(initializer); + StringBuilder body = new StringBuilder(); + String defaultInitializer = CodeInsightUtils.defaultInitializer(descriptor.getType()); + String initializer = defaultInitializer != null ? " = " + defaultInitializer : " = ?"; + if (descriptor.getReceiverParameter() != null) { + body.append("\nget()"); + body.append(initializer); + if (descriptor.isVar()) { + body.append("\nset(value) {}"); + } } else { - bodyBuilder.append(" = ?"); + body.append(initializer); } - return JetPsiFactory.createProperty(project, OVERRIDE_RENDERER.render(newDescriptor) + bodyBuilder.toString()); + return JetPsiFactory.createProperty(project, OVERRIDE_RENDERER.render(newDescriptor) + body); } @NotNull diff --git a/idea/testData/codeInsight/overrideImplement/overrideExplicitProperty.kt b/idea/testData/codeInsight/overrideImplement/overrideExtensionProperty.kt similarity index 97% rename from idea/testData/codeInsight/overrideImplement/overrideExplicitProperty.kt rename to idea/testData/codeInsight/overrideImplement/overrideExtensionProperty.kt index 8b4f22dcede..53f68c7cf53 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideExplicitProperty.kt +++ b/idea/testData/codeInsight/overrideImplement/overrideExtensionProperty.kt @@ -4,4 +4,4 @@ trait A { class B : A { -} \ No newline at end of file +} diff --git a/idea/testData/codeInsight/overrideImplement/overrideExplicitProperty.kt.after b/idea/testData/codeInsight/overrideImplement/overrideExtensionProperty.kt.after similarity index 50% rename from idea/testData/codeInsight/overrideImplement/overrideExplicitProperty.kt.after rename to idea/testData/codeInsight/overrideImplement/overrideExtensionProperty.kt.after index c85eccb0251..9053c594f93 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideExplicitProperty.kt.after +++ b/idea/testData/codeInsight/overrideImplement/overrideExtensionProperty.kt.after @@ -4,5 +4,6 @@ trait A { class B : A { - override val String.prop: Int = 0 -} \ No newline at end of file + override val String.prop: Int + get() = 0 +} diff --git a/idea/testData/codeInsight/overrideImplement/overrideMutableExtensionProperty.kt b/idea/testData/codeInsight/overrideImplement/overrideMutableExtensionProperty.kt new file mode 100644 index 00000000000..cce7551b75d --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/overrideMutableExtensionProperty.kt @@ -0,0 +1,7 @@ +trait A { + var Int.foo : Double +} + +class B : A { + +} diff --git a/idea/testData/codeInsight/overrideImplement/overrideMutableExtensionProperty.kt.after b/idea/testData/codeInsight/overrideImplement/overrideMutableExtensionProperty.kt.after new file mode 100644 index 00000000000..b485df0483e --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/overrideMutableExtensionProperty.kt.after @@ -0,0 +1,11 @@ +trait A { + var Int.foo : Double +} + +class B : A { + + override var Int.foo: Double + get() = 0.0 + set(value) { + } +} diff --git a/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java b/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java index 0a45e381b5c..ff051f8b675 100644 --- a/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/codeInsight/OverrideImplementTest.java @@ -110,7 +110,11 @@ public final class OverrideImplementTest extends AbstractOverrideImplementTest { doOverrideFileTest(); } - public void testOverrideExplicitProperty() { + public void testOverrideExtensionProperty() { + doOverrideFileTest(); + } + + public void testOverrideMutableExtensionProperty() { doOverrideFileTest(); }