Beispiel #1
0
 bool ShowInsight(
     int caretOffset,
     CSharpCompletionContext completionContext,
     CSharpCompletionDataFactory completionFactory,
     char completionChar)
 {
     if (CodeCompletionOptions.InsightEnabled)
     {
         // Method Insight
         var pce = new CSharpParameterCompletionEngine(
             completionContext.Document,
             completionContext.CompletionContextProvider,
             completionFactory,
             completionContext.ProjectContent,
             completionContext.TypeResolveContextAtCaret
             );
         var newInsight = pce.GetParameterDataProvider(caretOffset, completionChar) as CSharpMethodInsight;
         if (newInsight != null && newInsight.items.Count > 0)
         {
             newInsight.UpdateHighlightedParameter(pce);
             newInsight.Show();
             return(true);
         }
     }
     return(false);
 }
Beispiel #2
0
//			CompletionDataList result = new ProjectDomCompletionDataList ();
//			// "var o = new " needs special treatment.
//			if (returnType == null && returnTypeUnresolved != null && returnTypeUnresolved.FullName == "var")
//				returnType = returnTypeUnresolved = DomReturnType.Object;
//
//			//	ExpressionContext.TypeExpressionContext tce = context as ExpressionContext.TypeExpressionContext;
//
//			CompletionDataCollector col = new CompletionDataCollector (this, dom, result, Document.CompilationUnit, callingType, location);
//			IType type = null;
//			if (returnType != null)
//				type = dom.GetType (returnType);
//			if (type == null)
//				type = dom.SearchType (Document.CompilationUnit, callingType, location, returnTypeUnresolved);
//
//			// special handling for nullable types: Bug 674516 - new completion for nullables should not include "Nullable"
//			if (type is InstantiatedType && ((InstantiatedType)type).UninstantiatedType.FullName == "System.Nullable" && ((InstantiatedType)type).GenericParameters.Count == 1) {
//				var genericParameter = ((InstantiatedType)type).GenericParameters [0];
//				returnType = returnTypeUnresolved = Document.CompilationUnit.ShortenTypeName (genericParameter, location);
//				type = dom.SearchType (Document.CompilationUnit, callingType, location, genericParameter);
//			}
//
//			if (type == null || !(type.IsAbstract || type.ClassType == ClassType.Interface)) {
//				if (type == null || type.ConstructorCount == 0 || type.Methods.Any (c => c.IsConstructor && c.IsAccessibleFrom (dom, callingType, type, callingType != null && dom.GetInheritanceTree (callingType).Any (x => x.FullName == type.FullName)))) {
//					if (returnTypeUnresolved != null) {
//						col.FullyQualify = true;
//						CompletionData unresovedCompletionData = col.Add (returnTypeUnresolved);
//						col.FullyQualify = false;
//						// don't set default completion string for arrays, since it interferes with:
//						// string[] arr = new string[] vs new { "a"}
//						if (returnTypeUnresolved.ArrayDimensions == 0)
//							result.DefaultCompletionString = StripGenerics (unresovedCompletionData.CompletionText);
//					} else {
//						CompletionData unresovedCompletionData = col.Add (returnType);
//						if (returnType.ArrayDimensions == 0)
//							result.DefaultCompletionString = StripGenerics (unresovedCompletionData.CompletionText);
//					}
//				}
//			}
//
//			//				if (tce != null && tce.Type != null) {
//			//					result.DefaultCompletionString = StripGenerics (col.AddCompletionData (result, tce.Type).CompletionString);
//			//				}
//			//			else {
//			//			}
//			if (type == null)
//				return result;
//			HashSet<string > usedNamespaces = new HashSet<string> (GetUsedNamespaces ());
//			if (type.FullName == DomReturnType.Object.FullName)
//				AddPrimitiveTypes (col);
//
//			foreach (IType curType in dom.GetSubclasses (type)) {
//				if (context != null && context.FilterEntry (curType))
//					continue;
//				if ((curType.TypeModifier & TypeModifier.HasOnlyHiddenConstructors) == TypeModifier.HasOnlyHiddenConstructors)
//					continue;
//				if (usedNamespaces.Contains (curType.Namespace)) {
//					if (curType.ConstructorCount > 0) {
//						if (!(curType.Methods.Any (c => c.IsConstructor && c.IsAccessibleFrom (dom, curType, callingType, callingType != null && dom.GetInheritanceTree (callingType).Any (x => x.FullName == curType.FullName)))))
//							continue;
//					}
//					col.Add (curType);
//				} else {
//					string nsName = curType.Namespace;
//					int idx = nsName.IndexOf ('.');
//					if (idx >= 0)
//						nsName = nsName.Substring (0, idx);
//					col.Add (new Namespace (nsName));
//				}
//			}
//
//			// add aliases
//			if (returnType != null) {
//				foreach (IUsing u in Document.CompilationUnit.Usings) {
//					foreach (KeyValuePair<string, IReturnType> alias in u.Aliases) {
//						if (alias.Value.ToInvariantString () == returnType.ToInvariantString ())
//							result.Add (alias.Key, "md-class");
//					}
//				}
//			}
//
//			return result;
//		}

