From 09ea0d235a6a93d19e6e7519e1b9fb217b30e423 Mon Sep 17 00:00:00 2001 From: Erik Verbruggen Date: Tue, 23 Apr 2013 15:04:36 +0200 Subject: C++: moved the CppPreprocessor into its own file. Change-Id: I399d667a1fccb376fadbd6ab8fbba243e86d8f4b Reviewed-by: Nikolai Kosjar --- src/plugins/cpptools/cpppreprocessor.h | 91 ++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 src/plugins/cpptools/cpppreprocessor.h (limited to 'src/plugins/cpptools/cpppreprocessor.h') diff --git a/src/plugins/cpptools/cpppreprocessor.h b/src/plugins/cpptools/cpppreprocessor.h new file mode 100644 index 0000000000..d931a880c4 --- /dev/null +++ b/src/plugins/cpptools/cpppreprocessor.h @@ -0,0 +1,91 @@ +#ifndef CPPPREPROCESSOR_H +#define CPPPREPROCESSOR_H + +#include "cppmodelmanagerinterface.h" + +#include +#include + +#include +#include + +namespace CppTools { +namespace Internal { + +class CppModelManager; + +class CPPTOOLS_EXPORT CppPreprocessor: public CPlusPlus::Client +{ + Q_DISABLE_COPY(CppPreprocessor) + +public: + CppPreprocessor(QPointer modelManager, bool dumpFileNameWhileParsing = false); + virtual ~CppPreprocessor(); + + void setRevision(unsigned revision); + void setWorkingCopy(const CppTools::CppModelManagerInterface::WorkingCopy &workingCopy); + void setIncludePaths(const QStringList &includePaths); + void setFrameworkPaths(const QStringList &frameworkPaths); + void addFrameworkPath(const QString &frameworkPath); + void setProjectFiles(const QStringList &files); + void setTodo(const QStringList &files); + + void run(const QString &fileName); + void removeFromCache(const QString &fileName); + + void resetEnvironment(); + static QString cleanPath(const QString &path); + + const QSet &todo() const + { return m_todo; } + + CppModelManager *modelManager() const + { return m_modelManager.data(); } + +protected: + CPlusPlus::Document::Ptr switchDocument(CPlusPlus::Document::Ptr doc); + + void getFileContents(const QString &absoluteFilePath, QString *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 offset, unsigned line, + const CPlusPlus::Macro ¯o); + virtual void failedMacroDefinitionCheck(unsigned offset, const CPlusPlus::ByteArrayRef &name); + virtual void notifyMacroReference(unsigned offset, unsigned line, + const CPlusPlus::Macro ¯o); + virtual void startExpandingMacro(unsigned offset, + unsigned line, + const CPlusPlus::Macro ¯o, + const QVector &actuals); + virtual void stopExpandingMacro(unsigned offset, const CPlusPlus::Macro ¯o); + virtual void markAsIncludeGuard(const QByteArray ¯oName); + virtual void startSkippingBlocks(unsigned offset); + virtual void stopSkippingBlocks(unsigned offset); + virtual void sourceNeeded(unsigned line, const QString &fileName, IncludeType type); + +private: + CPlusPlus::Snapshot m_snapshot; + QPointer 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 m_included; + CPlusPlus::Document::Ptr m_currentDoc; + QSet m_todo; + QSet m_processed; + unsigned m_revision; + QHash m_fileNameCache; +}; + +} // namespace Internal +} // namespace CppTools + +#endif // CPPPREPROCESSOR_H -- cgit v1.2.1