diff options
author | Nikolai Kosjar <nikolai.kosjar@digia.com> | 2014-05-16 15:51:04 -0400 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@digia.com> | 2014-06-04 16:28:35 +0200 |
commit | ec97d967e63e4c66e0147625b09a658a3f99896c (patch) | |
tree | 77c44744474915153d08b550dcf2b4bedd3f3516 /src/plugins/cpptools/cppsourceprocessor.h | |
parent | 43895b038f1712d4c98b8f81d7248b44f42f27cd (diff) | |
download | qt-creator-ec97d967e63e4c66e0147625b09a658a3f99896c.tar.gz |
CppTools: Rename CppPreprocessor to CppSourceProcessor
...since it does quite a bit more than only preprocessing, as the name
suggests. We use that class to process source files in general. The
output is not a preprocessed source, but a set of CPlusPlus::Documents
with symbols.
Change-Id: I787d0f22f9f042ddf0c99e8c2f0bdb9aa7001735
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Diffstat (limited to 'src/plugins/cpptools/cppsourceprocessor.h')
-rw-r--r-- | src/plugins/cpptools/cppsourceprocessor.h | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/src/plugins/cpptools/cppsourceprocessor.h b/src/plugins/cpptools/cppsourceprocessor.h new file mode 100644 index 0000000000..c748632500 --- /dev/null +++ b/src/plugins/cpptools/cppsourceprocessor.h @@ -0,0 +1,109 @@ +#ifndef CPPSOURCEPROCESSOR_H +#define CPPSOURCEPROCESSOR_H + +#include "cppmodelmanagerinterface.h" + +#include <cplusplus/PreprocessorEnvironment.h> +#include <cplusplus/pp-engine.h> + +#include <QHash> +#include <QPointer> + +QT_BEGIN_NAMESPACE +class QTextCodec; +QT_END_NAMESPACE + +namespace CppTools { +namespace Internal { + +class CppModelManager; + +// Documentation inside. +class CPPTOOLS_EXPORT CppSourceProcessor: public CPlusPlus::Client +{ + Q_DISABLE_COPY(CppSourceProcessor) + +public: + static QString cleanPath(const QString &path); + + CppSourceProcessor(QPointer<CppModelManager> modelManager, bool dumpFileNameWhileParsing = false); + CppSourceProcessor(QPointer<CppModelManager> modelManager, const CPlusPlus::Snapshot &snapshot, + bool dumpFileNameWhileParsing = false); + virtual ~CppSourceProcessor(); + + void setRevision(unsigned revision); + void setWorkingCopy(const CppTools::CppModelManagerInterface::WorkingCopy &workingCopy); + void setIncludePaths(const QStringList &includePaths); + void setFrameworkPaths(const QStringList &frameworkPaths); + void setTodo(const QStringList &files); + + void run(const QString &fileName); + void removeFromCache(const QString &fileName); + void resetEnvironment(); + + CPlusPlus::Snapshot snapshot() const + { return m_snapshot; } + + const QSet<QString> &todo() const + { return m_todo; } + + CppModelManager *modelManager() const + { return m_modelManager.data(); } + + void setGlobalSnapshot(const CPlusPlus::Snapshot &snapshot) { m_globalSnapshot = snapshot; } + +protected: + CPlusPlus::Document::Ptr switchDocument(CPlusPlus::Document::Ptr doc); + + bool getFileContents(const QString &absoluteFilePath, QByteArray *contents, + unsigned *revision) const; + bool checkFile(const QString &absoluteFilePath) const; + QString resolveFile(const QString &fileName, IncludeType type); + QString resolveFile_helper(const QString &fileName, IncludeType type); + + void mergeEnvironment(CPlusPlus::Document::Ptr doc); + + virtual void macroAdded(const CPlusPlus::Macro ¯o); + virtual void passedMacroDefinitionCheck(unsigned bytesOffset, unsigned utf16charsOffset, + unsigned line, const CPlusPlus::Macro ¯o); + virtual void failedMacroDefinitionCheck(unsigned bytesOffset, unsigned utf16charOffset, + const CPlusPlus::ByteArrayRef &name); + virtual void notifyMacroReference(unsigned bytesOffset, unsigned utf16charOffset, + unsigned line, const CPlusPlus::Macro ¯o); + virtual void startExpandingMacro(unsigned bytesOffset, + unsigned utf16charOffset, + unsigned line, + const CPlusPlus::Macro ¯o, + const QVector<CPlusPlus::MacroArgumentReference> &actuals); + virtual void stopExpandingMacro(unsigned bytesOffset, const CPlusPlus::Macro ¯o); + virtual void markAsIncludeGuard(const QByteArray ¯oName); + virtual void startSkippingBlocks(unsigned utf16charsOffset); + virtual void stopSkippingBlocks(unsigned utf16charsOffset); + virtual void sourceNeeded(unsigned line, const QString &fileName, IncludeType type); + +private: + CppSourceProcessor(); + void addFrameworkPath(const QString &frameworkPath); + + CPlusPlus::Snapshot m_snapshot; + CPlusPlus::Snapshot m_globalSnapshot; + QPointer<CppModelManager> m_modelManager; + bool m_dumpFileNameWhileParsing; + CPlusPlus::Environment m_env; + CPlusPlus::Preprocessor m_preprocess; + QStringList m_includePaths; + CppTools::CppModelManagerInterface::WorkingCopy m_workingCopy; + QStringList m_frameworkPaths; + QSet<QString> m_included; + CPlusPlus::Document::Ptr m_currentDoc; + QSet<QString> m_todo; + QSet<QString> m_processed; + unsigned m_revision; + QHash<QString, QString> m_fileNameCache; + QTextCodec *m_defaultCodec; +}; + +} // namespace Internal +} // namespace CppTools + +#endif // CPPSOURCEPROCESSOR_H |