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 ExpressionSyntax RewriteSimplePart(string last, RewriteDesign design, int i) { var args = design.RewriteChain[i].Arguments; switch (last) { case "Aggregate": return(RewriteAggregate.SimpleRewrite(design, args)); case "All": return(RewriteAll.SimpleRewrite(design, args)); case "Any": return(RewriteAny.SimpleRewrite(design, args)); case "Average": return(RewriteAverage.SimpleRewrite(design, args)); case "Sum": return(RewriteSum.SimpleRewrite(design, args)); case "Count": return(RewriteCount.SimpleRewrite(design, args)); case "LongCount": return(RewriteLongCount.SimpleRewrite(design, args)); case "First": return(RewriteFirst.SimpleRewrite(design, args)); case "FirstOrDefault": return(RewriteFirstOrDefault.SimpleRewrite(design, args)); case "Last": return(RewriteLast.SimpleRewrite(design, args)); case "LastOrDefault": return(RewriteLastOrDefault.SimpleRewrite(design, args)); case "Single": return(RewriteSingle.SimpleRewrite(design, args)); case "SingleOrDefault": return(RewriteSingleOrDefault.SimpleRewrite(design, args)); case "ElementAt": return(RewriteElementAt.SimpleRewrite(design, args)); case "ElementAtOrDefault": return(RewriteElementAtOrDefault.SimpleRewrite(design, args)); case "Range": RewriteRange.Rewrite(design, args); return(null); case "Repeat": RewriteRepeat.Rewrite(design, args); return(null); case "Empty": RewriteEmpty.Rewrite(design, args, design.RewriteChain[i].Invocation); return(null); case "Skip": RewriteSkip.Rewrite(design, args); return(null); case "Take": RewriteTake.Rewrite(design, args); return(null); case "Reverse": RewriteReverse.Rewrite(design, args); return(null); case "Select": RewriteSelect.Rewrite(design, args); return(null); case "Cast": RewriteCast.Rewrite(design, args, design.RewriteChain[i].Invocation); return(null); case "ToArray": return(RewriteToArray.SimpleRewrite(design, args)); case "ToList": return(RewriteToList.SimpleRewrite(design, args)); case "ToSimpleList": return(RewriteToSimpleList.SimpleRewrite(design, args)); case "Unchecked": design.Unchecked = true; return(null); default: return(null); } }