void QmlProject::parseProject(RefreshOptions options) { Core::MessageManager *messageManager = Core::ICore::messageManager(); if (options & Files) { if (options & ProjectFile) delete m_projectItem.data(); if (!m_projectItem) { Utils::FileReader reader; if (reader.fetch(m_fileName)) { QDeclarativeComponent *component = new QDeclarativeComponent(&m_engine, this); component->setData(reader.data(), QUrl::fromLocalFile(m_fileName)); if (component->isReady() && qobject_cast<QmlProjectItem*>(component->create())) { m_projectItem = qobject_cast<QmlProjectItem*>(component->create()); connect(m_projectItem.data(), SIGNAL(qmlFilesChanged(QSet<QString>,QSet<QString>)), this, SLOT(refreshFiles(QSet<QString>,QSet<QString>))); } else { messageManager->printToOutputPane(tr("Error while loading project file %1.").arg(m_fileName), Core::MessageManager::NoModeSwitch); messageManager->printToOutputPane(component->errorString(), Core::MessageManager::NoModeSwitch); } } else { messageManager->printToOutputPane(tr("QML project: %1").arg(reader.errorString()), Core::MessageManager::NoModeSwitch); } } if (m_projectItem) { m_projectItem.data()->setSourceDirectory(projectDir().path()); m_modelManager->updateSourceFiles(m_projectItem.data()->files(), true); QString mainFilePath = m_projectItem.data()->mainFile(); if (!mainFilePath.isEmpty()) { mainFilePath = projectDir().absoluteFilePath(mainFilePath); Utils::FileReader reader; QString errorMessage; if (!reader.fetch(mainFilePath, &errorMessage)) { messageManager->printToOutputPane( tr("Warning while loading project file %1.").arg(m_fileName), Core::MessageManager::NoModeSwitch); messageManager->printToOutputPane(errorMessage, Core::MessageManager::NoModeSwitch); } else { m_defaultImport = detectImport(QString::fromUtf8(reader.data())); } } } m_rootNode->refresh(); } if (options & Configuration) { // update configuration } if (options & Files) emit fileListChanged(); }
static void printParseWarnings(const QString &libraryPath, const QString &warning) { Core::MessageManager *messageManager = Core::MessageManager::instance(); messageManager->printToOutputPane( PluginDumper::tr("Warnings while parsing qmltypes information of %1:\n" "%2").arg(libraryPath, warning)); }
void PluginDumper::qmlPluginTypeDumpError(QProcess::ProcessError) { QProcess *process = qobject_cast<QProcess *>(sender()); if (!process) return; process->deleteLater(); const QString libraryPath = m_runningQmldumps.take(process); Core::MessageManager *messageManager = Core::MessageManager::instance(); const QString errorMessages = process->readAllStandardError(); messageManager->printToOutputPane(qmldumpErrorMessage(libraryPath, errorMessages)); if (!libraryPath.isEmpty()) { const Snapshot snapshot = m_modelManager->snapshot(); LibraryInfo libraryInfo = snapshot.libraryInfo(libraryPath); libraryInfo.setPluginTypeInfoStatus(LibraryInfo::DumpError, qmldumpFailedMessage(errorMessages)); m_modelManager->updateLibraryInfo(libraryPath, libraryInfo); } }
void PluginDumper::qmlPluginTypeDumpDone(int exitCode) { QProcess *process = qobject_cast<QProcess *>(sender()); if (!process) return; process->deleteLater(); const QString libraryPath = m_runningQmldumps.take(process); const Snapshot snapshot = m_modelManager->snapshot(); LibraryInfo libraryInfo = snapshot.libraryInfo(libraryPath); if (exitCode != 0) { Core::MessageManager *messageManager = Core::MessageManager::instance(); const QString errorMessages = process->readAllStandardError(); messageManager->printToOutputPane(qmldumpErrorMessage(libraryPath, errorMessages)); libraryInfo.setPluginTypeInfoStatus(LibraryInfo::DumpError, qmldumpFailedMessage(errorMessages)); } const QByteArray output = process->readAllStandardOutput(); QString error; QString warning; QList<FakeMetaObject::ConstPtr> objectsList = parseHelper(output, &error, &warning); if (exitCode == 0) { if (!error.isEmpty()) { libraryInfo.setPluginTypeInfoStatus(LibraryInfo::DumpError, tr("Type dump of C++ plugin failed. Parse error:\n'%1'").arg(error)); } else { libraryInfo.setMetaObjects(objectsList); // ### disabled code path for running qmldump to get Qt's builtins // if (libraryPath.isEmpty()) // Interpreter::CppQmlTypesLoader::builtinObjects.append(objectsList); libraryInfo.setPluginTypeInfoStatus(LibraryInfo::DumpDone); } if (!warning.isEmpty()) printParseWarnings(libraryPath, warning); } if (!libraryPath.isEmpty()) m_modelManager->updateLibraryInfo(libraryPath, libraryInfo); }