public void Initialize(Microsoft.Vbe.Interop.VBE vbe) { if (_parser != null) { throw new InvalidOperationException("ParserState is already initialized."); } _vbe = new VBE(vbe); _vbeEvents = VBEEvents.Initialize(_vbe); var declarationFinderFactory = new ConcurrentlyConstructedDeclarationFinderFactory(); var projectRepository = new ProjectsRepository(_vbe); _state = new RubberduckParserState(null, projectRepository, declarationFinderFactory, _vbeEvents); _state.StateChanged += _state_StateChanged; var exporter = new ModuleExporter(); Func <IVBAPreprocessor> preprocessorFactory = () => new VBAPreprocessor(double.Parse(_vbe.Version, CultureInfo.InvariantCulture)); _attributeParser = new AttributeParser(exporter, preprocessorFactory, _state.ProjectsProvider); var projectManager = new RepositoryProjectManager(projectRepository); var moduleToModuleReferenceManager = new ModuleToModuleReferenceManager(); var parserStateManager = new ParserStateManager(_state); var referenceRemover = new ReferenceRemover(_state, moduleToModuleReferenceManager); var supertypeClearer = new SupertypeClearer(_state); var comSynchronizer = new COMReferenceSynchronizer(_state, parserStateManager); var builtInDeclarationLoader = new BuiltInDeclarationLoader( _state, new List <ICustomDeclarationLoader> { new DebugDeclarations(_state), new SpecialFormDeclarations(_state), new FormEventDeclarations(_state), new AliasDeclarations(_state), //new RubberduckApiDeclarations(_state) } ); var parseRunner = new ParseRunner( _state, parserStateManager, preprocessorFactory, _attributeParser, exporter); var declarationResolveRunner = new DeclarationResolveRunner( _state, parserStateManager, comSynchronizer); var referenceResolveRunner = new ReferenceResolveRunner( _state, parserStateManager, moduleToModuleReferenceManager, referenceRemover); var parsingStageService = new ParsingStageService( comSynchronizer, builtInDeclarationLoader, parseRunner, declarationResolveRunner, referenceResolveRunner ); var parsingCacheService = new ParsingCacheService( _state, moduleToModuleReferenceManager, referenceRemover, supertypeClearer ); _parser = new ParseCoordinator( _state, parsingStageService, parsingCacheService, projectManager, parserStateManager ); }
// vbe is the com coclass interface from the interop assembly. // There is no shared interface between VBA and VB6 types, hence object. internal Parser(object vbe) : this() { if (_parser != null) { throw new InvalidOperationException("ParserState is already initialized."); } _vbe = RootComWrapperFactory.GetVbeWrapper(vbe); _vbeEvents = VBEEvents.Initialize(_vbe); var declarationFinderFactory = new ConcurrentlyConstructedDeclarationFinderFactory(); var projectRepository = new ProjectsRepository(_vbe); _state = new RubberduckParserState(_vbe, projectRepository, declarationFinderFactory, _vbeEvents); _state.StateChanged += _state_StateChanged; var vbeVersion = double.Parse(_vbe.Version, CultureInfo.InvariantCulture); var predefinedCompilationConstants = new VBAPredefinedCompilationConstants(vbeVersion); var typeLibProvider = new TypeLibWrapperProvider(projectRepository); var compilationArgumentsProvider = new CompilationArgumentsProvider(typeLibProvider, _dispatcher, predefinedCompilationConstants); var compilationsArgumentsCache = new CompilationArgumentsCache(compilationArgumentsProvider); var preprocessorErrorListenerFactory = new PreprocessingParseErrorListenerFactory(); var preprocessorParser = new VBAPreprocessorParser(preprocessorErrorListenerFactory, preprocessorErrorListenerFactory); var preprocessor = new VBAPreprocessor(preprocessorParser, compilationsArgumentsCache); var mainParseErrorListenerFactory = new MainParseErrorListenerFactory(); var mainTokenStreamParser = new VBATokenStreamParser(mainParseErrorListenerFactory, mainParseErrorListenerFactory); var tokenStreamProvider = new SimpleVBAModuleTokenStreamProvider(); var stringParser = new TokenStreamParserStringParserAdapterWithPreprocessing(tokenStreamProvider, mainTokenStreamParser, preprocessor); var projectManager = new RepositoryProjectManager(projectRepository); var moduleToModuleReferenceManager = new ModuleToModuleReferenceManager(); var parserStateManager = new ParserStateManager(_state); var referenceRemover = new ReferenceRemover(_state, moduleToModuleReferenceManager); var supertypeClearer = new SupertypeClearer(_state); var comLibraryProvider = new ComLibraryProvider(); var referencedDeclarationsCollector = new LibraryReferencedDeclarationsCollector(comLibraryProvider); var comSynchronizer = new COMReferenceSynchronizer(_state, parserStateManager, projectRepository, referencedDeclarationsCollector); var builtInDeclarationLoader = new BuiltInDeclarationLoader( _state, new List <ICustomDeclarationLoader> { new DebugDeclarations(_state), new SpecialFormDeclarations(_state), new FormEventDeclarations(_state), new AliasDeclarations(_state), //new RubberduckApiDeclarations(_state) } ); var codePaneSourceCodeHandler = new CodePaneSourceCodeHandler(projectRepository); var sourceFileHandler = _vbe.TempSourceFileHandler; var attributesSourceCodeHandler = new SourceFileHandlerSourceCodeHandlerAdapter(sourceFileHandler, projectRepository); var moduleParser = new ModuleParser( codePaneSourceCodeHandler, attributesSourceCodeHandler, stringParser); var parseRunner = new ParseRunner( _state, parserStateManager, moduleParser); var declarationResolveRunner = new DeclarationResolveRunner( _state, parserStateManager, comSynchronizer); var referenceResolveRunner = new ReferenceResolveRunner( _state, parserStateManager, moduleToModuleReferenceManager, referenceRemover); var parsingStageService = new ParsingStageService( comSynchronizer, builtInDeclarationLoader, parseRunner, declarationResolveRunner, referenceResolveRunner ); var parsingCacheService = new ParsingCacheService( _state, moduleToModuleReferenceManager, referenceRemover, supertypeClearer, compilationsArgumentsCache ); _parser = new SynchronousParseCoordinator( _state, parsingStageService, parsingCacheService, projectManager, parserStateManager ); }