@Override public <F extends CallableDescriptor> void check( @NotNull ResolvedCall<F> resolvedCall, @NotNull BasicCallResolutionContext context) { JetExpression expression = context.call.getCalleeExpression(); if (expression == null) { return; } // checking that only invoke or inlinable extension called on function parameter CallableDescriptor targetDescriptor = resolvedCall.getResultingDescriptor(); checkCallWithReceiver( context, targetDescriptor, resolvedCall.getDispatchReceiver(), expression); checkCallWithReceiver( context, targetDescriptor, resolvedCall.getExtensionReceiver(), expression); if (inlinableParameters.contains(targetDescriptor)) { if (!isInsideCall(expression)) { context.trace.report(Errors.USAGE_IS_NOT_INLINABLE.on(expression, expression, descriptor)); } } for (Map.Entry<ValueParameterDescriptor, ResolvedValueArgument> entry : resolvedCall.getValueArguments().entrySet()) { ResolvedValueArgument value = entry.getValue(); ValueParameterDescriptor valueDescriptor = entry.getKey(); if (!(value instanceof DefaultValueArgument)) { for (ValueArgument argument : value.getArguments()) { checkValueParameter(context, targetDescriptor, argument, valueDescriptor); } } } checkVisibility(targetDescriptor, expression, context); checkRecursion(context, targetDescriptor, expression); }