Don't add initializer to extension property on override/implement

This commit is contained in:
Alexander Udalov
2014-05-28 20:12:19 +04:00
parent d78d4bc44c
commit a78b7fb31f
6 changed files with 40 additions and 15 deletions
@@ -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
@@ -4,5 +4,6 @@ trait A {
class B : A {
override val String.prop: Int = 0
}
override val String.prop: Int
get() = 0
}
@@ -0,0 +1,7 @@
trait A {
var Int.foo : Double
}
class B : A {
<caret>
}
@@ -0,0 +1,11 @@
trait A {
var Int.foo : Double
}
class B : A {
override var Int.foo: Double
get() = 0.0
set(value) {
}
}
@@ -110,7 +110,11 @@ public final class OverrideImplementTest extends AbstractOverrideImplementTest {
doOverrideFileTest();
}
public void testOverrideExplicitProperty() {
public void testOverrideExtensionProperty() {
doOverrideFileTest();
}
public void testOverrideMutableExtensionProperty() {
doOverrideFileTest();
}