Esempio n. 1
0
        private VBComponentParseResult Parse(VBComponent component)
        {
            try
            {
                VBComponentParseResult cachedValue;
                var name = new QualifiedModuleName(component); // already a performance hit
                if (ParseResultCache.TryGetValue(name, out cachedValue))
                {
                    return(cachedValue);
                }

                var codeModule = component.CodeModule;
                var lines      = codeModule.Lines();

                TokenStreamRewriter rewriter;
                var parseTree = Parse(lines, out rewriter);
                var comments  = ParseComments(name);
                var result    = new VBComponentParseResult(component, parseTree, comments, rewriter);

                ParseResultCache.AddOrUpdate(name, module => result, (qName, module) => result);
                return(result);
            }
            catch (SyntaxErrorException exception)
            {
                if (LogManager.IsLoggingEnabled())
                {
                    LogParseException(component, exception);
                }
                return(null);
            }
            catch (COMException)
            {
                return(null);
            }
        }
 public DeclarationSymbolsListener(VBComponentParseResult result)
     : this(result.QualifiedName, Accessibility.Implicit, result.Component.Type == vbext_ComponentType.vbext_ct_StdModule ? DeclarationType.Module : DeclarationType.Class)
 {
     if (result.Component.Type == vbext_ComponentType.vbext_ct_MSForm)
     {
         DeclareControlsAsMembers(result.Component);
     }
 }
Esempio n. 3
0
        private VBComponentParseResult Parse(VBComponent component, out bool cached)
        {
            try
            {
                VBComponentParseResult cachedValue;
                var name = new QualifiedModuleName(component); // already a performance hit
                if (ParseResultCache.TryGetValue(name, out cachedValue))
                {
                    cached = true;
                    return(cachedValue);
                }

                var codeModule = component.CodeModule;
                var lines      = codeModule.Lines();

                ITokenStream stream;
                var          parseTree = Parse(lines, out stream);
                var          comments  = ParseComments(name);
                var          result    = new VBComponentParseResult(component, parseTree, comments, stream);

                var existing = ParseResultCache.Keys.SingleOrDefault(k => k.Project == name.Project && k.ComponentName == name.ComponentName);
                VBComponentParseResult removed;
                ParseResultCache.TryRemove(existing, out removed);
                ParseResultCache.AddOrUpdate(name, module => result, (qName, module) => result);

                cached = false;
                return(result);
            }
            catch (SyntaxErrorException exception)
            {
                OnParserError(exception, component);
                cached = false;
                return(null);
            }
            catch (COMException)
            {
                cached = false;
                return(null);
            }
        }
        private VBComponentParseResult Parse(VBComponent component, out bool cached)
        {
            try
            {
                VBComponentParseResult cachedValue;
                var name = new QualifiedModuleName(component); // already a performance hit
                if (ParseResultCache.TryGetValue(name, out cachedValue))
                {
                    cached = true;
                    return cachedValue;
                }

                var codeModule = component.CodeModule;
                var lines = codeModule.Lines();

                ITokenStream stream;
                var parseTree = Parse(lines, out stream);
                var comments = ParseComments(name);
                var result = new VBComponentParseResult(component, parseTree, comments, stream);

                var existing = ParseResultCache.Keys.SingleOrDefault(k => k.Project == name.Project && k.ComponentName == name.ComponentName);
                VBComponentParseResult removed;
                ParseResultCache.TryRemove(existing, out removed);
                ParseResultCache.AddOrUpdate(name, module => result, (qName, module) => result);

                cached = false;
                return result;
            }
            catch (SyntaxErrorException exception)
            {
                OnParserError(exception, component);
                cached = false;
                return null;
            }
            catch (COMException)
            {
                cached = false;
                return null;
            }
        }
 public IdentifierReferenceListener(VBComponentParseResult result, Declarations declarations)
     : this(result.QualifiedName, declarations)
 {
 }
Esempio n. 6
0
 public DeclarationSymbolsListener(VBComponentParseResult result)
     : this(result.QualifiedName, Accessibility.Implicit, result.Component.Type)
 {
 }
 public DeclarationSymbolsListener(VBComponentParseResult result)
     : this(result.QualifiedName, Accessibility.Implicit, result.Component.Type)
 {
 }