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); } }
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) { }
public DeclarationSymbolsListener(VBComponentParseResult result) : this(result.QualifiedName, Accessibility.Implicit, result.Component.Type) { }
public DeclarationSymbolsListener(VBComponentParseResult result) : this(result.QualifiedName, Accessibility.Implicit, result.Component.Type) { }