Exemplo n.º 1
0
        protected List <Declaration> LoadDeclarationsFromComProject(ComProject type)
        {
            var declarations = new List <Declaration>();

            var projectName = new QualifiedModuleName(type.Name, type.Path, type.Name);
            var project     = new ProjectDeclaration(type, projectName);

            declarations.Add(project);

            foreach (var alias in type.Aliases.Select(item => new AliasDeclaration(item, project, projectName)))
            {
                declarations.Add(alias);
            }

            foreach (var module in type.Members)
            {
                var moduleIdentifier = module.Type == DeclarationType.Enumeration || module.Type == DeclarationType.UserDefinedType
                    ? $"_{module.Name}"
                    : module.Name;
                var moduleName = new QualifiedModuleName(type.Name, type.Path, moduleIdentifier);

                var moduleDeclarations = GetDeclarationsForModule(module, moduleName, project);
                declarations.AddRange(moduleDeclarations);
            }

            return(declarations);
        }
        public SerializableProject SerializableProject(ProjectDeclaration projectDeclaration)
        {
            var finder = _declarationFinderProvider.DeclarationFinder;

            var serializableProject = new SerializableProject(projectDeclaration);

            var projectName = projectDeclaration.QualifiedModuleName;
            var projectLevelDeclarationsByParent = ProjectLevelDeclarations(projectName, finder)
                                                   .Where(declaration => declaration.ParentDeclaration != null)
                                                   .GroupBy(declaration => declaration.ParentDeclaration)
                                                   .ToDictionary();

            if (projectLevelDeclarationsByParent.TryGetValue(projectDeclaration, out var nonModuleProjectChildren))
            {
                foreach (var projectLevelDeclaration in nonModuleProjectChildren)
                {
                    serializableProject.AddDeclaration(new SerializableDeclarationTree(projectLevelDeclaration));
                }
            }

            foreach (var module in ProjectModules(projectName, finder))
            {
                var serializableModule = SerializableModule(module, projectDeclaration, projectLevelDeclarationsByParent, finder);
                serializableProject.AddDeclaration(serializableModule);
            }

            serializableProject.SortDeclarations();
            return(serializableProject);
        }
        private List <Declaration> GetExcelRangeDeclarations()
        {
            var excelDeclaration = new ProjectDeclaration(new QualifiedMemberName(new QualifiedModuleName("Excel",
                                                                                                          "C:\\Program Files\\Microsoft Office\\Root\\Office 16\\EXCEL.EXE", "Excel"), "Excel"), "Excel", true);

            var globalDeclaration = new ClassModuleDeclaration(new QualifiedMemberName(
                                                                   new QualifiedModuleName("Excel",
                                                                                           "C:\\Program Files\\Microsoft Office\\Root\\Office 16\\EXCEL.EXE", "_Global"),
                                                                   "_Global"), excelDeclaration, "_Global", true, null, null);

            var globalCoClassDeclarationAttributes = new Attributes();

            globalCoClassDeclarationAttributes.AddPredeclaredIdTypeAttribute();
            globalCoClassDeclarationAttributes.AddGlobalClassAttribute();

            var globalCoClassDeclaration = new ClassModuleDeclaration(new QualifiedMemberName(
                                                                          new QualifiedModuleName("Excel",
                                                                                                  "C:\\Program Files\\Microsoft Office\\Root\\Office 16\\EXCEL.EXE", "Global"),
                                                                          "Global"), excelDeclaration, "Global", true, null, globalCoClassDeclarationAttributes);

            globalDeclaration.AddSubtype(globalCoClassDeclaration);
            globalCoClassDeclaration.AddSupertype(globalDeclaration);
            globalCoClassDeclaration.AddSupertype("_Global");

            var rangeClassModuleDeclaration = new ClassModuleDeclaration(new QualifiedMemberName(
                                                                             new QualifiedModuleName("Excel",
                                                                                                     "C:\\Program Files\\Microsoft Office\\Root\\Office 16\\EXCEL.EXE", "Range"),
                                                                             "Range"), excelDeclaration, "Range", true, new List <IAnnotation>(), new Attributes());

            var rangeDeclaration = new PropertyGetDeclaration(new QualifiedMemberName(
                                                                  new QualifiedModuleName("Excel",
                                                                                          "C:\\Program Files\\Microsoft Office\\Root\\Office 16\\EXCEL.EXE", "_Global"), "Range"),
                                                              globalDeclaration, globalDeclaration, "Range", null, null, Accessibility.Global, null, Selection.Home,
                                                              false, true, new List <IAnnotation>(), new Attributes());

            var firstParamDeclaration = new ParameterDeclaration(new QualifiedMemberName(
                                                                     new QualifiedModuleName("Excel",
                                                                                             "C:\\Program Files\\Microsoft Office\\Root\\Office 16\\EXCEL.EXE", "_Global"),
                                                                     "Cell1"), rangeDeclaration, "Variant", null, null, false, false);

            var secondParamDeclaration = new ParameterDeclaration(new QualifiedMemberName(
                                                                      new QualifiedModuleName("Excel",
                                                                                              "C:\\Program Files\\Microsoft Office\\Root\\Office 16\\EXCEL.EXE", "_Global"),
                                                                      "Cell2"), rangeDeclaration, "Variant", null, null, true, false);

            rangeDeclaration.AddParameter(firstParamDeclaration);
            rangeDeclaration.AddParameter(secondParamDeclaration);

            return(new List <Declaration>
            {
                excelDeclaration,
                globalDeclaration,
                globalCoClassDeclaration,
                rangeClassModuleDeclaration,
                rangeDeclaration,
                firstParamDeclaration,
                secondParamDeclaration,
            });
        }
