diff options
author | Eike Ziller <eike.ziller@qt.io> | 2017-02-08 14:31:55 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2017-02-27 13:54:59 +0000 |
commit | d64e17ad55f155951fc76e4c2f04299aa9c7a912 (patch) | |
tree | 16890479318c917c88392035a461e9edbcf76621 /src/libs/extensionsystem | |
parent | ca1d1dfbe2c2b046b5661de20da9e20d4b511680 (diff) | |
download | qt-creator-d64e17ad55f155951fc76e4c2f04299aa9c7a912.tar.gz |
Move mimetype definitions to plugin specs
- Avoids the hassle of QRC files and manually registering mime types
- Avoids performance regressions because of mime types that are
registered after mime database has been used
- Makes it technically possible to detect that a disabled plugin could
handle a mime type if it was enabled
Change-Id: I373008b1b56e9c6b4853055f20b3eeb112a6eff9
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'src/libs/extensionsystem')
-rw-r--r-- | src/libs/extensionsystem/pluginspec.cpp | 48 | ||||
-rw-r--r-- | src/libs/extensionsystem/pluginspec.h | 1 | ||||
-rw-r--r-- | src/libs/extensionsystem/pluginspec_p.h | 3 |
3 files changed, 30 insertions, 22 deletions
diff --git a/src/libs/extensionsystem/pluginspec.cpp b/src/libs/extensionsystem/pluginspec.cpp index c839b8ea3f..19be010c4d 100644 --- a/src/libs/extensionsystem/pluginspec.cpp +++ b/src/libs/extensionsystem/pluginspec.cpp @@ -360,6 +360,11 @@ QVector<PluginDependency> PluginSpec::dependencies() const return d->dependencies; } +QJsonObject PluginSpec::metaData() const +{ + return d->metaData; +} + /*! Returns a list of descriptions of command line arguments the plugin processes. */ @@ -539,6 +544,7 @@ bool PluginSpecPrivate::read(const QString &fileName) hasError = false; errorString.clear(); dependencies.clear(); + metaData = QJsonObject(); QFileInfo fileInfo(fileName); location = fileInfo.absolutePath(); filePath = fileInfo.absoluteFilePath(); @@ -650,11 +656,11 @@ static inline bool readMultiLineString(const QJsonValue &value, QString *out) /*! \internal */ -bool PluginSpecPrivate::readMetaData(const QJsonObject &metaData) +bool PluginSpecPrivate::readMetaData(const QJsonObject &pluginMetaData) { - qCDebug(pluginLog) << "MetaData:" << QJsonDocument(metaData).toJson(); + qCDebug(pluginLog) << "MetaData:" << QJsonDocument(pluginMetaData).toJson(); QJsonValue value; - value = metaData.value(QLatin1String("IID")); + value = pluginMetaData.value(QLatin1String("IID")); if (!value.isString()) { qCDebug(pluginLog) << "Not a plugin (no string IID found)"; return false; @@ -664,19 +670,19 @@ bool PluginSpecPrivate::readMetaData(const QJsonObject &metaData) return false; } - value = metaData.value(QLatin1String(PLUGIN_METADATA)); + value = pluginMetaData.value(QLatin1String(PLUGIN_METADATA)); if (!value.isObject()) return reportError(tr("Plugin meta data not found")); - QJsonObject pluginInfo = value.toObject(); + metaData = value.toObject(); - value = pluginInfo.value(QLatin1String(PLUGIN_NAME)); + value = metaData.value(QLatin1String(PLUGIN_NAME)); if (value.isUndefined()) return reportError(msgValueMissing(PLUGIN_NAME)); if (!value.isString()) return reportError(msgValueIsNotAString(PLUGIN_NAME)); name = value.toString(); - value = pluginInfo.value(QLatin1String(PLUGIN_VERSION)); + value = metaData.value(QLatin1String(PLUGIN_VERSION)); if (value.isUndefined()) return reportError(msgValueMissing(PLUGIN_VERSION)); if (!value.isString()) @@ -685,32 +691,32 @@ bool PluginSpecPrivate::readMetaData(const QJsonObject &metaData) if (!isValidVersion(version)) return reportError(msgInvalidFormat(PLUGIN_VERSION, version)); - value = pluginInfo.value(QLatin1String(PLUGIN_COMPATVERSION)); + value = metaData.value(QLatin1String(PLUGIN_COMPATVERSION)); if (!value.isUndefined() && !value.isString()) return reportError(msgValueIsNotAString(PLUGIN_COMPATVERSION)); compatVersion = value.toString(version); if (!value.isUndefined() && !isValidVersion(compatVersion)) return reportError(msgInvalidFormat(PLUGIN_COMPATVERSION, compatVersion)); - value = pluginInfo.value(QLatin1String(PLUGIN_REQUIRED)); + value = metaData.value(QLatin1String(PLUGIN_REQUIRED)); if (!value.isUndefined() && !value.isBool()) return reportError(msgValueIsNotABool(PLUGIN_REQUIRED)); required = value.toBool(false); qCDebug(pluginLog) << "required =" << required; - value = pluginInfo.value(QLatin1String(PLUGIN_HIDDEN_BY_DEFAULT)); + value = metaData.value(QLatin1String(PLUGIN_HIDDEN_BY_DEFAULT)); if (!value.isUndefined() && !value.isBool()) return reportError(msgValueIsNotABool(PLUGIN_HIDDEN_BY_DEFAULT)); hiddenByDefault = value.toBool(false); qCDebug(pluginLog) << "hiddenByDefault =" << hiddenByDefault; - value = pluginInfo.value(QLatin1String(PLUGIN_EXPERIMENTAL)); + value = metaData.value(QLatin1String(PLUGIN_EXPERIMENTAL)); if (!value.isUndefined() && !value.isBool()) return reportError(msgValueIsNotABool(PLUGIN_EXPERIMENTAL)); experimental = value.toBool(false); qCDebug(pluginLog) << "experimental =" << experimental; - value = pluginInfo.value(QLatin1String(PLUGIN_DISABLED_BY_DEFAULT)); + value = metaData.value(QLatin1String(PLUGIN_DISABLED_BY_DEFAULT)); if (!value.isUndefined() && !value.isBool()) return reportError(msgValueIsNotABool(PLUGIN_DISABLED_BY_DEFAULT)); enabledByDefault = !value.toBool(false); @@ -720,35 +726,35 @@ bool PluginSpecPrivate::readMetaData(const QJsonObject &metaData) enabledByDefault = false; enabledBySettings = enabledByDefault; - value = pluginInfo.value(QLatin1String(VENDOR)); + value = metaData.value(QLatin1String(VENDOR)); if (!value.isUndefined() && !value.isString()) return reportError(msgValueIsNotAString(VENDOR)); vendor = value.toString(); - value = pluginInfo.value(QLatin1String(COPYRIGHT)); + value = metaData.value(QLatin1String(COPYRIGHT)); if (!value.isUndefined() && !value.isString()) return reportError(msgValueIsNotAString(COPYRIGHT)); copyright = value.toString(); - value = pluginInfo.value(QLatin1String(DESCRIPTION)); + value = metaData.value(QLatin1String(DESCRIPTION)); if (!value.isUndefined() && !readMultiLineString(value, &description)) return reportError(msgValueIsNotAString(DESCRIPTION)); - value = pluginInfo.value(QLatin1String(URL)); + value = metaData.value(QLatin1String(URL)); if (!value.isUndefined() && !value.isString()) return reportError(msgValueIsNotAString(URL)); url = value.toString(); - value = pluginInfo.value(QLatin1String(CATEGORY)); + value = metaData.value(QLatin1String(CATEGORY)); if (!value.isUndefined() && !value.isString()) return reportError(msgValueIsNotAString(CATEGORY)); category = value.toString(); - value = pluginInfo.value(QLatin1String(LICENSE)); + value = metaData.value(QLatin1String(LICENSE)); if (!value.isUndefined() && !readMultiLineString(value, &license)) return reportError(msgValueIsNotAMultilineString(LICENSE)); - value = pluginInfo.value(QLatin1String(PLATFORM)); + value = metaData.value(QLatin1String(PLATFORM)); if (!value.isUndefined() && !value.isString()) return reportError(msgValueIsNotAString(PLATFORM)); const QString platformSpec = value.toString().trimmed(); @@ -759,7 +765,7 @@ bool PluginSpecPrivate::readMetaData(const QJsonObject &metaData) .arg(platformSpec, platformSpecification.errorString())); } - value = pluginInfo.value(QLatin1String(DEPENDENCIES)); + value = metaData.value(QLatin1String(DEPENDENCIES)); if (!value.isUndefined() && !value.isArray()) return reportError(msgValueIsNotAObjectArray(DEPENDENCIES)); if (!value.isUndefined()) { @@ -806,7 +812,7 @@ bool PluginSpecPrivate::readMetaData(const QJsonObject &metaData) } } - value = pluginInfo.value(QLatin1String(ARGUMENTS)); + value = metaData.value(QLatin1String(ARGUMENTS)); if (!value.isUndefined() && !value.isArray()) return reportError(msgValueIsNotAObjectArray(ARGUMENTS)); if (!value.isUndefined()) { diff --git a/src/libs/extensionsystem/pluginspec.h b/src/libs/extensionsystem/pluginspec.h index 64725c8e9f..0462acddef 100644 --- a/src/libs/extensionsystem/pluginspec.h +++ b/src/libs/extensionsystem/pluginspec.h @@ -104,6 +104,7 @@ public: bool isForceEnabled() const; bool isForceDisabled() const; QVector<PluginDependency> dependencies() const; + QJsonObject metaData() const; typedef QVector<PluginArgumentDescription> PluginArgumentDescriptions; PluginArgumentDescriptions argumentDescriptions() const; diff --git a/src/libs/extensionsystem/pluginspec_p.h b/src/libs/extensionsystem/pluginspec_p.h index 86790da8ec..e0ac647d14 100644 --- a/src/libs/extensionsystem/pluginspec_p.h +++ b/src/libs/extensionsystem/pluginspec_p.h @@ -82,6 +82,7 @@ public: QString category; QRegExp platformSpecification; QVector<PluginDependency> dependencies; + QJsonObject metaData; bool enabledBySettings = true; bool enabledIndirectly = false; bool forceEnabled = false; @@ -104,7 +105,7 @@ public: void enableDependenciesIndirectly(); - bool readMetaData(const QJsonObject &metaData); + bool readMetaData(const QJsonObject &pluginMetaData); private: PluginSpec *q; |