private static (bool preCheck, ExpressionSyntax result) TryRewriteSimple(RewriteDesign design, string[] names) { if (design.CurrentCollection?.CollectionType == CollectionType.IEnumerable) { return(false, null); } if (names.Any(x => MethodsModifyingEnumeration.Contains(x))) { return(false, null); } if (design.Data.CurrentMethodParams.Any(x => x.Modifiers.Any())) { return(false, null); } if (!MethodsCreateArray.Contains(names.First())) { RewriteCollectionEnumeration.Rewrite(design, Array.Empty <RewrittenValueBridge>(), false); } for (var i = 0; i < names.Length; i++) { ExpressionSyntax rewrittenPart = RewriteSimplePart(names[i], design, i); if (design.Error) { return(true, null); } if (!design.SimpleEnumeration) { return(true, null); } if (rewrittenPart != null) { return(true, rewrittenPart); } } if (!MethodsWithResult.Contains(names.Last())) { ExpressionSyntax rewrittenPart = RewriteToArray.SimpleRewrite(design, Array.Empty <RewrittenValueBridge>()); if (!design.SimpleEnumeration) { return(true, null); } if (rewrittenPart != null) { return(true, rewrittenPart); } } return(true, null); }
private static void RewriteComposite(RewriteDesign design, string[] names) { if (design.Data.CurrentMethodIsConditional && design.ReturnType.Type.ToString() == "void") { design.InitialAdd(If(design.CurrentCollection.IsEqual(null), ReturnStatement())); } if (!MethodsCreateArray.Contains(names.First())) { RewriteCollectionEnumeration.Rewrite(design, Array.Empty <RewrittenValueBridge>(), true); } for (var i = 0; i < names.Length; i++) { design.Variables.Where(x => !x.IsGlobal).ForEach(x => x.IsUsed = false); RewritePart(names[i], design, i); } if (design.HasResultMethod) { return; } design.ForAdd(YieldStatement(SyntaxKind.YieldReturnStatement, design.LastValue)); design.ResultAdd(YieldStatement(SyntaxKind.YieldBreakStatement)); }