private static bool CanBeMarkedAsConst( SeparatedSyntaxList <VariableDeclaratorSyntax> variables, SyntaxList <StatementSyntax> statements, int startIndex) { MarkLocalVariableAsConstWalker walker = MarkLocalVariableAsConstWalkerCache.GetInstance(); foreach (VariableDeclaratorSyntax variable in variables) { walker.Identifiers.Add(variable.Identifier.ValueText); } for (int i = startIndex; i < statements.Count; i++) { walker.Visit(statements[i]); if (walker.IsMatch) { MarkLocalVariableAsConstWalkerCache.Free(walker); return(false); } } MarkLocalVariableAsConstWalkerCache.Free(walker); return(true); }
private static bool IsAnyVariableAssigned(SeparatedSyntaxList <VariableDeclaratorSyntax> variables, SyntaxList <StatementSyntax> statements, int startIndex) { for (int i = startIndex; i < statements.Count; i++) { MarkLocalVariableAsConstWalker walker = MarkLocalVariableAsConstWalkerCache.Acquire(); walker.Visit(statements[i]); HashSet <string> assigned = MarkLocalVariableAsConstWalkerCache.GetAssignedAndRelease(walker); if (assigned != null) { foreach (VariableDeclaratorSyntax variable in variables) { if (assigned.Contains(variable.Identifier.ValueText)) { return(true); } } walker.Clear(); } } return(false); }
public static HashSet <string> GetAssignedAndRelease(MarkLocalVariableAsConstWalker walker) { HashSet <string> assigned = walker.Assigned; Release(walker); return(assigned); }
public static MarkLocalVariableAsConstWalker GetInstance() { MarkLocalVariableAsConstWalker walker = _cachedInstance; if (walker != null) { _cachedInstance = null; walker.Reset(); return(walker); } return(new MarkLocalVariableAsConstWalker()); }
public static MarkLocalVariableAsConstWalker Acquire() { MarkLocalVariableAsConstWalker walker = _cachedInstance; if (walker != null) { _cachedInstance = null; walker.Clear(); return(walker); } return(new MarkLocalVariableAsConstWalker()); }
public static void Free(MarkLocalVariableAsConstWalker walker) { _cachedInstance = walker; }