//		IEnumerable<ICompletionData> GetDefineCompletionData ()
//		{
//			if (Document.Project == null)
//				yield break;
//
//			var symbols = new Dictionary<string, string> ();
//			var cp = new ProjectDomCompletionDataList ();
//			foreach (DotNetProjectConfiguration conf in Document.Project.Configurations) {
//				var cparams = conf.CompilationParameters as CSharpCompilerParameters;
//				if (cparams != null) {
//					string[] syms = cparams.DefineSymbols.Split (';');
//					foreach (string s in syms) {
//						string ss = s.Trim ();
//						if (ss.Length > 0 && !symbols.ContainsKey (ss)) {
//							symbols [ss] = ss;
//							yield return factory.CreateLiteralCompletionData (ss);
//						}
//					}
//				}
//			}
//		}

        public override ParameterDataProvider HandleParameterCompletion(CodeCompletionContext completionContext, char completionChar)
        {
            if (!EnableCodeCompletion)
            {
                return(null);
            }
            if (Unit == null || CSharpUnresolvedFile == null)
            {
                return(null);
            }
            try {
                var engine = new CSharpParameterCompletionEngine(
                    TextEditorData.Document,
                    typeSystemSegmentTree,
                    this,
                    Document.GetProjectContext(),
                    CSharpUnresolvedFile.GetTypeResolveContext(Document.Compilation, document.Editor.Caret.Location) as CSharpTypeResolveContext
                    );
                return(engine.GetParameterDataProvider(completionContext.TriggerOffset, completionChar) as ParameterDataProvider);
            } catch (Exception e) {
                LoggingService.LogError("Unexpected parameter completion exception." + Environment.NewLine +
                                        "FileName: " + Document.FileName + Environment.NewLine +
                                        "Position: line=" + completionContext.TriggerLine + " col=" + completionContext.TriggerLineOffset + Environment.NewLine +
                                        "Line text: " + Document.Editor.GetLineText(completionContext.TriggerLine),
                                        e);
                return(null);
            } finally {
                //			if (timer != null)
                //				timer.Dispose ();
            }
        }
Beispiel #3
0
        static int GetIndex(string text)
        {
            var editorText = new StringBuilder();
            int trigger = 0, end = 0;

            for (int i = 0; i < text.Length; i++)
            {
                if (text[i] == '@')
                {
                    trigger = editorText.Length;
                    continue;
                }
                if (text[i] == '$')
                {
                    end = editorText.Length;
                    continue;
                }
                editorText.Append(text [i]);
            }

            var doc         = new ReadOnlyDocument(editorText.ToString());
            var pctx        = new CSharpProjectContent();
            var rctx        = new CSharpTypeResolveContext(pctx.CreateCompilation().MainAssembly);
            var ctxProvider = new DefaultCompletionContextProvider(doc, new CSharpUnresolvedFile());
            var engine      = new CSharpParameterCompletionEngine(doc, ctxProvider, new ParameterCompletionTests.TestFactory(pctx), pctx, rctx);

            return(engine.GetCurrentParameterIndex(trigger, end));
        }
        public void UpdateHighlightedParameter(CSharpParameterCompletionEngine pce)
        {
            int parameterIndex = pce.GetCurrentParameterIndex(window != null ? window.StartOffset : startOffset, editor.Caret.Offset);

            if (parameterIndex < 0 && window != null)
            {
                window.Close();
            }
            else
            {
                if (window == null || parameterIndex > ((CSharpInsightItem)window.SelectedItem).Method.Parameters.Count)
                {
                    var newItem = items.FirstOrDefault(i => parameterIndex <= i.Method.Parameters.Count);
                    if (newItem != null)
                    {
                        if (window != null)
                        {
                            window.SelectedItem = newItem;
                        }
                        else
                        {
                            initiallySelectedItem = newItem;
                        }
                    }
                }
                if (parameterIndex > 0)
                {
                    parameterIndex--;                     // NR returns 1-based parameter index
                }
                foreach (var item in items)
                {
                    item.HighlightParameter(parameterIndex);
                }
            }
        }
