forked from qt-creator/qt-creator
		
	QmlJS: Resolve property types within package.
Reviewed-by: Christian Kamm
This commit is contained in:
		
				
					committed by
					
						 Christian Kamm
						Christian Kamm
					
				
			
			
				
	
			
			
			
						parent
						
							806c8a563d
						
					
				
				
					commit
					d63199ca13
				
			| @@ -858,8 +858,12 @@ const Value *QmlObjectValue::propertyValue(const FakeMetaProperty &prop) const | ||||
|  | ||||
|     // ### Verify type resolving. | ||||
|     QmlObjectValue *objectValue = engine()->cppQmlTypes().typeForImport(typeName); | ||||
|     if (objectValue) | ||||
|     if (objectValue) { | ||||
|         QString packageClassName = objectValue->nameInPackage(packageName()); | ||||
|         if (!packageClassName.isEmpty()) | ||||
|             objectValue = engine()->cppQmlTypes().typeForImport(packageName() + '.' + packageClassName); | ||||
|         return objectValue; | ||||
|     } | ||||
|  | ||||
|     const Value *value = engine()->undefinedValue(); | ||||
|     if (typeName == QLatin1String("QByteArray") | ||||
| @@ -910,6 +914,14 @@ const Value *QmlObjectValue::propertyValue(const FakeMetaProperty &prop) const | ||||
| QString QmlObjectValue::packageName() const | ||||
| { return _packageName; } | ||||
|  | ||||
| QString QmlObjectValue::nameInPackage(const QString &packageName) const | ||||
| { | ||||
|     foreach (const FakeMetaObject::Export &exp, _metaObject->exports()) | ||||
|         if (exp.package == packageName) | ||||
|             return exp.type; | ||||
|     return QString(); | ||||
| } | ||||
|  | ||||
| QmlJS::ComponentVersion QmlObjectValue::version() const | ||||
| { return _componentVersion; } | ||||
|  | ||||
| @@ -2190,7 +2202,8 @@ QList<QmlObjectValue *> CppQmlTypes::typesForImport(const QString &packageName, | ||||
|     return objectValuesByName.values(); | ||||
| } | ||||
|  | ||||
| QmlObjectValue *CppQmlTypes::typeForImport(const QString &qualifiedName) const | ||||
| QmlObjectValue *CppQmlTypes::typeForImport(const QString &qualifiedName, | ||||
|                                            QmlJS::ComponentVersion version) const | ||||
| { | ||||
|     QString name = qualifiedName; | ||||
|     QString packageName; | ||||
| @@ -2205,6 +2218,8 @@ QmlObjectValue *CppQmlTypes::typeForImport(const QString &qualifiedName) const | ||||
|         const QString typeName = qmlObjectValue->className(); | ||||
|         if (typeName != name) | ||||
|             continue; | ||||
|         if (version.isValid() && version < qmlObjectValue->version()) | ||||
|             continue; | ||||
|  | ||||
|         if (previousCandidate) { | ||||
|             // check if our new candidate is newer than the one we found previously | ||||
|   | ||||
| @@ -420,6 +420,7 @@ public: | ||||
|     const Value *propertyValue(const FakeMetaProperty &prop) const; | ||||
|  | ||||
|     QString packageName() const; | ||||
|     QString nameInPackage(const QString &packageName) const; | ||||
|     ComponentVersion version() const; | ||||
|     QString defaultPropertyName() const; | ||||
|     QString propertyType(const QString &propertyName) const; | ||||
| @@ -563,7 +564,8 @@ public: | ||||
|     void load(Interpreter::Engine *interpreter, const QList<const FakeMetaObject *> &objects); | ||||
|  | ||||
|     QList<Interpreter::QmlObjectValue *> typesForImport(const QString &prefix, ComponentVersion version) const; | ||||
|     Interpreter::QmlObjectValue *typeForImport(const QString &qualifiedName) const; | ||||
|     Interpreter::QmlObjectValue *typeForImport(const QString &qualifiedName, | ||||
|                                                ComponentVersion version = ComponentVersion()) const; | ||||
|  | ||||
|     bool hasPackage(const QString &package) const; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user