public static void CheckDeployTimeConstantViolations(SyntaxBase container, SyntaxBase childContainer, SemanticModel semanticModel, IDiagnosticWriter diagnosticWriter, Dictionary <DeclaredSymbol, ObjectType> existingResourceBodyObjectTypeOverrides) { // Validate property accesses, array accesses, resource accesses and function calls. new DeployTimeConstantDirectViolationVisitor(container, semanticModel, diagnosticWriter, existingResourceBodyObjectTypeOverrides) .Visit(childContainer); // Validate variable dependencies. foreach (var variableDependency in VariableDependencyVisitor.GetVariableDependencies(semanticModel, childContainer)) { new DeployTimeConstantIndirectViolationVisitor(container, variableDependency, semanticModel, diagnosticWriter, existingResourceBodyObjectTypeOverrides) .Visit(variableDependency); } }
public static void Validate(SemanticModel semanticModel, IDiagnosticWriter diagnosticWriter) { // Collect all sytnaxes that require DTCs (a.k.a. DTC containers). var containers = DeployTimeConstantContainerVisitor.CollectDeployTimeConstantContainers(semanticModel); foreach (var container in containers) { // Only visit child nodes of the DTC container to avoid flagging the DTC container itself. foreach (var childContainer in GetChildrenOfDeployTimeConstantContainer(semanticModel, container)) { // Validate property accesses, array accesses, resource accesses and function calls. new DeployTimeConstantDirectViolationVisitor(container, semanticModel, diagnosticWriter) .Visit(childContainer); // Validate variable dependencies. foreach (var variableDependency in VariableDependencyVisitor.GetVariableDependencies(semanticModel, childContainer)) { new DeployTimeConstantIndirectViolationVisitor(container, variableDependency, semanticModel, diagnosticWriter) .Visit(variableDependency); } } } }