protected override IEnumerable <IInspectionResult> DoGetInspectionResults(DeclarationFinder finder)
 {
     return(finder.UserDeclarations(DeclarationType.Module)
            .Concat(finder.UserDeclarations(DeclarationType.Project))
            .Where(declaration => declaration != null)
            .SelectMany(declaration => DoGetInspectionResults(declaration.QualifiedModuleName, finder))
            .ToList());
 }
Exemple #2
0
        public void Execute(IReadOnlyCollection <QualifiedModuleName> modules)
        {
            var toRelsolveSupertypesFor = _declarationFinder.UserDeclarations(DeclarationType.ClassModule)
                                          .Concat(_declarationFinder.UserDeclarations(DeclarationType.Document))
                                          .Where(decl => modules.Contains(decl.QualifiedName.QualifiedModuleName))
                                          .Concat(_declarationFinder.BuiltInDeclarations(DeclarationType.ClassModule));

            foreach (var declaration in toRelsolveSupertypesFor)
            {
                AddImplementedInterface(declaration);
            }
        }
 protected override IEnumerable <IInspectionResult> DoGetInspectionResults(DeclarationFinder finder)
 {
     return(finder.UserDeclarations(DeclarationType.Module)
            .Where(module => module != null)
            .SelectMany(module => DoGetInspectionResults(module.QualifiedModuleName, finder))
            .ToList());
 }
 protected override IDictionary <string, HashSet <string> > GlobalInformation(QualifiedModuleName module, DeclarationFinder finder)
 {
     return(finder.UserDeclarations(DeclarationType.Project)
            .Where(project => project.ProjectId == module.ProjectId)
            .OfType <ProjectDeclaration>()
            .ToDictionary(project => project.ProjectId, ReferencedProjectIds));
 }
 private static IEnumerable <Declaration> EmptyNonInterfaceMethods(DeclarationFinder finder, ICollection <QualifiedModuleName> userInterfaces)
 {
     return(finder
            .UserDeclarations(DeclarationType.Member)
            .Where(member => !userInterfaces.Contains(member.QualifiedModuleName) &&
                   member is ModuleBodyElementDeclaration moduleBodyElement &&
                   !moduleBodyElement.Block.ContainsExecutableStatements()));
 }
        private void DisposeProjectDeclarations(string projectId)
        {
            var projectDeclarations = DeclarationFinder.UserDeclarations(DeclarationType.Project)
                                      .Where(declaration => declaration.ProjectId == projectId)
                                      .OfType <ProjectDeclaration>();

            foreach (var projectDeclaration in projectDeclarations)
            {
                projectDeclaration.Dispose();
            }
        }
Exemple #7
0
        private RenameFolderModel TestModel(string sourceFolder, DeclarationFinder finder)
        {
            var modulesToMove = finder.UserDeclarations(DeclarationType.Module)
                                .OfType <ModuleDeclaration>()
                                .Where(module => module.CustomFolder.Equals(sourceFolder) ||
                                       module.CustomFolder.IsSubFolderOf(sourceFolder))
                                .ToList();

            var initialTarget = sourceFolder.SubFolderName();

            return(new RenameFolderModel(sourceFolder, modulesToMove, initialTarget));
        }
 protected override IEnumerable <Declaration> ObjectionableDeclarations(DeclarationFinder finder)
 {
     return(finder.UserDeclarations(DeclarationType.Variable)
            .Where(declaration => !declaration.IsArray &&
                   !declaration.IsSelfAssigned &&
                   finder.MatchName(declaration.AsTypeName)
                   .All(d => d.DeclarationType != DeclarationType.UserDefinedType) &&
                   !declaration.References
                   .Any(reference => reference.IsAssignment) &&
                   !declaration.References
                   .Any(reference => IsAssignedByRefArgument(reference.ParentScoping, reference, finder))));
 }
        private MoveMultipleFoldersModel TestModel(ICollection <string> sourceFolders, DeclarationFinder finder)
        {
            var modulesBySourceFolder = new Dictionary <string, ICollection <ModuleDeclaration> >();

            foreach (var sourceFolder in sourceFolders.Distinct())
            {
                modulesBySourceFolder[sourceFolder] = finder.UserDeclarations(DeclarationType.Module)
                                                      .OfType <ModuleDeclaration>()
                                                      .Where(module => module.CustomFolder.Equals(sourceFolder) ||
                                                             module.CustomFolder.IsSubFolderOf(sourceFolder))
                                                      .ToList();
            }

            var initialTarget = sourceFolders.FirstOrDefault()?.ParentFolder();

            return(new MoveMultipleFoldersModel(modulesBySourceFolder, initialTarget));
        }
