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); } }