summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppsourceprocessor.h
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@digia.com>2014-05-16 15:51:04 -0400
committerNikolai Kosjar <nikolai.kosjar@digia.com>2014-06-04 16:28:35 +0200
commitec97d967e63e4c66e0147625b09a658a3f99896c (patch)
tree77c44744474915153d08b550dcf2b4bedd3f3516 /src/plugins/cpptools/cppsourceprocessor.h
parent43895b038f1712d4c98b8f81d7248b44f42f27cd (diff)
downloadqt-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.h109
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 &macro);
+ virtual void passedMacroDefinitionCheck(unsigned bytesOffset, unsigned utf16charsOffset,
+ unsigned line, const CPlusPlus::Macro &macro);
+ virtual void failedMacroDefinitionCheck(unsigned bytesOffset, unsigned utf16charOffset,
+ const CPlusPlus::ByteArrayRef &name);
+ virtual void notifyMacroReference(unsigned bytesOffset, unsigned utf16charOffset,
+ unsigned line, const CPlusPlus::Macro &macro);
+ virtual void startExpandingMacro(unsigned bytesOffset,
+ unsigned utf16charOffset,
+ unsigned line,
+ const CPlusPlus::Macro &macro,
+ const QVector<CPlusPlus::MacroArgumentReference> &actuals);
+ virtual void stopExpandingMacro(unsigned bytesOffset, const CPlusPlus::Macro &macro);
+ virtual void markAsIncludeGuard(const QByteArray &macroName);
+ 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