do not try properties named 'invoke' when resolve 'invoke'
This commit is contained in:
@@ -121,8 +121,21 @@ public class CallResolver {
|
|||||||
@NotNull BasicCallResolutionContext context,
|
@NotNull BasicCallResolutionContext context,
|
||||||
@NotNull JetReferenceExpression functionReference,
|
@NotNull JetReferenceExpression functionReference,
|
||||||
@NotNull Name name) {
|
@NotNull Name name) {
|
||||||
|
return resolveCallWithGivenName(context, functionReference, name, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public OverloadResolutionResults<FunctionDescriptor> resolveCallWithGivenName(
|
||||||
|
@NotNull BasicCallResolutionContext context,
|
||||||
|
@NotNull JetReferenceExpression functionReference,
|
||||||
|
@NotNull Name name,
|
||||||
|
boolean allowVariableWithInvoke
|
||||||
|
) {
|
||||||
|
List<CallableDescriptorCollector<? extends CallableDescriptor>> collectors =
|
||||||
|
allowVariableWithInvoke ? CallableDescriptorCollectors.FUNCTIONS_AND_VARIABLES :
|
||||||
|
Collections.<CallableDescriptorCollector<? extends CallableDescriptor>>singletonList(CallableDescriptorCollectors.FUNCTIONS);
|
||||||
List<ResolutionTask<CallableDescriptor, FunctionDescriptor>> tasks =
|
List<ResolutionTask<CallableDescriptor, FunctionDescriptor>> tasks =
|
||||||
TaskPrioritizer.<CallableDescriptor, FunctionDescriptor>computePrioritizedTasks(context, name, functionReference, CallableDescriptorCollectors.FUNCTIONS_AND_VARIABLES);
|
TaskPrioritizer.<CallableDescriptor, FunctionDescriptor>computePrioritizedTasks(context, name, functionReference, collectors);
|
||||||
return doResolveCallOrGetCachedResults(ResolutionResultsCache.FUNCTION_MEMBER_TYPE,
|
return doResolveCallOrGetCachedResults(ResolutionResultsCache.FUNCTION_MEMBER_TYPE,
|
||||||
context, tasks, CallTransformer.FUNCTION_CALL_TRANSFORMER, functionReference);
|
context, tasks, CallTransformer.FUNCTION_CALL_TRANSFORMER, functionReference);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -200,7 +200,8 @@ public class CallTransformer<D extends CallableDescriptor, F extends D> {
|
|||||||
functionCall, context.checkArguments, context.dataFlowInfoForArguments);
|
functionCall, context.checkArguments, context.dataFlowInfoForArguments);
|
||||||
|
|
||||||
// 'invoke' call resolve
|
// 'invoke' call resolve
|
||||||
OverloadResolutionResults<FunctionDescriptor> results = callResolver.resolveCallWithGivenName(basicCallResolutionContext, task.reference, Name.identifier("invoke"));
|
OverloadResolutionResults<FunctionDescriptor> results = callResolver.resolveCallWithGivenName(
|
||||||
|
basicCallResolutionContext, task.reference, Name.identifier("invoke"), false);
|
||||||
Collection<ResolvedCallWithTrace<FunctionDescriptor>> calls = ((OverloadResolutionResultsImpl<FunctionDescriptor>)results).getResultingCalls();
|
Collection<ResolvedCallWithTrace<FunctionDescriptor>> calls = ((OverloadResolutionResultsImpl<FunctionDescriptor>)results).getResultingCalls();
|
||||||
|
|
||||||
return Collections2.transform(calls, new Function<ResolvedCallWithTrace<FunctionDescriptor>, ResolvedCallWithTrace<FunctionDescriptor>>() {
|
return Collections2.transform(calls, new Function<ResolvedCallWithTrace<FunctionDescriptor>, ResolvedCallWithTrace<FunctionDescriptor>>() {
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
trait A
|
||||||
|
|
||||||
|
fun foo(invoke: A.()->Unit, a: A) {
|
||||||
|
a.invoke()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun bar(invoke: Any.()->Any, a: Any) {
|
||||||
|
a.invoke()
|
||||||
|
}
|
||||||
@@ -5983,6 +5983,11 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
|
|||||||
doTest("compiler/testData/diagnostics/tests/resolve/invoke/kt4204-completeNestedCallsForInvoke.kt");
|
doTest("compiler/testData/diagnostics/tests/resolve/invoke/kt4204-completeNestedCallsForInvoke.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("valNamedInvoke.kt")
|
||||||
|
public void testValNamedInvoke() throws Exception {
|
||||||
|
doTest("compiler/testData/diagnostics/tests/resolve/invoke/valNamedInvoke.kt");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/diagnostics/tests/resolve/nestedCalls")
|
@TestMetadata("compiler/testData/diagnostics/tests/resolve/nestedCalls")
|
||||||
|
|||||||
Reference in New Issue
Block a user