///<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[] { }); } } }