Commit 8e3c88f0 authored by Leandro Melo's avatar Leandro Melo
Browse files

C++: Share symbol finder across editor instances



Change-Id: I75880597d237bbbe1393dd02153cedba1165bed6
Reviewed-by: default avatarRoberto Raggi <roberto.raggi@nokia.com>
parent 6554a793
......@@ -412,6 +412,8 @@ CPPEditor::CPPEditor(CPPEditorWidget *editor)
m_context.add(TextEditor::Constants::C_TEXTEDITOR);
}
Q_GLOBAL_STATIC(CppTools::SymbolFinder, symbolFinder)
CPPEditorWidget::CPPEditorWidget(QWidget *parent)
: TextEditor::BaseTextEditorWidget(parent)
, m_currentRenameSelection(NoCurrentRenameSelection)
......@@ -420,7 +422,6 @@ CPPEditorWidget::CPPEditorWidget(QWidget *parent)
, m_firstRenameChange(false)
, m_objcEnabled(false)
, m_commentsSettings(CppTools::CppToolsSettings::instance()->commentsSettings())
, m_symbolFinder(new CppTools::SymbolFinder)
{
m_initialized = false;
qRegisterMetaType<CppEditor::Internal::SemanticInfo>("CppEditor::Internal::SemanticInfo");
......@@ -1078,7 +1079,7 @@ void CPPEditorWidget::switchDeclarationDefinition()
openCppEditorAt(linkToSymbol(best.first()));
} else if (lastVisibleSymbol && lastVisibleSymbol->isDeclaration() && lastVisibleSymbol->type()->isFunctionType()) {
if (Symbol *def = m_symbolFinder->findMatchingDefinition(lastVisibleSymbol, snapshot))
if (Symbol *def = symbolFinder()->findMatchingDefinition(lastVisibleSymbol, snapshot))
openCppEditorAt(linkToSymbol(def));
}
}
......@@ -1174,12 +1175,12 @@ CPPEditorWidget::Link CPPEditorWidget::attemptFuncDeclDef(const QTextCursor &cur
Symbol *target = 0;
if (FunctionDefinitionAST *funDef = declParent->asFunctionDefinition()) {
QList<Declaration *> candidates =
m_symbolFinder->findMatchingDeclaration(LookupContext(doc, snapshot),
symbolFinder()->findMatchingDeclaration(LookupContext(doc, snapshot),
funDef->symbol);
if (!candidates.isEmpty()) // TODO: improve disambiguation
target = candidates.first();
} else if (declParent->asSimpleDeclaration()) {
target = m_symbolFinder->findMatchingDefinition(funcDecl->symbol, snapshot);
target = symbolFinder()->findMatchingDefinition(funcDecl->symbol, snapshot);
}
if (target) {
......@@ -1430,7 +1431,7 @@ CPPEditorWidget::Link CPPEditorWidget::findLinkAt(const QTextCursor &cursor,
def = 0; // jump to declaration then.
if (symbol->isForwardClassDeclaration())
def = m_symbolFinder->findMatchingClassDeclaration(symbol, snapshot);
def = symbolFinder()->findMatchingClassDeclaration(symbol, snapshot);
}
link = linkToSymbol(def ? def : symbol);
......@@ -1466,7 +1467,7 @@ Symbol *CPPEditorWidget::findDefinition(Symbol *symbol, const Snapshot &snapshot
else if (! symbol->type()->isFunctionType())
return 0; // not a function declaration
return m_symbolFinder->findMatchingDefinition(symbol, snapshot);
return symbolFinder()->findMatchingDefinition(symbol, snapshot);
}
unsigned CPPEditorWidget::editorRevision() const
......@@ -2256,11 +2257,6 @@ void CPPEditorWidget::applyDeclDefLinkChanges(bool jumpToMatch)
updateFunctionDeclDefLink();
}
QSharedPointer<CppTools::SymbolFinder> CPPEditorWidget::symbolFinder() const
{
return m_symbolFinder;
}
void CPPEditorWidget::abortDeclDefLink()
{
if (!m_declDefLink)
......
......@@ -65,7 +65,6 @@ class CppModelManagerInterface;
namespace CppTools {
class CppCodeStyleSettings;
class CppRefactoringFile;
class SymbolFinder;
}
namespace TextEditor {
......@@ -201,8 +200,6 @@ public:
QSharedPointer<FunctionDeclDefLink> declDefLink() const;
void applyDeclDefLinkChanges(bool jumpToMatch);
QSharedPointer<CppTools::SymbolFinder> symbolFinder() const;
Q_SIGNALS:
void outlineModelIndexChanged(const QModelIndex &index);
......@@ -336,7 +333,6 @@ private:
QSharedPointer<FunctionDeclDefLink> m_declDefLink;
CppTools::CommentsSettings m_commentsSettings;
QSharedPointer<CppTools::SymbolFinder> m_symbolFinder;
};
......
......@@ -34,7 +34,6 @@
#include <coreplugin/ifile.h>
#include <cpptools/cpptoolsreuse.h>
#include <cpptools/symbolfinder.h>
#include <FullySpecifiedType.h>
#include <Literals.h>
......@@ -186,8 +185,7 @@ void CppElementEvaluator::handleLookupItemMatch(const Snapshot &snapshot,
|| declaration->asTemplate()->declaration()->isForwardClassDeclaration()))) {
if (declaration->isForwardClassDeclaration())
if (Symbol *classDeclaration =
m_editor->symbolFinder()->findMatchingClassDeclaration(
declaration, snapshot)) {
m_symbolFinder.findMatchingClassDeclaration(declaration, snapshot)) {
declaration = classDeclaration;
}
CppClass *cppClass = new CppClass(declaration);
......
......@@ -36,7 +36,7 @@
#include "cppeditor.h"
#include <texteditor/helpitem.h>
#include <cpptools/symbolfinder.h>
#include <cplusplus/CppDocument.h>
#include <cplusplus/Overview.h>
......@@ -92,6 +92,7 @@ private:
bool m_lookupDerivedClasses;
QSharedPointer<CppElement> m_element;
QString m_diagnosis;
CppTools::SymbolFinder m_symbolFinder;
};
class CppElement
......
......@@ -65,7 +65,7 @@ public:
} // end of anonymous namespace
static const int kMaxSize = 10;
static const int kMaxCacheSize = 10;
SymbolFinder::SymbolFinder()
{}
......@@ -339,7 +339,7 @@ void SymbolFinder::trackCacheUse(const QString &referenceFile)
m_recent.append(referenceFile);
// We don't want this to grow too much.
if (m_recent.size() > kMaxSize) {
if (m_recent.size() > kMaxCacheSize) {
const QString &oldest = m_recent.takeFirst();
m_filePriorityCache.remove(oldest);
m_fileMetaCache.remove(oldest);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment