aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFawzi Mohamed <fawzi.mohamed@digia.com>2014-07-03 12:33:23 +0200
committerFawzi Mohamed <fawzi.mohamed@digia.com>2014-07-04 14:03:30 +0200
commitfa24266972fc8a824b451c1bd58b7acd427b46c0 (patch)
treee775d880ca0780f8b0e1d38203bcb7273f7acc9d
parentc44cffa49df9dffd123551a8ae57c0d608b4237e (diff)
qmljs: improve handling of relocatable dumps
Change-Id: Ie329911a3f7f9266ead41087cbc7d78b95c1497a Reviewed-by: Tim Jenssen <tim.jenssen@digia.com> Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
-rw-r--r--src/libs/qmljs/qmljsdocument.cpp25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/libs/qmljs/qmljsdocument.cpp b/src/libs/qmljs/qmljsdocument.cpp
index 66da8d2932..34c2e7370c 100644
--- a/src/libs/qmljs/qmljsdocument.cpp
+++ b/src/libs/qmljs/qmljsdocument.cpp
@@ -554,10 +554,29 @@ void Snapshot::insertLibraryInfo(const QString &path, const LibraryInfo &info)
}
QStringList splitPath = path.split(QLatin1Char('/'));
+ QRegExp vNr(QLatin1String("^(.+)\\.([0-9]+)(?:\\.([0-9]+))?$"));
+ QRegExp safeName(QLatin1String("^[a-zA-Z_][[a-zA-Z0-9_]*$"));
foreach (const ImportKey &importKey, packages) {
- QString requiredPath = QStringList(splitPath.mid(0, splitPath.size() - importKey.splitPath.size()))
- .join(QLatin1String("/"));
- cImport.possibleExports << Export(importKey, requiredPath, true);
+ if (importKey.splitPath.size() == 1 && importKey.splitPath.at(0).isEmpty()) {
+ // relocatable
+ QStringList myPath = splitPath;
+ if (vNr.indexIn(myPath.last()) == 0) {
+ myPath.last() = vNr.cap(1);
+ }
+ for (int iPath = myPath.size(); iPath != 0; ) {
+ --iPath;
+ if (safeName.indexIn(myPath.at(iPath)) != 0)
+ break;
+ ImportKey iKey(ImportType::Library, QStringList(myPath.mid(iPath)).join(QLatin1Char('.')),
+ importKey.majorVersion, importKey.minorVersion);
+ cImport.possibleExports.append(Export(iKey, QStringList(myPath.mid(0, iPath))
+ .join(QLatin1Char('/')), true));
+ }
+ } else {
+ QString requiredPath = QStringList(splitPath.mid(0, splitPath.size() - importKey.splitPath.size()))
+ .join(QLatin1String("/"));
+ cImport.possibleExports << Export(importKey, requiredPath, true);
+ }
}
foreach (const QmlDirParser::Component &component, info.components()) {
foreach (const Export &e, cImport.possibleExports)