bool DUChainItemData::execute( QString& /*filterText*/ ) { DUChainReadLocker lock;; Declaration* decl = m_item.m_item.data(); if(!decl) { return false; } if(m_openDefinition && FunctionDefinition::definition(decl)) { decl = FunctionDefinition::definition(decl); } QUrl url = decl->url().toUrl(); KTextEditor::Cursor cursor = decl->rangeInCurrentRevision().start(); DUContext* internal = decl->internalContext(); if(internal && (internal->type() == DUContext::Other || internal->type() == DUContext::Class)) { //Move into the body if(internal->range().end.line > internal->range().start.line) { cursor = KTextEditor::Cursor(internal->range().start.line+1, 0); //Move into the body } } lock.unlock(); ICore::self()->documentController()->openDocument( url, cursor ); return true; }
void ContextBuilder::openContextForStatementList( const QList<Ast*>& l, DUContext::ContextType /*type*/) { if ( l.count() > 0 ) { Ast* first = l.first(); Ast* last = l.last(); Q_ASSERT(first->hasUsefulRangeInformation); // TODO remove this RangeInRevision range(RangeInRevision(first->startLine - 1, first->startCol, last->endLine + 1, 10000)); DUContext* rangectx = openContext(first, range, DUContext::Other ); kDebug() << " +++ opening context (stmlist): " << range.castToSimpleRange(); addImportedContexts(); visitNodeList( l ); closeContext(); kDebug() << " --- closed context (stmlist): line " << rangectx->range().castToSimpleRange(); } }