public override void Run(RefactoringOptions options) { DocumentLocation location = options.GetTextEditorData().Caret.Location; IType interfaceType = options.Dom.GetType(options.ResolveResult.ResolvedType); IType declaringType = options.Document.CompilationUnit.GetTypeAt(location.Line + 1, location.Column + 1); options.Document.TextEditor.BeginAtomicUndo(); CodeRefactorer refactorer = IdeApp.Workspace.GetCodeRefactorer(IdeApp.ProjectOperations.CurrentSelectedSolution); List <KeyValuePair <IMember, IReturnType> > members = new List <KeyValuePair <IMember, IReturnType> > (); foreach (IMember member in interfaceType.Members) { if (member.IsAbstract && !declaringType.Members.Any(m => member.Name == m.Name)) { members.Add(new KeyValuePair <IMember, IReturnType> (member, null)); } } refactorer.ImplementMembers(declaringType, members, "implemented abstract members of " + interfaceType.FullName); options.Document.TextEditor.EndAtomicUndo(); }