Exemplo n.º 4
0
        public SerializableProject(ProjectDeclaration declaration)
        {
            Node = new SerializableDeclaration(declaration);
            var project = (ProjectDeclaration)declaration;

            MajorVersion = project.MajorVersion;
            MinorVersion = project.MinorVersion;
        }
Exemplo n.º 5
0
        public void ReportsRange()
        {
            const string inputCode =
                @"Sub foo()
    Dim arr1() As Variant
    arr1 = Range(""A1:B2"")
End Sub
";

            //Arrange
            var builder = new MockVbeBuilder();
            var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none)
                          .AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode)
                          .AddReference("Excel", string.Empty, true)

                          // Apparently, the COM loader can't find it when it isn't actually loaded...
                          //.AddReference("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", true)
                          .Build();
            var vbe = builder.AddProject(project).Build();

            var mockHost = new Mock <IHostApplication>();

            mockHost.SetupAllProperties();

            var parser = MockParser.Create(vbe.Object, new RubberduckParserState());

            var excelDeclaration = new ProjectDeclaration(new QualifiedMemberName(new QualifiedModuleName("Excel",
                                                                                                          "C:\\Program Files\\Microsoft Office\\Root\\Office 16\\EXCEL.EXE", "Excel"), "Excel"), "Excel", true);

            var listColumnDeclaration = new ClassModuleDeclaration(new QualifiedMemberName(
                                                                       new QualifiedModuleName("Excel",
                                                                                               "C:\\Program Files\\Microsoft Office\\Root\\Office 16\\EXCEL.EXE", "ListColumn"),
                                                                       "ListColumn"), excelDeclaration, "ListColumn", true, null, null);

            var rangeDeclaration =
                new Declaration(
                    new QualifiedMemberName(
                        new QualifiedModuleName("Excel",
                                                "C:\\Program Files\\Microsoft Office\\Root\\Office 16\\EXCEL.EXE", "ListColumn"), "Range"),
                    listColumnDeclaration, "EXCEL.EXE;Excel.ListColumn", "Range", null, false, false, Accessibility.Global,
                    (DeclarationType)3712, false, null, true, null, new Attributes());

            parser.State.AddDeclaration(excelDeclaration);
            parser.State.AddDeclaration(listColumnDeclaration);
            parser.State.AddDeclaration(rangeDeclaration);

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

            var inspection        = new ImplicitActiveSheetReferenceInspection(vbe.Object, parser.State);
            var inspectionResults = inspection.GetInspectionResults();

            Assert.AreEqual(1, inspectionResults.Count());
        }
Exemplo n.º 6
0
        private static void AddReferences(ProjectDeclaration projectDeclaration, List <ReferencePriorityMap> references)
        {
            var projectId = projectDeclaration.ProjectId;

            foreach (var reference in references)
            {
                int priority = reference[projectId];
                projectDeclaration.AddProjectReference(reference.ReferencedProjectId, priority);
            }
        }
Exemplo n.º 7
0
        private Declaration CreateProjectDeclaration(string projectId)
        {
            var project = _state.ProjectsProvider.Project(projectId);

            var qualifiedModuleName = new QualifiedModuleName(project);
            var qualifiedName       = qualifiedModuleName.QualifyMemberName(project.Name);
            var projectDeclaration  = new ProjectDeclaration(qualifiedName, qualifiedName.MemberName, true, project);

            return(projectDeclaration);
        }
Exemplo n.º 8
0
        private SearchResultsViewModel CreateViewModel(ProjectDeclaration project, ProjectDeclaration reference, IEnumerable <IdentifierReference> usages)
        {
            var results = usages.Select(usage =>
                                        new SearchResultItem(usage.ParentNonScoping,
                                                             new NavigateCodeEventArgs(usage.QualifiedModuleName, usage.Selection),
                                                             GetModuleLine(usage.QualifiedModuleName, usage.Selection.StartLine)));

            var viewModel = new SearchResultsViewModel(_navigateCommand,
                                                       string.Format(RubberduckUI.SearchResults_AllReferencesTabFormat, reference.IdentifierName), project, results);

            return(viewModel);
        }
        private Declaration CreateProjectDeclaration(IVBProject project)
        {
            var qualifiedModuleName = new QualifiedModuleName(project);
            var qualifiedName       = qualifiedModuleName.QualifyMemberName(project.Name);
            var projectId           = qualifiedModuleName.ProjectId;
            var projectDeclaration  = new ProjectDeclaration(qualifiedName, qualifiedName.MemberName, true, project);
            var references          = ProjectReferences(projectId);

            AddReferences(projectDeclaration, references);

            return(projectDeclaration);
        }
Exemplo n.º 10
0
 public AddRemoveReferencesModel(ProjectDeclaration project, IEnumerable <ReferenceModel> references, ReferenceSettings settings)
 {
     Settings   = settings;
     Project    = project;
     References = references.ToList();
     try
     {
         ApplySettingsToModel();
     }
     catch
     {
         //Meh.
     }
 }
