Fix for KT-14201: UnsupportedOperationException: Don't know how to generate outer expression for anonymous object with invoke and non-trivial closure
#KT-14201 Fixed
This commit is contained in:
@@ -49,10 +49,7 @@ import org.jetbrains.kotlin.resolve.BindingContext;
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils;
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
||||
import org.jetbrains.kotlin.resolve.calls.callUtil.CallUtilKt;
|
||||
import org.jetbrains.kotlin.resolve.calls.model.DefaultValueArgument;
|
||||
import org.jetbrains.kotlin.resolve.calls.model.ExpressionValueArgument;
|
||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall;
|
||||
import org.jetbrains.kotlin.resolve.calls.model.VarargValueArgument;
|
||||
import org.jetbrains.kotlin.resolve.calls.model.*;
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt;
|
||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin;
|
||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKt;
|
||||
@@ -1220,8 +1217,10 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
||||
else if (descriptor instanceof CallableMemberDescriptor) {
|
||||
ResolvedCall<? extends CallableDescriptor> call = CallUtilKt.getResolvedCall(expr, bindingContext);
|
||||
if (call != null) {
|
||||
lookupReceiver(call.getDispatchReceiver());
|
||||
lookupReceiver(call.getExtensionReceiver());
|
||||
lookupReceivers(call);
|
||||
}
|
||||
if (call instanceof VariableAsFunctionResolvedCall) {
|
||||
lookupReceivers(((VariableAsFunctionResolvedCall) call).getVariableCall());
|
||||
}
|
||||
}
|
||||
else if (descriptor instanceof VariableDescriptor) {
|
||||
@@ -1234,6 +1233,11 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
||||
}
|
||||
}
|
||||
|
||||
private void lookupReceivers(@NotNull ResolvedCall<? extends CallableDescriptor> call) {
|
||||
lookupReceiver(call.getDispatchReceiver());
|
||||
lookupReceiver(call.getExtensionReceiver());
|
||||
}
|
||||
|
||||
private void lookupReceiver(@Nullable ReceiverValue value) {
|
||||
if (value instanceof ImplicitReceiver) {
|
||||
if (value instanceof ExtensionReceiver) {
|
||||
|
||||
Reference in New Issue
Block a user