aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristian Kamm <christian.d.kamm@nokia.com>2011-09-21 12:42:27 +0200
committerChristian Kamm <christian.d.kamm@nokia.com>2011-09-26 12:04:16 +0200
commitfdd0a15ef4265a39db6e33b6353f5231966fdb5d (patch)
treeae0fa0921a29eb4f7705be96201ee74b0086e867 /src
parent22e2c0ad2c97df2173ead3c2ab8977c8970dd4c5 (diff)
QmlJS: Separate metaObjectRevision from minor version number.
They need not to be identical. Additionally: * Rename ImportInfo::name to path, because that's what it does. * Add ImportInfo::name, for getting the uri with the names separated by dots. * Allow for exportMetaObjectRevisions in qmltypes files. * Allow for exports with an empty type name, as generated by qmlRegisterRevision. They are used for associating meta object revisions with non-exported types. * Rewrite the Qt 4.7 import to QtQuick 1.0 at an early stage. In preparation for the Qt 5 type information update, where Qt 4.7 is gone. Change-Id: Ia287193623d9530a56b9eb8d2481d50aabd94c3e Reviewed-on: http://codereview.qt-project.org/5309 Reviewed-by: Fawzi Mohamed <fawzi.mohamed@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/libs/languageutils/fakemetaobject.cpp14
-rw-r--r--src/libs/languageutils/fakemetaobject.h5
-rw-r--r--src/libs/qmljs/qmljsbind.cpp21
-rw-r--r--src/libs/qmljs/qmljsinterpreter.cpp44
-rw-r--r--src/libs/qmljs/qmljsinterpreter.h14
-rw-r--r--src/libs/qmljs/qmljslink.cpp26
-rw-r--r--src/libs/qmljs/qmljsscopechain.cpp2
-rw-r--r--src/libs/qmljs/qmljstypedescriptionreader.cpp50
-rw-r--r--src/libs/qmljs/qmljstypedescriptionreader.h1
-rw-r--r--src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp6
-rw-r--r--src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp4
-rw-r--r--src/plugins/qmljseditor/qmljseditor.cpp2
-rw-r--r--src/plugins/qmljseditor/qmljshoverhandler.cpp2
-rw-r--r--src/plugins/qmljstools/qmljsmodelmanager.cpp6
14 files changed, 145 insertions, 52 deletions
diff --git a/src/libs/languageutils/fakemetaobject.cpp b/src/libs/languageutils/fakemetaobject.cpp
index 6f47fbc2f0..c7a9c6d01e 100644
--- a/src/libs/languageutils/fakemetaobject.cpp
+++ b/src/libs/languageutils/fakemetaobject.cpp
@@ -157,11 +157,14 @@ void FakeMetaObject::addExport(const QString &name, const QString &package, Comp
exp.type = name;
exp.package = package;
exp.version = version;
- exp.packageNameVersion = QString::fromLatin1("%1/%2 %3").arg(
- package, name,
- version.toString());
m_exports.append(exp);
}
+
+void FakeMetaObject::setExportMetaObjectRevision(int exportIndex, int metaObjectRevision)
+{
+ m_exports[exportIndex].metaObjectRevision = metaObjectRevision;
+}
+
QList<FakeMetaObject::Export> FakeMetaObject::exports() const
{ return m_exports; }
FakeMetaObject::Export FakeMetaObject::exportInPackage(const QString &package) const
@@ -219,5 +222,8 @@ QString FakeMetaObject::attachedTypeName() const
void FakeMetaObject::setAttachedTypeName(const QString &name)
{ m_attachedTypeName = name; }
+FakeMetaObject::Export::Export()
+ : metaObjectRevision(0)
+{}
bool FakeMetaObject::Export::isValid() const
-{ return !type.isEmpty(); }
+{ return version.isValid() || !package.isEmpty() || !type.isEmpty(); }
diff --git a/src/libs/languageutils/fakemetaobject.h b/src/libs/languageutils/fakemetaobject.h
index 1b67876e25..b5e8f2de37 100644
--- a/src/libs/languageutils/fakemetaobject.h
+++ b/src/libs/languageutils/fakemetaobject.h
@@ -139,10 +139,12 @@ public:
class LANGUAGEUTILS_EXPORT Export {
public:
+ Export();
+
QString package;
QString type;
ComponentVersion version;
- QString packageNameVersion;
+ int metaObjectRevision;
bool isValid() const;
};
@@ -166,6 +168,7 @@ public:
void setClassName(const QString &name);
void addExport(const QString &name, const QString &package, ComponentVersion version);
+ void setExportMetaObjectRevision(int exportIndex, int metaObjectRevision);
QList<Export> exports() const;
Export exportInPackage(const QString &package) const;
diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp
index c0f5219576..ef0134ecdf 100644
--- a/src/libs/qmljs/qmljsbind.cpp
+++ b/src/libs/qmljs/qmljsbind.cpp
@@ -200,6 +200,7 @@ bool Bind::visit(UiImport *ast)
{
ComponentVersion version;
ImportInfo::Type type = ImportInfo::InvalidImport;
+ QString path;
QString name;
if (ast->versionToken.isValid()) {
@@ -213,19 +214,27 @@ bool Bind::visit(UiImport *ast)
if (ast->importUri) {
type = ImportInfo::LibraryImport;
- name = toString(ast->importUri, QDir::separator());
+ path = toString(ast->importUri, QDir::separator());
+ name = toString(ast->importUri, QLatin1Char(','));
+
+ // treat Qt 4.7 as QtQuick 1.0
+ if (path == QLatin1String("Qt") && version == ComponentVersion(4, 7)) {
+ path = QLatin1String("QtQuick");
+ name = path;
+ version = ComponentVersion(1, 0);
+ }
if (!version.isValid()) {
_diagnosticMessages->append(
errorMessage(ast, tr("package import requires a version number")));
}
} else if (!ast->fileName.isEmpty()) {
- const QString &fileName = ast->fileName.toString();
- QFileInfo importFileInfo(fileName);
+ name = ast->fileName.toString();
+ QFileInfo importFileInfo(name);
if (!importFileInfo.isAbsolute()) {
- importFileInfo=QFileInfo(_doc->path() + QDir::separator() + fileName);
+ importFileInfo = QFileInfo(_doc->path() + QDir::separator() + name);
}
- name = importFileInfo.absoluteFilePath();
+ path = importFileInfo.absoluteFilePath();
if (importFileInfo.isFile())
type = ImportInfo::FileImport;
else if (importFileInfo.isDir())
@@ -234,7 +243,7 @@ bool Bind::visit(UiImport *ast)
type = ImportInfo::UnknownFileImport;
}
}
- _imports += ImportInfo(type, name, version, ast);
+ _imports += ImportInfo(type, path, name, version, ast);
return false;
}
diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp
index 257b58eb8f..94518dbde9 100644
--- a/src/libs/qmljs/qmljsinterpreter.cpp
+++ b/src/libs/qmljs/qmljsinterpreter.cpp
@@ -161,13 +161,15 @@ public:
QmlObjectValue::QmlObjectValue(FakeMetaObject::ConstPtr metaObject, const QString &className,
const QString &packageName, const ComponentVersion &componentVersion,
- const ComponentVersion &importVersion, ValueOwner *valueOwner)
+ const ComponentVersion &importVersion, int metaObjectRevision,
+ ValueOwner *valueOwner)
: ObjectValue(valueOwner),
_attachedType(0),
_metaObject(metaObject),
_moduleName(packageName),
_componentVersion(componentVersion),
- _importVersion(importVersion)
+ _importVersion(importVersion),
+ _metaObjectRevision(metaObjectRevision)
{
setClassName(className);
int nEnums = metaObject->enumeratorCount();
@@ -208,7 +210,7 @@ void QmlObjectValue::processMembers(MemberProcessor *processor) const
// process the meta methods
for (int index = 0; index < _metaObject->methodCount(); ++index) {
const FakeMetaMethod method = _metaObject->method(index);
- if (_componentVersion.isValid() && _componentVersion.minorVersion() < method.revision())
+ if (_metaObjectRevision < method.revision())
continue;
QString methodName;
@@ -234,7 +236,7 @@ void QmlObjectValue::processMembers(MemberProcessor *processor) const
// process the meta properties
for (int index = 0; index < _metaObject->propertyCount(); ++index) {
const FakeMetaProperty prop = _metaObject->property(index);
- if (_componentVersion.isValid() && _componentVersion.minorVersion() < prop.revision())
+ if (_metaObjectRevision < prop.revision())
continue;
const QString propertyName = prop.name();
@@ -1262,8 +1264,9 @@ void CppQmlTypes::load(const T &fakeMetaObjects, const QString &overridePackage)
QTC_ASSERT(exp.version == ComponentVersion(), continue);
QTC_ASSERT(exp.type == fmo->className(), continue);
QmlObjectValue *cppValue = new QmlObjectValue(
- fmo, fmo->className(), cppPackage, ComponentVersion(), ComponentVersion(), _valueOwner);
- _objectsByQualifiedName[exp.packageNameVersion] = cppValue;
+ fmo, fmo->className(), cppPackage, ComponentVersion(), ComponentVersion(),
+ ComponentVersion::MaxVersion, _valueOwner);
+ _objectsByQualifiedName[qualifiedName(cppPackage, fmo->className(), ComponentVersion())] = cppValue;
newCppTypes += cppValue;
}
}
@@ -1284,6 +1287,7 @@ template void CppQmlTypes::load< QHash<QString, FakeMetaObject::ConstPtr> >(cons
QList<const QmlObjectValue *> CppQmlTypes::createObjectsForImport(const QString &package, ComponentVersion version)
{
QList<const QmlObjectValue *> exportedObjects;
+ QList<const QmlObjectValue *> newObjects;
// make new exported objects
foreach (const FakeMetaObject::ConstPtr &fmo, _fakeMetaObjectsByPackage.value(package)) {
@@ -1303,16 +1307,26 @@ QList<const QmlObjectValue *> CppQmlTypes::createObjectsForImport(const QString
if (_objectsByQualifiedName.contains(key))
continue;
+ QString name = bestExport.type;
+ bool exported = true;
+ if (name.isEmpty()) {
+ exported = false;
+ name = fmo->className();
+ }
+
QmlObjectValue *newObject = new QmlObjectValue(
- fmo, bestExport.type, package, bestExport.version, version, _valueOwner);
+ fmo, name, package, bestExport.version, version,
+ bestExport.metaObjectRevision, _valueOwner);
// use package.cppname importversion as key
_objectsByQualifiedName.insert(key, newObject);
- exportedObjects += newObject;
+ if (exported)
+ exportedObjects += newObject;
+ newObjects += newObject;
}
// set their prototypes, creating them if necessary
- foreach (const QmlObjectValue *cobject, exportedObjects) {
+ foreach (const QmlObjectValue *cobject, newObjects) {
QmlObjectValue *object = const_cast<QmlObjectValue *>(cobject);
while (!object->prototype()) {
const QString &protoCppName = object->metaObject()->superclassName();
@@ -1335,7 +1349,7 @@ QList<const QmlObjectValue *> CppQmlTypes::createObjectsForImport(const QString
// make a new object
QmlObjectValue *proto = new QmlObjectValue(
protoFmo, protoCppName, object->moduleName(), ComponentVersion(),
- object->importVersion(), _valueOwner);
+ object->importVersion(), ComponentVersion::MaxVersion, _valueOwner);
_objectsByQualifiedName.insert(key, proto);
object->setPrototype(proto);
@@ -1916,10 +1930,11 @@ ImportInfo::ImportInfo()
{
}
-ImportInfo::ImportInfo(Type type, const QString &name,
+ImportInfo::ImportInfo(Type type, const QString &path, const QString &name,
ComponentVersion version, UiImport *ast)
: _type(type)
, _name(name)
+ , _path(path)
, _version(version)
, _ast(ast)
{
@@ -1940,6 +1955,11 @@ QString ImportInfo::name() const
return _name;
}
+QString ImportInfo::path() const
+{
+ return _path;
+}
+
QString ImportInfo::id() const
{
if (_ast)
@@ -2208,7 +2228,7 @@ void Imports::dump() const
const ObjectValue *import = i.object;
const ImportInfo &info = i.info;
- qDebug() << " " << info.name() << " " << info.version().toString() << " as " << info.id() << " : " << import;
+ qDebug() << " " << info.path() << " " << info.version().toString() << " as " << info.id() << " : " << import;
MemberDumper dumper;
import->processMembers(&dumper);
}
diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h
index a96c9f4938..804e52b03e 100644
--- a/src/libs/qmljs/qmljsinterpreter.h
+++ b/src/libs/qmljs/qmljsinterpreter.h
@@ -419,7 +419,7 @@ class QMLJS_EXPORT QmlObjectValue: public ObjectValue
public:
QmlObjectValue(LanguageUtils::FakeMetaObject::ConstPtr metaObject, const QString &className,
const QString &moduleName, const LanguageUtils::ComponentVersion &componentVersion,
- const LanguageUtils::ComponentVersion &importVersion,
+ const LanguageUtils::ComponentVersion &importVersion, int metaObjectRevision,
ValueOwner *valueOwner);
virtual ~QmlObjectValue();
@@ -464,6 +464,7 @@ private:
const LanguageUtils::ComponentVersion _importVersion;
mutable QHash<int, const Value *> _metaSignature;
QHash<QString, const QmlEnumValue * > _enums;
+ int _metaObjectRevision;
};
class QMLJS_EXPORT Activation
@@ -823,17 +824,21 @@ public:
};
ImportInfo();
- ImportInfo(Type type, const QString &name,
+ ImportInfo(Type type, const QString &path, const QString &name = QString(),
LanguageUtils::ComponentVersion version = LanguageUtils::ComponentVersion(),
AST::UiImport *ast = 0);
bool isValid() const;
Type type() const;
- // LibraryImport: uri with '/' separator
- // Other: absoluteFilePath
+ // LibraryImport: uri with ',' separator
+ // Other: non-absolute path
QString name() const;
+ // LibraryImport: uri with QDir::separator separator
+ // Other: absoluteFilePath
+ QString path() const;
+
// null if the import has no 'as', otherwise the target id
QString id() const;
@@ -843,6 +848,7 @@ public:
private:
Type _type;
QString _name;
+ QString _path;
LanguageUtils::ComponentVersion _version;
AST::UiImport *_ast;
};
diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp
index 92c17276b4..8c2cda4568 100644
--- a/src/libs/qmljs/qmljslink.cpp
+++ b/src/libs/qmljs/qmljslink.cpp
@@ -52,27 +52,27 @@ class ImportCacheKey
public:
explicit ImportCacheKey(const ImportInfo &info)
: type(info.type())
- , name(info.name())
+ , path(info.path())
, majorVersion(info.version().majorVersion())
, minorVersion(info.version().minorVersion())
{}
int type;
- QString name;
+ QString path;
int majorVersion;
int minorVersion;
};
uint qHash(const ImportCacheKey &info)
{
- return ::qHash(info.type) ^ ::qHash(info.name) ^
+ return ::qHash(info.type) ^ ::qHash(info.path) ^
::qHash(info.majorVersion) ^ ::qHash(info.minorVersion);
}
bool operator==(const ImportCacheKey &i1, const ImportCacheKey &i2)
{
return i1.type == i2.type
- && i1.name == i2.name
+ && i1.path == i2.path
&& i1.majorVersion == i2.majorVersion
&& i1.minorVersion == i2.minorVersion;
}
@@ -291,7 +291,7 @@ Import LinkPrivate::importFileOrDirectory(Document::Ptr doc, const ImportInfo &i
import.info = importInfo;
import.object = 0;
- const QString &path = importInfo.name();
+ const QString &path = importInfo.path();
if (importInfo.type() == ImportInfo::DirectoryImport
|| importInfo.type() == ImportInfo::ImplicitDirectoryImport) {
@@ -326,12 +326,12 @@ Import LinkPrivate::importNonFile(Document::Ptr doc, const ImportInfo &importInf
import.info = importInfo;
import.object = new ObjectValue(valueOwner);
- const QString packageName = Bind::toString(importInfo.ast()->importUri, '.');
+ const QString packageName = importInfo.name();
const ComponentVersion version = importInfo.version();
bool importFound = false;
- const QString &packagePath = importInfo.name();
+ const QString &packagePath = importInfo.path();
// check the filesystem with full version
foreach (const QString &importPath, importPaths) {
QString libraryPath = QString("%1/%2.%3").arg(importPath, packagePath, version.toString());
@@ -410,8 +410,8 @@ bool LinkPrivate::importLibrary(Document::Ptr doc,
ModelManagerInterface *modelManager = ModelManagerInterface::instance();
if (modelManager) {
if (importInfo.type() == ImportInfo::LibraryImport) {
- if (importInfo.version().isValid()) {
- const QString uri = importInfo.name().replace(QDir::separator(), QLatin1Char('.'));
+ if (version.isValid()) {
+ const QString uri = importInfo.name();
modelManager->loadPluginTypes(
libraryPath, importPath,
uri, version.toString());
@@ -429,14 +429,12 @@ bool LinkPrivate::importLibrary(Document::Ptr doc,
} else if (libraryInfo.pluginTypeInfoStatus() == LibraryInfo::DumpError
|| libraryInfo.pluginTypeInfoStatus() == LibraryInfo::TypeInfoFileError) {
// Only underline import if package isn't described in .qmltypes anyway
- QString packageName;
- if (ast && ast->importUri)
- packageName = Bind::toString(importInfo.ast()->importUri, '.');
+ QString packageName = importInfo.name();
if (errorLoc.isValid() && (packageName.isEmpty() || !valueOwner->cppQmlTypes().hasModule(packageName))) {
error(doc, errorLoc, libraryInfo.pluginTypeInfoError());
}
- } else if (ast && ast->importUri) {
- const QString packageName = Bind::toString(importInfo.ast()->importUri, '.');
+ } else {
+ const QString packageName = importInfo.name();
valueOwner->cppQmlTypes().load(libraryInfo.metaObjects(), packageName);
foreach (const QmlObjectValue *object, valueOwner->cppQmlTypes().createObjectsForImport(packageName, version)) {
import->object->setMember(object->className(), object);
diff --git a/src/libs/qmljs/qmljsscopechain.cpp b/src/libs/qmljs/qmljsscopechain.cpp
index 724f888c50..d25ada859b 100644
--- a/src/libs/qmljs/qmljsscopechain.cpp
+++ b/src/libs/qmljs/qmljsscopechain.cpp
@@ -266,7 +266,7 @@ void ScopeChain::initializeRootScope()
// add scope chains for all components that import this file
foreach (Document::Ptr otherDoc, snapshot) {
foreach (const ImportInfo &import, otherDoc->bind()->imports()) {
- if (import.type() == ImportInfo::FileImport && m_document->fileName() == import.name()) {
+ if (import.type() == ImportInfo::FileImport && m_document->fileName() == import.path()) {
QmlComponentChain *component = new QmlComponentChain(otherDoc);
componentScopes.insert(otherDoc.data(), component);
chain->addInstantiatingComponent(component);
diff --git a/src/libs/qmljs/qmljstypedescriptionreader.cpp b/src/libs/qmljs/qmljstypedescriptionreader.cpp
index 7c2dc9d779..318d98d758 100644
--- a/src/libs/qmljs/qmljstypedescriptionreader.cpp
+++ b/src/libs/qmljs/qmljstypedescriptionreader.cpp
@@ -199,10 +199,14 @@ void TypeDescriptionReader::readComponent(UiObjectDefinition *ast)
fmo->setDefaultPropertyName(readStringBinding(script));
} else if (name == "exports") {
readExports(script, fmo);
+ } else if (name == "exportMetaObjectRevisions") {
+ readMetaObjectRevisions(script, fmo);
} else if (name == "attachedType") {
fmo->setAttachedTypeName(readStringBinding(script));
} else {
- addWarning(script->firstSourceLocation(), "Expected only name, prototype, defaultProperty, attachedType and exports script bindings");
+ addWarning(script->firstSourceLocation(),
+ "Expected only name, prototype, defaultProperty, attachedType, exports"
+ "and exportMetaObjectRevisions script bindings");
}
} else {
addWarning(member->firstSourceLocation(), "Expected only script bindings and object definitions");
@@ -488,6 +492,50 @@ void TypeDescriptionReader::readExports(UiScriptBinding *ast, FakeMetaObject::Pt
}
}
+void TypeDescriptionReader::readMetaObjectRevisions(UiScriptBinding *ast, FakeMetaObject::Ptr fmo)
+{
+ if (!ast || !ast->statement) {
+ addError(ast->colonToken, "Expected array of numbers after colon");
+ return;
+ }
+
+ ExpressionStatement *expStmt = dynamic_cast<ExpressionStatement *>(ast->statement);
+ if (!expStmt) {
+ addError(ast->statement->firstSourceLocation(), "Expected array of numbers after colon");
+ return;
+ }
+
+ ArrayLiteral *arrayLit = dynamic_cast<ArrayLiteral *>(expStmt->expression);
+ if (!arrayLit) {
+ addError(expStmt->firstSourceLocation(), "Expected array of numbers after colon");
+ return;
+ }
+
+ int exportIndex = 0;
+ const int exportCount = fmo->exports().size();
+ for (ElementList *it = arrayLit->elements; it; it = it->next, ++exportIndex) {
+ NumericLiteral *numberLit = cast<NumericLiteral *>(it->expression);
+ if (!numberLit) {
+ addError(arrayLit->firstSourceLocation(), "Expected array literal with only number literal members");
+ return;
+ }
+
+ if (exportIndex >= exportCount) {
+ addError(numberLit->firstSourceLocation(), "Meta object revision without matching export");
+ return;
+ }
+
+ const double v = numberLit->value;
+ const int metaObjectRevision = static_cast<int>(v);
+ if (metaObjectRevision != v) {
+ addError(numberLit->firstSourceLocation(), "Expected integer");
+ return;
+ }
+
+ fmo->setExportMetaObjectRevision(exportIndex, metaObjectRevision);
+ }
+}
+
void TypeDescriptionReader::readEnumValues(AST::UiScriptBinding *ast, LanguageUtils::FakeMetaEnum *fme)
{
if (!ast || !ast->statement) {
diff --git a/src/libs/qmljs/qmljstypedescriptionreader.h b/src/libs/qmljs/qmljstypedescriptionreader.h
index 2d33376d86..f8e5366e9d 100644
--- a/src/libs/qmljs/qmljstypedescriptionreader.h
+++ b/src/libs/qmljs/qmljstypedescriptionreader.h
@@ -78,6 +78,7 @@ private:
double readNumericBinding(AST::UiScriptBinding *ast);
int readIntBinding(AST::UiScriptBinding *ast);
void readExports(AST::UiScriptBinding *ast, LanguageUtils::FakeMetaObject::Ptr fmo);
+ void readMetaObjectRevisions(AST::UiScriptBinding *ast, LanguageUtils::FakeMetaObject::Ptr fmo);
void readEnumValues(AST::UiScriptBinding *ast, LanguageUtils::FakeMetaEnum *fme);
void addError(const AST::SourceLocation &loc, const QString &message);
diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
index da7d49dc81..388de0c9b7 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
@@ -473,7 +473,7 @@ const QmlJS::QmlObjectValue *NodeMetaInfoPrivate::getQmlObjectValue() const
// otherwise get the qml object value that's available in the document
foreach (const QmlJS::Import &import, context()->imports(document())->all()) {
- if (import.info.name() != module)
+ if (import.info.path() != module)
continue;
const Value *lookupResult = import.object->lookupMember(type, context());
if ((value = dynamic_cast<const QmlObjectValue *>(lookupResult)))
@@ -692,7 +692,9 @@ bool NodeMetaInfoPrivate::cleverCheckType(const QString &otherType) const
const LanguageUtils::FakeMetaObject::Export exp =
qmlObjectValue->metaObject()->exportInPackage(package);
- const QString convertedName = exp.type;
+ QString convertedName = exp.type;
+ if (convertedName.isEmpty())
+ convertedName = qmlObjectValue->className();
return typeName == convertedName;
}
diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
index bab7cf2acf..58ceb3e2da 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
@@ -386,12 +386,12 @@ public:
const Imports *imports = m_context->imports(m_doc.data());
ImportInfo importInfo = imports->info(fullTypeName, m_context.data());
if (importInfo.isValid() && importInfo.type() == ImportInfo::LibraryImport) {
- QString name = importInfo.name().replace("\\", ".");
+ QString name = importInfo.name();
majorVersion = importInfo.version().majorVersion();
minorVersion = importInfo.version().minorVersion();
typeName.prepend(name + ".");
} else if (importInfo.isValid() && importInfo.type() == ImportInfo::DirectoryImport) {
- QString path = importInfo.name();
+ QString path = importInfo.path();
QDir dir(m_doc->path());
QString relativeDir = dir.relativeFilePath(path);
QString name = relativeDir.replace("/", ".");
diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp
index 69b83809c5..0205faeb42 100644
--- a/src/plugins/qmljseditor/qmljseditor.cpp
+++ b/src/plugins/qmljseditor/qmljseditor.cpp
@@ -1302,7 +1302,7 @@ TextEditor::BaseTextEditorWidget::Link QmlJSTextEditorWidget::findLinkAt(const Q
// if it's a file import, link to the file
foreach (const ImportInfo &import, semanticInfo.document->bind()->imports()) {
if (import.ast() == importAst && import.type() == ImportInfo::FileImport) {
- BaseTextEditorWidget::Link link(import.name());
+ BaseTextEditorWidget::Link link(import.path());
link.begin = importAst->firstSourceLocation().begin();
link.end = importAst->lastSourceLocation().end();
return link;
diff --git a/src/plugins/qmljseditor/qmljshoverhandler.cpp b/src/plugins/qmljseditor/qmljshoverhandler.cpp
index 93f3fd87d3..0edf04767e 100644
--- a/src/plugins/qmljseditor/qmljshoverhandler.cpp
+++ b/src/plugins/qmljseditor/qmljshoverhandler.cpp
@@ -253,7 +253,7 @@ void HoverHandler::handleImport(const ScopeChain &scopeChain, AST::UiImport *nod
}
setToolTip(msg);
} else {
- setToolTip(import.info.name());
+ setToolTip(import.info.path());
}
break;
}
diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp
index 590467a09f..1912f6bc99 100644
--- a/src/plugins/qmljstools/qmljsmodelmanager.cpp
+++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp
@@ -418,7 +418,7 @@ static void findNewFileImports(const Document::Ptr &doc, const Snapshot &snapsho
{
// scan files and directories that are explicitly imported
foreach (const ImportInfo &import, doc->bind()->imports()) {
- const QString &importName = import.name();
+ const QString &importName = import.path();
if (import.type() == ImportInfo::FileImport) {
if (! snapshot.document(importName))
*importedFiles += importName;
@@ -530,7 +530,7 @@ static void findNewLibraryImports(const Document::Ptr &doc, const Snapshot &snap
const QStringList importPaths = modelManager->importPaths();
foreach (const ImportInfo &import, doc->bind()->imports()) {
if (import.type() == ImportInfo::DirectoryImport) {
- const QString targetPath = import.name();
+ const QString targetPath = import.path();
findNewQmlLibraryInPath(targetPath, snapshot, modelManager,
importedFiles, scannedPaths, newLibraries);
}
@@ -539,7 +539,7 @@ static void findNewLibraryImports(const Document::Ptr &doc, const Snapshot &snap
if (!import.version().isValid())
continue;
foreach (const QString &importPath, importPaths) {
- const QString targetPath = QDir(importPath).filePath(import.name());
+ const QString targetPath = QDir(importPath).filePath(import.path());
findNewQmlLibrary(targetPath, import.version(), snapshot, modelManager,
importedFiles, scannedPaths, newLibraries);
}