Beispiel #5
0
        internal static IParameterDataProvider CreateProvider(string text)
        {
            string parsedText;
            string editorText;
            int    cursorPosition = text.IndexOf('$');
            int    endPos         = text.IndexOf('$', cursorPosition + 1);

            if (endPos == -1)
            {
                parsedText = editorText = text.Substring(0, cursorPosition) + text.Substring(cursorPosition + 1);
            }
            else
            {
                parsedText     = text.Substring(0, cursorPosition) + new string (' ', endPos - cursorPosition) + text.Substring(endPos + 1);
                editorText     = text.Substring(0, cursorPosition) + text.Substring(cursorPosition + 1, endPos - cursorPosition - 1) + text.Substring(endPos + 1);
                cursorPosition = endPos - 1;
            }
            var doc = new ReadOnlyDocument(editorText);

            IProjectContent pctx = new CSharpProjectContent();

            pctx = pctx.AddAssemblyReferences(new [] { CecilLoaderTests.Mscorlib, CecilLoaderTests.SystemCore });

            var compilationUnit = new CSharpParser().Parse(parsedText, "program.cs");

            var parsedFile = compilationUnit.ToTypeSystem();

            pctx = pctx.UpdateProjectContent(null, parsedFile);
            var cmp = pctx.CreateCompilation();
            var loc = doc.GetLocation(cursorPosition);

            var engine = new CSharpParameterCompletionEngine(doc, new TestFactory(pctx));

            var rctx = new CSharpTypeResolveContext(cmp.MainAssembly);

            rctx = rctx.WithUsingScope(parsedFile.GetUsingScope(loc).Resolve(cmp));
            var curDef = parsedFile.GetInnermostTypeDefinition(loc);

            if (curDef != null)
            {
                rctx = rctx.WithCurrentTypeDefinition(curDef.Resolve(rctx).GetDefinition());
                var curMember = parsedFile.GetMember(loc);
                if (curMember != null)
                {
                    rctx = rctx.WithCurrentMember(curMember.CreateResolved(rctx));
                }
            }
            engine.ctx = rctx;

            engine.CSharpParsedFile = parsedFile;
            engine.ProjectContent   = pctx;
            engine.Unit             = compilationUnit;

            return(engine.GetParameterDataProvider(cursorPosition, doc.GetCharAt(cursorPosition - 1)));
        }
Beispiel #6
0
        public override int GetCurrentParameterIndex(int startOffset)
        {
            var engine = new CSharpParameterCompletionEngine(
                TextEditorData.Document,
                typeSystemSegmentTree,
                this,
                Document.GetProjectContext(),
                CSharpUnresolvedFile.GetTypeResolveContext(Document.Compilation, document.Editor.Caret.Location) as CSharpTypeResolveContext
                );

            return(engine.GetCurrentParameterIndex(startOffset, document.Editor.Caret.Offset));
        }
Beispiel #7
0
        public override bool GetParameterCompletionCommandOffset(out int cpos)
        {
            var engine = new CSharpParameterCompletionEngine(
                TextEditorData.Document,
                typeSystemSegmentTree,
                this,
                Document.GetProjectContext(),
                CSharpUnresolvedFile.GetTypeResolveContext(Document.Compilation, document.Editor.Caret.Location) as CSharpTypeResolveContext
                );

            engine.SetOffset(document.Editor.Caret.Offset);
            return(engine.GetParameterCompletionCommandOffset(out cpos));
        }
