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);
            }
        }
示例#2
0
        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);
                    }
                }
            }
        }