private bool CallsVirtualDispose(BaseMethodDeclarationSyntax methodDeclaration, string argumentValue)
 {
     return(SyntaxHelper.ContainsMethodInvocation(methodDeclaration,
                                                  semanticModel,
                                                  method => HasArgumentValues(method, argumentValue),
                                                  IsVirtualDisposeBool));
 }
 private bool CallsSuppressFinalize(BaseMethodDeclarationSyntax methodDeclaration)
 {
     return(SyntaxHelper.ContainsMethodInvocation(methodDeclaration,
                                                  semanticModel,
                                                  method => HasArgumentValues(method, "this"),
                                                  KnownMethods.IsGcSuppressFinalize));
 }
        private void VerifyMethodDeclaration(SyntaxNodeAnalysisContext context)
        {
            var methodDeclaration = (BaseMethodDeclarationSyntax)context.Node;
            var methodSymbol      = context.SemanticModel.GetDeclaredSymbol(methodDeclaration);

            if (methodSymbol == null || methodSymbol.IsOverride)
            {
                return;
            }

            VerifyReturnType(context, methodDeclaration, methodSymbol);

            var stringUrlParams = GetStringUrlParamIndexes(methodSymbol);

            if (!stringUrlParams.Any())
            {
                return;
            }

            var methodOverloads = FindOverloadsThatUseUriTypeInPlaceOfString(methodSymbol, stringUrlParams);

            if (methodOverloads.Any())
            {
                var methodOverloadSet = new HashSet <IMethodSymbol>(methodOverloads);
                if (!methodDeclaration.IsKind(SyntaxKind.ConstructorDeclaration) &&
                    !SyntaxHelper.ContainsMethodInvocation(methodDeclaration, context.SemanticModel,
                                                           mSyntax => true,
                                                           mSymbol => methodOverloadSet.Contains(mSymbol)))
                {
                    context.ReportDiagnosticWhenActive(Diagnostic.Create(rule_S3997, methodDeclaration.FindIdentifierLocation()));
                }
            }
            else
            {
                foreach (int paramIdx in stringUrlParams)
                {
                    context.ReportDiagnosticWhenActive(Diagnostic.Create(rule_S3994,
                                                                         methodDeclaration.ParameterList.Parameters[paramIdx].Type.GetLocation()));
                }
            }
        }