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.descriptors.*;
|
||||||
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.resolve.scopes.receivers.ReceiverDescriptor;
|
||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
import org.jetbrains.jet.lang.types.lang.JetStandardClasses;
|
import org.jetbrains.jet.lang.types.lang.JetStandardClasses;
|
||||||
import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
|
import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
|
||||||
@@ -137,6 +138,9 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
|
|||||||
else {
|
else {
|
||||||
bodyBuilder.append("val ");
|
bodyBuilder.append("val ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
addReceiverParameter(descriptor, bodyBuilder);
|
||||||
|
|
||||||
bodyBuilder.append(descriptor.getName()).append(" : ").append(DescriptorRenderer.COMPACT.renderTypeWithShortNames(
|
bodyBuilder.append(descriptor.getName()).append(" : ").append(DescriptorRenderer.COMPACT.renderTypeWithShortNames(
|
||||||
descriptor.getType()));
|
descriptor.getType()));
|
||||||
String initializer = defaultInitializer(descriptor.getType(), JetStandardLibrary.getInstance());
|
String initializer = defaultInitializer(descriptor.getType(), JetStandardLibrary.getInstance());
|
||||||
@@ -188,6 +192,9 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
|
|||||||
}
|
}
|
||||||
bodyBuilder.append("> ");
|
bodyBuilder.append("> ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
addReceiverParameter(descriptor, bodyBuilder);
|
||||||
|
|
||||||
bodyBuilder.append(descriptor.getName()).append("(");
|
bodyBuilder.append(descriptor.getName()).append("(");
|
||||||
boolean isAbstractFun = descriptor.getModality() == Modality.ABSTRACT;
|
boolean isAbstractFun = descriptor.getModality() == Modality.ABSTRACT;
|
||||||
StringBuilder delegationBuilder = new StringBuilder();
|
StringBuilder delegationBuilder = new StringBuilder();
|
||||||
@@ -234,6 +241,13 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
|
|||||||
return JetPsiFactory.createFunction(project, bodyBuilder.toString());
|
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) {
|
private static String defaultInitializer(JetType returnType, JetStandardLibrary stdlib) {
|
||||||
if (returnType.isNullable()) {
|
if (returnType.isNullable()) {
|
||||||
return "null";
|
return "null";
|
||||||
|
|||||||
Reference in New Issue
Block a user