Exemplo n.º 1
0
        private void AnalyzeInvocation(SyntaxNodeAnalysisContext context, TypeSizeResolver resolver)
        {
            var semantics = context.SemanticModel;

            var @params =
                (context.Node as MethodDeclarationSyntax)?.ParameterList.Parameters
                ?? (context.Node as ConstructorDeclarationSyntax)?.ParameterList.Parameters
                ?? (context.Node as DelegateDeclarationSyntax)?.ParameterList.Parameters
                ?? (context.Node as LocalFunctionStatementSyntax)?.ParameterList.Parameters;

            foreach (var param in @params !)
            {
                var symbol = semantics.GetDeclaredSymbol(param);

                if (symbol is null)
                {
                    throw new Exception("null param symbol. not sure what to do here to be honest. :(");
                }

                var advantageousToPassByRef = resolver.AdvantageousToPassByRef(symbol);
                var contextSymbol           = semantics.GetDeclaredSymbol(context.Node) !;
                if (CanModifyMethod(contextSymbol) && advantageousToPassByRef)
                {
                    context.ReportDiagnostic(Diagnostic.Create(Rule, param.GetLocation()));
                }
            }