Пример #1
0
        public override void Analyze(SymbolAnalysisContext context, PXContext pxContext, DacSemanticModel dacOrDacExtension)
        {
            context.CancellationToken.ThrowIfCancellationRequested();

            string[] forbiddenNames    = GetForbiddenFieldsNames();
            var      invalidProperties = from forbiddenFieldName in forbiddenNames
                                         where dacOrDacExtension.PropertiesByNames.ContainsKey(forbiddenFieldName)
                                         select dacOrDacExtension.PropertiesByNames[forbiddenFieldName];

            foreach (DacPropertyInfo property in invalidProperties.Where(p => p.Symbol.ContainingSymbol == dacOrDacExtension.Symbol))
            {
                RegisterDiagnosticForIdentifier(property.Node.Identifier, pxContext, context);
            }

            context.CancellationToken.ThrowIfCancellationRequested();
            var allNestedTypesDictionary = dacOrDacExtension.GetMemberNodes <ClassDeclarationSyntax>()
                                           .ToLookup(node => node.Identifier.ValueText, StringComparer.OrdinalIgnoreCase);
            var allInvalidFields = forbiddenNames.Where(forbiddenClassName => allNestedTypesDictionary.Contains(forbiddenClassName))
                                   .SelectMany(forbiddenClassName => allNestedTypesDictionary[forbiddenClassName]);

            foreach (ClassDeclarationSyntax fieldNode in allInvalidFields)
            {
                RegisterDiagnosticForIdentifier(fieldNode.Identifier, pxContext, context);
            }
        }
        public override void Analyze(SymbolAnalysisContext context, PXContext pxContext, DacSemanticModel dacOrDacExtenstion)
        {
            context.CancellationToken.ThrowIfCancellationRequested();

            var dacConstructors = dacOrDacExtenstion.GetMemberNodes <ConstructorDeclarationSyntax>();

            foreach (var constructor in dacConstructors)
            {
                context.CancellationToken.ThrowIfCancellationRequested();

                context.ReportDiagnosticWithSuppressionCheck(
                    Diagnostic.Create(Descriptors.PX1028_ConstructorInDacDeclaration, constructor.Identifier.GetLocation()),
                    pxContext.CodeAnalysisSettings);
            }
        }
        public override void Analyze(SymbolAnalysisContext context, PXContext pxContext, DacSemanticModel dac)
        {
            context.CancellationToken.ThrowIfCancellationRequested();
            SemanticModel semanticModel = context.Compilation.GetSemanticModel(dac.Node.SyntaxTree);

            if (semanticModel == null)
            {
                return;
            }

            foreach (MethodDeclarationSyntax method in dac.GetMemberNodes <MethodDeclarationSyntax>())
            {
                context.CancellationToken.ThrowIfCancellationRequested();
                AnalyzeMethodDeclarationInDac(method, context, pxContext);
            }

            HashSet <INamedTypeSymbol> whiteList = GetWhitelist(pxContext);

            foreach (DacPropertyInfo property in dac.AllDeclaredProperties)
            {
                AnalyzeMethodInvocationInDacProperty(property, whiteList, context, pxContext, semanticModel);
            }
        }