private void AddBuiltInDeclarations(IReadOnlyList <VBProject> projects)
        {
            var finder = new DeclarationFinder(_state.AllDeclarations, new CommentNode[] { }, new IAnnotation[] { });

            foreach (var item in finder.MatchName(Tokens.Err))
            {
                if (item.IsBuiltIn && item.DeclarationType == DeclarationType.Variable &&
                    item.Accessibility == Accessibility.Global)
                {
                    return;
                }
            }

            var vba = finder.FindProject("VBA");

            if (vba == null)
            {
                // if VBA project is null, we haven't loaded any COM references;
                // we're in a unit test and mock project didn't setup any references.
                return;
            }
            var informationModule = finder.FindStdModule("Information", vba, true);

            Debug.Assert(informationModule != null, "We expect the information module to exist in the VBA project.");
            var customDeclarations = CustomDeclarations.Load(vba, informationModule);

            lock (_state)
            {
                foreach (var customDeclaration in customDeclarations)
                {
                    _state.AddDeclaration(customDeclaration);
                }
            }
        }
Exemple #2
0
        private static Declaration FormsClassModuleFromParserState(DeclarationFinder finder)
        {
            var msForms = finder.FindProject("MSForms");

            if (msForms == null)
            {
                //The corresponding COM reference has not been loaded.
                return(null);
            }

            return(finder.FindClassModule("FormEvents", msForms, true));
        }
        private void UpdateAliasFunctionModulesFromReferencedProjects(DeclarationFinder finder)
        {
            var vba = finder.FindProject("VBA");

            if (vba == null)
            {
                // If the VBA project is null, we haven't loaded any COM references;
                // we're in a unit test and the mock project didn't setup any references.
                return;
            }

            _conversionModule  = finder.FindStdModule("Conversion", vba, true);
            _fileSystemModule  = finder.FindStdModule("FileSystem", vba, true);
            _interactionModule = finder.FindStdModule("Interaction", vba, true);
            _stringsModule     = finder.FindStdModule("Strings", vba, true);
            _dateTimeModule    = finder.FindStdModule("DateTime", vba, true);
            _hiddenModule      = finder.FindStdModule("_HiddenModule", vba, true);
        }
Exemple #4
0
        private void AddBuiltInDeclarations(IReadOnlyList <VBProject> projects)
        {
            SyncComReferences(projects);

            var finder = new DeclarationFinder(_state.AllDeclarations, new CommentNode[] {}, new IAnnotation[] {});

            if (finder.MatchName(Tokens.Err).Any(item => item.IsBuiltIn &&
                                                 item.DeclarationType == DeclarationType.Variable &&
                                                 item.Accessibility == Accessibility.Global))
            {
                return;
            }

            var vba = finder.FindProject("VBA");

            Debug.Assert(vba != null);

            var errObject = finder.FindClass(vba, "ErrObject", true);

            Debug.Assert(errObject != null);

            var qualifiedName = new QualifiedModuleName(vba.IdentifierName, vba.IdentifierName, errObject.IdentifierName);
            var err           = new Declaration(new QualifiedMemberName(qualifiedName, Tokens.Err), vba, "Global", errObject.IdentifierName, true, false, Accessibility.Global, DeclarationType.Variable);

            _state.AddDeclaration(err);

            var debugClassName = new QualifiedModuleName(vba.IdentifierName, vba.IdentifierName, "DebugClass");
            var debugClass     = new Declaration(new QualifiedMemberName(debugClassName, "DebugClass"), vba, "Global", "DebugClass", false, false, Accessibility.Global, DeclarationType.ClassModule);
            var debugObject    = new Declaration(new QualifiedMemberName(debugClassName, "Debug"), vba, "Global", "DebugClass", true, false, Accessibility.Global, DeclarationType.Variable);
            var debugAssert    = new Declaration(new QualifiedMemberName(debugClassName, "Assert"), debugObject, debugObject.Scope, null, false, false, Accessibility.Global, DeclarationType.Procedure);
            var debugPrint     = new Declaration(new QualifiedMemberName(debugClassName, "Print"), debugObject, debugObject.Scope, null, false, false, Accessibility.Global, DeclarationType.Procedure);

            _state.AddDeclaration(debugClass);
            _state.AddDeclaration(debugObject);
            _state.AddDeclaration(debugAssert);
            _state.AddDeclaration(debugPrint);
        }