public override bool IsAvailable(IDataContext dataContext)
        {
            var             textControl     = dataContext.GetData(TextControl.DataContext.DataConstants.TEXT_CONTROL);
            ISolution       solution        = dataContext.GetData(ProjectModel.DataContext.DataConstants.SOLUTION);
            var             token           = TextControlToPsi.GetSourceTokenAtCaret(solution, textControl);
            RuleDeclaration ruleDeclaration = null;

            if (token.Parent is IRuleDeclaredName)
            {
                ruleDeclaration = token.Parent.Parent as RuleDeclaration;
            }
            else if (token.Parent is IRuleName)
            {
                var reference       = (token.Parent as IRuleName).RuleNameReference;
                var declaredElement = reference.Resolve().DeclaredElement;
                ruleDeclaration = declaredElement as RuleDeclaration;
            }
            else if (token.Parent is IPathName)
            {
                var reference       = (token.Parent as IPathName).RuleNameReference;
                var declaredElement = reference.Resolve().DeclaredElement;
                ruleDeclaration = declaredElement as RuleDeclaration;
            }
            if (ruleDeclaration != null)
            {
                var psiFile = ruleDeclaration.GetContainingNode <PsiFile>();
                if (psiFile != null)
                {
                    psiFile.CollectDerivedElements(ruleDeclaration);
                }
                return(HasDerivedElements(ruleDeclaration));
            }

            return(false);
        }
        public override bool IsApplicable(IDataContext dataContext)
        {
            var       textControl = dataContext.GetData(TextControl.DataContext.DataConstants.TEXT_CONTROL);
            ISolution solution    = dataContext.GetData(ProjectModel.DataContext.DataConstants.SOLUTION);

            var token = TextControlToPsi.GetSourceTokenAtCaret(solution, textControl);

            if ((token.Parent is IRuleName) || (token.Parent is IRuleDeclaredName) || (token.Parent is PathName))
            {
                return(true);
            }
            return(false);
        }
        public override bool IsApplicable(IDataContext dataContext)
        {
            //return IsAvailable(dataContext);

            var       textControl = dataContext.GetData(TextControl.DataContext.DataConstants.TEXT_CONTROL);
            ISolution solution    = dataContext.GetData(ProjectModel.DataContext.DataConstants.SOLUTION);

            var token = TextControlToPsi.GetSourceTokenAtCaret(solution, textControl);

            if ((token.Parent is IReferenceName) || token.Parent is IClassDeclaration || token.Parent is IConstructorDeclaration || token.Parent is IMethodDeclaration || token.Parent is IInterfaceDeclaration)
            {
                return(true);
            }
            return(false);
        }
        public override bool IsAvailable(IDataContext dataContext)
        {
            var       textControl = dataContext.GetData(TextControl.DataContext.DataConstants.TEXT_CONTROL);
            ISolution solution    = dataContext.GetData(ProjectModel.DataContext.DataConstants.SOLUTION);
            var       token       = TextControlToPsi.GetSourceTokenAtCaret(solution, textControl);

            var referenceName = token.Parent as IReferenceName;

            if (referenceName != null)
            {
                if (referenceName.Reference.CurrentResolveResult != null)
                {
                    var declaredElement = referenceName.Reference.CurrentResolveResult.DeclaredElement;

                    var @class = declaredElement as IClass;
                    if (@class != null)
                    {
                        return(DerivedDeclaredElementUtil.GetPrimaryDeclaredElementForClass(@class) != null);
                    }

                    var @method = declaredElement as  IMethod;
                    if (@method != null)
                    {
                        return(DerivedDeclaredElementUtil.GetPrimaryDeclaredElementForMethod(@method) != null);
                    }

                    var @interface = declaredElement as IInterface;
                    if (@interface != null)
                    {
                        return(DerivedDeclaredElementUtil.GetPrimaryDeclaredElementForInterface(@interface) != null);
                    }
                }
                return(false);
            }

            var classDeclaration = token.Parent as IClassDeclaration;

            if (classDeclaration != null)
            {
                var @class = classDeclaration.DeclaredElement as IClass;

                return((@class != null) && (DerivedDeclaredElementUtil.GetPrimaryDeclaredElementForClass(@class) != null));
            }

            var methodDeclaration = token.Parent as IMethodDeclaration;

            if (methodDeclaration != null)
            {
                var @method = methodDeclaration.DeclaredElement;

                return((@method != null) && (DerivedDeclaredElementUtil.GetPrimaryDeclaredElementForMethod(@method) != null));
            }

            var interfaceDeclaration = token.Parent as IInterfaceDeclaration;

            if (interfaceDeclaration != null)
            {
                var @interface = interfaceDeclaration.DeclaredElement as IInterface;

                return((@interface != null) && (DerivedDeclaredElementUtil.GetPrimaryDeclaredElementForInterface(@interface) != null));
            }

            var constructorDeclaration = token.Parent as IConstructorDeclaration;

            if (constructorDeclaration != null)
            {
                var @class = constructorDeclaration.GetContainingTypeDeclaration().DeclaredElement as IClass;

                return((@class != null) && (DerivedDeclaredElementUtil.GetPrimaryDeclaredElementForClass(@class) != null));
            }

            return(false);
        }