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); } }
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); }