From 1ba0e5cdf954a53b383ae3fdcf47233e93d219e8 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Thu, 28 Apr 2016 14:39:54 +0200 Subject: [PATCH] QmlJS.PropertyReader: Allow access to raw ast value Change-Id: I92f9f241c9780345dd03b931232c4a811356c216 Reviewed-by: Tim Jenssen --- src/libs/qmljs/qmljspropertyreader.cpp | 15 +++++++++------ src/libs/qmljs/qmljspropertyreader.h | 9 +++++++++ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/libs/qmljs/qmljspropertyreader.cpp b/src/libs/qmljs/qmljspropertyreader.cpp index a4b2caccad7..b50027a9c2a 100644 --- a/src/libs/qmljs/qmljspropertyreader.cpp +++ b/src/libs/qmljs/qmljspropertyreader.cpp @@ -146,13 +146,14 @@ PropertyReader::PropertyReader(Document::Ptr doc, AST::UiObjectInitializer *ast) continue; // better safe than sorry. const QString propertyName = toString(property->qualifiedId); const QString astValue = cleanupSemicolon(textAt(doc, - property->statement->firstSourceLocation(), - property->statement->lastSourceLocation())); + property->statement->firstSourceLocation(), + property->statement->lastSourceLocation())); + m_astPropertyValues.insert(propertyName, astValue); if (isLiteralValue(property)) { m_properties.insert(propertyName, QVariant(deEscape(stripQuotes(astValue)))); } else if (isEnum(property->statement)) { //enum - m_properties.insert(propertyName, QVariant(astValue)); - m_bindingOrEnum.append(propertyName); + m_properties.insert(propertyName, QVariant(astValue)); + m_bindingOrEnum.append(propertyName); } } else if (UiObjectDefinition *objectDefinition = cast(member)) { //font { bold: true } const QString propertyName = objectDefinition->qualifiedTypeNameId->name.toString(); @@ -162,8 +163,9 @@ PropertyReader::PropertyReader(Document::Ptr doc, AST::UiObjectInitializer *ast) if (UiScriptBinding *property = cast(objectMember)) { const QString propertyNamePart2 = toString(property->qualifiedId); const QString astValue = cleanupSemicolon(textAt(doc, - property->statement->firstSourceLocation(), - property->statement->lastSourceLocation())); + property->statement->firstSourceLocation(), + property->statement->lastSourceLocation())); + m_astPropertyValues.insert(propertyName, astValue); if (isLiteralValue(property)) { m_properties.insert(propertyName + QLatin1Char('.') + propertyNamePart2, QVariant(deEscape(stripQuotes(astValue)))); @@ -181,6 +183,7 @@ PropertyReader::PropertyReader(Document::Ptr doc, AST::UiObjectInitializer *ast) initializer->rbraceToken)); const QString propertyName = objectBinding->qualifiedId->name.toString(); m_properties.insert(propertyName, QVariant(astValue)); + m_astPropertyValues.insert(propertyName, astValue); } } } diff --git a/src/libs/qmljs/qmljspropertyreader.h b/src/libs/qmljs/qmljspropertyreader.h index 650b3d075db..799c93fcc95 100644 --- a/src/libs/qmljs/qmljspropertyreader.h +++ b/src/libs/qmljs/qmljspropertyreader.h @@ -54,6 +54,14 @@ public: return QVariant(); } + QString readAstValue(const QString &propertyName) const + { + if (hasProperty(propertyName)) + return m_astPropertyValues.value(propertyName); + else + return QString(); + } + QLinearGradient parseGradient(const QString &propertyName, bool *isBound) const; QStringList properties() const @@ -64,6 +72,7 @@ public: private: QHash m_properties; + QHash m_astPropertyValues; QList m_bindingOrEnum; AST::UiObjectInitializer *m_ast; Document::Ptr m_doc;