File indexing completed on 2024-05-12 04:37:44

0001 /*
0002     SPDX-FileCopyrightText: 2009 Lior Mualem <lior.m.kde@gmail.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "classmodelnodescontroller.h"
0008 #include "classmodelnode.h"
0009 #include "../duchain/duchainlock.h"
0010 #include "../duchain/duchain.h"
0011 #include "../duchain/classdeclaration.h"
0012 #include <QTimer>
0013 
0014 using namespace KDevelop;
0015 
0016 ClassModelNodeDocumentChangedInterface::~ClassModelNodeDocumentChangedInterface()
0017 {
0018 }
0019 
0020 ClassModelNodesController::ClassModelNodesController()
0021     : m_updateTimer(new QTimer(this))
0022 {
0023     m_updateTimer->setSingleShot(true);
0024     connect(m_updateTimer, &QTimer::timeout, this, &ClassModelNodesController::updateChangedFiles);
0025 }
0026 
0027 ClassModelNodesController::~ClassModelNodesController()
0028 {
0029 }
0030 
0031 ClassModelNodesController& ClassModelNodesController::self()
0032 {
0033     static ClassModelNodesController ret;
0034     return ret;
0035 }
0036 
0037 void ClassModelNodesController::registerForChanges(const KDevelop::IndexedString& a_file,
0038                                                    ClassModelNodeDocumentChangedInterface* a_node)
0039 {
0040     m_filesMap.insert(a_file, a_node);
0041 }
0042 
0043 void ClassModelNodesController::unregisterForChanges(const KDevelop::IndexedString& a_file,
0044                                                      ClassModelNodeDocumentChangedInterface* a_node)
0045 {
0046     m_filesMap.remove(a_file, a_node);
0047 }
0048 
0049 void ClassModelNodesController::updateChangedFiles()
0050 {
0051     // re-parse changed documents.
0052     // TODO: m_updatedFiles seems no longer set, check again and remove if
0053     for (const IndexedString& file : qAsConst(m_updatedFiles)) {
0054         const auto values = m_filesMap.values(file);
0055         for (ClassModelNodeDocumentChangedInterface* value : values) {
0056             value->documentChanged(file);
0057         }
0058     }
0059 
0060     // Processed all files.
0061     m_updatedFiles.clear();
0062 }
0063 
0064 #include "moc_classmodelnodescontroller.cpp"