MyASTConsumer(clang::CompilerInstance &ci) : clang::ASTConsumer(), ci(ci), annotator (OutputPath, DataPath) { for(std::string &s : ProjectPaths) { auto colonPos = s.find(':'); if (colonPos >= s.size()) { std::cerr << "fail to parse project option : " << s << std::endl; continue; } auto secondColonPos = s.find(':', colonPos+1); ProjectInfo info { s.substr(0, colonPos), s.substr(colonPos+1, secondColonPos - colonPos -1), secondColonPos < s.size() ? s.substr(secondColonPos + 1) : std::string() }; annotator.addProject(std::move(info)); } for(std::string &s : ExternalProjectPaths) { auto colonPos = s.find(':'); if (colonPos >= s.size()) { std::cerr << "fail to parse project option : " << s << std::endl; continue; } auto secondColonPos = s.find(':', colonPos+1); if (secondColonPos >= s.size()) { std::cerr << "fail to parse project option : " << s << std::endl; continue; } ProjectInfo info { s.substr(0, colonPos), s.substr(colonPos+1, secondColonPos - colonPos -1), ProjectInfo::External }; info.external_root_url = s.substr(secondColonPos + 1); annotator.addProject(std::move(info)); } //ci.getLangOpts().DelayedTemplateParsing = (true); ci.getPreprocessor().enableIncrementalProcessing(); }
int main(int argc, char *argv[]) { QApplication a(argc, argv); Annotator w; w.show(); return a.exec(); }
void indri::infnet::DocListIteratorNode::annotate( Annotator& annotator, lemur::api::DOCID_T documentID, indri::index::Extent &extent ) { if (! _lastExtent.contains(extent)) { // if the last extent we annotated contains this one, there is no work // to do. _lastExtent = extent; annotator.addMatches( _extents, this, documentID, extent ); } }
void indri::infnet::UnorderedWindowNode::annotate( Annotator& annotator, int documentID, indri::index::Extent &extent ) { annotator.addMatches( _extents, this, documentID, extent ); for( size_t i=0; i<_extents.size(); i++ ) { for( size_t j=0; j<_children.size(); j++ ) { _children[j]->annotate( annotator, documentID, _extents[i] ); } } }
virtual void HandleTranslationUnit(clang::ASTContext& Ctx) override { /* if (PP.getDiagnostics().hasErrorOccurred()) return;*/ ci.getPreprocessor().getDiagnostics().getClient(); BrowserASTVisitor v(annotator); v.TraverseDecl(Ctx.getTranslationUnitDecl()); annotator.generate(ci.getSema(), WasInDatabase); }
void indri::infnet::ListBeliefNode::annotate( Annotator& annotator, int documentID, indri::index::Extent &extent ) { const indri::utility::greedy_vector<indri::index::Extent>& extents = _list.extents(); indri::index::Extent range( extent.begin, extent.end ); indri::utility::greedy_vector<indri::index::Extent>::const_iterator iter; iter = std::lower_bound( extents.begin(), extents.end(), range, indri::index::Extent::begins_before_less() ); // mark the begin and end points for this list for( size_t i = iter - extents.begin(); i < extents.size() && extents[i].begin <= extent.end; i++ ) { if( extents[i].begin >= extent.begin && extents[i].end <= extent.end ) { annotator.add( this, documentID, (indri::index::Extent &)extents[i] ); _list.annotate( annotator, documentID, (indri::index::Extent &)extents[i] ); } } }
void indri::infnet::ShrinkageBeliefNode::annotate( Annotator& annotator, lemur::api::DOCID_T documentID, indri::index::Extent &extent ) { const indri::utility::greedy_vector<indri::index::Extent>& extents = _list.extents(); int count = 0; // mark the begin and end points for this list for( size_t i=0; i<extents.size(); i++ ) { if( extents[i].begin >= extent.begin && extents[i].end <= extent.end ) { annotator.add( this, documentID, (indri::index::Extent &)extents[i] ); _list.annotate( annotator, documentID, (indri::index::Extent &)extents[i] ); } } }
virtual bool shouldSkipFunctionBody(clang::Decl *D) override { return !annotator.shouldProcess( clang::FullSourceLoc(D->getLocation(),annotator.getSourceMgr()) .getExpansionLoc().getFileID()); }
virtual void Initialize(clang::ASTContext& Ctx) override { annotator.setSourceMgr(Ctx.getSourceManager(), Ctx.getLangOpts()); annotator.setMangleContext(Ctx.createMangleContext()); ci.getPreprocessor().addPPCallbacks(maybe_unique(new PreprocessorCallback(annotator, ci.getPreprocessor()))); ci.getDiagnostics().setClient(new BrowserDiagnosticClient(annotator), true); }