Merge remote-tracking branch 'origin/4.2'

Conflicts:
	src/plugins/ios/iosdevice.cpp
	src/plugins/ios/iossimulator.cpp
	src/plugins/projectexplorer/projectwindow.cpp
	src/plugins/qmakeprojectmanager/librarydetailscontroller.cpp
	src/shared/qbs

Change-Id: Ie98e2401a2259903141a13170c78388f2da467d2
This commit is contained in:
Eike Ziller
2016-12-09 12:42:01 +01:00
26 changed files with 200 additions and 130 deletions

View File

@@ -29,6 +29,7 @@
#include "qmljseditordocument.h"
#include "qmlexpressionundercursor.h"
#include <coreplugin/icore.h>
#include <coreplugin/editormanager/ieditor.h>
#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/helpmanager.h>
@@ -49,6 +50,8 @@
#include <QDir>
#include <QList>
#include <QStringRef>
#include <QRegularExpression>
#include <QRegularExpressionMatch>
using namespace Core;
using namespace QmlJS;
@@ -143,30 +146,57 @@ bool QmlJSHoverHandler::setQmlTypeHelp(const ScopeChain &scopeChain, const Docum
const ObjectValue *value, const QStringList &qName)
{
QString moduleName = getModuleName(scopeChain, qmlDocument, value);
QMap<QString, QUrl> urlMap;
QString helpId;
do {
QStringList helpIdPieces(qName);
helpIdPieces.prepend(moduleName);
helpIdPieces.prepend(QLatin1String("QML"));
helpId = helpIdPieces.join(QLatin1Char('.'));
if (!HelpManager::linksForIdentifier(helpId).isEmpty())
urlMap = HelpManager::linksForIdentifier(helpId);
if (!urlMap.isEmpty())
break;
if (helpIdPieces.size() > 3) {
QString lm = helpIdPieces.value(2);
helpIdPieces.removeAt(2);
helpId = helpIdPieces.join(QLatin1Char('.'));
if (!HelpManager::linksForIdentifier(helpId).isEmpty())
urlMap = HelpManager::linksForIdentifier(helpId);
if (!urlMap.isEmpty())
break;
helpIdPieces.replace(1, lm);
if (!HelpManager::linksForIdentifier(helpId).isEmpty())
urlMap = HelpManager::linksForIdentifier(helpId);
if (!urlMap.isEmpty())
break;
}
helpIdPieces.removeAt(1);
helpId = helpIdPieces.join(QLatin1Char('.'));
if (!HelpManager::linksForIdentifier(helpId).isEmpty())
urlMap = HelpManager::linksForIdentifier(helpId);
if (!urlMap.isEmpty())
break;
return false;
} while (0);
// Check if the module name contains a major version.
QRegularExpression version("^([^\\d]*)(\\d+)\\.*\\d*$");
QRegularExpressionMatch m = version.match(moduleName);
if (m.hasMatch()) {
QMap<QString, QUrl> filteredUrlMap;
QStringRef maj = m.capturedRef(2);
for (auto x = urlMap.begin(); x != urlMap.end(); ++x) {
QString urlModuleName = x.value().path().split('/')[1];
if (urlModuleName.contains(maj))
filteredUrlMap.insert(x.key(), x.value());
}
if (!filteredUrlMap.isEmpty()) {
// Use the url as helpId, to disambiguate different versions
helpId = filteredUrlMap.first().toString();
const HelpItem helpItem(helpId, qName.join(QLatin1Char('.')), HelpItem::QmlComponent, filteredUrlMap);
setLastHelpItemIdentified(helpItem);
return true;
}
}
setLastHelpItemIdentified(HelpItem(helpId, qName.join(QLatin1Char('.')), HelpItem::QmlComponent));
return true;
}