summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cpppreprocessor.h
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2013-04-23 15:04:36 +0200
committerNikolai Kosjar <nikolai.kosjar@digia.com>2013-04-26 13:56:08 +0200
commit09ea0d235a6a93d19e6e7519e1b9fb217b30e423 (patch)
treebbbaaf5e63b702393aad89db34e7dd3fa4fcf93d /src/plugins/cpptools/cpppreprocessor.h
parent516116c5a53a83b2ca70da518e9fcea5c783305e (diff)
downloadqt-creator-09ea0d235a6a93d19e6e7519e1b9fb217b30e423.tar.gz
C++: moved the CppPreprocessor into its own file.
Change-Id: I399d667a1fccb376fadbd6ab8fbba243e86d8f4b Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
Diffstat (limited to 'src/plugins/cpptools/cpppreprocessor.h')
-rw-r--r--src/plugins/cpptools/cpppreprocessor.h91
1 files changed, 91 insertions, 0 deletions
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 <cplusplus/PreprocessorEnvironment.h>
+#include <cplusplus/pp-engine.h>
+
+#include <QHash>
+#include <QPointer>
+
+namespace CppTools {
+namespace Internal {
+
+class CppModelManager;
+
+class CPPTOOLS_EXPORT CppPreprocessor: public CPlusPlus::Client
+{
+ Q_DISABLE_COPY(CppPreprocessor)
+
+public:
+ CppPreprocessor(QPointer<CppModelManager> 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<QString> &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 &macro);
+ virtual void passedMacroDefinitionCheck(unsigned offset, unsigned line,
+ const CPlusPlus::Macro &macro);
+ virtual void failedMacroDefinitionCheck(unsigned offset, const CPlusPlus::ByteArrayRef &name);
+ virtual void notifyMacroReference(unsigned offset, unsigned line,
+ const CPlusPlus::Macro &macro);
+ virtual void startExpandingMacro(unsigned offset,
+ unsigned line,
+ const CPlusPlus::Macro &macro,
+ const QVector<CPlusPlus::MacroArgumentReference> &actuals);
+ virtual void stopExpandingMacro(unsigned offset, const CPlusPlus::Macro &macro);
+ virtual void markAsIncludeGuard(const QByteArray &macroName);
+ 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<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;
+};
+
+} // namespace Internal
+} // namespace CppTools
+
+#endif // CPPPREPROCESSOR_H