diff options
-rw-r--r-- | src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp index c49a8c5035..322adb7b4c 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp @@ -30,10 +30,16 @@ #include "iwidgetplugin.h" #include <coreplugin/messagebox.h> +#include <coreplugin/icore.h> + +#include <utils/filepath.h> + #include "pluginmanager/widgetpluginmanager.h" #include <QDebug> #include <QMessageBox> +#include <QDir> +#include <QDirIterator> #include <QMutex> enum { @@ -43,6 +49,30 @@ enum { namespace QmlDesigner { namespace Internal { + +static QString globalMetaInfoPath() +{ +#ifdef SHARE_QML_PATH + if (qEnvironmentVariableIsSet("LOAD_QML_FROM_SOURCE")) + return QLatin1String(SHARE_QML_PATH) + "/globalMetaInfo"; +#endif + return Core::ICore::resourcePath("qmldesigner/globalMetaInfo").toString(); +} + +Utils::FilePaths allGlobalMetaInfoFiles() +{ + static Utils::FilePaths paths; + + if (!paths.isEmpty()) + return paths; + + QDirIterator it(globalMetaInfoPath(), { "*.metainfo" }, QDir::Files, QDirIterator::Subdirectories); + while (it.hasNext()) + paths.append(Utils::FilePath::fromString(it.next())); + + return paths; +} + class MetaInfoPrivate { Q_DISABLE_COPY(MetaInfoPrivate) @@ -99,6 +129,19 @@ void MetaInfoPrivate::parseItemLibraryDescriptions() errorMessage); } } + + const Utils::FilePaths allMetaInfoFiles = allGlobalMetaInfoFiles(); + for (const Utils::FilePath &path : allMetaInfoFiles) { + Internal::MetaInfoReader reader(*m_q); + try { + reader.readMetaInfoFile(path.toString()); + } catch (const InvalidMetaInfoException &e) { + qWarning() << e.description(); + const QString errorMessage = path.toString() + QLatin1Char('\n') + QLatin1Char('\n') + reader.errors().join(QLatin1Char('\n')); + Core::AsynchronousMessageBox::warning(QCoreApplication::translate("QmlDesigner::Internal::MetaInfoPrivate", "Invalid meta info"), + errorMessage); + } + } #endif } |