void AddImportExtensionMethodCompletionData(CompletionDataList result, CSharpSyntaxContext ctx, INamedTypeSymbol fromType, ITypeSymbol receiverType, Dictionary <INamespaceSymbol, List <ImportSymbolCompletionData> > extMethodDict)
        {
            try {
                foreach (var extMethod in fromType.GetMembers().OfType <IMethodSymbol> ().Where(method => method.IsExtensionMethod))
                {
                    var reducedMethod = extMethod.ReduceExtensionMethod(receiverType);
                    if (reducedMethod != null)
                    {
                        if (!extMethodDict.TryGetValue(fromType.ContainingNamespace, out var importSymbolList))
                        {
                            extMethodDict.Add(fromType.ContainingNamespace, importSymbolList = new List <ImportSymbolCompletionData> ());
                        }

                        var newData = new ImportSymbolCompletionData(this, ctx, reducedMethod, false);
                        ImportSymbolCompletionData existingItem = null;
                        foreach (var data in importSymbolList)
                        {
                            if (data.Symbol.Name == extMethod.Name)
                            {
                                existingItem = data;
                                break;
                            }
                        }

                        if (existingItem != null)
                        {
                            existingItem.AddOverload(newData);
                        }
                        else
                        {
                            result.Add(newData);
                            importSymbolList.Add(newData);
                        }
                    }
                }
            } catch (Exception e) {
                LoggingService.LogError("Exception while AddImportExtensionMethodCompletionData", e);
            }
        }