From f5c3007058ae713e099152de8c8a71eab06b7d9f Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Wed, 23 Jan 2019 13:14:50 +0100 Subject: [PATCH] CppTools: Add sourceFilePath to AbstractEditorSupport Provide the source path to track a generated file source. You can for example get the modified time stamp for the source file and use it for the generated file content. Task-number: QTCREATORBUG-21876 Change-Id: Ia422e128c5cb7a3dce88960f126152c2f65afb41 Reviewed-by: Nikolai Kosjar --- src/plugins/clangcodemodel/clangmodelmanagersupport.cpp | 1 + src/plugins/clangcodemodel/clangmodelmanagersupport.h | 4 +++- src/plugins/clangpchmanager/qtcreatorprojectupdater.h | 8 +++++--- .../qtcreatorrefactoringprojectupdater.cpp | 2 +- src/plugins/cpptools/abstracteditorsupport.cpp | 2 +- src/plugins/cpptools/abstracteditorsupport.h | 1 + src/plugins/cpptools/cppmodelmanager.cpp | 3 ++- src/plugins/cpptools/cppmodelmanager.h | 5 ++++- src/plugins/cpptools/generatedcodemodelsupport.cpp | 5 +++++ src/plugins/cpptools/generatedcodemodelsupport.h | 1 + 10 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp index 3de0f99755e..f629e743bc9 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp @@ -293,6 +293,7 @@ void ClangModelManagerSupport::onCppDocumentContentsChangedOnUnsavedFile() } void ClangModelManagerSupport::onAbstractEditorSupportContentsUpdated(const QString &filePath, + const QString &, const QByteArray &content) { QTC_ASSERT(!filePath.isEmpty(), return); diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.h b/src/plugins/clangcodemodel/clangmodelmanagersupport.h index d4082c7bedb..e650e1f4f26 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.h +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.h @@ -94,7 +94,9 @@ private: void onCppDocumentReloadFinishedOnUnsavedFile(bool success); void onCppDocumentContentsChangedOnUnsavedFile(); - void onAbstractEditorSupportContentsUpdated(const QString &filePath, const QByteArray &content); + void onAbstractEditorSupportContentsUpdated(const QString &filePath, + const QString &sourceFilePath, + const QByteArray &content); void onAbstractEditorSupportRemoved(const QString &filePath); void onTextMarkContextMenuRequested(TextEditor::TextEditorWidget *widget, diff --git a/src/plugins/clangpchmanager/qtcreatorprojectupdater.h b/src/plugins/clangpchmanager/qtcreatorprojectupdater.h index 95214756924..fa008f14aec 100644 --- a/src/plugins/clangpchmanager/qtcreatorprojectupdater.h +++ b/src/plugins/clangpchmanager/qtcreatorprojectupdater.h @@ -103,9 +103,11 @@ private: [&] (const QStringList &projectPartIds) { projectPartsRemoved(projectPartIds); }); QObject::connect(Internal::cppModelManager(), &CppTools::CppModelManager::abstractEditorSupportContentsUpdated, - [&] (const QString &filePath, const QByteArray &contents) { - abstractEditorUpdated(filePath, contents); - }); + [&](const QString &filePath, + const QString &, + const QByteArray &contents) { + abstractEditorUpdated(filePath, contents); + }); QObject::connect(Internal::cppModelManager(), &CppTools::CppModelManager::abstractEditorSupportRemoved, [&] (const QString &filePath) { abstractEditorRemoved(filePath); }); diff --git a/src/plugins/clangrefactoring/qtcreatorrefactoringprojectupdater.cpp b/src/plugins/clangrefactoring/qtcreatorrefactoringprojectupdater.cpp index a35e8b58889..f3ca992620c 100644 --- a/src/plugins/clangrefactoring/qtcreatorrefactoringprojectupdater.cpp +++ b/src/plugins/clangrefactoring/qtcreatorrefactoringprojectupdater.cpp @@ -84,7 +84,7 @@ void QtCreatorRefactoringProjectUpdater::connectToCppModelManager() QObject::connect(cppModelManager(), &CppTools::CppModelManager::abstractEditorSupportContentsUpdated, - [&] (const QString &filePath, const QByteArray &contents) { + [&] (const QString &filePath, const QString &, const QByteArray &contents) { abstractEditorUpdated(filePath, contents); }); diff --git a/src/plugins/cpptools/abstracteditorsupport.cpp b/src/plugins/cpptools/abstracteditorsupport.cpp index ceaddd73b3a..8818c83efbf 100644 --- a/src/plugins/cpptools/abstracteditorsupport.cpp +++ b/src/plugins/cpptools/abstracteditorsupport.cpp @@ -54,7 +54,7 @@ void AbstractEditorSupport::updateDocument() void AbstractEditorSupport::notifyAboutUpdatedContents() const { - m_modelmanager->emitAbstractEditorSupportContentsUpdated(fileName(), contents()); + m_modelmanager->emitAbstractEditorSupportContentsUpdated(fileName(), sourceFileName(), contents()); } QString AbstractEditorSupport::licenseTemplate(const QString &file, const QString &className) diff --git a/src/plugins/cpptools/abstracteditorsupport.h b/src/plugins/cpptools/abstracteditorsupport.h index 617c9099f74..347a6b6e015 100644 --- a/src/plugins/cpptools/abstracteditorsupport.h +++ b/src/plugins/cpptools/abstracteditorsupport.h @@ -43,6 +43,7 @@ public: /// \returns the contents, encoded as UTF-8 virtual QByteArray contents() const = 0; virtual QString fileName() const = 0; + virtual QString sourceFileName() const = 0; void updateDocument(); void notifyAboutUpdatedContents() const; diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index f5c257b6d23..5a43feb3222 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -1188,9 +1188,10 @@ void CppModelManager::emitDocumentUpdated(Document::Ptr doc) } void CppModelManager::emitAbstractEditorSupportContentsUpdated(const QString &filePath, + const QString &sourcePath, const QByteArray &contents) { - emit abstractEditorSupportContentsUpdated(filePath, contents); + emit abstractEditorSupportContentsUpdated(filePath, sourcePath, contents); } void CppModelManager::emitAbstractEditorSupportRemoved(const QString &filePath) diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h index 302e447ade8..2c5fe960f21 100644 --- a/src/plugins/cpptools/cppmodelmanager.h +++ b/src/plugins/cpptools/cppmodelmanager.h @@ -137,6 +137,7 @@ public: void emitDocumentUpdated(Document::Ptr doc); void emitAbstractEditorSupportContentsUpdated(const QString &filePath, + const QString &sourcePath, const QByteArray &contents); void emitAbstractEditorSupportRemoved(const QString &filePath); @@ -243,7 +244,9 @@ signals: void gcFinished(); // Needed for tests. - void abstractEditorSupportContentsUpdated(const QString &filePath, const QByteArray &contents); + void abstractEditorSupportContentsUpdated(const QString &filePath, + const QString &sourcePath, + const QByteArray &contents); void abstractEditorSupportRemoved(const QString &filePath); public slots: diff --git a/src/plugins/cpptools/generatedcodemodelsupport.cpp b/src/plugins/cpptools/generatedcodemodelsupport.cpp index 80209bd2434..a779e387181 100644 --- a/src/plugins/cpptools/generatedcodemodelsupport.cpp +++ b/src/plugins/cpptools/generatedcodemodelsupport.cpp @@ -108,6 +108,11 @@ QString GeneratedCodeModelSupport::fileName() const return m_generatedFileName.toString(); } +QString GeneratedCodeModelSupport::sourceFileName() const +{ + return m_generator->source().toString(); +} + void GeneratedCodeModelSupport::update(const QList &generators) { static QObjectCache extraCompilerCache; diff --git a/src/plugins/cpptools/generatedcodemodelsupport.h b/src/plugins/cpptools/generatedcodemodelsupport.h index c49fbfbae7a..818d84e47cb 100644 --- a/src/plugins/cpptools/generatedcodemodelsupport.h +++ b/src/plugins/cpptools/generatedcodemodelsupport.h @@ -54,6 +54,7 @@ public: /// \returns the contents encoded in UTF-8. QByteArray contents() const override; QString fileName() const override; // The generated file + QString sourceFileName() const override; static void update(const QList &generators);