Don't add initializer to extension property on override/implement
This commit is contained in:
+13
-11
@@ -32,7 +32,6 @@ import com.intellij.psi.util.PsiTreeUtil;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
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.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
@@ -132,12 +131,10 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
|
|||||||
for (DescriptorClassMember selectedElement : selectedElements) {
|
for (DescriptorClassMember selectedElement : selectedElements) {
|
||||||
DeclarationDescriptor descriptor = selectedElement.getDescriptor();
|
DeclarationDescriptor descriptor = selectedElement.getDescriptor();
|
||||||
if (descriptor instanceof SimpleFunctionDescriptor) {
|
if (descriptor instanceof SimpleFunctionDescriptor) {
|
||||||
overridingMembers.add(overrideFunction(file.getProject(),
|
overridingMembers.add(overrideFunction(file.getProject(), (SimpleFunctionDescriptor) descriptor));
|
||||||
(SimpleFunctionDescriptor) descriptor));
|
|
||||||
}
|
}
|
||||||
else if (descriptor instanceof PropertyDescriptor) {
|
else if (descriptor instanceof PropertyDescriptor) {
|
||||||
overridingMembers.add(
|
overridingMembers.add(overrideProperty(file.getProject(), (PropertyDescriptor) descriptor));
|
||||||
overrideProperty(file.getProject(), (PropertyDescriptor) descriptor));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return overridingMembers;
|
return overridingMembers;
|
||||||
@@ -153,15 +150,20 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
|
|||||||
/* copyOverrides = */ true);
|
/* copyOverrides = */ true);
|
||||||
newDescriptor.addOverriddenDescriptor(descriptor);
|
newDescriptor.addOverriddenDescriptor(descriptor);
|
||||||
|
|
||||||
StringBuilder bodyBuilder = new StringBuilder();
|
StringBuilder body = new StringBuilder();
|
||||||
String initializer = CodeInsightUtils.defaultInitializer(descriptor.getType());
|
String defaultInitializer = CodeInsightUtils.defaultInitializer(descriptor.getType());
|
||||||
if (initializer != null) {
|
String initializer = defaultInitializer != null ? " = " + defaultInitializer : " = ?";
|
||||||
bodyBuilder.append(" = ").append(initializer);
|
if (descriptor.getReceiverParameter() != null) {
|
||||||
|
body.append("\nget()");
|
||||||
|
body.append(initializer);
|
||||||
|
if (descriptor.isVar()) {
|
||||||
|
body.append("\nset(value) {}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
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
|
@NotNull
|
||||||
|
|||||||
+1
-1
@@ -4,4 +4,4 @@ trait A {
|
|||||||
|
|
||||||
class B : A {
|
class B : A {
|
||||||
<caret>
|
<caret>
|
||||||
}
|
}
|
||||||
+3
-2
@@ -4,5 +4,6 @@ trait A {
|
|||||||
|
|
||||||
class B : 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();
|
doOverrideFileTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testOverrideExplicitProperty() {
|
public void testOverrideExtensionProperty() {
|
||||||
|
doOverrideFileTest();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testOverrideMutableExtensionProperty() {
|
||||||
doOverrideFileTest();
|
doOverrideFileTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user