Beispiel #8
0
        public override int GuessBestMethodOverload(IParameterDataProvider provider, int currentOverload)
        {
            var engine = new CSharpParameterCompletionEngine(
                TextEditorData.Document,
                typeSystemSegmentTree,
                this,
                Document.GetProjectContext(),
                CSharpUnresolvedFile.GetTypeResolveContext(Document.Compilation, document.Editor.Caret.Location) as CSharpTypeResolveContext
                );
            List <string> list;
            int           cparam = engine.GetCurrentParameterIndex(provider.StartOffset, document.Editor.Caret.Offset, out list);

            if (cparam > provider.GetParameterCount(currentOverload) && !provider.AllowParameterList(currentOverload) || !HasAllUsedParameters(provider, list, currentOverload))
            {
                // Look for an overload which has more parameters
                int bestOverload   = -1;
                int bestParamCount = int.MaxValue;
                for (int n = 0; n < provider.Count; n++)
                {
                    int pc = provider.GetParameterCount(n);
                    if (pc < bestParamCount && pc >= cparam)
                    {
                        if (HasAllUsedParameters(provider, list, n))
                        {
                            bestOverload   = n;
                            bestParamCount = pc;
                        }
                    }
                }
                if (bestOverload == -1)
                {
                    for (int n = 0; n < provider.Count; n++)
                    {
                        if (provider.AllowParameterList(n) && HasAllUsedParameters(provider, list, n))
                        {
                            bestOverload = n;
                            break;
                        }
                    }
                }
                return(bestOverload);
            }
            return(-1);
        }
        void window_CaretPositionChanged(object sender, EventArgs e)
        {
            var completionContext = CSharpCompletionContext.Get(editor);

            if (completionContext == null)
            {
                window.Close();
                return;
            }
            var completionFactory = new CSharpCompletionDataFactory(completionContext, new CSharpResolver(completionContext.TypeResolveContextAtCaret));
            var pce = new CSharpParameterCompletionEngine(
                editor.Document,
                completionContext.CompletionContextProvider,
                completionFactory,
                completionContext.ProjectContent,
                completionContext.TypeResolveContextAtCaret
                );

            UpdateHighlightedParameter(pce);
        }
Beispiel #10
0
        public CodeCompletionResult GetMethodCompletion(IDocument document, int offset, bool controlSpace)
        {
            var result = new CodeCompletionResult();

            if (String.IsNullOrEmpty(document.FileName))
            {
                return(result);
            }

            var completionContext = new CSharpCompletionContext(document, offset, projectContent, null, null, null);

            var completionFactory = new CSharpCompletionDataFactory(completionContext.TypeResolveContextAtCaret, completionContext);
            var cce = new CSharpCompletionEngine(
                completionContext.Document,
                completionContext.CompletionContextProvider,
                completionFactory,
                completionContext.ProjectContent,
                completionContext.TypeResolveContextAtCaret
                );

            cce.EolMarker        = Environment.NewLine;
            cce.FormattingPolicy = FormattingOptionsFactory.CreateSharpDevelop();
            var completionChar = completionContext.Document.GetCharAt(completionContext.Offset - 1);
            var pce            = new CSharpParameterCompletionEngine(
                completionContext.Document,
                completionContext.CompletionContextProvider,
                completionFactory,
                completionContext.ProjectContent,
                completionContext.TypeResolveContextAtCaret
                );

            var parameterDataProvider = pce.GetParameterDataProvider(completionContext.Offset, completionChar);

            result.OverloadProvider = parameterDataProvider as IOverloadProvider;
            return(result);
        }
