/** * Check that function or property with the given qualified name can be resolved in given scope * and called on given receiver * * @param callableFQN * @param project * @param scope * @return */ public static List<CallableDescriptor> canFindSuitableCall( @NotNull FqName callableFQN, @NotNull Project project, @NotNull JetExpression receiverExpression, @NotNull JetType receiverType, @NotNull JetScope scope) { JetImportDirective importDirective = JetPsiFactory.createImportDirective(project, callableFQN.getFqName()); Collection<? extends DeclarationDescriptor> declarationDescriptors = ImportsResolver.analyseImportReference(importDirective, scope, new BindingTraceContext()); List<CallableDescriptor> callableExtensionDescriptors = new ArrayList<CallableDescriptor>(); ReceiverDescriptor receiverDescriptor = new ExpressionReceiver(receiverExpression, receiverType); for (DeclarationDescriptor declarationDescriptor : declarationDescriptors) { if (declarationDescriptor instanceof CallableDescriptor) { CallableDescriptor callableDescriptor = (CallableDescriptor) declarationDescriptor; if (checkIsExtensionCallable(receiverDescriptor, callableDescriptor)) { callableExtensionDescriptors.add(callableDescriptor); } } } return callableExtensionDescriptors; }