コード例 #1
0
        ///<summary>
        ///
        ///            Executes action. Called after Update, that set ActionPresentation.Enabled to true.
        ///            
        ///</summary>
        ///
        ///<param name="context">DataContext</param>
        ///<param name="nextExecute">delegate to call</param>
        public void Execute(IDataContext context, DelegateExecute nextExecute)
        {
            IClass @class =
                context.GetData<IDeclaredElement>(JetBrains.ReSharper.DataConstants.DECLARED_ELEMENT) as IClass;
            ISolution solution = @class.GetManager().Solution;
            @class.GetManager().CommitAllDocuments();
            Assert.CheckNotNull(@class);
            using (WriteLockCookie cookie = WriteLockCookie.Create())
            {
                SearchInheritorsRequest request =
                    new SearchInheritorsRequest(@class, SearchScope.SOLUTION, @class.GetManager().Solution);
                bool canceled = false;
                ICollection<IOccurence> occurences = null;
                using (ProgressWindow taskExecutor = new ProgressWindow(true))
                {
                    taskExecutor.ExecuteTask(delegate(IProgressIndicator progress)
                                                 {
                                                     occurences = request.Search(progress);
                                                     return null;
                                                 }, "", out canceled);
                }

                if (canceled)
                    return;

                Assert.CheckNotNull(occurences);

                using (CommandCookie.Create("MarkSerializableDerivedTypes"))
                {
                    PsiManager.GetInstance(solution).DoTransaction(
                        delegate(object[] args)
                        {
                            foreach (IOccurence occurence in occurences)
                            {
                                DeclaredElementOccurence declaredElementOccurence = (DeclaredElementOccurence)occurence;
                                IClass inheritClass =
                                    declaredElementOccurence.OccurenceElement.GetValidDeclaredElement() as IClass;
                                if (inheritClass != null)
                                    AddAtribute(inheritClass);
                            }
                        }, new object[] { });
                }
               }
        }