Incorrect automatic implementing of extension property has been fixed.

This commit is contained in:
Sergey Lukjanov
2012-05-04 10:40:18 +04:00
parent ba5fadd677
commit 442d09b4e0
@@ -33,6 +33,7 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor;
import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.lang.JetStandardClasses;
import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
@@ -137,6 +138,9 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
else {
bodyBuilder.append("val ");
}
addReceiverParameter(descriptor, bodyBuilder);
bodyBuilder.append(descriptor.getName()).append(" : ").append(DescriptorRenderer.COMPACT.renderTypeWithShortNames(
descriptor.getType()));
String initializer = defaultInitializer(descriptor.getType(), JetStandardLibrary.getInstance());
@@ -189,9 +193,7 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
bodyBuilder.append("> ");
}
if(descriptor.getReceiverParameter().exists()) {
bodyBuilder.append(descriptor.getReceiverParameter().getType()).append(".");
}
addReceiverParameter(descriptor, bodyBuilder);
bodyBuilder.append(descriptor.getName()).append("(");
boolean isAbstractFun = descriptor.getModality() == Modality.ABSTRACT;
@@ -239,6 +241,13 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
return JetPsiFactory.createFunction(project, bodyBuilder.toString());
}
private static void addReceiverParameter(CallableDescriptor descriptor, StringBuilder bodyBuilder) {
ReceiverDescriptor receiverParameter = descriptor.getReceiverParameter();
if (receiverParameter.exists()) {
bodyBuilder.append(receiverParameter.getType()).append(".");
}
}
private static String defaultInitializer(JetType returnType, JetStandardLibrary stdlib) {
if (returnType.isNullable()) {
return "null";