diff options
author | Nikolai Kosjar <nikolai.kosjar@theqtcompany.com> | 2015-11-27 16:02:38 +0100 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@theqtcompany.com> | 2015-11-30 11:03:04 +0000 |
commit | daf936967986ed05e7a0fdcc261d88ee181b2422 (patch) | |
tree | 711bcae175ed6b02b95ec7e6cc652c7e5e80a641 /src/plugins/clangcodemodel/index.cpp | |
parent | 6a1fc699fde55e55b462045fea8b590006b72ee4 (diff) | |
download | qt-creator-daf936967986ed05e7a0fdcc261d88ee181b2422.tar.gz |
Clang: Remove dead code
Change-Id: Ia36e96424580d9b34000cf4a9b38eab98f9c449c
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
Diffstat (limited to 'src/plugins/clangcodemodel/index.cpp')
-rw-r--r-- | src/plugins/clangcodemodel/index.cpp | 491 |
1 files changed, 0 insertions, 491 deletions
diff --git a/src/plugins/clangcodemodel/index.cpp b/src/plugins/clangcodemodel/index.cpp deleted file mode 100644 index f94cd165aa..0000000000 --- a/src/plugins/clangcodemodel/index.cpp +++ /dev/null @@ -1,491 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms and -** conditions see http://www.qt.io/terms-conditions. For further information -** use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, The Qt Company gives you certain additional -** rights. These rights are described in The Qt Company LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -****************************************************************************/ - -#include "index.h" - -#include <QStringList> -#include <QLinkedList> -#include <QHash> -#include <QDataStream> -#include <QPair> -#include <QFileInfo> -#include <QMutex> -#include <QMutexLocker> - -namespace ClangCodeModel { -namespace Internal { - -class ClangSymbolSearcher; - -class IndexPrivate -{ -public: - IndexPrivate(); - - void insertSymbol(const Symbol &symbol, const QDateTime &timeStamp); - QList<Symbol> symbols(const QString &fileName) const; - QList<Symbol> symbols(const QString &fileName, Symbol::Kind kind) const; - QList<Symbol> symbols(const QString &fileName, Symbol::Kind kind, const QString &uqName) const; - QList<Symbol> symbols(const QString &fileName, const QString &uqName) const; - QList<Symbol> symbols(Symbol::Kind kind) const; - - void match(ClangSymbolSearcher *searcher) const; - - void insertFile(const QString &fileName, const QDateTime &timeStamp); - void removeFile(const QString &fileName); - void removeFiles(const QStringList &fileNames); - bool containsFile(const QString &fileName) const; - QStringList files() const; - - void clear(); - - bool isEmpty() const; - - void trackTimeStamp(const Symbol &symbol, const QDateTime &timeStamp); - void trackTimeStamp(const QString &fileName, const QDateTime &timeStamp); - - bool validate(const QString &fileName) const; - - QByteArray serialize() const; - void deserialize(const QByteArray &data); - -private: - typedef QLinkedList<Symbol> SymbolCont; - typedef SymbolCont::iterator SymbolIt; - - typedef QHash<QString, QList<SymbolIt> > NameIndex; - typedef QHash<Symbol::Kind, NameIndex> KindIndex; - typedef QHash<QString, KindIndex> FileIndex; - - typedef QList<SymbolIt>::iterator SymbolIndexIt; - typedef NameIndex::iterator NameIndexIt; - typedef KindIndex::iterator KindIndexIt; - typedef FileIndex::iterator FileIndexIt; - typedef FileIndex::const_iterator FileIndexCIt; - - void insertSymbol(const Symbol &symbol); - void removeSymbol(SymbolIndexIt it); - - QPair<bool, SymbolIndexIt> findEquivalentSymbol(const Symbol &symbol); - void updateEquivalentSymbol(SymbolIndexIt it, const Symbol &symbol); - - void createIndexes(SymbolIt it); - QList<SymbolIt> removeIndexes(const QString &fileName); - - static QList<Symbol> symbolsFromIterators(const QList<SymbolIt> &symbolList); - - // @TODO: Sharing of compilation options... - - mutable QMutex m_mutex; - SymbolCont m_container; - FileIndex m_files; - QHash<QString, QDateTime> m_timeStamps; -}; - -} // namespace Internal -} // namespace ClangCodeModel - -using namespace ClangCodeModel; -using namespace Internal; - -IndexPrivate::IndexPrivate() - : m_mutex(QMutex::Recursive) -{ -} - -void IndexPrivate::createIndexes(SymbolIt it) -{ - m_files[it->m_location.fileName()][it->m_kind][it->m_name].append(it); -} - -QList<QLinkedList<Symbol>::iterator> IndexPrivate::removeIndexes(const QString &fileName) -{ - QList<SymbolIt> iterators; - KindIndex kindIndex = m_files.take(fileName); - KindIndexIt it = kindIndex.begin(); - KindIndexIt eit = kindIndex.end(); - for (; it != eit; ++it) { - NameIndex nameIndex = *it; - NameIndexIt nit = nameIndex.begin(); - NameIndexIt neit = nameIndex.end(); - for (; nit != neit; ++nit) - iterators.append(*nit); - } - return iterators; -} - -void IndexPrivate::insertSymbol(const Symbol &symbol) -{ - QMutexLocker locker(&m_mutex); - - SymbolIt it = m_container.insert(m_container.begin(), symbol); - createIndexes(it); -} - -void IndexPrivate::insertSymbol(const Symbol &symbol, const QDateTime &timeStamp) -{ - const QPair<bool, SymbolIndexIt> &find = findEquivalentSymbol(symbol); - if (find.first) - updateEquivalentSymbol(find.second, symbol); - else - insertSymbol(symbol); - - trackTimeStamp(symbol, timeStamp); -} - -QPair<bool, IndexPrivate::SymbolIndexIt> IndexPrivate::findEquivalentSymbol(const Symbol &symbol) -{ - // Despite the loop below finding a symbol should be efficient, since we already filter - // the file name, the kind, and the qualified name through the indexing mechanism. In many - // cases it will iterate only once. - QList<SymbolIt> &byName = m_files[symbol.m_location.fileName()][symbol.m_kind][symbol.m_name]; - for (SymbolIndexIt it = byName.begin(); it != byName.end(); ++it) { - const Symbol &candidateSymbol = *(*it); - // @TODO: Overloads, template specializations - if (candidateSymbol.m_qualification == symbol.m_qualification) - return qMakePair(true, it); - } - - return qMakePair(false, QList<SymbolIt>::iterator()); -} - -void IndexPrivate::updateEquivalentSymbol(SymbolIndexIt it, const Symbol &symbol) -{ - SymbolIt symbolIt = *it; - - Q_ASSERT(symbolIt->m_kind == symbol.m_kind); - Q_ASSERT(symbolIt->m_qualification == symbol.m_qualification); - Q_ASSERT(symbolIt->m_name == symbol.m_name); - Q_ASSERT(symbolIt->m_location.fileName() == symbol.m_location.fileName()); - - symbolIt->m_location = symbol.m_location; -} - -void IndexPrivate::removeSymbol(SymbolIndexIt it) -{ - SymbolIt symbolIt = *it; - - m_container.erase(symbolIt); - - KindIndex &kindIndex = m_files[symbolIt->m_location.fileName()]; - NameIndex &nameIndex = kindIndex[symbolIt->m_kind]; - QList<SymbolIt> &byName = nameIndex[symbolIt->m_name]; - byName.erase(it); - if (byName.isEmpty()) { - nameIndex.remove(symbolIt->m_name); - if (nameIndex.isEmpty()) { - kindIndex.remove(symbolIt->m_kind); - if (kindIndex.isEmpty()) - m_files.remove(symbolIt->m_location.fileName()); - } - } -} - -QList<Symbol> IndexPrivate::symbols(const QString &fileName) const -{ - QMutexLocker locker(&m_mutex); - - QList<Symbol> all; - const QList<NameIndex> &byKind = m_files.value(fileName).values(); - foreach (const NameIndex &nameIndex, byKind) { - const QList<QList<SymbolIt> > &byName = nameIndex.values(); - foreach (const QList<SymbolIt> &symbols, byName) - all.append(symbolsFromIterators(symbols)); - } - return all; -} - -QList<Symbol> IndexPrivate::symbols(const QString &fileName, Symbol::Kind kind) const -{ - QMutexLocker locker(&m_mutex); - - QList<Symbol> all; - const QList<QList<SymbolIt> > &byName = m_files.value(fileName).value(kind).values(); - foreach (const QList<SymbolIt> &symbols, byName) - all.append(symbolsFromIterators(symbols)); - return all; -} - -QList<Symbol> IndexPrivate::symbols(const QString &fileName, - Symbol::Kind kind, - const QString &uqName) const -{ - QMutexLocker locker(&m_mutex); - - return symbolsFromIterators(m_files.value(fileName).value(kind).value(uqName)); -} - -QList<Symbol> IndexPrivate::symbols(Symbol::Kind kind) const -{ - QMutexLocker locker(&m_mutex); - - QList<Symbol> all; - FileIndexCIt it = m_files.begin(); - FileIndexCIt eit = m_files.end(); - for (; it != eit; ++it) - all.append(symbols(it.key(), kind)); - return all; -} - -void IndexPrivate::match(ClangSymbolSearcher *searcher) const -{ - QMutexLocker locker(&m_mutex); - Q_UNUSED(searcher); -// searcher->search(m_container); -} - -QList<Symbol> IndexPrivate::symbolsFromIterators(const QList<SymbolIt> &symbolList) -{ - QList<Symbol> all; - foreach (SymbolIt symbolIt, symbolList) - all.append(*symbolIt); - return all; -} - -void IndexPrivate::trackTimeStamp(const Symbol &symbol, const QDateTime &timeStamp) -{ - QMutexLocker locker(&m_mutex); - - trackTimeStamp(symbol.m_location.fileName(), timeStamp); -} - -void IndexPrivate::trackTimeStamp(const QString &fileName, const QDateTime &timeStamp) -{ - QMutexLocker locker(&m_mutex); - - // We keep track of time stamps on a per file basis (most recent one). - m_timeStamps[fileName] = timeStamp; -} - -bool IndexPrivate::validate(const QString &fileName) const -{ - QMutexLocker locker(&m_mutex); - - const QDateTime &timeStamp = m_timeStamps.value(fileName); - if (!timeStamp.isValid()) - return false; - - QFileInfo fileInfo(fileName); - if (fileInfo.lastModified() > timeStamp) - return false; - - return true; -} - -void IndexPrivate::insertFile(const QString &fileName, const QDateTime &timeStamp) -{ - QMutexLocker locker(&m_mutex); - - trackTimeStamp(fileName, timeStamp); -} - -QStringList IndexPrivate::files() const -{ - QMutexLocker locker(&m_mutex); - - return m_timeStamps.keys(); -} - -bool IndexPrivate::containsFile(const QString &fileName) const -{ - QMutexLocker locker(&m_mutex); - - return m_timeStamps.contains(fileName); -} - -void IndexPrivate::removeFile(const QString &fileName) -{ - QMutexLocker locker(&m_mutex); - - const QList<SymbolIt> &iterators = removeIndexes(fileName); - foreach (SymbolIt it, iterators) - m_container.erase(it); - - m_timeStamps.remove(fileName); -} - -void IndexPrivate::removeFiles(const QStringList &fileNames) -{ - QMutexLocker locker(&m_mutex); - - foreach (const QString &fileName, fileNames) - removeFile(fileName); -} - -void IndexPrivate::clear() -{ - QMutexLocker locker(&m_mutex); - - m_container.clear(); - m_files.clear(); - m_timeStamps.clear(); -} - -bool IndexPrivate::isEmpty() const -{ - QMutexLocker locker(&m_mutex); - - return m_timeStamps.isEmpty(); -} - -QByteArray IndexPrivate::serialize() const -{ - QMutexLocker locker(&m_mutex); - - QByteArray data; - QDataStream stream(&data, QIODevice::WriteOnly); - - stream << (quint32)0x0A0BFFEE; - stream << (quint16)1; - stream.setVersion(QDataStream::Qt_4_7); - stream << m_container; - stream << m_timeStamps; - - return data; -} - -void IndexPrivate::deserialize(const QByteArray &data) -{ - QMutexLocker locker(&m_mutex); - - clear(); - - // @TODO: Version compatibility handling. - - QDataStream stream(data); - - quint32 header; - stream >> header; - if (header != 0x0A0BFFEE) - return; - - quint16 indexVersion; - stream >> indexVersion; - if (indexVersion != 1) - return; - - stream.setVersion(QDataStream::Qt_4_7); - - SymbolCont symbols; - stream >> symbols; - stream >> m_timeStamps; - - // @TODO: Overload the related functions with batch versions. - foreach (const Symbol &symbol, symbols) - insertSymbol(symbol); -} - - -Index::Index() - : d(new IndexPrivate) -{} - -Index::~Index() -{} - -void Index::insertSymbol(const Symbol &symbol, const QDateTime &timeStamp) -{ - d->insertSymbol(symbol, timeStamp); -} - -QList<Symbol> Index::symbols(const QString &fileName) const -{ - return d->symbols(fileName); -} - -QList<Symbol> Index::symbols(const QString &fileName, Symbol::Kind kind) const -{ - return d->symbols(fileName, kind); -} - -QList<Symbol> Index::symbols(const QString &fileName, Symbol::Kind kind, const QString &uqName) const -{ - return d->symbols(fileName, kind, uqName); -} - -QList<Symbol> Index::symbols(Symbol::Kind kind) const -{ - return d->symbols(kind); -} - -void Index::match(ClangSymbolSearcher *searcher) const -{ - d->match(searcher); -} - -void Index::insertFile(const QString &fileName, const QDateTime &timeStamp) -{ - d->insertFile(fileName, timeStamp); -} - -QStringList Index::files() const -{ - return d->files(); -} - -bool Index::containsFile(const QString &fileName) const -{ - return d->containsFile(fileName); -} - -void Index::removeFile(const QString &fileName) -{ - d->removeFile(fileName); -} - -void Index::removeFiles(const QStringList &fileNames) -{ - d->removeFiles(fileNames); -} - -void Index::clear() -{ - d->clear(); -} - -bool Index::isEmpty() const -{ - return d->isEmpty(); -} - -bool Index::validate(const QString &fileName) const -{ - return d->validate(fileName); -} - -QByteArray Index::serialize() const -{ - return d->serialize(); -} - -void Index::deserialize(const QByteArray &data) -{ - d->deserialize(data); -} |