diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorUtil.java index 6c88e27e448..e4bc91d4854 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorUtil.java @@ -83,10 +83,10 @@ public class FunctionDescriptorUtil { return parameterScope; } - public static void initializeFromFunctionType(@NotNull FunctionDescriptorImpl functionDescriptor, @NotNull JetType functionType) { + public static void initializeFromFunctionType(@NotNull FunctionDescriptorImpl functionDescriptor, @NotNull JetType functionType, @NotNull ReceiverDescriptor expectedThisObject) { assert JetStandardClasses.isFunctionType(functionType); functionDescriptor.initialize(JetStandardClasses.getReceiverType(functionType), - ReceiverDescriptor.NO_RECEIVER, + expectedThisObject, Collections.emptyList(), JetStandardClasses.getValueParameters(functionDescriptor, functionType), JetStandardClasses.getReturnTypeFromFunctionType(functionType), diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableAsFunctionDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableAsFunctionDescriptor.java index fb9b6fcabae..59670106531 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableAsFunctionDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableAsFunctionDescriptor.java @@ -14,7 +14,7 @@ public class VariableAsFunctionDescriptor extends FunctionDescriptorImpl { JetType outType = variableDescriptor.getOutType(); assert outType != null; VariableAsFunctionDescriptor result = new VariableAsFunctionDescriptor(variableDescriptor); - FunctionDescriptorUtil.initializeFromFunctionType(result, outType); + FunctionDescriptorUtil.initializeFromFunctionType(result, outType, variableDescriptor.getExpectedThisObject()); return result; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java index 68effdfba5e..8a5bf13be62 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java @@ -185,7 +185,7 @@ public class CallResolver { } FunctionDescriptorImpl functionDescriptor = new ExpressionAsFunctionDescriptor(scope.getContainingDeclaration(), "[for expression " + calleeExpression.getText() + "]"); - FunctionDescriptorUtil.initializeFromFunctionType(functionDescriptor, calleeType); + FunctionDescriptorUtil.initializeFromFunctionType(functionDescriptor, calleeType, NO_RECEIVER); ResolvedCallImpl resolvedCall = ResolvedCallImpl.create(functionDescriptor); resolvedCall.setReceiverArgument(call.getExplicitReceiver()); prioritizedTasks = Collections.singletonList(new ResolutionTask( diff --git a/compiler/testData/checkerWithErrorTypes/quick/regressions/kt604.jet b/compiler/testData/checkerWithErrorTypes/quick/regressions/kt604.jet new file mode 100644 index 00000000000..02f079e6900 --- /dev/null +++ b/compiler/testData/checkerWithErrorTypes/quick/regressions/kt604.jet @@ -0,0 +1,20 @@ +// KT-604 Internal frontend error + +trait ChannelPipeline { + +} + +class DefaultChannelPipeline() : ChannelPipeline { +} + +trait ChannelPipelineFactory{ + fun getPipeline() : ChannelPipeline +} + +class StandardPipelineFactory(val config: fun ChannelPipeline.():Unit) : ChannelPipelineFactory { + override fun getPipeline() : ChannelPipeline { + val pipeline = DefaultChannelPipeline() + pipeline.config () + return pipeline + } +}