/// <summary> /// Returns true if the given expression flows in the target. /// </summary> /// <param name="expr">Expression</param> /// <param name="target">Target</param> /// <param name="syntaxNode">SyntaxNode</param> /// <param name="cfgNode">ControlFlowGraphNode</param> /// <param name="targetSyntaxNode">Target syntaxNode</param> /// <param name="targetCfgNode">Target controlFlowGraphNode</param> /// <param name="model">SemanticModel</param> /// <param name="context">AnalysisContext</param> /// <returns>Boolean</returns> internal static bool FlowsIntoTarget(ExpressionSyntax expr, ISymbol target, SyntaxNode syntaxNode, ControlFlowGraphNode cfgNode, SyntaxNode targetSyntaxNode, ControlFlowGraphNode targetCfgNode, SemanticModel model, AnalysisContext context) { ISymbol reference = null; if (!context.TryGetSymbolFromExpression(out reference, expr, model)) { return false; } return DataFlowAnalysis.FlowsIntoTarget(reference, target, syntaxNode, cfgNode, targetSyntaxNode, targetCfgNode); }
/// <summary> /// Returns true if the given expression resets when flowing from the /// target in the given loop body control flow graph nodes. The given /// control flow graph nodes must be equal. /// </summary> /// <param name="expr">Expression</param> /// <param name="syntaxNode">SyntaxNode</param> /// <param name="cfgNode">ControlFlowGraphNode</param> /// <param name="targetSyntaxNode">Target syntaxNode</param> /// <param name="targetCfgNode">Target controlFlowGraphNode</param> /// <param name="model">SemanticModel</param> /// <param name="context">AnalysisContext</param> /// <returns>Boolean</returns> internal static bool DoesResetInLoop(ExpressionSyntax expr, SyntaxNode syntaxNode, ControlFlowGraphNode cfgNode, SyntaxNode targetSyntaxNode, ControlFlowGraphNode targetCfgNode, SemanticModel model, AnalysisContext context) { ISymbol reference = null; if (!cfgNode.Equals(targetCfgNode) || !context.TryGetSymbolFromExpression(out reference, expr, model)) { return false; } return DataFlowAnalysis.DoesResetInLoop(reference, syntaxNode, cfgNode, targetSyntaxNode, targetCfgNode); }