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 JetReferenceExpression functionReference,
|
||||
@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 =
|
||||
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,
|
||||
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);
|
||||
|
||||
// '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();
|
||||
|
||||
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");
|
||||
}
|
||||
|
||||
@TestMetadata("valNamedInvoke.kt")
|
||||
public void testValNamedInvoke() throws Exception {
|
||||
doTest("compiler/testData/diagnostics/tests/resolve/invoke/valNamedInvoke.kt");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@TestMetadata("compiler/testData/diagnostics/tests/resolve/nestedCalls")
|
||||
|
||||
Reference in New Issue
Block a user