public bool IsAvailable(IUserDataHolder cache)
        {
            var typeDeclaration = _provider.GetSelectedElement <ICSharpTypeDeclaration>(true, true);

            if (typeDeclaration == null || !typeDeclaration.IsValid())
            {
                return(false);
            }

            var element = typeDeclaration.DeclaredElement;

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

            if (typeDeclaration.GetContainingTypeDeclaration() != null)
            {
                return(false);
            }
            if (!typeDeclaration.GetNameRange().Contains(_provider.CaretOffset))
            {
                return(false);
            }

            _currentProject = typeDeclaration.GetProject();

            if (RenameFileToMatchTypeNameAction.CountTopLevelTypeDeclarations(_provider.PsiFile as ICSharpFile) <= 1)
            {
                return(false);
            }
            return(RenameFileToMatchTypeNameAction.TypeNameNameDoesNotCorrespondWithFileName(element, _provider.ProjectFile));
        }
        private void MoveToOuterFile()
        {
            var declaredElement = _sourceTypeDeclaration.DeclaredElement;
            var solution        = _sourceTypeDeclaration.GetSolution();

            var newName = RenameFileToMatchTypeNameAction.GetFileName(declaredElement, _sourceTypeDeclaration.GetProjectFile());

            if (newName == null)
            {
                return;
            }

            var dataProvider = new MoveMoFileMoveTypeDataProvider(newName, null, new[] { _sourceTypeDeclaration });
            var context      = new DataContext();

            context.SetData(MoveTypeWorkflow.DATA_PROVIDER, dataProvider);
            context.SetData(DataConstants.SOLUTION, solution);
            context.SetData(JetBrains.ReSharper.Psi.Services.DataConstants.PSI_LANGUAGE_TYPE, _sourceTypeDeclaration.Language);
            context.SetData(JetBrains.ReSharper.Psi.Services.DataConstants.DECLARED_ELEMENT, declaredElement);

            var workflow = new MoveTypeWorkflow(solution);

            RefactoringActionUtil.ExecuteRefactoring(context, workflow);
        }