コード例 #1
0
        bool DoCaseCompletion(ITextEditor editor)
        {
            ITextEditorCaret caret = editor.Caret;
            var r = new NRefactoryResolver(LanguageProperties.CSharp);

            if (r.Initialize(ParserService.GetParseInformation(editor.Document.Text, ProjectContent), caret.Line, caret.Column))
            {
                NRefactory.Ast.INode currentMember = r.ParseCurrentMember(editor.Document.Text);
                if (currentMember != null)
                {
                    var ccsf = new CaseCompletionSwitchFinder(caret.Line, caret.Column);
                    currentMember.AcceptVisitor(ccsf, null);
                    if (ccsf.BestStatement != null)
                    {
                        r.RunLookupTableVisitor(currentMember);
                        ResolveResult rr = r.ResolveInternal(ccsf.BestStatement.SwitchExpression, ExpressionContext.Default);
                        if (rr != null && rr.ResolvedType != null)
                        {
                            return(ProvideContextCompletion(editor, rr.ResolvedType, ' '));
                        }
                    }
                }
            }
            return(false);
        }
コード例 #2
0
        ResolveResult ResolveAtCaret(ParserUpdateStepEventArgs e)
        {
            if (disableDefinitionView)
            {
                return(null);
            }
            IWorkbenchWindow window = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow;

            if (window == null)
            {
                return(null);
            }
            ITextEditorProvider provider = window.ActiveViewContent as ITextEditorProvider;

            if (provider == null)
            {
                return(null);
            }
            ITextEditor editor = provider.TextEditor;

            // e might be null when this is a manually triggered update
            // don't resolve when an unrelated file was changed
            if (e != null && editor.FileName != e.FileName)
            {
                return(null);
            }

            IExpressionFinder expressionFinder = ParserService.GetExpressionFinder(editor.FileName);

            if (expressionFinder == null)
            {
                return(null);
            }
            ITextEditorCaret caret   = editor.Caret;
            string           content = (e == null) ? editor.Document.Text : e.Content.Text;

            if (caret.Offset > content.Length)
            {
                LoggingService.Debug("caret.Offset = " + caret.Offset + ", content.Length=" + content.Length);
                return(null);
            }
            try {
                ExpressionResult expr = expressionFinder.FindFullExpression(content, caret.Offset);
                if (expr.Expression == null)
                {
                    return(null);
                }
                return(ParserService.Resolve(expr, caret.Line, caret.Column, editor.FileName, content));
            } catch (Exception ex) {
                disableDefinitionView = true;
                ctl.Visibility        = Visibility.Collapsed;
                MessageService.ShowException(ex, "Error resolving at " + caret.Line + "/" + caret.Column
                                             + ". DefinitionViewPad is disabled until you restart SharpDevelop.");
                return(null);
            }
        }