From 972eb8f6e2bf3ce6418726d7730212dbcccb9582 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Wed, 15 Dec 2010 15:11:59 +0100 Subject: [PATCH] Introduced CPlusPlus::SymbolNameVisitor and CPlusPlus::SnapshotSymbolVisitor. --- src/libs/cplusplus/SnapshotSymbolVisitor.cpp | 60 ++++++++++++++++++++ src/libs/cplusplus/SnapshotSymbolVisitor.h | 57 +++++++++++++++++++ src/libs/cplusplus/SymbolNameVisitor.cpp | 55 ++++++++++++++++++ src/libs/cplusplus/SymbolNameVisitor.h | 52 +++++++++++++++++ src/libs/cplusplus/cplusplus-lib.pri | 4 ++ 5 files changed, 228 insertions(+) create mode 100644 src/libs/cplusplus/SnapshotSymbolVisitor.cpp create mode 100644 src/libs/cplusplus/SnapshotSymbolVisitor.h create mode 100644 src/libs/cplusplus/SymbolNameVisitor.cpp create mode 100644 src/libs/cplusplus/SymbolNameVisitor.h diff --git a/src/libs/cplusplus/SnapshotSymbolVisitor.cpp b/src/libs/cplusplus/SnapshotSymbolVisitor.cpp new file mode 100644 index 00000000000..7962d3f9280 --- /dev/null +++ b/src/libs/cplusplus/SnapshotSymbolVisitor.cpp @@ -0,0 +1,60 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** 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 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#include "SnapshotSymbolVisitor.h" +#include + +using namespace CPlusPlus; + +SnapshotSymbolVisitor::SnapshotSymbolVisitor(const Snapshot &snapshot) + : _snapshot(snapshot) +{ +} + +void SnapshotSymbolVisitor::accept(Document::Ptr doc) +{ + QSet processed; + accept(doc, &processed); +} + +void SnapshotSymbolVisitor::accept(Document::Ptr doc, QSet *processed) +{ + if (doc && doc->globalNamespace() && ! processed->contains(doc->fileName())) { + processed->insert(doc->fileName()); + + foreach (const Document::Include &i, doc->includes()) { + if (Document::Ptr incl = _snapshot.document(i.fileName())) + accept(incl, processed); + } + + std::swap(_document, doc); + accept(_document->globalNamespace()); + std::swap(_document, doc); + } +} diff --git a/src/libs/cplusplus/SnapshotSymbolVisitor.h b/src/libs/cplusplus/SnapshotSymbolVisitor.h new file mode 100644 index 00000000000..13d639aea11 --- /dev/null +++ b/src/libs/cplusplus/SnapshotSymbolVisitor.h @@ -0,0 +1,57 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** 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 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#ifndef CPLUSPLUS_SNAPSHOTSYMBOLVISITOR_H +#define CPLUSPLUS_SNAPSHOTSYMBOLVISITOR_H + +#include "CppDocument.h" +#include +#include + +namespace CPlusPlus { + +class CPLUSPLUS_EXPORT SnapshotSymbolVisitor : public CPlusPlus::SymbolVisitor +{ +public: + SnapshotSymbolVisitor(const Snapshot &snapshot); + + void accept(Document::Ptr doc); + using SymbolVisitor::accept; + +protected: + void accept(Document::Ptr doc, QSet *processed); + +private: + Snapshot _snapshot; + Document::Ptr _document; +}; + +} // end of namespace CPlusPlus + +#endif // CPLUSPLUS_SNAPSHOTSYMBOLVISITOR_H diff --git a/src/libs/cplusplus/SymbolNameVisitor.cpp b/src/libs/cplusplus/SymbolNameVisitor.cpp new file mode 100644 index 00000000000..c384e36dcd0 --- /dev/null +++ b/src/libs/cplusplus/SymbolNameVisitor.cpp @@ -0,0 +1,55 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** 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 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#include "SymbolNameVisitor.h" +#include +#include + +using namespace CPlusPlus; + +SymbolNameVisitor::SymbolNameVisitor() + : _symbol(0) +{ +} + +void SymbolNameVisitor::accept(Symbol *symbol) +{ + if (symbol) { + if (Scope *scope = symbol->enclosingScope()) + accept(scope); + + if (! symbol->isTemplate()) { + if (const Name *name = symbol->name()) { + std::swap(_symbol, symbol); + accept(name); + std::swap(_symbol, symbol); + } + } + } +} diff --git a/src/libs/cplusplus/SymbolNameVisitor.h b/src/libs/cplusplus/SymbolNameVisitor.h new file mode 100644 index 00000000000..8b41be18c9b --- /dev/null +++ b/src/libs/cplusplus/SymbolNameVisitor.h @@ -0,0 +1,52 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** 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 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#ifndef CPLUSPLUS_SYMBOLNAMEVISITOR_H +#define CPLUSPLUS_SYMBOLNAMEVISITOR_H + +#include + +namespace CPlusPlus { + +class CPLUSPLUS_EXPORT SymbolNameVisitor : public CPlusPlus::NameVisitor +{ +public: + SymbolNameVisitor(); + + void accept(Symbol *symbol); + + using NameVisitor::accept; + +private: + Symbol *_symbol; +}; + +} // end of namespace CPlusPlus + +#endif // CPLUSPLUS_SYMBOLNAMEVISITOR_H diff --git a/src/libs/cplusplus/cplusplus-lib.pri b/src/libs/cplusplus/cplusplus-lib.pri index 2a718d5712b..395636a23c5 100644 --- a/src/libs/cplusplus/cplusplus-lib.pri +++ b/src/libs/cplusplus/cplusplus-lib.pri @@ -37,6 +37,8 @@ HEADERS += \ $$PWD/LookupContext.h \ $$PWD/ASTParent.h \ $$PWD/ASTPath.h \ + $$PWD/SnapshotSymbolVisitor.h \ + $$PWD/SymbolNameVisitor.h \ $$PWD/DeprecatedGenTemplateInstance.h \ $$PWD/FindUsages.h \ $$PWD/DependencyTable.h \ @@ -63,6 +65,8 @@ SOURCES += \ $$PWD/LookupContext.cpp \ $$PWD/ASTParent.cpp \ $$PWD/ASTPath.cpp \ + $$PWD/SnapshotSymbolVisitor.cpp \ + $$PWD/SymbolNameVisitor.cpp \ $$PWD/DeprecatedGenTemplateInstance.cpp \ $$PWD/FindUsages.cpp \ $$PWD/DependencyTable.cpp \