void Driver::parseFile( const QString& fileName, bool onlyPreProcess, bool force ) { QFileInfo fileInfo( fileName ); QString absFilePath = fileInfo.absFilePath(); QMap<QString, TranslationUnitAST*>::Iterator it = m_parsedUnits.find( absFilePath ); if( force && it != m_parsedUnits.end() ){ takeTranslationUnit( absFilePath ); } else if( it != m_parsedUnits.end() && *it != 0 ){ // file already processed return; } m_dependences.remove( fileName ); m_problems.remove( fileName ); m_currentFileName = fileName; Lexer lex( this ); lexer = &lex; setupLexer( &lex ); lex.setSource( sourceProvider()->contents(fileName) ); if( !onlyPreProcess ){ Parser parser( this, &lex ); setupParser( &parser ); TranslationUnitAST :: Node translationUnit; parser.parseTranslationUnit( translationUnit ); m_parsedUnits.insert( fileName, translationUnit.release() ); fileParsed( fileName ); } m_currentFileName = QString::null; lexer = 0; }
QList<AbstractSourceProvider::Pointer> WorkbenchServiceRegistry::GetSourceProviders() const { QList<AbstractSourceProvider::Pointer> providers; IExtensionPoint::Pointer ep = this->GetExtensionPoint(); QList<IConfigurationElement::Pointer> elements = ep->GetConfigurationElements(); for (int i = 0; i < elements.size(); i++) { if (elements[i]->GetName() == WorkbenchRegistryConstants::TAG_SOURCE_PROVIDER) { try { ISourceProvider* sourceProvider(elements[i]->CreateExecutableExtension<ISourceProvider>( WorkbenchRegistryConstants::ATTR_PROVIDER)); if (AbstractSourceProvider* asp = dynamic_cast<AbstractSourceProvider*>(sourceProvider)) { providers.push_back(AbstractSourceProvider::Pointer(asp)); } else { const QString attributeName = elements[i]->GetAttribute(WorkbenchRegistryConstants::ATTR_PROVIDER); const QString message = "Source Provider '" + attributeName + "' should extend AbstractSourceProvider"; const IStatus::Pointer status(new Status(IStatus::ERROR_TYPE, PlatformUI::PLUGIN_ID(), message, BERRY_STATUS_LOC)); WorkbenchPlugin::Log(status); continue; } } catch (const CoreException& e) { //StatusManager.getManager().handle(e.getStatus()); BERRY_ERROR << "CoreException: " << e.what() << std::endl; } } } return providers; }