Merge pull request #47 from Frostman/impl-ext-fun-fix
Fix for KT-1888 Incorrect automatic implementing of extension member
This commit is contained in:
@@ -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());
|
||||
@@ -188,6 +192,9 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
|
||||
}
|
||||
bodyBuilder.append("> ");
|
||||
}
|
||||
|
||||
addReceiverParameter(descriptor, bodyBuilder);
|
||||
|
||||
bodyBuilder.append(descriptor.getName()).append("(");
|
||||
boolean isAbstractFun = descriptor.getModality() == Modality.ABSTRACT;
|
||||
StringBuilder delegationBuilder = new StringBuilder();
|
||||
@@ -234,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";
|
||||
|
||||
Reference in New Issue
Block a user