Beispiel #11
0
        public CodeCompletionResult GetCompletions(IDocument document, int offset, bool controlSpace, string usings)
        {
            var result = new CodeCompletionResult();

            if (String.IsNullOrEmpty(document.FileName))
            {
                return(result);
            }

            var completionContext = new CSharpCompletionContext(document, offset, projectContent, usings);

            var completionFactory = new CSharpCompletionDataFactory(completionContext.TypeResolveContextAtCaret, completionContext);
            var cce = new CSharpCompletionEngine(
                completionContext.Document,
                completionContext.CompletionContextProvider,
                completionFactory,
                completionContext.ProjectContent,
                completionContext.TypeResolveContextAtCaret
                );

            cce.EolMarker        = Environment.NewLine;
            cce.FormattingPolicy = FormattingOptionsFactory.CreateSharpDevelop();


            var completionChar = completionContext.Document.GetCharAt(completionContext.Offset - 1);
            int startPos, triggerWordLength;
            IEnumerable <ICSharpCode.NRefactory.Completion.ICompletionData> completionData;

            if (controlSpace)
            {
                if (!cce.TryGetCompletionWord(completionContext.Offset, out startPos, out triggerWordLength))
                {
                    startPos          = completionContext.Offset;
                    triggerWordLength = 0;
                }
                completionData = cce.GetCompletionData(startPos, true);
                //this outputs tons of available entities
                //if (triggerWordLength == 0)
                //    completionData = completionData.Concat(cce.GetImportCompletionData(startPos));
            }
            else
            {
                startPos = completionContext.Offset;

                if (char.IsLetterOrDigit(completionChar) || completionChar == '_')
                {
                    if (startPos > 1 && char.IsLetterOrDigit(completionContext.Document.GetCharAt(startPos - 2)))
                    {
                        return(result);
                    }
                    completionData = cce.GetCompletionData(startPos, false);
                    startPos--;
                    triggerWordLength = 1;
                }
                else
                {
                    completionData    = cce.GetCompletionData(startPos, false);
                    triggerWordLength = 0;
                }
            }

            result.TriggerWordLength = triggerWordLength;
            result.TriggerWord       = completionContext.Document.GetText(completionContext.Offset - triggerWordLength, triggerWordLength);
            Debug.Print("Trigger word: '{0}'", result.TriggerWord);

            //cast to AvalonEdit completion data and add to results
            foreach (var completion in completionData)
            {
                var cshellCompletionData = completion as CompletionData;
                if (cshellCompletionData != null)
                {
                    cshellCompletionData.TriggerWord       = result.TriggerWord;
                    cshellCompletionData.TriggerWordLength = result.TriggerWordLength;
                    result.CompletionData.Add(cshellCompletionData);
                }
            }

            //method completions
            if (!controlSpace)
            {
                // Method Insight
                var pce = new CSharpParameterCompletionEngine(
                    completionContext.Document,
                    completionContext.CompletionContextProvider,
                    completionFactory,
                    completionContext.ProjectContent,
                    completionContext.TypeResolveContextAtCaret
                    );

                var parameterDataProvider = pce.GetParameterDataProvider(completionContext.Offset, completionChar);
                result.OverloadProvider = parameterDataProvider as IOverloadProvider;
            }

            return(result);
        }
        bool ShowCompletion(ITextEditor editor, char completionChar, bool ctrlSpace)
        {
            CSharpCompletionContext completionContext;

            if (fileContent == null)
            {
                completionContext = CSharpCompletionContext.Get(editor);
            }
            else
            {
                completionContext = CSharpCompletionContext.Get(editor, context, currentLocation, fileContent);
            }
            if (completionContext == null)
            {
                return(false);
            }

            int caretOffset;

            if (fileContent == null)
            {
                caretOffset     = editor.Caret.Offset;
                currentLocation = editor.Caret.Location;
            }
            else
            {
                caretOffset = completionContext.Document.GetOffset(currentLocation);
            }

            var completionFactory = new CSharpCompletionDataFactory(completionContext, new CSharpResolver(completionContext.TypeResolveContextAtCaret));

            CSharpCompletionEngine cce = new CSharpCompletionEngine(
                completionContext.Document,
                completionContext.CompletionContextProvider,
                completionFactory,
                completionContext.ProjectContent,
                completionContext.TypeResolveContextAtCaret
                );
            var formattingOptions = CSharpFormattingPolicies.Instance.GetProjectOptions(completionContext.Compilation.GetProject());

            cce.FormattingPolicy = formattingOptions.OptionsContainer.GetEffectiveOptions();
            cce.EolMarker        = DocumentUtilities.GetLineTerminator(completionContext.Document, currentLocation.Line);

            cce.IndentString = editor.Options.IndentationString;
            int startPos, triggerWordLength;
            IEnumerable <ICompletionData> completionData;

            if (ctrlSpace)
            {
                if (!cce.TryGetCompletionWord(caretOffset, out startPos, out triggerWordLength))
                {
                    startPos          = caretOffset;
                    triggerWordLength = 0;
                }
                completionData = cce.GetCompletionData(startPos, true);
                completionData = completionData.Concat(cce.GetImportCompletionData(startPos));
            }
            else
            {
                startPos = caretOffset;
                if (char.IsLetterOrDigit(completionChar) || completionChar == '_')
                {
                    if (startPos > 1 && char.IsLetterOrDigit(completionContext.Document.GetCharAt(startPos - 2)))
                    {
                        return(false);
                    }
                    completionData = cce.GetCompletionData(startPos, false);
                    startPos--;
                    triggerWordLength = 1;
                }
                else
                {
                    completionData    = cce.GetCompletionData(startPos, false);
                    triggerWordLength = 0;
                }
            }

            DefaultCompletionItemList list = new DefaultCompletionItemList();

            list.Items.AddRange(FilterAndAddTemplates(editor, completionData.Cast <ICompletionItem>().ToList()));
            if (list.Items.Count > 0 && (ctrlSpace || cce.AutoCompleteEmptyMatch))
            {
                list.SortItems();
                list.PreselectionLength  = caretOffset - startPos;
                list.PostselectionLength = Math.Max(0, startPos + triggerWordLength - caretOffset);
                list.SuggestedItem       = list.Items.FirstOrDefault(i => i.Text == cce.DefaultCompletionString);
                editor.ShowCompletionWindow(list);
                return(true);
            }

            if (!ctrlSpace)
            {
                // Method Insight
                var pce = new CSharpParameterCompletionEngine(
                    completionContext.Document,
                    completionContext.CompletionContextProvider,
                    completionFactory,
                    completionContext.ProjectContent,
                    completionContext.TypeResolveContextAtCaret
                    );
                var newInsight = pce.GetParameterDataProvider(caretOffset, completionChar) as CSharpMethodInsight;
                if (newInsight != null && newInsight.items.Count > 0)
                {
                    newInsight.UpdateHighlightedParameter(pce);
                    newInsight.Show();
                    return(true);
                }
            }
            return(false);
        }