Exemplo n.º 11
0
        private Declaration CreateProjectDeclaration(QualifiedModuleName projectQualifiedName, VBProject project)
        {
            var qualifiedName      = projectQualifiedName.QualifyMemberName(project.Name);
            var projectId          = qualifiedName.QualifiedModuleName.ProjectId;
            var projectDeclaration = new ProjectDeclaration(qualifiedName, project.Name);
            var references         = _projectReferences.Where(projectContainingReference => projectContainingReference.ContainsKey(projectId));

            foreach (var reference in references)
            {
                int priority = reference[projectId];
                projectDeclaration.AddProjectReference(reference.ReferencedProjectId, priority);
            }
            return(projectDeclaration);
        }
Exemplo n.º 12
0
 public AddRemoveReferencesModel(RubberduckParserState state, ProjectDeclaration project, IEnumerable <ReferenceModel> references, ReferenceSettings settings)
 {
     State      = state;
     Settings   = settings;
     Project    = project;
     References = references.ToList();
     try
     {
         ApplySettingsToModel();
     }
     catch
     {
         //Meh.
     }
 }
        public IAddRemoveReferencesModel Show(ProjectDeclaration project)
        {
            if (project is null)
            {
                return(null);
            }

            Model.Project         = project;
            _view.ViewModel.Model = Model;

            _view.ShowDialog();
            if (_view.DialogResult != DialogResult.OK)
            {
                return(null);
            }

            Model.NewReferences = _view.ViewModel.ProjectReferences.SourceCollection.OfType <ReferenceModel>().ToList();
            return(Model);
        }
        private List <Declaration> LoadDeclarationsFromLibrary(ReferenceInfo reference)
        {
            var libraryPath = reference.FullPath;
            // Failure to load might mean that it's a "normal" VBProject that will get parsed by us anyway.
            var typeLibrary = GetTypeLibrary(libraryPath);

            if (typeLibrary == null)
            {
                return(new List <Declaration>());
            }

            var declarations = new List <Declaration>();

            var type = new ComProject(typeLibrary, libraryPath);

            var projectName = new QualifiedModuleName(type.Name, libraryPath, type.Name);
            var project     = new ProjectDeclaration(type, projectName);

            declarations.Add(project);

            foreach (var alias in type.Aliases.Select(item => new AliasDeclaration(item, project, projectName)))
            {
                declarations.Add(alias);
            }

            foreach (var module in type.Members)
            {
                var moduleIdentifier = module.Type == DeclarationType.Enumeration || module.Type == DeclarationType.UserDefinedType
                                        ? $"_{module.Name}"
                                        : module.Name;
                var moduleName = new QualifiedModuleName(reference.Name, libraryPath, moduleIdentifier);

                var moduleDeclarations = GetDeclarationsForModule(module, moduleName, project);
                declarations.AddRange(moduleDeclarations);
            }

            return(declarations);
        }
Exemplo n.º 15
0
        private Declaration CreateProjectDeclaration(QualifiedModuleName projectQualifiedName, VBProject project)
        {
            var qualifiedName      = projectQualifiedName.QualifyMemberName(project.Name);
            var projectId          = qualifiedName.QualifiedModuleName.ProjectId;
            var projectDeclaration = new ProjectDeclaration(qualifiedName, project.Name, isBuiltIn: false);

            var references = new List <ReferencePriorityMap>();

            foreach (var item in _projectReferences)
            {
                if (item.ContainsKey(projectId))
                {
                    references.Add(item);
                }
            }

            foreach (var reference in references)
            {
                int priority = reference[projectId];
                projectDeclaration.AddProjectReference(reference.ReferencedProjectId, priority);
            }
            return(projectDeclaration);
        }
        public void FindAllReferences(ProjectDeclaration project, ReferenceInfo reference)
        {
            if (_state.Status != ParserState.Ready)
            {
                _logger.Debug($"ParserState is {_state.Status}. This action requires a Ready state.");
                return;
            }

            var usages = _state.DeclarationFinder.FindAllReferenceUsesInProject(project, reference, out var referenceProject).ToList();

            if (referenceProject == null)
            {
                return;
            }
            if (!Confirm(referenceProject.IdentifierName, usages.Count))
            {
                return;
            }

            var viewModel = CreateViewModel(project, referenceProject.IdentifierName, usages);

            ShowResults(viewModel);
        }
