protected override IList <IDataRule> ProvideContextData(ITextControl textControl, IProject project,
                                                                    ISolution solution)
            {
                var dataRules = base.ProvideContextData(textControl, project, solution);
                var ret       = myDrivenTextBase.ProvideContextData(project, textControl);

                dataRules.AddRange(ret);
                if (!ret.IsEmpty())
                {
                    return(dataRules);
                }

                dataRules.AddRule("Test", DocumentModelDataConstants.DOCUMENT, textControl.Document);
                dataRules.AddRule("Test", ProjectModelDataConstants.PROJECT, project);
                dataRules.AddRule("Test", PsiDataConstants.REFERENCE, ctx =>
                {
                    var references = TextControlToPsi.GetReferencesAtCaret(solution, textControl);
                    return(references != null ? references.FirstOrDefault() : null);
                });

                dataRules.AddRule("Test", PsiDataConstants.REFERENCES,
                                  ctx => TextControlToPsi.GetReferencesAtCaret(solution, textControl));
                dataRules.AddRule("Test", ProjectModelDataConstants.PROJECT_MODEL_ELEMENT, ctx => null);
                dataRules.AddRule("Test", PsiDataConstants.SELECTED_EXPRESSION,
                                  ctx => ExpressionSelectionUtil.GetSelectedExpression <ITreeNode>(Solution, textControl, false));
                dataRules.AddRule("Test", DocumentModelDataConstants.EDITOR_CONTEXT, ctx =>
                                  textControl.Selection.HasSelection()
                        ? new DocumentEditorContext(textControl.Selection.OneDocumentRangeWithCaret())
                        : null);

                return(dataRules);
            }
        public static IDataContext Create(Lifetime lifetime, ITextControl textControl, ISolution solution)
        {
            var provider = new List <IDataRule>();

            provider.AddRule("Test", PsiDataConstants.DECLARED_ELEMENTS, ctx => TextControlToPsi.GetDeclaredElements(solution, textControl).ToDeclaredElementsDataConstant());
            provider.AddRule("Test", JetBrains.TextControl.DataContext.TextControlDataConstants.TEXT_CONTROL, textControl);
            provider.AddRule("Test", JetBrains.ProjectModel.DataContext.ProjectModelDataConstants.SOLUTION, solution);
            provider.AddRule("Test", PsiDataConstants.REFERENCE, ctx => TextControlToPsi.GetReferencesAtCaret(solution, textControl).FirstOrDefault());
            provider.AddRule("Test", PsiDataConstants.SELECTED_EXPRESSION, ctx => ExpressionSelectionUtil.GetSelectedExpression <ITreeNode>(solution, textControl, false));
            return(Shell.Instance.GetComponent <IActionManager>().DataContexts.CreateWithDataRules(lifetime, provider));
        }