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