void PluginDumper::onLoadPluginTypes(const QString &libraryPath, const QString &importPath, const QString &importUri, const QString &importVersion) { const QString canonicalLibraryPath = QDir::cleanPath(libraryPath); if (m_runningQmldumps.values().contains(canonicalLibraryPath)) return; const Snapshot snapshot = m_modelManager->snapshot(); const LibraryInfo libraryInfo = snapshot.libraryInfo(canonicalLibraryPath); if (libraryInfo.pluginTypeInfoStatus() != LibraryInfo::NoTypeInfo) return; // avoid inserting the same plugin twice int index; for (index = 0; index < m_plugins.size(); ++index) { if (m_plugins.at(index).qmldirPath == libraryPath) break; } if (index == m_plugins.size()) m_plugins.append(Plugin()); Plugin &plugin = m_plugins[index]; plugin.qmldirPath = canonicalLibraryPath; plugin.importPath = importPath; plugin.importUri = importUri; plugin.importVersion = importVersion; // add default qmltypes file if it exists const QLatin1String defaultQmltypesFileName("plugins.qmltypes"); const QString defaultQmltypesPath = makeAbsolute(defaultQmltypesFileName, canonicalLibraryPath); if (!plugin.typeInfoPaths.contains(defaultQmltypesPath) && QFile::exists(defaultQmltypesPath)) plugin.typeInfoPaths += defaultQmltypesPath; // add typeinfo files listed in qmldir foreach (const QmlDirParser::TypeInfo &typeInfo, libraryInfo.typeInfos()) { QString pathNow = makeAbsolute(typeInfo.fileName, canonicalLibraryPath); if (!plugin.typeInfoPaths.contains(pathNow) && QFile::exists(pathNow)) plugin.typeInfoPaths += pathNow; } // watch plugin libraries foreach (const QmlDirParser::Plugin &plugin, snapshot.libraryInfo(canonicalLibraryPath).plugins()) { const QString pluginLibrary = resolvePlugin(canonicalLibraryPath, plugin.path, plugin.name); if (!pluginLibrary.isEmpty()) { if (!pluginWatcher()->watchesFile(pluginLibrary)) pluginWatcher()->addFile(pluginLibrary, Utils::FileSystemWatcher::WatchModifiedDate); m_libraryToPluginIndex.insert(pluginLibrary, index); } } // watch library qmltypes file if (!plugin.typeInfoPaths.isEmpty()) { foreach (const QString &path, plugin.typeInfoPaths) { if (!QFile::exists(path)) continue; if (!pluginWatcher()->watchesFile(path)) pluginWatcher()->addFile(path, Utils::FileSystemWatcher::WatchModifiedDate); m_libraryToPluginIndex.insert(path, index); } }
void PluginDumper::onLoadPluginTypes(const QString &libraryPath, const QString &importPath, const QString &importUri, const QString &importVersion) { const QString canonicalLibraryPath = QDir::cleanPath(libraryPath); if (m_runningQmldumps.values().contains(canonicalLibraryPath)) return; const Snapshot snapshot = m_modelManager->snapshot(); const LibraryInfo libraryInfo = snapshot.libraryInfo(canonicalLibraryPath); if (libraryInfo.pluginTypeInfoStatus() != LibraryInfo::NoTypeInfo) return; // avoid inserting the same plugin twice int index; for (index = 0; index < m_plugins.size(); ++index) { if (m_plugins.at(index).qmldirPath == libraryPath) break; } if (index == m_plugins.size()) m_plugins.append(Plugin()); Plugin &plugin = m_plugins[index]; plugin.qmldirPath = canonicalLibraryPath; plugin.importPath = importPath; plugin.importUri = importUri; plugin.importVersion = importVersion; // watch plugin libraries foreach (const QmlDirParser::Plugin &plugin, snapshot.libraryInfo(canonicalLibraryPath).plugins()) { const QString pluginLibrary = resolvePlugin(canonicalLibraryPath, plugin.path, plugin.name); pluginWatcher()->addFile(pluginLibrary, Utils::FileSystemWatcher::WatchModifiedDate); m_libraryToPluginIndex.insert(pluginLibrary, index); } // watch library xml file if (plugin.hasPredumpedQmlTypesFile()) { const QString &path = plugin.predumpedQmlTypesFilePath(); pluginWatcher()->addFile(path, Utils::FileSystemWatcher::WatchModifiedDate); m_libraryToPluginIndex.insert(path, index); } dump(plugin); }