Beispiel #13
0
        protected override CodeCompletionResult GetCodeCompletionResult(bool controlSpace)
        {
            var document = codeEditor.TextEditor.Document;
            int offset   = codeEditor.TextEditor.CaretOffset;
            var result   = new CodeCompletionResult();

            try {
                var completionContext = new CSharpCodeCompletionContext(document, offset, projectContent);
                var completionFactory = new CSharpCodeCompletionDataFactory(completionContext);
                var cce = new CSharpCompletionEngine(
                    completionContext.Document,
                    completionContext.CompletionContextProvider,
                    completionFactory,
                    completionContext.ProjectContent,
                    completionContext.TypeResolveContextAtCaret
                    );

                char completionChar = completionContext.Document.GetCharAt(completionContext.Offset - 1);
                int  startPos, triggerWordLength;
                IEnumerable <ICompletionData> completionData;

                if (controlSpace)
                {
                    if (!cce.TryGetCompletionWord(completionContext.Offset, out startPos, out triggerWordLength))
                    {
                        startPos          = completionContext.Offset;
                        triggerWordLength = 0;
                    }
                    completionData = cce.GetCompletionData(startPos, true);
                }
                else
                {
                    startPos = completionContext.Offset;
                    if (char.IsLetterOrDigit(completionChar) || completionChar == '_')
                    {
                        if (startPos > 1 && char.IsLetterOrDigit(completionContext.Document.GetCharAt((startPos - 2))))
                        {
                            return(result);
                        }
                        completionData    = cce.GetCompletionData(startPos, false);
                        triggerWordLength = 1;
                    }
                    else
                    {
                        completionData    = cce.GetCompletionData(startPos, false);
                        triggerWordLength = 0;
                    }
                }

                result.TriggerWordLength = triggerWordLength;
                result.TriggerWord       = completionContext.Document.GetText(completionContext.Offset - triggerWordLength, triggerWordLength);

                if (completionData.Any() && cce.AutoCompleteEmptyMatch)
                {
                    foreach (var completion in completionData)
                    {
                        var cast = completion as CompletionData;
                        if (cast != null)
                        {
                            cast.TriggerWord       = result.TriggerWord;
                            cast.TriggerWordLength = result.TriggerWordLength;
                            result.CompletionData.Add(cast);
                        }
                    }
                }

                if (!controlSpace)
                {
                    var pce = new CSharpParameterCompletionEngine(
                        completionContext.Document,
                        completionContext.CompletionContextProvider,
                        completionFactory,
                        completionContext.ProjectContent,
                        completionContext.TypeResolveContextAtCaret
                        );

                    var parameterDataProvider = pce.GetParameterDataProvider(completionContext.Offset, completionChar);
                    result.OverloadProvider = parameterDataProvider as IUpdatableOverloadProvider;
                }
            } catch {
                // ignore exceptions thrown during code completion
            }

            return(result);
        }