Example #1
0
        private static string GetCannotExtractMessage(AP.CannotExtractReason reason)
        {
            switch (reason)
            {
            case AP.CannotExtractReason.InvalidTargetSelected:
                return(Strings.ExtractMethodInvalidTargetSelected);

            case AP.CannotExtractReason.InvalidExpressionSelected:
                return(Strings.ExtractMethodInvalidExpressionSelected);

            case AP.CannotExtractReason.MethodAssignsVariablesAndReturns:
                return(Strings.ExtractMethodAssignsVariablesAndReturns);

            case AP.CannotExtractReason.StatementsFromClassDefinition:
                return(Strings.ExtractMethodStatementsFromClassDefinition);

            case AP.CannotExtractReason.SelectionContainsBreakButNotEnclosingLoop:
                return(Strings.ExtractMethodSelectionContainsBreakButNotEnclosingLoop);

            case AP.CannotExtractReason.SelectionContainsContinueButNotEnclosingLoop:
                return(Strings.ExtractMethodSelectionContainsContinueButNotEnclosingLoop);

            case AP.CannotExtractReason.ContainsYieldExpression:
                return(Strings.ExtractMethodContainsYieldExpression);

            case AP.CannotExtractReason.ContainsFromImportStar:
                return(Strings.ExtractMethodContainsFromImportStar);

            case AP.CannotExtractReason.SelectionContainsReturn:
                return(Strings.ExtractMethodSelectionContainsReturn);

            default:
                return(null);
            }
        }
Example #2
0
        private static bool IsValidExtraction(SelectionTarget target, out AP.CannotExtractReason failureReason)
        {
            if (target.Parents[target.Parents.Count - 1] is ClassDefinition)
            {
                failureReason = AP.CannotExtractReason.StatementsFromClassDefinition;
                return(false);
            }

            var breakContinueWalker = new ContinueBreakWalker();

            target.Walk(breakContinueWalker);
            if (breakContinueWalker.ContainsBreak)
            {
                failureReason = AP.CannotExtractReason.SelectionContainsBreakButNotEnclosingLoop;
                return(false);
            }
            else if (breakContinueWalker.ContainsContinue)
            {
                failureReason = AP.CannotExtractReason.SelectionContainsContinueButNotEnclosingLoop;
                return(false);
            }

            var yieldWalker = new YieldWalker();

            target.Walk(yieldWalker);
            if (yieldWalker.ContainsYield)
            {
                failureReason = AP.CannotExtractReason.ContainsYieldExpression;
                return(false);
            }

            var importStarWalker = new ImportStarWalker();

            target.Walk(importStarWalker);
            if (importStarWalker.ContainsImportStar)
            {
                failureReason = AP.CannotExtractReason.ContainsFromImportStar;
                return(false);
            }

            var returnWalker = new ReturnWalker();

            target.Walk(returnWalker);
            if (returnWalker.ContainsReturn && !returnWalker.Returns)
            {
                failureReason = AP.CannotExtractReason.SelectionContainsReturn;
                return(false);
            }

            target.ContainsReturn = returnWalker.ContainsReturn;
            failureReason         = AP.CannotExtractReason.None;
            return(true);
        }