public override bool IsValid(RefactoringOptions options)
        {
            if (options.ResolveResult == null)
            {
                return(false);
            }

            IType type = options.Dom.GetType(options.ResolveResult.ResolvedType);

            if (type == null || type.ClassType != MonoDevelop.Projects.Dom.ClassType.Class)
            {
                return(false);
            }
            return(CurrentRefactoryOperationsHandler.ContainsAbstractMembers(type));
        }
        public override bool IsValid(RefactoringOptions options)
        {
            var unit = options.Document.ParsedDocument.GetAst <CompilationUnit> ();

            if (unit == null)
            {
                return(false);
            }
            var generator = options.CreateCodeGenerator();

            if (generator == null)
            {
                return(false);
            }

            var loc         = options.Document.Editor.Caret.Location;
            var declaration = unit.GetNodeAt <TypeDeclaration> (loc.Line, loc.Column);

            if (declaration == null)
            {
                return(false);
            }
            if (options.ResolveResult == null)
            {
                return(false);
            }
            var type = options.ResolveResult.Type;
            var def  = type.GetDefinition();

            if (def == null || type.Kind == TypeKind.Interface)
            {
                return(false);
            }
            if (!CurrentRefactoryOperationsHandler.ContainsAbstractMembers(type))
            {
                return(false);
            }
            var declaringType          = options.Document.ParsedDocument.GetInnermostTypeDefinition(loc);
            var missingAbstractMembers = def.Members.Where(member => member.IsAbstract && !declaringType.Members.Any(m => member.Name == m.Name));

            return(missingAbstractMembers.Any());
        }
        public override bool IsValid(RefactoringOptions options)
        {
            if (options.ResolveResult == null)
            {
                return(false);
            }

            IType type = options.Dom.GetType(options.ResolveResult.ResolvedType);

            if (type == null || type.ClassType != MonoDevelop.Projects.Dom.ClassType.Class)
            {
                return(false);
            }
            if (!CurrentRefactoryOperationsHandler.ContainsAbstractMembers(type))
            {
                return(false);
            }
            DocumentLocation location      = options.GetTextEditorData().Caret.Location;
            IType            declaringType = options.Document.CompilationUnit.GetTypeAt(location.Line, location.Column);
            var missingAbstractMembers     = type.Members.Where(member => member.IsAbstract && !declaringType.Members.Any(m => member.Name == m.Name));

            return(missingAbstractMembers.Any());
        }