Exemple #10
0
        private IEnumerable <IdentifierReference> FailedLetResolutionResults(DeclarationFinder finder)
        {
            var results = new List <IdentifierReference>();

            foreach (var moduleDeclaration in finder.UserDeclarations(DeclarationType.Module))
            {
                if (moduleDeclaration == null)
                {
                    continue;
                }

                var module = moduleDeclaration.QualifiedModuleName;
                var failedLetCoercionAssignmentsInModule = FailedLetResolutionAssignments(module, finder);
                var possiblyObjectLhsLetAssignmentsWithFailedLetResolutionOnRhs = PossiblyObjectLhsLetAssignmentsWithNonValueOnRhs(module, finder);
                results.AddRange(failedLetCoercionAssignmentsInModule);
                results.AddRange(possiblyObjectLhsLetAssignmentsWithFailedLetResolutionOnRhs);
            }

            return(results);
        }
        protected override bool IsResultReference(IdentifierReference reference, DeclarationFinder finder)
        {
            var qualifiers  = base.GetQualifierCandidates(reference, finder);
            var isQualified = qualifiers.Any();
            var document    = Declaration.GetModuleParent(reference.ParentNonScoping) as DocumentModuleDeclaration;

            var isHostWorkbook = (document?.SupertypeNames.Contains("Workbook") ?? false) &&
                                 (document?.ProjectId?.Equals(reference.QualifiedModuleName.ProjectId) ?? false);

            if (!isQualified)
            {
                // unqualified calls aren't referring to ActiveWorkbook only inside a Workbook module:
                return(!isHostWorkbook);
            }
            else
            {
                if (_applicationCandidates == null)
                {
                    var applicationClass = finder.FindClassModule("Application", base.Excel, includeBuiltIn: true);
                    // note: underscored declarations would be for unqualified calls
                    var workbookClass  = finder.FindClassModule("Workbook", base.Excel, includeBuiltIn: true);
                    var worksheetClass = finder.FindClassModule("Worksheet", base.Excel, includeBuiltIn: true);
                    var hostBook       = finder.UserDeclarations(DeclarationType.Document)
                                         .Cast <DocumentModuleDeclaration>()
                                         .SingleOrDefault(doc => doc.ProjectId.Equals(reference.QualifiedModuleName.ProjectId) &&
                                                          doc.SupertypeNames.Contains("Workbook"));

                    _applicationCandidates = finder.MatchName("Application")
                                             .Where(m => m.Equals(applicationClass) ||
                                                    (m.ParentDeclaration.Equals(workbookClass) && m.DeclarationType.HasFlag(DeclarationType.PropertyGet)) ||
                                                    (m.ParentDeclaration.Equals(worksheetClass) && m.DeclarationType.HasFlag(DeclarationType.PropertyGet)) ||
                                                    (m.ParentDeclaration.Equals(hostBook) && m.DeclarationType.HasFlag(DeclarationType.PropertyGet)))
                                             .ToList();
                }

                // qualified calls are referring to ActiveWorkbook if qualifier is the Application object:
                return(_applicationCandidates.Any(candidate => qualifiers.Any(q => q.Equals(candidate))));
            }
        }
 public override void EnterSubStmt([NotNull] VBAParser.SubStmtContext context)
 {
     _results.Add(new CodeMetricsResult(0, 1, 0));
     _currentMember = _finder.UserDeclarations(DeclarationType.Procedure).Where(d => d.Context == context).First();
 }