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);
			}
		}
		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 Update(IDocument document, int offset)
        {
            var completionContext = new CSharpCompletionContext(document, offset, context.ProjectContent);
            if (completionContext == null)
            {
                RequestClose = true;
                return;
            }

            var completionFactory = new CSharpCompletionDataFactory(completionContext.TypeResolveContextAtCaret, completionContext);
            var pce = new CSharpParameterCompletionEngine(
                completionContext.Document,
                completionContext.CompletionContextProvider,
                completionFactory,
                completionContext.ProjectContent,
                completionContext.TypeResolveContextAtCaret
            );

            var completionChar = completionContext.Document.GetCharAt(completionContext.Offset);
            int parameterIndex = pce.GetCurrentParameterIndex(startOffset, completionContext.Offset);
            if (parameterIndex < 0)
            {
                RequestClose = true;
                return;
            }
            else
            {
                if (parameterIndex > items[selectedIndex].Method.Parameters.Count)
                {
                    var newItem = items.FirstOrDefault(i => parameterIndex <= i.Method.Parameters.Count);
                    SelectedIndex = items.IndexOf(newItem);
                }
                if (parameterIndex > 0)
                    parameterIndex--; // NR returns 1-based parameter index
                foreach (var item in items)
                {
                    item.HighlightParameter(parameterIndex);
                }
            }
        }