diff --git a/src/plugins/qmleditor/qmldocument.cpp b/src/plugins/qmleditor/qmldocument.cpp index d6baba6f82126b241d222ed736830b626e66f258..13cbe2895e59b659bfda4777965bd159a14348d5 100644 --- a/src/plugins/qmleditor/qmldocument.cpp +++ b/src/plugins/qmleditor/qmldocument.cpp @@ -32,8 +32,8 @@ #include "qmljsast_p.h" #include "qmljslexer_p.h" #include "qmljsparser_p.h" -#include "qmljsengine_p.h" #include "qmljsnodepool_p.h" +#include "qmljsastfwd_p.h" using namespace QmlEditor; using namespace QmlJS; diff --git a/src/plugins/qmleditor/qmldocument.h b/src/plugins/qmleditor/qmldocument.h index be6a3658eb76e83612f23a54b330465c0fd48eb9..4f9420ebaaefccbb86ff53aa2795fc0eecff6a9e 100644 --- a/src/plugins/qmleditor/qmldocument.h +++ b/src/plugins/qmleditor/qmldocument.h @@ -35,10 +35,9 @@ #include <QtCore/QSharedPointer> #include <QtCore/QString> -#include "qmleditor_global.h" -#include "qmljsengine_p.h" -#include "qmljsastfwd_p.h" -#include "qmlsymbol.h" +#include <qmleditor/qmleditor_global.h> +#include <qmleditor/parser/qmljsengine_p.h> +#include <qmleditor/qmlsymbol.h> namespace QmlEditor { diff --git a/src/plugins/qmleditor/qmleditor.cpp b/src/plugins/qmleditor/qmleditor.cpp index d0f57c0ae6a3a82254fa6700b31409791ca4361a..e82d9319d57c604e3e21b131465120654e6b652a 100644 --- a/src/plugins/qmleditor/qmleditor.cpp +++ b/src/plugins/qmleditor/qmleditor.cpp @@ -398,8 +398,8 @@ ScriptEditor::ScriptEditor(QWidget *parent) : m_modelManager = ExtensionSystem::PluginManager::instance()->getObject<QmlModelManagerInterface>(); if (m_modelManager) { - connect(m_modelManager, SIGNAL(documentUpdated(QmlDocument::Ptr)), - this, SLOT(onDocumentUpdated(QmlDocument::Ptr))); + connect(m_modelManager, SIGNAL(documentUpdated(QmlEditor::QmlDocument::Ptr)), + this, SLOT(onDocumentUpdated(QmlEditor::QmlDocument::Ptr))); } } @@ -447,7 +447,7 @@ void ScriptEditor::updateDocumentNow() m_modelManager->updateSourceFiles(QStringList() << fileName); } -void ScriptEditor::onDocumentUpdated(QmlDocument::Ptr doc) +void ScriptEditor::onDocumentUpdated(QmlEditor::QmlDocument::Ptr doc) { if (file()->fileName() != doc->fileName()) return; diff --git a/src/plugins/qmleditor/qmleditor.h b/src/plugins/qmleditor/qmleditor.h index d6a1026e71aad4e115d5665273f8e9c42d33831e..ac4692bc4de8557be1c85c9ac6c1da03fc7f6d3a 100644 --- a/src/plugins/qmleditor/qmleditor.h +++ b/src/plugins/qmleditor/qmleditor.h @@ -113,7 +113,7 @@ public slots: virtual void setFontSettings(const TextEditor::FontSettings &); private slots: - void onDocumentUpdated(QmlDocument::Ptr doc); + void onDocumentUpdated(QmlEditor::QmlDocument::Ptr doc); void updateDocument(); void updateDocumentNow(); diff --git a/src/plugins/qmleditor/qmlmodelmanager.cpp b/src/plugins/qmleditor/qmlmodelmanager.cpp index b7b09adecb57aa78add8865773f8a2a519e19254..ae4e309fcb6856576ab1e7958051321e13042bca 100644 --- a/src/plugins/qmleditor/qmlmodelmanager.cpp +++ b/src/plugins/qmleditor/qmlmodelmanager.cpp @@ -52,9 +52,10 @@ QmlModelManager::QmlModelManager(QObject *parent): { m_synchronizer.setCancelOnWait(true); - qRegisterMetaType<QmlDocument::Ptr>("QmlDocument::Ptr"); + qRegisterMetaType<QmlEditor::QmlDocument::Ptr>("QmlEditor::QmlDocument::Ptr"); - connect(this, SIGNAL(documentUpdated(QmlDocument::Ptr)), this, SLOT(onDocumentUpdated(QmlDocument::Ptr))); + connect(this, SIGNAL(documentUpdated(QmlEditor::QmlDocument::Ptr)), + this, SLOT(onDocumentUpdated(QmlEditor::QmlDocument::Ptr))); } Snapshot QmlModelManager::snapshot() const @@ -122,7 +123,7 @@ QMap<QString, QString> QmlModelManager::buildWorkingCopyList() void QmlModelManager::emitDocumentUpdated(QmlDocument::Ptr doc) { emit documentUpdated(doc); } -void QmlModelManager::onDocumentUpdated(QmlDocument::Ptr doc) +void QmlModelManager::onDocumentUpdated(QmlEditor::QmlDocument::Ptr doc) { QMutexLocker locker(&m_mutex); diff --git a/src/plugins/qmleditor/qmlmodelmanager.h b/src/plugins/qmleditor/qmlmodelmanager.h index 4eb1f408b66e77a59b70964db39768f23847b264..cada51871d167abdf58821c62e6bf1a9f78a69d3 100644 --- a/src/plugins/qmleditor/qmlmodelmanager.h +++ b/src/plugins/qmleditor/qmlmodelmanager.h @@ -58,13 +58,11 @@ public: Q_SIGNALS: void projectPathChanged(const QString &projectPath); - - void documentUpdated(QmlDocument::Ptr doc); void aboutToRemoveFiles(const QStringList &files); private Q_SLOTS: // this should be executed in the GUI thread. - void onDocumentUpdated(QmlDocument::Ptr doc); + void onDocumentUpdated(QmlEditor::QmlDocument::Ptr doc); protected: QFuture<void> refreshSourceFiles(const QStringList &sourceFiles); diff --git a/src/plugins/qmleditor/qmlmodelmanagerinterface.h b/src/plugins/qmleditor/qmlmodelmanagerinterface.h index 4adcf91bd0a459a4fc77287221a20c21021d8b8d..f348b30bc9cbc630c9ca9c86040cbbfd6be5da31 100644 --- a/src/plugins/qmleditor/qmlmodelmanagerinterface.h +++ b/src/plugins/qmleditor/qmlmodelmanagerinterface.h @@ -32,8 +32,10 @@ #include <QObject> #include <QStringList> +#include <QSharedPointer> #include <qmleditor/qmleditor_global.h> +#include <qmleditor/qmldocument.h> namespace QmlEditor { @@ -49,6 +51,9 @@ public: virtual Snapshot snapshot() const = 0; virtual void updateSourceFiles(const QStringList &files) = 0; + +signals: + void documentUpdated(QmlEditor::QmlDocument::Ptr doc); }; } diff --git a/src/plugins/qmleditor/qmlsymbol.h b/src/plugins/qmleditor/qmlsymbol.h index 788341e104c430082067efd86ef4a120fff64db7..4b9f213be68fbb7994c248798924d2717e7e4ed6 100644 --- a/src/plugins/qmleditor/qmlsymbol.h +++ b/src/plugins/qmleditor/qmlsymbol.h @@ -4,7 +4,7 @@ #include <QList> #include <QString> -#include "qmljsastfwd_p.h" +#include <qmleditor/parser/qmljsastfwd_p.h> namespace QmlEditor { diff --git a/src/plugins/qmlprojectmanager/qmlprojectconstants.h b/src/plugins/qmlprojectmanager/qmlprojectconstants.h index 77c2290e6edad108bf6707fb7cf9572288bc6fb1..38611e657c6cf8bd1ef7ff9fc7feb19d19b1d26e 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectconstants.h +++ b/src/plugins/qmlprojectmanager/qmlprojectconstants.h @@ -49,6 +49,8 @@ const char *const PROJECT_KIND = "QML"; const char *const FILES_EDITOR = ".qmlproject Editor"; const char *const FILES_MIMETYPE = QMLMIMETYPE; +const char *const TASK_CATEGORY_QML = "Task.Category.Qml"; + } // namespace Constants } // namespace QmlProjectManager diff --git a/src/plugins/qmlprojectmanager/qmlprojectmanager.pro b/src/plugins/qmlprojectmanager/qmlprojectmanager.pro index 354c07800e96cb8e3c03dac63674bd2c35e859c4..9f41b40d85a23e836a769166eaf836a209d573eb 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectmanager.pro +++ b/src/plugins/qmlprojectmanager/qmlprojectmanager.pro @@ -10,6 +10,7 @@ HEADERS = qmlproject.h \ qmlprojectwizard.h \ qmlnewprojectwizard.h \ qmlprojectfileseditor.h \ + qmltaskmanager.h \ qmlmakestep.h SOURCES = qmlproject.cpp \ qmlprojectplugin.cpp \ @@ -18,6 +19,7 @@ SOURCES = qmlproject.cpp \ qmlprojectwizard.cpp \ qmlnewprojectwizard.cpp \ qmlprojectfileseditor.cpp \ + qmltaskmanager.cpp \ qmlmakestep.cpp RESOURCES += qmlproject.qrc diff --git a/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp b/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp index 5d21971a35417c5ac57e044730e6b6186d4a53e4..a41f3ad78d5df30dff24bc2e7af204fa30eaa7a0 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp @@ -35,19 +35,26 @@ #include "qmlprojectfileseditor.h" #include "qmlproject.h" #include "qmlmakestep.h" +#include "qmltaskmanager.h" + +#include <extensionsystem/pluginmanager.h> #include <coreplugin/icore.h> #include <coreplugin/mimedatabase.h> #include <texteditor/texteditoractionhandler.h> +#include <projectexplorer/taskwindow.h> +#include <qmleditor/qmlmodelmanagerinterface.h> + #include <QtCore/QtPlugin> using namespace QmlProjectManager; using namespace QmlProjectManager::Internal; -QmlProjectPlugin::QmlProjectPlugin() - : m_projectFilesEditorFactory(0) +QmlProjectPlugin::QmlProjectPlugin() : + m_projectFilesEditorFactory(0), + m_qmlTaskManager(0) { } QmlProjectPlugin::~QmlProjectPlugin() @@ -76,6 +83,8 @@ bool QmlProjectPlugin::initialize(const QStringList &, QString *errorMessage) m_projectFilesEditorFactory = new ProjectFilesFactory(manager, actionHandler); addObject(m_projectFilesEditorFactory); + m_qmlTaskManager = new QmlTaskManager(this); + addAutoReleasedObject(manager); addAutoReleasedObject(new QmlRunConfigurationFactory); addAutoReleasedObject(new QmlNewProjectWizard); @@ -86,6 +95,15 @@ bool QmlProjectPlugin::initialize(const QStringList &, QString *errorMessage) } void QmlProjectPlugin::extensionsInitialized() -{ } +{ + ExtensionSystem::PluginManager *pluginManager = ExtensionSystem::PluginManager::instance(); + ProjectExplorer::TaskWindow *taskWindow = pluginManager->getObject<ProjectExplorer::TaskWindow>(); + m_qmlTaskManager->setTaskWindow(taskWindow); + + QmlEditor::QmlModelManagerInterface *modelManager = pluginManager->getObject<QmlEditor::QmlModelManagerInterface>(); + Q_ASSERT(modelManager); + connect(modelManager, SIGNAL(documentUpdated(QmlEditor::QmlDocument::Ptr)), + m_qmlTaskManager, SLOT(documentUpdated(QmlEditor::QmlDocument::Ptr))); +} Q_EXPORT_PLUGIN(QmlProjectPlugin) diff --git a/src/plugins/qmlprojectmanager/qmlprojectplugin.h b/src/plugins/qmlprojectmanager/qmlprojectplugin.h index 29ac7db5e4edc24b04eb6ddb04da3e623ece30fa..ab5d13a57a22c84e32fde3b477a0c6a3a3046d69 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectplugin.h +++ b/src/plugins/qmlprojectmanager/qmlprojectplugin.h @@ -38,6 +38,7 @@ namespace QmlProjectManager { namespace Internal { class ProjectFilesFactory; +class QmlTaskManager; class QmlProjectPlugin: public ExtensionSystem::IPlugin { @@ -52,6 +53,7 @@ public: private: ProjectFilesFactory *m_projectFilesEditorFactory; + QmlTaskManager *m_qmlTaskManager; }; } // namespace Internal diff --git a/src/plugins/qmlprojectmanager/qmltaskmanager.cpp b/src/plugins/qmlprojectmanager/qmltaskmanager.cpp new file mode 100644 index 0000000000000000000000000000000000000000..2a76c425ce4f29333aec7d68d2d421e8ec9e2a63 --- /dev/null +++ b/src/plugins/qmlprojectmanager/qmltaskmanager.cpp @@ -0,0 +1,38 @@ +#include "qmltaskmanager.h" +#include "qmlprojectconstants.h" +#include <QDebug> + +namespace QmlProjectManager { +namespace Internal { + +QmlTaskManager::QmlTaskManager(QObject *parent) : + QObject(parent), + m_taskWindow(0) +{ +} + +void QmlTaskManager::setTaskWindow(ProjectExplorer::TaskWindow *taskWindow) +{ + Q_ASSERT(taskWindow); + m_taskWindow = taskWindow; + + m_taskWindow->addCategory(Constants::TASK_CATEGORY_QML, "Qml"); +} + +void QmlTaskManager::documentUpdated(QmlEditor::QmlDocument::Ptr doc) +{ + m_taskWindow->clearTasks(Constants::TASK_CATEGORY_QML); + + foreach (const QmlJS::DiagnosticMessage &msg, doc->diagnosticMessages()) { + ProjectExplorer::TaskWindow::TaskType type + = msg.isError() ? ProjectExplorer::TaskWindow::Error + : ProjectExplorer::TaskWindow::Warning; + + ProjectExplorer::TaskWindow::Task task(type, msg.message, doc->fileName(), msg.loc.startLine, + Constants::TASK_CATEGORY_QML); + m_taskWindow->addTask(task); + } +} + +} // Internal +} // QmlEditor diff --git a/src/plugins/qmlprojectmanager/qmltaskmanager.h b/src/plugins/qmlprojectmanager/qmltaskmanager.h new file mode 100644 index 0000000000000000000000000000000000000000..0f952610765fd96f71d1d8194ea8e1d58bc00af7 --- /dev/null +++ b/src/plugins/qmlprojectmanager/qmltaskmanager.h @@ -0,0 +1,29 @@ +#ifndef QMLTASKMANAGER_H +#define QMLTASKMANAGER_H + +#include <projectexplorer/taskwindow.h> +#include <qmleditor/qmldocument.h> +#include <QtCore/QObject> + + +namespace QmlProjectManager { +namespace Internal { + +class QmlTaskManager : public QObject +{ + Q_OBJECT +public: + QmlTaskManager(QObject *parent = 0); + void setTaskWindow(ProjectExplorer::TaskWindow *taskWindow); + +public slots: + void documentUpdated(QmlEditor::QmlDocument::Ptr doc); + +private: + ProjectExplorer::TaskWindow *m_taskWindow; +}; + +} // Internal +} // QmlProjectManager + +#endif // QMLTASKMANAGER_H