diff --git a/src/plugins/nim/editor/nimcompletionassistprovider.cpp b/src/plugins/nim/editor/nimcompletionassistprovider.cpp index fc0ddc26712..e290c8fb84d 100644 --- a/src/plugins/nim/editor/nimcompletionassistprovider.cpp +++ b/src/plugins/nim/editor/nimcompletionassistprovider.cpp @@ -130,7 +130,7 @@ private: static Suggest::NimSuggest *nimSuggestInstance(const AssistInterface *interface) { - return Nim::Suggest::NimSuggestCache::instance().get(interface->filePath()); + return Suggest::getFromCache(interface->filePath()); } static std::shared_ptr sendRequest(const AssistInterface *interface, @@ -154,7 +154,7 @@ private: return result; } - static AssistProposalItemInterface *createProposal(const Nim::Suggest::Line &line) + static AssistProposalItemInterface *createProposal(const Suggest::Line &line) { auto item = new AssistProposalItem(); item->setIcon(Utils::CodeModelIcon::iconForType(symbolIcon(line.symbol_kind))); diff --git a/src/plugins/nim/editor/nimtexteditorwidget.cpp b/src/plugins/nim/editor/nimtexteditorwidget.cpp index b297607dced..f7ca080dace 100644 --- a/src/plugins/nim/editor/nimtexteditorwidget.cpp +++ b/src/plugins/nim/editor/nimtexteditorwidget.cpp @@ -39,7 +39,7 @@ void NimTextEditorWidget::findLinkAt(const QTextCursor &c, const Utils::LinkHand { const Utils::FilePath &path = textDocument()->filePath(); - NimSuggest *suggest = NimSuggestCache::instance().get(path); + NimSuggest *suggest = Nim::Suggest::getFromCache(path); if (!suggest) return processLinkCallback(Utils::Link()); diff --git a/src/plugins/nim/suggest/nimsuggestcache.cpp b/src/plugins/nim/suggest/nimsuggestcache.cpp index e59f63a5525..92bca20d5e9 100644 --- a/src/plugins/nim/suggest/nimsuggestcache.cpp +++ b/src/plugins/nim/suggest/nimsuggestcache.cpp @@ -10,72 +10,79 @@ #include #include +#include + using namespace Utils; namespace Nim::Suggest { -NimSuggestCache &NimSuggestCache::instance() +class NimSuggestCache final : public QObject { - static NimSuggestCache instance; - return instance; -} - -NimSuggestCache::~NimSuggestCache() = default; - -NimSuggest *NimSuggestCache::get(const FilePath &filename) -{ - auto it = m_nimSuggestInstances.find(filename); - if (it == m_nimSuggestInstances.end()) { - auto instance = std::make_unique(this); - instance->setProjectFile(filename); - instance->setExecutablePath(m_executablePath); - it = m_nimSuggestInstances.emplace(filename, std::move(instance)).first; - } - return it->second.get(); -} - -NimSuggestCache::NimSuggestCache() -{ - setExecutablePath(settings().nimSuggestPath()); - QObject::connect(&settings().nimSuggestPath, &StringAspect::changed, [this] { +public: + NimSuggestCache() + { setExecutablePath(settings().nimSuggestPath()); - }); + QObject::connect(&settings().nimSuggestPath, &StringAspect::changed, [this] { + setExecutablePath(settings().nimSuggestPath()); + }); - Core::EditorManager *editorManager = Core::EditorManager::instance(); - connect(editorManager, &Core::EditorManager::editorOpened, - this, &NimSuggestCache::onEditorOpened); - connect(editorManager, &Core::EditorManager::editorAboutToClose, - this, &NimSuggestCache::onEditorClosed); -} - -FilePath NimSuggestCache::executablePath() const -{ - return m_executablePath; -} - -void NimSuggestCache::setExecutablePath(const FilePath &path) -{ - if (m_executablePath == path) - return; - - m_executablePath = path; - - for (const auto &pair : m_nimSuggestInstances) { - pair.second->setExecutablePath(path); + Core::EditorManager *editorManager = Core::EditorManager::instance(); + connect(editorManager, &Core::EditorManager::editorOpened, + this, &NimSuggestCache::onEditorOpened); + connect(editorManager, &Core::EditorManager::editorAboutToClose, + this, &NimSuggestCache::onEditorClosed); } + + void setExecutablePath(const FilePath &path) + { + if (m_executablePath == path) + return; + + m_executablePath = path; + + for (const auto &pair : m_nimSuggestInstances) + pair.second->setExecutablePath(path); + } + + void onEditorOpened(Core::IEditor *editor) + { + if (editor->document()->mimeType() == Constants::C_NIM_MIMETYPE) + getFromCache(editor->document()->filePath()); + } + + void onEditorClosed(Core::IEditor *editor) + { + auto it = m_nimSuggestInstances.find(editor->document()->filePath()); + if (it != m_nimSuggestInstances.end()) + m_nimSuggestInstances.erase(it); + } + + NimSuggest *get(const FilePath &filePath) + { + auto it = m_nimSuggestInstances.find(filePath); + if (it == m_nimSuggestInstances.end()) { + auto instance = std::make_unique(this); + instance->setProjectFile(filePath); + instance->setExecutablePath(m_executablePath); + it = m_nimSuggestInstances.emplace(filePath, std::move(instance)).first; + } + return it->second.get(); + } + + std::unordered_map> m_nimSuggestInstances; + + FilePath m_executablePath; +}; + +static NimSuggestCache &cache() +{ + static NimSuggestCache theCache; + return theCache; } -void NimSuggestCache::onEditorOpened(Core::IEditor *editor) +NimSuggest *getFromCache(const FilePath &filePath) { - if (editor->document()->mimeType() == Constants::C_NIM_MIMETYPE) - get(editor->document()->filePath()); -} - -void NimSuggestCache::onEditorClosed(Core::IEditor *editor) -{ - auto it = m_nimSuggestInstances.find(editor->document()->filePath()); - if (it != m_nimSuggestInstances.end()) - m_nimSuggestInstances.erase(it); + return cache().get(filePath); } } // Nim::Suggest diff --git a/src/plugins/nim/suggest/nimsuggestcache.h b/src/plugins/nim/suggest/nimsuggestcache.h index 51f65d9119b..764828cf0a7 100644 --- a/src/plugins/nim/suggest/nimsuggestcache.h +++ b/src/plugins/nim/suggest/nimsuggestcache.h @@ -3,38 +3,12 @@ #pragma once -#include - -#include - -#include - -namespace Core { class IEditor; } +namespace Utils { class FilePath; } namespace Nim::Suggest { class NimSuggest; -class NimSuggestCache final : public QObject -{ -public: - static NimSuggestCache &instance(); - - NimSuggest *get(const Utils::FilePath &filename); - - Utils::FilePath executablePath() const; - void setExecutablePath(const Utils::FilePath &path); - -private: - NimSuggestCache(); - ~NimSuggestCache(); - - void onEditorOpened(Core::IEditor *editor); - void onEditorClosed(Core::IEditor *editor); - - std::unordered_map> m_nimSuggestInstances; - - Utils::FilePath m_executablePath; -}; +NimSuggest *getFromCache(const Utils::FilePath &filePath); } // Nim::Suggest