Rubberduck.Inspections.ParameterCanBeByValInspection.GetInspectionResults C# (CSharp) Method

GetInspectionResults() public method

public GetInspectionResults ( ) : IEnumerable
return IEnumerable
        public override IEnumerable<InspectionResultBase> GetInspectionResults()
        {
            var declarations = UserDeclarations.ToList();

            IEnumerable<Declaration> interfaceMembers = null;
            interfaceMembers = declarations.FindInterfaceMembers()
                .Concat(declarations.FindInterfaceImplementationMembers())
                .ToList();

            var formEventHandlerScopes = declarations.FindFormEventHandlers()
                .Select(handler => handler.Scope);

            var eventScopes = declarations.Where(item => 
                !item.IsBuiltIn && item.DeclarationType == DeclarationType.Event)
                .Select(e => e.Scope);

            var declareScopes = declarations.Where(item => 
                    item.DeclarationType == DeclarationType.LibraryFunction 
                    || item.DeclarationType == DeclarationType.LibraryProcedure)
                .Select(e => e.Scope);

            var ignoredScopes = formEventHandlerScopes.Concat(eventScopes).Concat(declareScopes);

            var issues = declarations.Where(declaration =>
                !declaration.IsArray()
                && !ignoredScopes.Contains(declaration.ParentScope)
                && declaration.DeclarationType == DeclarationType.Parameter
                && !interfaceMembers.Select(m => m.Scope).Contains(declaration.ParentScope)
                && ((VBAParser.ArgContext) declaration.Context).BYVAL() == null
                && !IsUsedAsByRefParam(declarations, declaration)
                && !declaration.References.Any(reference => reference.IsAssignment))
                .Select(issue => new ParameterCanBeByValInspectionResult(this, issue, ((dynamic)issue.Context).ambiguousIdentifier(), issue.QualifiedName));

            return issues;
        }

Usage Example

        public void ParameterCanByByVal_ReturnsResult_Multiple()
        {
            const string inputCode =
@"Sub Foo(arg1 As String, arg2 As Date)
End Sub";

            //Arrange
            var builder = new MockVbeBuilder();
            VBComponent component;
            var vbe = builder.BuildFromSingleStandardModule(inputCode, out component);
            var mockHost = new Mock<IHostApplication>();
            mockHost.SetupAllProperties();
            var parser = MockParser.Create(vbe.Object, new RubberduckParserState());

            parser.Parse();
            if (parser.State.Status == ParserState.Error) { Assert.Inconclusive("Parser Error"); }

            var inspection = new ParameterCanBeByValInspection(parser.State);
            var inspectionResults = inspection.GetInspectionResults();

            Assert.AreEqual(2, inspectionResults.Count());
        }
All Usage Examples Of Rubberduck.Inspections.ParameterCanBeByValInspection::GetInspectionResults