Exemplo n.º 17
0
        private List <Declaration> GetBuiltInDeclarations()
        {
            var vbaDeclaration = new ProjectDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", MockVbeBuilder.LibraryPathVBA, "VBA"), "VBA"),
                "VBA",
                false, null);

            var conversionModule = new ProceduralModuleDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", MockVbeBuilder.LibraryPathVBA, "Conversion"), "Conversion"),
                vbaDeclaration,
                "Conversion",
                false,
                new List <IAnnotation>(),
                new Attributes());

            var fileSystemModule = new ProceduralModuleDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", MockVbeBuilder.LibraryPathVBA, "FileSystem"), "FileSystem"),
                vbaDeclaration,
                "FileSystem",
                false,
                new List <IAnnotation>(),
                new Attributes());

            var interactionModule = new ProceduralModuleDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", MockVbeBuilder.LibraryPathVBA, "Interaction"), "Interaction"),
                vbaDeclaration,
                "Interaction",
                false,
                new List <IAnnotation>(),
                new Attributes());

            var stringsModule = new ProceduralModuleDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", MockVbeBuilder.LibraryPathVBA, "Strings"), "Strings"),
                vbaDeclaration,
                "Strings",
                false,
                new List <IAnnotation>(),
                new Attributes());

            var dateTimeModule = new ProceduralModuleDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", MockVbeBuilder.LibraryPathVBA, "DateTime"), "DateTime"),
                vbaDeclaration,
                "Strings",
                false,
                new List <IAnnotation>(),
                new Attributes());

            var hiddenModule = new ProceduralModuleDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", MockVbeBuilder.LibraryPathVBA, "_HiddenModule"), "_HiddenModule"),
                vbaDeclaration,
                "_HiddenModule",
                false,
                new List <IAnnotation>(),
                new Attributes());


            var commandFunction = new FunctionDeclaration(
                new QualifiedMemberName(interactionModule.QualifiedName.QualifiedModuleName, "_B_var_Command"),
                interactionModule,
                interactionModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var environFunction = new FunctionDeclaration(
                new QualifiedMemberName(interactionModule.QualifiedName.QualifiedModuleName, "_B_var_Environ"),
                interactionModule,
                interactionModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var rtrimFunction = new FunctionDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "_B_var_RTrim"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var chrFunction = new FunctionDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "_B_var_Chr"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var formatFunction = new FunctionDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "_B_var_Format"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var firstFormatParam = new ParameterDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "Expression"),
                formatFunction,
                "Variant",
                null,
                null,
                false,
                true);

            var secondFormatParam = new ParameterDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "Format"),
                formatFunction,
                "Variant",
                null,
                null,
                true,
                true);

            var thirdFormatParam = new ParameterDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "FirstDayOfWeek"),
                formatFunction,
                "VbDayOfWeek",
                null,
                null,
                true,
                false);

            formatFunction.AddParameter(firstFormatParam);
            formatFunction.AddParameter(secondFormatParam);
            formatFunction.AddParameter(thirdFormatParam);

            var rightFunction = new FunctionDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "_B_var_Right"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var firstRightParam = new ParameterDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "String"),
                rightFunction,
                "Variant",
                null,
                null,
                false,
                true);

            rightFunction.AddParameter(firstRightParam);

            var lcaseFunction = new FunctionDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "_B_var_LCase"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var leftbFunction = new FunctionDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "_B_var_LeftB"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var firstLeftBParam = new ParameterDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "String"),
                leftbFunction,
                "Variant",
                null,
                null,
                false,
                true);

            leftbFunction.AddParameter(firstLeftBParam);

            var chrwFunction = new FunctionDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "_B_var_ChrW"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var leftFunction = new FunctionDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "_B_var_Left"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var firstLeftParam = new ParameterDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "String"),
                leftFunction,
                "Variant",
                null,
                null,
                false,
                true);

            leftFunction.AddParameter(firstLeftParam);

            var rightbFunction = new FunctionDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "_B_var_RightB"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var firstRightBParam = new ParameterDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "String"),
                rightbFunction,
                "Variant",
                null,
                null,
                false,
                true);

            rightbFunction.AddParameter(firstRightBParam);

            var midbFunction = new FunctionDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "_B_var_MidB"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var firstMidBParam = new ParameterDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "String"),
                midbFunction,
                "Variant",
                null,
                null,
                false,
                true);

            var secondMidBParam = new ParameterDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "Start"),
                midbFunction,
                "Long",
                null,
                null,
                false,
                false);

            midbFunction.AddParameter(firstMidBParam);
            midbFunction.AddParameter(secondMidBParam);

            var ucaseFunction = new FunctionDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "_B_var_UCase"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var trimFunction = new FunctionDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "_B_var_Trim"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var ltrimFunction = new FunctionDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "_B_var_LTrim"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var midFunction = new FunctionDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "_B_var_Mid"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var firstMidParam = new ParameterDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "String"),
                midFunction,
                "Variant",
                null,
                null,
                false,
                true);

            var secondMidParam = new ParameterDeclaration(
                new QualifiedMemberName(stringsModule.QualifiedName.QualifiedModuleName, "Start"),
                midFunction,
                "Long",
                null,
                null,
                false,
                false);

            midFunction.AddParameter(firstMidParam);
            midFunction.AddParameter(secondMidParam);

            var hexFunction = new FunctionDeclaration(
                new QualifiedMemberName(conversionModule.QualifiedName.QualifiedModuleName, "_B_var_Hex"),
                conversionModule,
                conversionModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var octFunction = new FunctionDeclaration(
                new QualifiedMemberName(conversionModule.QualifiedName.QualifiedModuleName, "_B_var_Oct"),
                conversionModule,
                conversionModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var errorFunction = new FunctionDeclaration(
                new QualifiedMemberName(conversionModule.QualifiedName.QualifiedModuleName, "_B_var_Error"),
                conversionModule,
                conversionModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var strFunction = new FunctionDeclaration(
                new QualifiedMemberName(conversionModule.QualifiedName.QualifiedModuleName, "_B_var_Str"),
                conversionModule,
                conversionModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var curDirFunction = new FunctionDeclaration(
                new QualifiedMemberName(fileSystemModule.QualifiedName.QualifiedModuleName, "_B_var_CurDir"),
                fileSystemModule,
                fileSystemModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var datePropertyGet = new PropertyGetDeclaration(
                new QualifiedMemberName(dateTimeModule.QualifiedName.QualifiedModuleName, "Date"),
                dateTimeModule,
                dateTimeModule,
                "Variant",
                null,
                string.Empty,
                Accessibility.Global,
                null,
                null,
                new Selection(),
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());


            var timePropertyGet = new PropertyGetDeclaration(
                new QualifiedMemberName(dateTimeModule.QualifiedName.QualifiedModuleName, "Time"),
                dateTimeModule,
                dateTimeModule,
                "Variant",
                null,
                string.Empty,
                Accessibility.Global,
                null,
                null,
                new Selection(),
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var inputbFunction = new FunctionDeclaration(
                new QualifiedMemberName(hiddenModule.QualifiedName.QualifiedModuleName, "_B_var_InputB"),
                hiddenModule,
                hiddenModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var firstInputBParam = new ParameterDeclaration(
                new QualifiedMemberName(hiddenModule.QualifiedName.QualifiedModuleName, "Number"),
                inputbFunction,
                "Long",
                null,
                null,
                false,
                true);

            var secondInputBParam = new ParameterDeclaration(
                new QualifiedMemberName(hiddenModule.QualifiedName.QualifiedModuleName, "FileNumber"),
                inputbFunction,
                "Integer",
                null,
                null,
                false,
                true);

            inputbFunction.AddParameter(firstInputBParam);
            inputbFunction.AddParameter(secondInputBParam);

            var inputFunction = new FunctionDeclaration(
                new QualifiedMemberName(hiddenModule.QualifiedName.QualifiedModuleName, "_B_var_Input"),
                hiddenModule,
                hiddenModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                null,
                Selection.Home,
                false,
                false,
                new List <IAnnotation>(),
                new Attributes());

            var firstInputParam = new ParameterDeclaration(
                new QualifiedMemberName(hiddenModule.QualifiedName.QualifiedModuleName, "Number"),
                inputFunction,
                "Long",
                null,
                null,
                false,
                true);

            var secondInputParam = new ParameterDeclaration(
                new QualifiedMemberName(hiddenModule.QualifiedName.QualifiedModuleName, "FileNumber"),
                inputFunction,
                "Integer",
                null,
                null,
                false,
                true);

            inputFunction.AddParameter(firstInputParam);
            inputFunction.AddParameter(secondInputParam);

            return(new List <Declaration>
            {
                vbaDeclaration,
                conversionModule,
                fileSystemModule,
                interactionModule,
                stringsModule,
                dateTimeModule,
                hiddenModule,
                commandFunction,
                environFunction,
                rtrimFunction,
                chrFunction,
                formatFunction,
                firstFormatParam,
                secondFormatParam,
                thirdFormatParam,
                rightFunction,
                firstRightParam,
                lcaseFunction,
                leftbFunction,
                firstLeftBParam,
                chrwFunction,
                leftFunction,
                firstLeftParam,
                rightbFunction,
                firstRightBParam,
                midbFunction,
                firstMidBParam,
                secondMidBParam,
                ucaseFunction,
                trimFunction,
                ltrimFunction,
                midFunction,
                firstMidParam,
                secondMidParam,
                hexFunction,
                octFunction,
                errorFunction,
                strFunction,
                curDirFunction,
                datePropertyGet,
                timePropertyGet,
                inputbFunction,
                firstInputBParam,
                secondInputBParam,
                inputFunction,
                firstInputParam,
                secondInputParam
            });
        }
 private static HashSet <string> ReferencedProjectIds(ProjectDeclaration project)
 {
     return(project.ProjectReferences
            .Select(reference => reference.ReferencedProjectId)
            .ToHashSet());
 }
        public AddRemoveReferencesPresenter Create(ProjectDeclaration project)
        {
            if (project is null)
            {
                return(null);
            }

            AddRemoveReferencesModel model = null;

            try
            {
                Cursor.Current = Cursors.WaitCursor;

                var refs = new Dictionary <RegisteredLibraryKey, RegisteredLibraryInfo>();
                // Iterating the returned libraries here instead of just .ToDictionary() using because we can't trust that the registry doesn't contain errors.
                foreach (var reference in _finder.FindRegisteredLibraries())
                {
                    if (refs.ContainsKey(reference.UniqueId))
                    {
                        _logger.Warn(
                            $"Duplicate registry definition for {reference.Guid} version {reference.Version}.");
                        continue;
                    }

                    refs.Add(reference.UniqueId, reference);
                }

                var models = new Dictionary <RegisteredLibraryKey, ReferenceModel>();
                using (var references = project.Project?.References)
                {
                    if (references is null)
                    {
                        return(null);
                    }

                    var priority = 1;
                    foreach (var reference in references)
                    {
                        var guid = Guid.TryParse(reference.Guid, out var result) ? result : Guid.Empty;

                        // This avoids collisions when the parse actually succeeds, but the result is empty.
                        if (guid.Equals(Guid.Empty))
                        {
                            guid = new Guid(priority, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
                        }

                        var libraryId = new RegisteredLibraryKey(guid, reference.Major, reference.Minor);

                        // TODO: If for some reason the VBA reference is broken, we could technically use this to repair it. Just a thought...
                        var adding = refs.ContainsKey(libraryId)
                            ? new ReferenceModel(refs[libraryId], reference, priority++)
                            : new ReferenceModel(reference, priority++);

                        adding.IsUsed = adding.IsBuiltIn ||
                                        _state.DeclarationFinder.IsReferenceUsedInProject(project,
                                                                                          adding.ToReferenceInfo());

                        models.Add(libraryId, adding);
                        reference.Dispose();
                    }
                }

                foreach (var reference in refs.Where(library =>
                                                     (_use64BitPaths || library.Value.Has32BitVersion) &&
                                                     !models.ContainsKey(library.Key)))
                {
                    models.Add(reference.Key, new ReferenceModel(reference.Value));
                }

                var settings = _settings.Create();
                model = new AddRemoveReferencesModel(project, models.Values, settings);
                if (AddRemoveReferencesViewModel.HostHasProjects)
                {
                    model.References.AddRange(GetUserProjectFolderModels(model.Settings).Where(proj =>
                                                                                               !model.References.Any(item =>
                                                                                                                     item.FullPath.Equals(proj.FullPath, StringComparison.OrdinalIgnoreCase))));
                }
            }
            catch (Exception ex)
            {
                _logger.Warn(ex, "Unexpected exception attempting to create AddRemoveReferencesModel.");
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }

            return((model != null)
                ? new AddRemoveReferencesPresenter(
                       new AddRemoveReferencesDialog(new AddRemoveReferencesViewModel(model, _reconciler, _browser)))
                : null);
        }
Exemplo n.º 20
0
        public List <Declaration> LoadDeclarationsFromLibrary()
        {
            ITypeLib typeLibrary;

            // Failure to load might mean that it's a "normal" VBProject that will get parsed by us anyway.
            LoadTypeLibEx(_path, REGKIND.REGKIND_NONE, out typeLibrary);
            if (typeLibrary == null)
            {
                return(_declarations);
            }

            var type = new ComProject(typeLibrary)
            {
                Path = _path
            };

            var projectName = new QualifiedModuleName(type.Name, _path, type.Name);
            var project     = new ProjectDeclaration(type, projectName);

            _serialized = new SerializableProject(project);
            _declarations.Add(project);

            foreach (var alias in type.Aliases.Select(item => new AliasDeclaration(item, project, projectName)))
            {
                _declarations.Add(alias);
                _serialized.AddDeclaration(new SerializableDeclarationTree(alias));
            }

            foreach (var module in type.Members)
            {
                var moduleName = new QualifiedModuleName(_referenceName, _path,
                                                         module.Type == DeclarationType.Enumeration || module.Type == DeclarationType.UserDefinedType
                        ? string.Format("_{0}", module.Name)
                        : module.Name);

                var declaration = CreateModuleDeclaration(module, moduleName, project, GetModuleAttributes(module));
                var moduleTree  = new SerializableDeclarationTree(declaration);
                _declarations.Add(declaration);
                _serialized.AddDeclaration(moduleTree);

                var membered = module as IComTypeWithMembers;
                if (membered != null)
                {
                    CreateMemberDeclarations(membered.Members, moduleName, declaration, moduleTree, membered.DefaultMember);
                    var coClass = membered as ComCoClass;
                    if (coClass != null)
                    {
                        CreateMemberDeclarations(coClass.SourceMembers, moduleName, declaration, moduleTree, coClass.DefaultMember, true);
                    }
                }

                var enumeration = module as ComEnumeration;
                if (enumeration != null)
                {
                    var enumDeclaration = new Declaration(enumeration, declaration, moduleName);
                    _declarations.Add(enumDeclaration);
                    var members = enumeration.Members.Select(e => new Declaration(e, enumDeclaration, moduleName)).ToList();
                    _declarations.AddRange(members);

                    var enumTree = new SerializableDeclarationTree(enumDeclaration);
                    moduleTree.AddChildTree(enumTree);
                    enumTree.AddChildren(members);
                }

                var structure = module as ComStruct;
                if (structure != null)
                {
                    var typeDeclaration = new Declaration(structure, declaration, moduleName);
                    _declarations.Add(typeDeclaration);
                    var members = structure.Fields.Select(f => new Declaration(f, typeDeclaration, moduleName)).ToList();
                    _declarations.AddRange(members);

                    var typeTree = new SerializableDeclarationTree(typeDeclaration);
                    moduleTree.AddChildTree(typeTree);
                    typeTree.AddChildren(members);
                }

                var fields = module as IComTypeWithFields;
                if (fields == null || !fields.Fields.Any())
                {
                    continue;
                }
                var declarations = fields.Fields.Select(f => new Declaration(f, declaration, projectName)).ToList();
                _declarations.AddRange(declarations);
                moduleTree.AddChildren(declarations);
            }
            _state.BuiltInDeclarationTrees.TryAdd(_serialized);
            return(_declarations);
        }
        private static ICollection <Declaration> GetDeclarationsForModule(IComType module, QualifiedModuleName moduleName, ProjectDeclaration project)
        {
            var declarations = new List <Declaration>();

            var attributes        = GetModuleAttributes(module);
            var moduleDeclaration = CreateModuleDeclaration(module, moduleName, project, attributes);

            declarations.Add(moduleDeclaration);

            switch (module)
            {
            case IComTypeWithMembers membered:
                var(memberDeclarations, defaultMember) =
                    GetDeclarationsForProperties(membered.Properties, moduleName, moduleDeclaration);
                declarations.AddRange(memberDeclarations);
                AssignDefaultMember(moduleDeclaration, defaultMember);

                (memberDeclarations, defaultMember) = GetDeclarationsForMembers(membered.Members, moduleName,
                                                                                moduleDeclaration, membered.DefaultMember);
                declarations.AddRange(memberDeclarations);
                AssignDefaultMember(moduleDeclaration, defaultMember);

                if (membered is ComCoClass coClass)
                {
                    (memberDeclarations, defaultMember) = GetDeclarationsForMembers(coClass.SourceMembers,
                                                                                    moduleName, moduleDeclaration, coClass.DefaultMember, true);
                    declarations.AddRange(memberDeclarations);
                    AssignDefaultMember(moduleDeclaration, defaultMember);
                }

                break;

            case ComEnumeration enumeration:
            {
                var enumDeclaration = new Declaration(enumeration, moduleDeclaration, moduleName);
                declarations.Add(enumDeclaration);
                var members = enumeration.Members
                              .Select(enumMember => new ValuedDeclaration(enumMember, enumDeclaration, moduleName))
                              .ToList();
                declarations.AddRange(members);
                break;
            }

            case ComStruct structure:
            {
                var typeDeclaration = new Declaration(structure, moduleDeclaration, moduleName);
                declarations.Add(typeDeclaration);
                var members = structure.Fields
                              .Select(f => new Declaration(f, typeDeclaration, moduleName))
                              .ToList();
                declarations.AddRange(members);
                break;
            }
            }

            if (module is IComTypeWithFields fields && fields.Fields.Any())
            {
                var projectName       = project.QualifiedModuleName;
                var fieldDeclarations = new List <Declaration>();
                foreach (var field in fields.Fields)
                {
                    fieldDeclarations.Add(field.Type == DeclarationType.Constant
                        ? new ValuedDeclaration(field, moduleDeclaration, projectName)
                        : new Declaration(field, moduleDeclaration, projectName));
                }

                declarations.AddRange(fieldDeclarations);
            }

            return(declarations);
        }
        private SerializableDeclarationTree SerializableModule(QualifiedModuleName module, ProjectDeclaration project, Dictionary <Declaration, List <Declaration> > projectLevelDeclarationsByParent, DeclarationFinder finder)
        {
            var members         = finder.Members(module).ToList();
            var membersByParent = members.Where(declaration => declaration.ParentDeclaration != null)
                                  .GroupBy(declaration => declaration.ParentDeclaration)
                                  .ToDictionary();

            var moduleDeclaration  = membersByParent[project].Single();
            var serializableModule = SerializableTree(moduleDeclaration, membersByParent);

            if (projectLevelDeclarationsByParent.TryGetValue(moduleDeclaration, out var memberDeclarationsOnProjectLevel))
            {
                serializableModule.AddChildren(memberDeclarationsOnProjectLevel);
            }

            return(serializableModule);
        }
Exemplo n.º 23
0
        private List <Declaration> GetBuiltInDeclarations()
        {
            var vbaDeclaration = new ProjectDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "VBA"), "VBA"),
                "VBA",
                true);

            var conversionModule = new ProceduralModuleDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Conversion"), "Conversion"),
                vbaDeclaration,
                "Conversion",
                true,
                new List <IAnnotation>(),
                new Attributes());

            var fileSystemModule = new ProceduralModuleDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "FileSystem"), "FileSystem"),
                vbaDeclaration,
                "FileSystem",
                true,
                new List <IAnnotation>(),
                new Attributes());

            var interactionModule = new ProceduralModuleDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Interaction"), "Interaction"),
                vbaDeclaration,
                "Interaction",
                true,
                new List <IAnnotation>(),
                new Attributes());

            var stringsModule = new ProceduralModuleDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "Strings"),
                vbaDeclaration,
                "Strings",
                true,
                new List <IAnnotation>(),
                new Attributes());

            var commandFunction = new FunctionDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Interaction"), "_B_var_Command"),
                interactionModule,
                interactionModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                Selection.Home,
                false,
                true,
                new List <IAnnotation>(),
                new Attributes());

            var environFunction = new FunctionDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Interaction"), "_B_var_Environ"),
                interactionModule,
                interactionModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                Selection.Home,
                false,
                true,
                new List <IAnnotation>(),
                new Attributes());

            var rtrimFunction = new FunctionDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "_B_var_RTrim"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                Selection.Home,
                false,
                true,
                new List <IAnnotation>(),
                new Attributes());

            var chrFunction = new FunctionDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "_B_var_Chr"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                Selection.Home,
                false,
                true,
                new List <IAnnotation>(),
                new Attributes());

            var formatFunction = new FunctionDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "_B_var_Format"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                Selection.Home,
                false,
                true,
                new List <IAnnotation>(),
                new Attributes());

            var firstFormatParam = new ParameterDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "Expression"),
                formatFunction,
                "Variant",
                null,
                null,
                false,
                true);

            var secondFormatParam = new ParameterDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "Format"),
                formatFunction,
                "Variant",
                null,
                null,
                true,
                true);

            var thirdFormatParam = new ParameterDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "FirstDayOfWeek"),
                formatFunction,
                "VbDayOfWeek",
                null,
                null,
                true,
                false);

            formatFunction.AddParameter(firstFormatParam);
            formatFunction.AddParameter(secondFormatParam);
            formatFunction.AddParameter(thirdFormatParam);

            var rightFunction = new FunctionDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "_B_var_Right"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                Selection.Home,
                false,
                true,
                new List <IAnnotation>(),
                new Attributes());

            var firstRightParam = new ParameterDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "String"),
                rightFunction,
                "Variant",
                null,
                null,
                false,
                true);

            rightFunction.AddParameter(firstRightParam);

            var lcaseFunction = new FunctionDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "_B_var_LCase"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                Selection.Home,
                false,
                true,
                new List <IAnnotation>(),
                new Attributes());

            var leftbFunction = new FunctionDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "_B_var_LeftB"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                Selection.Home,
                false,
                true,
                new List <IAnnotation>(),
                new Attributes());

            var firstLeftBParam = new ParameterDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "String"),
                leftbFunction,
                "Variant",
                null,
                null,
                false,
                true);

            leftbFunction.AddParameter(firstLeftBParam);

            var chrwFunction = new FunctionDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "_B_var_ChrW"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                Selection.Home,
                false,
                true,
                new List <IAnnotation>(),
                new Attributes());

            var leftFunction = new FunctionDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "_B_var_Left"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                Selection.Home,
                false,
                true,
                new List <IAnnotation>(),
                new Attributes());

            var firstLeftParam = new ParameterDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "String"),
                leftFunction,
                "Variant",
                null,
                null,
                false,
                true);

            leftFunction.AddParameter(firstLeftParam);

            var rightbFunction = new FunctionDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "_B_var_RightB"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                Selection.Home,
                false,
                true,
                new List <IAnnotation>(),
                new Attributes());

            var firstRightBParam = new ParameterDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "String"),
                rightbFunction,
                "Variant",
                null,
                null,
                false,
                true);

            rightbFunction.AddParameter(firstRightBParam);

            var midbFunction = new FunctionDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "_B_var_MidB"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                Selection.Home,
                false,
                true,
                new List <IAnnotation>(),
                new Attributes());

            var firstMidBParam = new ParameterDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "String"),
                midbFunction,
                "Variant",
                null,
                null,
                false,
                true);

            var secondMidBParam = new ParameterDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "Start"),
                midbFunction,
                "Long",
                null,
                null,
                false,
                false);

            midbFunction.AddParameter(firstMidBParam);
            midbFunction.AddParameter(secondMidBParam);

            var ucaseFunction = new FunctionDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "_B_var_UCase"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                Selection.Home,
                false,
                true,
                new List <IAnnotation>(),
                new Attributes());

            var trimFunction = new FunctionDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "_B_var_Trim"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                Selection.Home,
                false,
                true,
                new List <IAnnotation>(),
                new Attributes());

            var ltrimFunction = new FunctionDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "_B_var_LTrim"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                Selection.Home,
                false,
                true,
                new List <IAnnotation>(),
                new Attributes());

            var midFunction = new FunctionDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "_B_var_Mid"),
                stringsModule,
                stringsModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                Selection.Home,
                false,
                true,
                new List <IAnnotation>(),
                new Attributes());

            var firstMidParam = new ParameterDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "String"),
                midbFunction,
                "Variant",
                null,
                null,
                false,
                true);

            var secondMidParam = new ParameterDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "Start"),
                midbFunction,
                "Long",
                null,
                null,
                false,
                false);

            midFunction.AddParameter(firstMidParam);
            midFunction.AddParameter(secondMidParam);

            var hexFunction = new FunctionDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "_B_var_Hex"),
                conversionModule,
                conversionModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                Selection.Home,
                false,
                true,
                new List <IAnnotation>(),
                new Attributes());

            var octFunction = new FunctionDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "_B_var_Oct"),
                conversionModule,
                conversionModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                Selection.Home,
                false,
                true,
                new List <IAnnotation>(),
                new Attributes());

            var errorFunction = new FunctionDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "_B_var_Error"),
                conversionModule,
                conversionModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                Selection.Home,
                false,
                true,
                new List <IAnnotation>(),
                new Attributes());

            var strFunction = new FunctionDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "_B_var_Str"),
                conversionModule,
                conversionModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                Selection.Home,
                false,
                true,
                new List <IAnnotation>(),
                new Attributes());

            var curDirFunction = new FunctionDeclaration(
                new QualifiedMemberName(new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "_B_var_CurDir"),
                fileSystemModule,
                fileSystemModule,
                "Variant",
                null,
                null,
                Accessibility.Global,
                null,
                Selection.Home,
                false,
                true,
                new List <IAnnotation>(),
                new Attributes());

            return(new List <Declaration>
            {
                vbaDeclaration,
                conversionModule,
                fileSystemModule,
                interactionModule,
                stringsModule,
                commandFunction,
                environFunction,
                rtrimFunction,
                chrFunction,
                formatFunction,
                firstFormatParam,
                secondFormatParam,
                thirdFormatParam,
                rightFunction,
                firstRightParam,
                lcaseFunction,
                leftbFunction,
                firstLeftBParam,
                chrwFunction,
                leftFunction,
                firstLeftParam,
                rightbFunction,
                firstRightBParam,
                midbFunction,
                firstMidBParam,
                secondMidBParam,
                ucaseFunction,
                trimFunction,
                ltrimFunction,
                midFunction,
                firstMidParam,
                secondMidParam,
                hexFunction,
                octFunction,
                errorFunction,
                strFunction,
                curDirFunction
            });
        }