From 4b2f42cf8742d281bd107637044dd0e74bfa4224 Mon Sep 17 00:00:00 2001 From: Christian Kamm <christian.d.kamm@nokia.com> Date: Tue, 13 Sep 2011 09:57:24 +0200 Subject: [PATCH] QmlJS: Adjust existing code for updated QML parser. Change-Id: I153723eeb9973be025daf47e317f7b9d076a3c72 Reviewed-on: http://codereview.qt-project.org/4733 Reviewed-by: Thomas Hartmann <Thomas.Hartmann@nokia.com> --- src/libs/qmljs/qmljsbind.cpp | 41 +++++----- src/libs/qmljs/qmljscheck.cpp | 74 +++++++++---------- src/libs/qmljs/qmljscontext.cpp | 5 +- src/libs/qmljs/qmljsdelta.cpp | 10 +-- src/libs/qmljs/qmljsdocument.cpp | 9 +-- src/libs/qmljs/qmljsdocument.h | 1 - src/libs/qmljs/qmljsevaluate.cpp | 18 ++--- src/libs/qmljs/qmljsinterpreter.cpp | 35 ++++----- src/libs/qmljs/qmljsinterpreter.h | 2 +- src/libs/qmljs/qmljspropertyreader.cpp | 12 +-- src/libs/qmljs/qmljsrewriter.cpp | 9 +-- src/libs/qmljs/qmljsscopebuilder.cpp | 8 +- src/libs/qmljs/qmljstypedescriptionreader.cpp | 11 +-- .../filemanager/changeimportsvisitor.cpp | 2 +- .../filemanager/changepropertyvisitor.cpp | 2 +- .../designercore/filemanager/qmlrewriter.cpp | 2 +- .../filemanager/removepropertyvisitor.cpp | 2 +- .../designercore/metainfo/nodemetainfo.cpp | 4 +- .../designercore/model/texttomodelmerger.cpp | 44 ++++++----- .../qmljseditor/qmljscompletionassist.cpp | 4 +- .../qmljscomponentfromobjectdef.cpp | 10 +-- src/plugins/qmljseditor/qmljseditor.cpp | 42 +++++------ .../qmljseditor/qmljsfindreferences.cpp | 49 ++++++------ src/plugins/qmljseditor/qmljshoverhandler.cpp | 20 ++--- .../qmljseditor/qmljssemantichighlighter.cpp | 18 ++--- src/plugins/qmljseditor/qmloutlinemodel.cpp | 15 ++-- src/plugins/qmljseditor/quicktoolbar.cpp | 10 +-- .../qmljsinspector/qmljslivetextpreview.cpp | 4 +- src/plugins/qmljstools/qmljslocatordata.cpp | 16 ++-- src/plugins/qttest/testcode.cpp | 4 +- 30 files changed, 234 insertions(+), 249 deletions(-) diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp index fac27389d7f..74ba761b604 100644 --- a/src/libs/qmljs/qmljsbind.cpp +++ b/src/libs/qmljs/qmljsbind.cpp @@ -124,9 +124,10 @@ bool Bind::usesQmlPrototype(ObjectValue *prototype, // if there are no renamed imports and the document does not use // the className string anywhere, it's out if (possibleNames.isEmpty()) { - NameId nameId(componentName.data(), componentName.size()); - if (!_doc->engine()->literals().contains(nameId)) - return false; + // ### FIXME! +// NameId nameId(componentName.data(), componentName.size()); +// if (!_doc->engine()->literals().contains(nameId)) +// return false; } QHashIterator<Node *, ObjectValue *> it(_qmlObjects); @@ -148,12 +149,12 @@ bool Bind::usesQmlPrototype(ObjectValue *prototype, // optimize the common case of no renamed imports if (possibleNames.isEmpty()) { for (UiQualifiedId *idIt = id; idIt; idIt = idIt->next) { - if (!idIt->next && idIt->name->asString() != componentName) + if (!idIt->next && idIt->name != componentName) skip = true; } } else { for (UiQualifiedId *idIt = id; idIt; idIt = idIt->next) { - if (!idIt->next && !possibleNames.contains(idIt->name->asString())) + if (!idIt->next && !possibleNames.contains(idIt->name.toString())) skip = true; } } @@ -195,8 +196,7 @@ QString Bind::toString(UiQualifiedId *qualifiedId, QChar delimiter) if (iter != qualifiedId) result += delimiter; - if (iter->name) - result += iter->name->asString(); + result += iter->name; } return result; @@ -267,10 +267,11 @@ bool Bind::visit(UiImport *ast) _diagnosticMessages->append( errorMessage(ast, tr("package import requires a version number"))); } - } else if (ast->fileName) { - QFileInfo importFileInfo(ast->fileName->asString()); + } else if (!ast->fileName.isEmpty()) { + const QString &fileName = ast->fileName.toString(); + QFileInfo importFileInfo(fileName); if (!importFileInfo.isAbsolute()) { - importFileInfo=QFileInfo(_doc->path() + QDir::separator() + ast->fileName->asString()); + importFileInfo=QFileInfo(_doc->path() + QDir::separator() + fileName); } name = importFileInfo.absoluteFilePath(); if (importFileInfo.isFile()) @@ -306,8 +307,8 @@ bool Bind::visit(UiObjectDefinition *ast) // an UiObjectDefinition may be used to group property bindings // think anchors { ... } bool isGroupedBinding = ast->qualifiedTypeNameId - && ast->qualifiedTypeNameId->name - && ast->qualifiedTypeNameId->name->asString().at(0).isLower(); + && !ast->qualifiedTypeNameId->name.isEmpty() + && ast->qualifiedTypeNameId->name.at(0).isLower(); if (!isGroupedBinding) { ObjectValue *value = bindObject(ast->qualifiedTypeNameId, ast->initializer); @@ -338,8 +339,8 @@ bool Bind::visit(UiScriptBinding *ast) if (_currentObjectValue && toString(ast->qualifiedId) == QLatin1String("id")) { if (ExpressionStatement *e = cast<ExpressionStatement*>(ast->statement)) if (IdentifierExpression *i = cast<IdentifierExpression*>(e->expression)) - if (i->name) - _idEnvironment->setMember(i->name->asString(), _currentObjectValue); + if (!i->name.isEmpty()) + _idEnvironment->setMember(i->name.toString(), _currentObjectValue); } const Block *block = AST::cast<const Block*>(ast->statement); if (block) { @@ -363,12 +364,12 @@ bool Bind::visit(UiArrayBinding *) bool Bind::visit(VariableDeclaration *ast) { - if (! ast->name) + if (ast->name.isEmpty()) return false; ASTVariableReference *ref = new ASTVariableReference(ast, _doc, &_valueOwner); if (_currentObjectValue) - _currentObjectValue->setMember(ast->name->asString(), ref); + _currentObjectValue->setMember(ast->name.toString(), ref); return true; } @@ -379,8 +380,8 @@ bool Bind::visit(FunctionExpression *ast) // return false; ASTFunctionValue *function = new ASTFunctionValue(ast, _doc, &_valueOwner); - if (_currentObjectValue && ast->name && cast<FunctionDeclaration *>(ast)) - _currentObjectValue->setMember(ast->name->asString(), function); + if (_currentObjectValue && !ast->name.isEmpty() && cast<FunctionDeclaration *>(ast)) + _currentObjectValue->setMember(ast->name.toString(), function); // build function scope ObjectValue *functionScope = _valueOwner.newObject(/*prototype=*/0); @@ -392,8 +393,8 @@ bool Bind::visit(FunctionExpression *ast) // 1. Function formal arguments for (FormalParameterList *it = ast->formals; it; it = it->next) { - if (it->name) - functionScope->setMember(it->name->asString(), _valueOwner.undefinedValue()); + if (!it->name.isEmpty()) + functionScope->setMember(it->name.toString(), _valueOwner.undefinedValue()); } // 2. Functions defined inside the function body diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp index 1e63a8ff78a..927f2bf395a 100644 --- a/src/libs/qmljs/qmljscheck.cpp +++ b/src/libs/qmljs/qmljscheck.cpp @@ -80,7 +80,7 @@ SourceLocation QmlJS::fullLocationForQualifiedId(AST::UiQualifiedId *qualifiedId SourceLocation end = qualifiedId->identifierToken; for (UiQualifiedId *iter = qualifiedId; iter; iter = iter->next) { - if (iter->name) + if (iter->identifierToken.isValid()) end = iter->identifierToken; } @@ -160,7 +160,7 @@ public: { if (const QmlEnumValue *enumValue = dynamic_cast<const QmlEnumValue *>(value)) { if (StringLiteral *stringLiteral = cast<StringLiteral *>(_ast)) { - const QString valueName = stringLiteral->value->asString(); + const QString valueName = stringLiteral->value.toString(); if (!enumValue->keys().contains(valueName)) { _message.message = Check::tr("unknown value for enum"); @@ -201,7 +201,7 @@ public: if (value && value->asUrlValue()) { if (StringLiteral *literal = cast<StringLiteral *>(_ast)) { - QUrl url(literal->value->asString()); + QUrl url(literal->value.toString()); if (!url.isValid() && !url.isEmpty()) { _message.message = Check::tr("not a valid url"); } else { @@ -224,7 +224,7 @@ public: virtual void visit(const ColorValue *) { if (StringLiteral *stringLiteral = cast<StringLiteral *>(_ast)) { - if (!toQColor(stringLiteral->value->asString()).isValid()) + if (!toQColor(stringLiteral->value.toString()).isValid()) _message.message = Check::tr("not a valid color"); } else { visit((StringValue *)0); @@ -302,16 +302,16 @@ protected: else break; } - if (ast->label) - _labels[ast->label->asString()] = end; + if (!ast->label.isEmpty()) + _labels[ast->label.toString()] = end; return true; } virtual bool visit(BreakStatement *ast) { _state = Break; - if (ast->label) { - if (Node *target = _labels.value(ast->label->asString())) + if (!ast->label.isEmpty()) { + if (Node *target = _labels.value(ast->label.toString())) _labelledBreaks.insert(target); } return false; @@ -441,8 +441,8 @@ public: clear(); _options = options; for (FormalParameterList *plist = function->formals; plist; plist = plist->next) { - if (plist->name) - _formalParameterNames += plist->name->asString(); + if (!plist->name.isEmpty()) + _formalParameterNames += plist->name.toString(); } Node::accept(function->body, this); @@ -478,9 +478,9 @@ protected: bool visit(IdentifierExpression *ast) { - if (!ast->name) + if (ast->name.isEmpty()) return false; - const QString name = ast->name->asString(); + const QString &name = ast->name.toString(); if (!_declaredFunctions.contains(name) && !_declaredVariables.contains(name)) _possiblyUndeclaredUses[name].append(ast->identifierToken); return false; @@ -496,9 +496,9 @@ protected: bool visit(VariableDeclaration *ast) { - if (!ast->name) + if (ast->name.isEmpty()) return true; - const QString name = ast->name->asString(); + const QString &name = ast->name.toString(); if (_options & Check::WarnDuplicateDeclaration) { if (_formalParameterNames.contains(name)) { @@ -534,9 +534,9 @@ protected: bool visit(FunctionExpression *ast) { - if (!ast->name) + if (ast->name.isEmpty()) return false; - const QString name = ast->name->asString(); + const QString &name = ast->name.toString(); if (_options & Check::WarnDuplicateDeclaration) { if (_formalParameterNames.contains(name)) { @@ -627,10 +627,10 @@ bool Check::visit(UiObjectInitializer *) { m_propertyStack.push(StringSet()); UiObjectDefinition *objectDefinition = cast<UiObjectDefinition *>(parent()); - if (objectDefinition && objectDefinition->qualifiedTypeNameId->name->asString() == "Component") + if (objectDefinition && objectDefinition->qualifiedTypeNameId->name == "Component") m_idStack.push(StringSet()); UiObjectBinding *objectBinding = cast<UiObjectBinding *>(parent()); - if (objectBinding && objectBinding->qualifiedTypeNameId->name->asString() == "Component") + if (objectBinding && objectBinding->qualifiedTypeNameId->name == "Component") m_idStack.push(StringSet()); if (m_idStack.isEmpty()) m_idStack.push(StringSet()); @@ -641,10 +641,10 @@ void Check::endVisit(UiObjectInitializer *) { m_propertyStack.pop(); UiObjectDefinition *objectDenition = cast<UiObjectDefinition *>(parent()); - if (objectDenition && objectDenition->qualifiedTypeNameId->name->asString() == "Component") + if (objectDenition && objectDenition->qualifiedTypeNameId->name == "Component") m_idStack.pop(); UiObjectBinding *objectBinding = cast<UiObjectBinding *>(parent()); - if (objectBinding && objectBinding->qualifiedTypeNameId->name->asString() == "Component") + if (objectBinding && objectBinding->qualifiedTypeNameId->name == "Component") m_idStack.pop(); } @@ -738,7 +738,7 @@ void Check::visitQmlObject(Node *ast, UiQualifiedId *typeId, bool Check::visit(UiScriptBinding *ast) { // special case for id property - if (ast->qualifiedId->name->asString() == QLatin1String("id") && ! ast->qualifiedId->next) { + if (ast->qualifiedId->name == QLatin1String("id") && ! ast->qualifiedId->next) { if (! ast->statement) return false; @@ -753,16 +753,16 @@ bool Check::visit(UiScriptBinding *ast) QString id; if (IdentifierExpression *idExp = cast<IdentifierExpression *>(expStmt->expression)) { - id = idExp->name->asString(); + id = idExp->name.toString(); } else if (StringLiteral *strExp = cast<StringLiteral *>(expStmt->expression)) { - id = strExp->value->asString(); + id = strExp->value.toString(); warning(loc, Check::tr("using string literals for ids is discouraged")); } else { error(loc, Check::tr("expected id")); return false; } - if (id.isEmpty() || (!id[0].isLower() && id[0] != '_')) { + if (id.isEmpty() || (!id.at(0).isLower() && id.at(0) != '_')) { error(loc, Check::tr("ids must be lower case or start with underscore")); return false; } @@ -813,8 +813,8 @@ bool Check::visit(UiArrayBinding *ast) bool Check::visit(UiPublicMember *ast) { // check if the member type is valid - if (ast->memberType) { - const QString name = ast->memberType->asString(); + if (!ast->memberType.isEmpty()) { + const QString &name = ast->memberType.toString(); if (!name.isEmpty() && name.at(0).isLower()) { if (!isValidBuiltinPropertyType(name)) error(ast->typeToken, tr("'%1' is not a valid property type").arg(name)); @@ -837,7 +837,7 @@ bool Check::visit(IdentifierExpression *ast) return true; _lastValue = 0; - if (ast->name) { + if (!ast->name.isEmpty()) { Evaluate evaluator(&_scopeChain); _lastValue = evaluator.reference(ast); if (!_lastValue) @@ -864,11 +864,11 @@ bool Check::visit(FieldMemberExpression *ast) error(locationFromRange(ast->base->firstSourceLocation(), ast->base->lastSourceLocation()), tr("does not have members")); } - if (!obj || !ast->name) { + if (!obj || ast->name.isEmpty()) { _lastValue = 0; return false; } - _lastValue = obj->lookupMember(ast->name->asString(), _context); + _lastValue = obj->lookupMember(ast->name.toString(), _context); if (!_lastValue) error(ast->identifierToken, tr("unknown member")); return false; @@ -1093,14 +1093,14 @@ bool Check::visit(DefaultClause *ast) static QString functionName(ExpressionNode *ast, SourceLocation *location) { if (IdentifierExpression *id = cast<IdentifierExpression *>(ast)) { - if (id->name) { + if (!id->name.isEmpty()) { *location = id->identifierToken; - return id->name->asString(); + return id->name.toString(); } } else if (FieldMemberExpression *fme = cast<FieldMemberExpression *>(ast)) { - if (fme->name) { + if (!fme->name.isEmpty()) { *location = fme->identifierToken; - return fme->name->asString(); + return fme->name.toString(); } } return QString(); @@ -1169,10 +1169,10 @@ const Value *Check::checkScopeObjectMember(const UiQualifiedId *id) if (! id) return 0; // ### error? - if (! id->name) // possible after error recovery + if (id->name.isEmpty()) // possible after error recovery return 0; - QString propertyName = id->name->asString(); + QString propertyName = id->name.toString(); if (propertyName == QLatin1String("id") && ! id->next) return 0; // ### should probably be a special value @@ -1219,14 +1219,14 @@ const Value *Check::checkScopeObjectMember(const UiQualifiedId *id) return 0; } - if (! idPart->next->name) { + if (idPart->next->name.isEmpty()) { // somebody typed "id." and error recovery still gave us a valid tree, // so just bail out here. return 0; } idPart = idPart->next; - propertyName = idPart->name->asString(); + propertyName = idPart->name.toString(); value = objectValue->lookupMember(propertyName, _context); if (! value) { diff --git a/src/libs/qmljs/qmljscontext.cpp b/src/libs/qmljs/qmljscontext.cpp index 60112e5e406..c19cf11e92e 100644 --- a/src/libs/qmljs/qmljscontext.cpp +++ b/src/libs/qmljs/qmljscontext.cpp @@ -90,10 +90,7 @@ const ObjectValue *Context::lookupType(const QmlJS::Document *doc, UiQualifiedId for (UiQualifiedId *iter = qmlTypeName; objectValue && iter && iter != qmlTypeNameEnd; iter = iter->next) { - if (! iter->name) - return 0; - - const Value *value = objectValue->lookupMember(iter->name->asString(), this); + const Value *value = objectValue->lookupMember(iter->name.toString(), this); if (!value) return 0; diff --git a/src/libs/qmljs/qmljsdelta.cpp b/src/libs/qmljs/qmljsdelta.cpp index c385284d28c..c1ed4c2d408 100644 --- a/src/libs/qmljs/qmljsdelta.cpp +++ b/src/libs/qmljs/qmljsdelta.cpp @@ -83,11 +83,11 @@ static QString label(UiQualifiedId *id) { QString str; for (; id ; id = id->next) { - if (!id->name) + if (id->name.isEmpty()) return QString(); if (!str.isEmpty()) str += QLatin1Char('.'); - str += id->name->asString(); + str += id->name; } return str; } @@ -284,10 +284,10 @@ static QString _propertyName(UiQualifiedId *id) QString s; for (; id; id = id->next) { - if (! id->name) + if (id->name.isEmpty()) return QString(); - s += id->name->asString(); + s += id->name; if (id->next) s += QLatin1Char('.'); @@ -300,7 +300,7 @@ static QString _methodName(UiSourceElement *source) { if (source) { if (FunctionDeclaration *declaration = cast<FunctionDeclaration*>(source->sourceElement)) { - return declaration->name->asString(); + return declaration->name.toString(); } } return QString(); diff --git a/src/libs/qmljs/qmljsdocument.cpp b/src/libs/qmljs/qmljsdocument.cpp index 7fb13796ed0..0cfabbb7fe8 100644 --- a/src/libs/qmljs/qmljsdocument.cpp +++ b/src/libs/qmljs/qmljsdocument.cpp @@ -35,7 +35,6 @@ #include <qmljs/parser/qmljsast_p.h> #include <qmljs/parser/qmljslexer_p.h> #include <qmljs/parser/qmljsparser_p.h> -#include <qmljs/parser/qmljsnodepool_p.h> #include <qmljs/parser/qmljsastfwd_p.h> #include <QtCore/QDir> @@ -85,7 +84,6 @@ using namespace QmlJS::AST; Document::Document(const QString &fileName, Language language) : _engine(0) - , _pool(0) , _ast(0) , _bind(0) , _fileName(QDir::cleanPath(fileName)) @@ -115,9 +113,6 @@ Document::~Document() if (_engine) delete _engine; - - if (_pool) - delete _pool; } Document::Ptr Document::create(const QString &fileName, Language language) @@ -219,12 +214,10 @@ QString Document::componentName() const bool Document::parse_helper(int startToken) { Q_ASSERT(! _engine); - Q_ASSERT(! _pool); Q_ASSERT(! _ast); Q_ASSERT(! _bind); _engine = new Engine(); - _pool = new NodePool(_fileName, _engine); Lexer lexer(_engine); Parser parser(_engine); @@ -233,7 +226,7 @@ bool Document::parse_helper(int startToken) if (startToken == QmlJSGrammar::T_FEED_JS_PROGRAM) extractPragmas(&source); - lexer.setCode(source, /*line = */ 1); + lexer.setCode(source, /*line = */ 1, /*qmlMode = */_language == QmlLanguage); switch (startToken) { case QmlJSGrammar::T_FEED_UI_PROGRAM: diff --git a/src/libs/qmljs/qmljsdocument.h b/src/libs/qmljs/qmljsdocument.h index 95a941640c6..53612464dfd 100644 --- a/src/libs/qmljs/qmljsdocument.h +++ b/src/libs/qmljs/qmljsdocument.h @@ -112,7 +112,6 @@ private: private: QmlJS::Engine *_engine; - NodePool *_pool; AST::Node *_ast; Bind *_bind; QList<QmlJS::DiagnosticMessage> _diagnosticMessages; diff --git a/src/libs/qmljs/qmljsevaluate.cpp b/src/libs/qmljs/qmljsevaluate.cpp index 29ee818493a..bbb9f021ef7 100644 --- a/src/libs/qmljs/qmljsevaluate.cpp +++ b/src/libs/qmljs/qmljsevaluate.cpp @@ -168,10 +168,10 @@ bool Evaluate::visit(AST::UiArrayMemberList *) bool Evaluate::visit(AST::UiQualifiedId *ast) { - if (! ast->name) + if (ast->name.isEmpty()) return false; - const Value *value = _scopeChain->lookup(ast->name->asString()); + const Value *value = _scopeChain->lookup(ast->name.toString()); if (! ast->next) { _result = value; @@ -179,11 +179,11 @@ bool Evaluate::visit(AST::UiQualifiedId *ast) const ObjectValue *base = value_cast<const ObjectValue *>(value); for (AST::UiQualifiedId *it = ast->next; base && it; it = it->next) { - NameId *name = it->name; - if (! name) + const QString &name = it->name.toString(); + if (name.isEmpty()) break; - const Value *value = base->lookupMember(name->asString(), _context); + const Value *value = base->lookupMember(name, _context); if (! it->next) _result = value; else @@ -216,10 +216,10 @@ bool Evaluate::visit(AST::ThisExpression *) bool Evaluate::visit(AST::IdentifierExpression *ast) { - if (! ast->name) + if (ast->name.isEmpty()) return false; - _result = _scopeChain->lookup(ast->name->asString()); + _result = _scopeChain->lookup(ast->name.toString()); return false; } @@ -314,12 +314,12 @@ bool Evaluate::visit(AST::ArrayMemberExpression *) bool Evaluate::visit(AST::FieldMemberExpression *ast) { - if (! ast->name) + if (ast->name.isEmpty()) return false; if (const Value *base = _valueOwner->convertToObject(value(ast->base))) { if (const ObjectValue *obj = base->asObjectValue()) { - _result = obj->lookupMember(ast->name->asString(), _context); + _result = obj->lookupMember(ast->name.toString(), _context); } } diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp index 637f6dd182b..34ae12781b6 100644 --- a/src/libs/qmljs/qmljsinterpreter.cpp +++ b/src/libs/qmljs/qmljsinterpreter.cpp @@ -1667,12 +1667,12 @@ ASTObjectValue::ASTObjectValue(UiQualifiedId *typeName, for (UiObjectMemberList *it = _initializer->members; it; it = it->next) { UiObjectMember *member = it->member; if (UiPublicMember *def = cast<UiPublicMember *>(member)) { - if (def->type == UiPublicMember::Property && def->name && def->memberType) { + if (def->type == UiPublicMember::Property && !def->name.isEmpty() && !def->memberType.isEmpty()) { ASTPropertyReference *ref = new ASTPropertyReference(def, _doc, valueOwner); _properties.append(ref); if (def->defaultToken.isValid()) _defaultPropertyRef = ref; - } else if (def->type == UiPublicMember::Signal && def->name) { + } else if (def->type == UiPublicMember::Signal && !def->name.isEmpty()) { ASTSignalReference *ref = new ASTSignalReference(def, _doc, valueOwner); _signals.append(ref); } @@ -1696,12 +1696,12 @@ bool ASTObjectValue::getSourceLocation(QString *fileName, int *line, int *column void ASTObjectValue::processMembers(MemberProcessor *processor) const { foreach (ASTPropertyReference *ref, _properties) { - processor->processProperty(ref->ast()->name->asString(), ref); + processor->processProperty(ref->ast()->name.toString(), ref); // ### Should get a different value? processor->processGeneratedSlot(ref->onChangedSlotName(), ref); } foreach (ASTSignalReference *ref, _signals) { - processor->processSignal(ref->ast()->name->asString(), ref); + processor->processSignal(ref->ast()->name.toString(), ref); // ### Should get a different value? processor->processGeneratedSlot(ref->slotName(), ref); } @@ -1713,8 +1713,8 @@ QString ASTObjectValue::defaultPropertyName() const { if (_defaultPropertyRef) { UiPublicMember *prop = _defaultPropertyRef->ast(); - if (prop && prop->name) - return prop->name->asString(); + if (prop) + return prop->name.toString(); } return QString(); } @@ -1773,7 +1773,7 @@ ASTFunctionValue::ASTFunctionValue(FunctionExpression *ast, const Document *doc, setPrototype(valueOwner->functionPrototype()); for (FormalParameterList *it = ast->formals; it; it = it->next) - _argumentNames.append(it->name); + _argumentNames.append(it->name.toString()); } ASTFunctionValue::~ASTFunctionValue() @@ -1803,8 +1803,9 @@ const Value *ASTFunctionValue::argument(int) const QString ASTFunctionValue::argumentName(int index) const { if (index < _argumentNames.size()) { - if (NameId *nameId = _argumentNames.at(index)) - return nameId->asString(); + const QString &name = _argumentNames.at(index); + if (!name.isEmpty()) + return name; } return FunctionValue::argumentName(index); @@ -1848,7 +1849,7 @@ const Value *QmlPrototypeReference::value(ReferenceContext *referenceContext) co ASTPropertyReference::ASTPropertyReference(UiPublicMember *ast, const Document *doc, ValueOwner *valueOwner) : Reference(valueOwner), _ast(ast), _doc(doc) { - const QString propertyName = ast->name->asString(); + const QString &propertyName = ast->name.toString(); _onChangedSlotName = QLatin1String("on"); _onChangedSlotName += propertyName.at(0).toUpper(); _onChangedSlotName += propertyName.midRef(1); @@ -1870,8 +1871,8 @@ bool ASTPropertyReference::getSourceLocation(QString *fileName, int *line, int * const Value *ASTPropertyReference::value(ReferenceContext *referenceContext) const { if (_ast->statement - && (!_ast->memberType || _ast->memberType->asString() == QLatin1String("variant") - || _ast->memberType->asString() == QLatin1String("alias"))) { + && (_ast->memberType.isEmpty() || _ast->memberType == QLatin1String("variant") + || _ast->memberType == QLatin1String("alias"))) { // Adjust the context for the current location - expensive! // ### Improve efficiency by caching the 'use chain' constructed in ScopeBuilder. @@ -1887,8 +1888,8 @@ const Value *ASTPropertyReference::value(ReferenceContext *referenceContext) con return evaluator(_ast->statement); } - if (_ast->memberType) - return valueOwner()->defaultValueForBuiltinType(_ast->memberType->asString()); + if (!_ast->memberType.isEmpty()) + return valueOwner()->defaultValueForBuiltinType(_ast->memberType.toString()); return valueOwner()->undefinedValue(); } @@ -1896,7 +1897,7 @@ const Value *ASTPropertyReference::value(ReferenceContext *referenceContext) con ASTSignalReference::ASTSignalReference(UiPublicMember *ast, const Document *doc, ValueOwner *valueOwner) : Reference(valueOwner), _ast(ast), _doc(doc) { - const QString signalName = ast->name->asString(); + const QString &signalName = ast->name.toString(); _slotName = QLatin1String("on"); _slotName += signalName.at(0).toUpper(); _slotName += signalName.midRef(1); @@ -1951,8 +1952,8 @@ QString ImportInfo::name() const QString ImportInfo::id() const { - if (_ast && _ast->importId) - return _ast->importId->asString(); + if (_ast) + return _ast->importId.toString(); return QString(); } diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h index 22c0fb855c0..7b1116d6760 100644 --- a/src/libs/qmljs/qmljsinterpreter.h +++ b/src/libs/qmljs/qmljsinterpreter.h @@ -723,7 +723,7 @@ class QMLJS_EXPORT ASTFunctionValue: public FunctionValue { AST::FunctionExpression *_ast; const Document *_doc; - QList<NameId *> _argumentNames; + QList<QString> _argumentNames; public: ASTFunctionValue(AST::FunctionExpression *ast, const Document *doc, ValueOwner *valueOwner); diff --git a/src/libs/qmljs/qmljspropertyreader.cpp b/src/libs/qmljs/qmljspropertyreader.cpp index 56974f5c1a0..3eb8302de8c 100644 --- a/src/libs/qmljs/qmljspropertyreader.cpp +++ b/src/libs/qmljs/qmljspropertyreader.cpp @@ -131,13 +131,13 @@ static inline QString flatten(UiQualifiedId *qualifiedId) QString result; for (UiQualifiedId *iter = qualifiedId; iter; iter = iter->next) { - if (!iter->name) + if (iter->name.isEmpty()) continue; if (!result.isEmpty()) result.append(QLatin1Char('.')); - result.append(iter->name->asString()); + result.append(iter->name); } return result; } @@ -203,7 +203,7 @@ PropertyReader::PropertyReader(Document::Ptr doc, AST::UiObjectInitializer *ast) m_bindingOrEnum.append(propertyName); } } else if (UiObjectDefinition *objectDefinition = cast<UiObjectDefinition *>(member)) { //font { bold: true } - const QString propertyName = objectDefinition->qualifiedTypeNameId->name->asString(); + const QString propertyName = objectDefinition->qualifiedTypeNameId->name.toString(); if (!propertyName.isEmpty() && !propertyName.at(0).isUpper()) { for (UiObjectMemberList *iter = objectDefinition->initializer->members; iter; iter = iter->next) { UiObjectMember *objectMember = iter->member; @@ -226,7 +226,7 @@ PropertyReader::PropertyReader(Document::Ptr doc, AST::UiObjectInitializer *ast) const QString astValue = cleanupSemicolon(textAt(doc, initializer->lbraceToken, initializer->rbraceToken)); - const QString propertyName = objectBinding->qualifiedId->name->asString(); + const QString propertyName = objectBinding->qualifiedId->name.toString(); m_properties.insert(propertyName, QVariant(astValue)); } } @@ -247,8 +247,8 @@ QLinearGradient PropertyReader::parseGradient(const QString &propertyName, bool const QString astValue = cleanupSemicolon(textAt(m_doc, initializer->lbraceToken, initializer->rbraceToken)); - const QString objectPropertyName = objectBinding->qualifiedId->name->asString(); - const QString typeName = objectBinding->qualifiedTypeNameId->name->asString(); + const QString objectPropertyName = objectBinding->qualifiedId->name.toString(); + const QString typeName = objectBinding->qualifiedTypeNameId->name.toString(); if (objectPropertyName == propertyName && typeName.contains("Gradient")) { QLinearGradient gradient; QVector<QGradientStop> stops; diff --git a/src/libs/qmljs/qmljsrewriter.cpp b/src/libs/qmljs/qmljsrewriter.cpp index 797d3fc162f..c95a7e82a91 100644 --- a/src/libs/qmljs/qmljsrewriter.cpp +++ b/src/libs/qmljs/qmljsrewriter.cpp @@ -259,8 +259,7 @@ QString Rewriter::flatten(UiQualifiedId *first) if (current != first) flatId += '.'; - if (current->name) - flatId += current->name->asString(); + flatId += current->name; } return flatId; @@ -357,7 +356,7 @@ bool Rewriter::isMatchingPropertyMember(const QString &propertyName, UiObjectMember *member) { if (UiPublicMember *publicMember = cast<UiPublicMember*>(member)) - return publicMember->name->asString() == propertyName; + return publicMember->name == propertyName; else if (UiObjectBinding *objectBinding = cast<UiObjectBinding*>(member)) return flatten(objectBinding->qualifiedId) == propertyName; else if (UiScriptBinding *scriptBinding = cast<UiScriptBinding*>(member)) @@ -529,8 +528,8 @@ void Rewriter::includeLeadingEmptyLine(const QString &source, int &start) void Rewriter::includeEmptyGroupedProperty(UiObjectDefinition *groupedProperty, UiObjectMember *memberToBeRemoved, int &start, int &end) { - if (groupedProperty->qualifiedTypeNameId - && groupedProperty->qualifiedTypeNameId->name->asString().at(0).isLower()) { + if (groupedProperty->qualifiedTypeNameId && !groupedProperty->qualifiedTypeNameId->name.isEmpty() + && groupedProperty->qualifiedTypeNameId->name.at(0).isLower()) { // grouped property UiObjectMemberList *memberIter = groupedProperty->initializer->members; while (memberIter) { diff --git a/src/libs/qmljs/qmljsscopebuilder.cpp b/src/libs/qmljs/qmljsscopebuilder.cpp index f7e78f35e9d..0e455da1d70 100644 --- a/src/libs/qmljs/qmljsscopebuilder.cpp +++ b/src/libs/qmljs/qmljsscopebuilder.cpp @@ -175,8 +175,8 @@ void ScopeBuilder::setQmlScopeObject(Node *node) if (initializer) { for (UiObjectMemberList *m = initializer->members; m; m = m->next) { if (UiScriptBinding *scriptBinding = cast<UiScriptBinding *>(m->member)) { - if (scriptBinding->qualifiedId && scriptBinding->qualifiedId->name - && scriptBinding->qualifiedId->name->asString() == QLatin1String("target") + if (scriptBinding->qualifiedId + && scriptBinding->qualifiedId->name == QLatin1String("target") && ! scriptBinding->qualifiedId->next) { Evaluate evaluator(_scopeChain); const Value *targetValue = evaluator(scriptBinding->statement); @@ -202,9 +202,9 @@ const Value *ScopeBuilder::scopeObjectLookup(AST::UiQualifiedId *id) foreach (const ObjectValue *scopeObject, _scopeChain->qmlScopeObjects()) { const ObjectValue *object = scopeObject; for (UiQualifiedId *it = id; it; it = it->next) { - if (!it->name) + if (it->name.isEmpty()) return 0; - result = object->lookupMember(it->name->asString(), _scopeChain->context()); + result = object->lookupMember(it->name.toString(), _scopeChain->context()); if (!result) break; if (it->next) { diff --git a/src/libs/qmljs/qmljstypedescriptionreader.cpp b/src/libs/qmljs/qmljstypedescriptionreader.cpp index d0b0480170e..7c2dc9d779f 100644 --- a/src/libs/qmljs/qmljstypedescriptionreader.cpp +++ b/src/libs/qmljs/qmljstypedescriptionreader.cpp @@ -35,7 +35,6 @@ #include "parser/qmljsparser_p.h" #include "parser/qmljslexer_p.h" #include "parser/qmljsengine_p.h" -#include "parser/qmljsnodepool_p.h" #include "parser/qmljsast_p.h" #include "parser/qmljsastvisitor_p.h" @@ -61,14 +60,12 @@ TypeDescriptionReader::~TypeDescriptionReader() bool TypeDescriptionReader::operator()(QHash<QString, FakeMetaObject::ConstPtr> *objects) { - QString fileName("typeDescription"); Engine engine; - NodePool pool(fileName, &engine); Lexer lexer(&engine); Parser parser(&engine); - lexer.setCode(_source, /*line = */ 1); + lexer.setCode(_source, /*line = */ 1, /*qmlMode = */true); if (!parser.parse()) { _errorMessage = QString("%1:%2: %3").arg( @@ -386,7 +383,7 @@ QString TypeDescriptionReader::readStringBinding(UiScriptBinding *ast) return QString(); } - return stringLit->value->asString(); + return stringLit->value.toString(); } bool TypeDescriptionReader::readBoolBinding(AST::UiScriptBinding *ast) @@ -472,7 +469,7 @@ void TypeDescriptionReader::readExports(UiScriptBinding *ast, FakeMetaObject::Pt addError(arrayLit->firstSourceLocation(), "Expected array literal with only string literal members"); return; } - QString exp = stringLit->value->asString(); + QString exp = stringLit->value.toString(); int slashIdx = exp.indexOf(QLatin1Char('/')); int spaceIdx = exp.indexOf(QLatin1Char(' ')); ComponentVersion version(exp.mid(spaceIdx + 1)); @@ -524,6 +521,6 @@ void TypeDescriptionReader::readEnumValues(AST::UiScriptBinding *ast, LanguageUt double v = value->value; if (minus) v = -v; - fme->addKey(propName->id->asString(), v); + fme->addKey(propName->id.toString(), v); } } diff --git a/src/plugins/qmldesigner/designercore/filemanager/changeimportsvisitor.cpp b/src/plugins/qmldesigner/designercore/filemanager/changeimportsvisitor.cpp index 288fef94f1b..b3bf51829f9 100644 --- a/src/plugins/qmldesigner/designercore/filemanager/changeimportsvisitor.cpp +++ b/src/plugins/qmldesigner/designercore/filemanager/changeimportsvisitor.cpp @@ -99,7 +99,7 @@ bool ChangeImportsVisitor::equals(QmlJS::AST::UiImport *ast, const Import &impor if (import.isLibraryImport()) { return flatten(ast->importUri) == import.url(); } else if (import.isFileImport()) { - return ast->fileName->asString() == import.file(); + return ast->fileName == import.file(); } else { return false; } diff --git a/src/plugins/qmldesigner/designercore/filemanager/changepropertyvisitor.cpp b/src/plugins/qmldesigner/designercore/filemanager/changepropertyvisitor.cpp index 460e49d5534..85bfb739bd2 100644 --- a/src/plugins/qmldesigner/designercore/filemanager/changepropertyvisitor.cpp +++ b/src/plugins/qmldesigner/designercore/filemanager/changepropertyvisitor.cpp @@ -182,7 +182,7 @@ bool ChangePropertyVisitor::isMatchingPropertyMember(const QString &propName, } else if (UiArrayBinding *arrayBinding = AST::cast<UiArrayBinding *>(member)) { return propName == flatten(arrayBinding->qualifiedId); } else if (UiPublicMember *publicMember = AST::cast<UiPublicMember *>(member)) { - return propName == publicMember->name->asString(); + return propName == publicMember->name; } else { return false; } diff --git a/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.cpp b/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.cpp index 5862e1be2cf..ca169c67dd4 100644 --- a/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.cpp +++ b/src/plugins/qmldesigner/designercore/filemanager/qmlrewriter.cpp @@ -207,7 +207,7 @@ QString QMLRewriter::flatten(UiQualifiedId *first) if (current != first) flatId += '.'; - flatId += current->name->asString(); + flatId += current->name; } return flatId; diff --git a/src/plugins/qmldesigner/designercore/filemanager/removepropertyvisitor.cpp b/src/plugins/qmldesigner/designercore/filemanager/removepropertyvisitor.cpp index f009f05c4ad..e21664a5665 100644 --- a/src/plugins/qmldesigner/designercore/filemanager/removepropertyvisitor.cpp +++ b/src/plugins/qmldesigner/designercore/filemanager/removepropertyvisitor.cpp @@ -145,7 +145,7 @@ void RemovePropertyVisitor::removeMember(UiObjectMember *member) bool RemovePropertyVisitor::memberNameMatchesPropertyName(const QString &propertyName, UiObjectMember *ast) { if (UiPublicMember *publicMember = cast<UiPublicMember*>(ast)) - return publicMember->name->asString() == propertyName; + return publicMember->name == propertyName; else if (UiObjectBinding *objectBinding = cast<UiObjectBinding*>(ast)) return flatten(objectBinding->qualifiedId) == propertyName; else if (UiScriptBinding *scriptBinding = cast<UiScriptBinding*>(ast)) diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp index eabd0bb5c42..5afb1a343e7 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp @@ -99,8 +99,8 @@ public: const ASTPropertyReference *ref = dynamic_cast<const ASTPropertyReference*>(value); if (ref) { QString type = "unknown"; - if (ref->ast()->memberType) - type = ref->ast()->memberType->asString(); + if (!ref->ast()->memberType.isEmpty()) + type = ref->ast()->memberType.toString(); m_properties.append(qMakePair(name, type)); } else { if (const QmlObjectValue * ov = dynamic_cast<const QmlObjectValue *>(value)) { diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp index fa77d1f8554..b636fd83ce9 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp @@ -176,13 +176,13 @@ static QString flatten(UiQualifiedId *qualifiedId) QString result; for (UiQualifiedId *iter = qualifiedId; iter; iter = iter->next) { - if (!iter->name) + if (iter->name.isEmpty()) continue; if (!result.isEmpty()) result.append(QLatin1Char('.')); - result.append(iter->name->asString()); + result.append(iter->name); } return result; @@ -369,13 +369,13 @@ public: minorVersion = fixUpMinorVersionForQt(qmlValue->packageName(), qmlValue->version().minorVersion()); } else { for (UiQualifiedId *iter = astTypeNode; iter; iter = iter->next) - if (!iter->next && iter->name) - typeName = iter->name->asString(); + if (!iter->next && !iter->name.isEmpty()) + typeName = iter->name.toString(); QString fullTypeName; for (UiQualifiedId *iter = astTypeNode; iter; iter = iter->next) - if (iter->name) - fullTypeName += iter->name->asString() + "."; + if (!iter->name.isEmpty()) + fullTypeName += iter->name.toString() + "."; if (fullTypeName.endsWith(".")) fullTypeName.chop(1); @@ -413,12 +413,12 @@ public: if (! id) return false; // ### error? - if (! id->name) // possible after error recovery + if (id->name.isEmpty()) // possible after error recovery return false; QString propertyName; if (prefix.isEmpty()) - propertyName = id->name->asString(); + propertyName = id->name.toString(); else propertyName = prefix; @@ -478,13 +478,13 @@ public: if (parentObject) *parentObject = objectValue; - if (! idPart->name) { + if (idPart->name.isEmpty()) { // somebody typed "id." and error recovery still gave us a valid tree, // so just bail out here. return false; } - propertyName = idPart->name->asString(); + propertyName = idPart->name.toString(); if (name) *name = propertyName; @@ -595,15 +595,15 @@ public: if (IdentifierExpression *idExp = cast<IdentifierExpression *>(eStmt->expression)) { if (!m_scopeChain.qmlScopeObjects().isEmpty()) rhsValueObject = m_scopeChain.qmlScopeObjects().last(); - if (idExp->name) - rhsValueName = idExp->name->asString(); + if (!idExp->name.isEmpty()) + rhsValueName = idExp->name.toString(); } else if (FieldMemberExpression *memberExp = cast<FieldMemberExpression *>(eStmt->expression)) { Evaluate evaluate(&m_scopeChain); const Value *result = evaluate(memberExp->base); rhsValueObject = result->asObjectValue(); - if (memberExp->name) - rhsValueName = memberExp->name->asString(); + if (!memberExp->name.isEmpty()) + rhsValueName = memberExp->name.toString(); } if (rhsValueObject) @@ -708,12 +708,10 @@ void TextToModelMerger::setupImports(const Document::Ptr &doc, QString version; if (import->versionToken.isValid()) version = textAt(doc, import->versionToken); - QString as; - if (import->importId) - as = import->importId->asString(); + const QString &as = import->importId.toString(); - if (import->fileName) { - const QString strippedFileName = stripQuotes(import->fileName->asString()); + if (!import->fileName.isEmpty()) { + const QString strippedFileName = stripQuotes(import->fileName.toString()); const Import newImport = Import::createFileImport(strippedFileName, version, as, m_rewriterView->textModifier()->importPaths()); @@ -910,7 +908,7 @@ void TextToModelMerger::syncNode(ModelNode &modelNode, << "for node type" << modelNode.type(); } } else if (UiObjectDefinition *def = cast<UiObjectDefinition *>(member)) { - const QString name = def->qualifiedTypeNameId->name->asString(); + const QString &name = def->qualifiedTypeNameId->name.toString(); if (name.isEmpty() || !name.at(0).isUpper()) { QStringList props = syncGroupedProperties(modelNode, name, @@ -949,16 +947,16 @@ void TextToModelMerger::syncNode(ModelNode &modelNode, if (property->type == UiPublicMember::Signal) continue; // QML designer doesn't support this yet. - if (!property->name || !property->memberType) + if (property->name.isEmpty() || property->memberType.isEmpty()) continue; // better safe than sorry. - const QString astName = property->name->asString(); + const QString &astName = property->name.toString(); QString astValue; if (property->statement) astValue = textAt(context->doc(), property->statement->firstSourceLocation(), property->statement->lastSourceLocation()); - const QString astType = property->memberType->asString(); + const QString &astType = property->memberType.toString(); AbstractProperty modelProperty = modelNode.property(astName); if (!property->statement || isLiteralValue(property->statement)) { const QVariant variantValue = convertDynamicPropertyValueToVariant(astValue, astType); diff --git a/src/plugins/qmljseditor/qmljscompletionassist.cpp b/src/plugins/qmljseditor/qmljscompletionassist.cpp index 8a775699ff1..e14e0ce30f9 100644 --- a/src/plugins/qmljseditor/qmljscompletionassist.cpp +++ b/src/plugins/qmljseditor/qmljscompletionassist.cpp @@ -452,11 +452,11 @@ IAssistProposal *QmlJSCompletionAssistProcessor::perform(const IAssistInterface break; const ObjectValue *newScopeType = qmlScopeType; for (AST::UiQualifiedId *it = objDef->qualifiedTypeNameId; it; it = it->next) { - if (!newScopeType || !it->name) { + if (!newScopeType || it->name.isEmpty()) { newScopeType = 0; break; } - const Value *v = newScopeType->lookupMember(it->name->asString(), context); + const Value *v = newScopeType->lookupMember(it->name.toString(), context); v = context->lookupReference(v); newScopeType = value_cast<const ObjectValue *>(v); } diff --git a/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp b/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp index f8baece7e87..73b0263f77f 100644 --- a/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp +++ b/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp @@ -57,9 +57,9 @@ static QString toString(Statement *statement) if (!expStmt) return QString(); if (IdentifierExpression *idExp = cast<IdentifierExpression *>(expStmt->expression)) { - return idExp->name->asString(); + return idExp->name.toString(); } else if (StringLiteral *strExp = cast<StringLiteral *>(expStmt->expression)) { - return strExp->value->asString(); + return strExp->value.toString(); } return QString(); } @@ -75,10 +75,10 @@ static QString getIdProperty(UiObjectDefinition *def) continue; if (script->qualifiedId->next) continue; - if (script->qualifiedId->name) { - if (script->qualifiedId->name->asString() == QLatin1String("id")) + if (!script->qualifiedId->name.isEmpty()) { + if (script->qualifiedId->name == QLatin1String("id")) return toString(script->statement); - if (script->qualifiedId->name->asString() == QLatin1String("objectName")) + if (script->qualifiedId->name == QLatin1String("objectName")) objectName = toString(script->statement); } } diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp index 5ec720ff10d..69b83809c5b 100644 --- a/src/plugins/qmljseditor/qmljseditor.cpp +++ b/src/plugins/qmljseditor/qmljseditor.cpp @@ -126,8 +126,8 @@ protected: { QString text; for (; id; id = id->next) { - if (id->name) - text += id->name->asString(); + if (!id->name.isEmpty()) + text += id->name; else text += QLatin1Char('?'); @@ -149,8 +149,8 @@ protected: if (asString(node->qualifiedId) == QLatin1String("id")) { if (AST::ExpressionStatement *stmt = AST::cast<AST::ExpressionStatement*>(node->statement)) { if (AST::IdentifierExpression *idExpr = AST::cast<AST::IdentifierExpression *>(stmt->expression)) { - if (idExpr->name) { - const QString id = idExpr->name->asString(); + if (!idExpr->name.isEmpty()) { + const QString &id = idExpr->name.toString(); QList<AST::SourceLocation> *locs = &_ids[id]; locs->append(idExpr->firstSourceLocation()); locs->append(_maybeIds.value(id)); @@ -168,8 +168,8 @@ protected: virtual bool visit(AST::IdentifierExpression *node) { - if (node->name) { - const QString name = node->name->asString(); + if (!node->name.isEmpty()) { + const QString &name = node->name.toString(); if (_ids.contains(name)) _ids[name].append(node->identifierToken); @@ -206,8 +206,8 @@ protected: { QString text; for (; id; id = id->next) { - if (id->name) - text += id->name->asString(); + if (!id->name.isEmpty()) + text += id->name; else text += QLatin1Char('?'); @@ -320,19 +320,19 @@ protected: virtual bool visit(AST::FunctionDeclaration *ast) { - if (! ast->name) + if (ast->name.isEmpty()) return false; Declaration decl; init(&decl, ast); decl.text.fill(QLatin1Char(' '), _depth); - decl.text += ast->name->asString(); + decl.text += ast->name; decl.text += QLatin1Char('('); for (FormalParameterList *it = ast->formals; it; it = it->next) { - if (it->name) - decl.text += it->name->asString(); + if (!it->name.isEmpty()) + decl.text += it->name; if (it->next) decl.text += QLatin1String(", "); @@ -347,12 +347,12 @@ protected: virtual bool visit(AST::VariableDeclaration *ast) { - if (! ast->name) + if (ast->name.isEmpty()) return false; Declaration decl; decl.text.fill(QLatin1Char(' '), _depth); - decl.text += ast->name->asString(); + decl.text += ast->name; const SourceLocation first = ast->identifierToken; decl.startLine = first.startLine; @@ -568,8 +568,8 @@ QmlJS::AST::Node *SemanticInfo::declaringMemberNoProperties(int cursorPosition) AST::Node *node = rangeAt(cursorPosition); if (UiObjectDefinition *objectDefinition = cast<UiObjectDefinition*>(node)) { - QString name = objectDefinition->qualifiedTypeNameId->name->asString(); - if (!name.isNull() && name.at(0).isLower()) { + const QString &name = objectDefinition->qualifiedTypeNameId->name.toString(); + if (!name.isEmpty() && name.at(0).isLower()) { QList<AST::Node *> path = rangePath(cursorPosition); if (path.size() > 1) return path.at(path.size() - 2); @@ -579,7 +579,7 @@ QmlJS::AST::Node *SemanticInfo::declaringMemberNoProperties(int cursorPosition) return path.at(path.size() - 3); } } else if (UiObjectBinding *objectBinding = cast<UiObjectBinding*>(node)) { - QString name = objectBinding->qualifiedTypeNameId->name->asString(); + const QString &name = objectBinding->qualifiedTypeNameId->name.toString(); if (name.contains("Gradient")) { QList<AST::Node *> path = rangePath(cursorPosition); if (path.size() > 1) @@ -1085,7 +1085,7 @@ protected: id = binding->qualifiedTypeNameId; if (id) { - QString name = id->name->asString(); + const QStringRef &name = id->name; if (!name.isEmpty() && name.at(0).isUpper()) { return true; } @@ -1108,12 +1108,12 @@ protected: if (UiScriptBinding *script = cast<UiScriptBinding *>(member)) { if (! script->qualifiedId) return false; - else if (! script->qualifiedId->name) + else if (script->qualifiedId->name.isEmpty()) return false; else if (script->qualifiedId->next) return false; - const QString propertyName = script->qualifiedId->name->asString(); + const QStringRef &propertyName = script->qualifiedId->name; if (propertyName == QLatin1String("id")) return true; @@ -1313,7 +1313,7 @@ TextEditor::BaseTextEditorWidget::Link QmlJSTextEditorWidget::findLinkAt(const Q // string literals that could refer to a file link to them if (StringLiteral *literal = cast<StringLiteral *>(node)) { - const QString text = literal->value->asString(); + const QString &text = literal->value.toString(); BaseTextEditorWidget::Link link; link.begin = literal->literalToken.begin(); link.end = literal->literalToken.end(); diff --git a/src/plugins/qmljseditor/qmljsfindreferences.cpp b/src/plugins/qmljseditor/qmljsfindreferences.cpp index 716e448bc48..b5d7965e258 100644 --- a/src/plugins/qmljseditor/qmljsfindreferences.cpp +++ b/src/plugins/qmljseditor/qmljsfindreferences.cpp @@ -104,8 +104,7 @@ protected: virtual bool visit(AST::UiPublicMember *node) { - if (node->name - && node->name->asString() == _name + if (node->name == _name && _scopeChain.qmlScopeObjects().contains(_scope)) { _usages.append(node->identifierToken); } @@ -130,7 +129,7 @@ protected: { if (node->qualifiedId && !node->qualifiedId->next - && node->qualifiedId->name->asString() == _name + && node->qualifiedId->name == _name && checkQmlScope()) { _usages.append(node->qualifiedId->identifierToken); } @@ -145,7 +144,7 @@ protected: { if (node->qualifiedId && !node->qualifiedId->next - && node->qualifiedId->name->asString() == _name + && node->qualifiedId->name == _name && checkQmlScope()) { _usages.append(node->qualifiedId->identifierToken); } @@ -163,7 +162,7 @@ protected: { if (node->qualifiedId && !node->qualifiedId->next - && node->qualifiedId->name->asString() == _name + && node->qualifiedId->name == _name && checkQmlScope()) { _usages.append(node->qualifiedId->identifierToken); } @@ -172,7 +171,7 @@ protected: virtual bool visit(AST::IdentifierExpression *node) { - if (!node->name || node->name->asString() != _name) + if (node->name.isEmpty() || node->name != _name) return false; const ObjectValue *scope; @@ -203,7 +202,7 @@ protected: virtual bool visit(AST::FieldMemberExpression *node) { - if (!node->name || node->name->asString() != _name) + if (node->name != _name) return true; Evaluate evaluate(&_scopeChain); @@ -224,7 +223,7 @@ protected: virtual bool visit(AST::FunctionExpression *node) { - if (node->name && node->name->asString() == _name) { + if (node->name == _name) { if (checkLookup()) _usages.append(node->identifierToken); } @@ -237,7 +236,7 @@ protected: virtual bool visit(AST::VariableDeclaration *node) { - if (node->name && node->name->asString() == _name) { + if (node->name == _name) { if (checkLookup()) _usages.append(node->identifierToken); } @@ -330,7 +329,7 @@ protected: virtual bool visit(AST::UiPublicMember *node) { - if (node->memberType && node->memberType->asString() == _name){ + if (node->memberType == _name){ const ObjectValue * tVal = _context->lookupType(_doc.data(), QStringList(_name)); if (tVal == _typeValue) _usages.append(node->typeToken); @@ -376,7 +375,7 @@ protected: virtual bool visit(AST::IdentifierExpression *node) { - if (!node->name || node->name->asString() != _name) + if (node->name != _name) return false; const ObjectValue *scope; @@ -388,7 +387,7 @@ protected: virtual bool visit(AST::FieldMemberExpression *node) { - if (!node->name || node->name->asString() != _name) + if (node->name != _name) return true; Evaluate evaluate(&_scopeChain); const Value *lhsValue = evaluate(node->base); @@ -422,7 +421,7 @@ protected: virtual bool visit(UiImport *ast) { - if (ast && ast->importId && ast->importId->asString() == _name) { + if (ast && ast->importId == _name) { const Imports *imp = _context->imports(_doc.data()); if (!imp) return false; @@ -437,7 +436,7 @@ private: bool checkTypeName(UiQualifiedId *id) { for (UiQualifiedId *att = id; att; att = att->next){ - if (att->name && att->name->asString() == _name) { + if (att->name == _name) { const ObjectValue *objectValue = _context->lookupType(_doc.data(), id, att->next); if (_typeValue == objectValue){ _usages.append(att->identifierToken); @@ -522,7 +521,7 @@ protected: virtual bool visit(IdentifierExpression *node) { if (containsOffset(node->identifierToken)) { - _name = node->name->asString(); + _name = node->name.toString(); if ((!_name.isEmpty()) && _name.at(0).isUpper()) { // a possible type _targetValue = _scopeChain->lookup(_name, &_scope); @@ -537,7 +536,7 @@ protected: { if (containsOffset(node->identifierToken)) { setScope(node->base); - _name = node->name->asString(); + _name = node->name.toString(); if ((!_name.isEmpty()) && _name.at(0).isUpper()) { // a possible type Evaluate evaluate(_scopeChain); @@ -592,8 +591,8 @@ protected: virtual bool visit(UiPublicMember *node) { if (containsOffset(node->typeToken)){ - if (node->memberType){ - _name = node->memberType->asString(); + if (!node->memberType.isEmpty()) { + _name = node->memberType.toString(); _targetValue = _scopeChain->context()->lookupType(_doc.data(), QStringList(_name)); _scope = 0; _typeKind = TypeKind; @@ -601,7 +600,7 @@ protected: return false; } else if (containsOffset(node->identifierToken)) { _scope = _doc->bind()->findQmlObject(_objectNode); - _name = node->name->asString(); + _name = node->name.toString(); return false; } return true; @@ -615,7 +614,7 @@ protected: virtual bool visit(FunctionExpression *node) { if (containsOffset(node->identifierToken)) { - _name = node->name->asString(); + _name = node->name.toString(); return false; } return true; @@ -624,7 +623,7 @@ protected: virtual bool visit(VariableDeclaration *node) { if (containsOffset(node->identifierToken)) { - _name = node->name->asString(); + _name = node->name.toString(); return false; } return true; @@ -643,9 +642,9 @@ private: bool checkBindingName(UiQualifiedId *id) { - if (id && id->name && !id->next && containsOffset(id->identifierToken)) { + if (id && !id->name.isEmpty() && !id->next && containsOffset(id->identifierToken)) { _scope = _doc->bind()->findQmlObject(_objectNode); - _name = id->name->asString(); + _name = id->name.toString(); return true; } return false; @@ -654,10 +653,10 @@ private: bool checkTypeName(UiQualifiedId *id) { for (UiQualifiedId *att = id; att; att = att->next) { - if (att->name && containsOffset(att->identifierToken)) { + if (!att->name.isEmpty() && containsOffset(att->identifierToken)) { _targetValue = _scopeChain->context()->lookupType(_doc.data(), id, att->next); _scope = 0; - _name = att->name->asString(); + _name = att->name.toString(); _typeKind = TypeKind; return true; } diff --git a/src/plugins/qmljseditor/qmljshoverhandler.cpp b/src/plugins/qmljseditor/qmljshoverhandler.cpp index b3c39f953e3..93f3fd87d32 100644 --- a/src/plugins/qmljseditor/qmljshoverhandler.cpp +++ b/src/plugins/qmljseditor/qmljshoverhandler.cpp @@ -197,8 +197,8 @@ bool HoverHandler::matchColorItem(const ScopeChain &scopeChain, } } else if (const AST::UiPublicMember *publicMember = AST::cast<const AST::UiPublicMember *>(member)) { - if (publicMember->name && posIsInSource(pos, publicMember->statement)) { - value = scopeChain.lookup(publicMember->name->asString()); + if (!publicMember->name.isEmpty() && posIsInSource(pos, publicMember->statement)) { + value = scopeChain.lookup(publicMember->name.toString()); if (const Reference *ref = value->asReference()) value = scopeChain.context()->lookupReference(ref); if (value && value->asColorValue()) { @@ -317,14 +317,14 @@ static const ObjectValue *isMember(const ScopeChain &scopeChain, { const ObjectValue *owningObject = 0; if (AST::IdentifierExpression *identExp = AST::cast<AST::IdentifierExpression *>(node)) { - if (!identExp->name) + if (identExp->name.isEmpty()) return 0; - *name = identExp->name->asString(); + *name = identExp->name.toString(); scopeChain.lookup(*name, &owningObject); } else if (AST::FieldMemberExpression *fme = AST::cast<AST::FieldMemberExpression *>(node)) { - if (!fme->base || !fme->name) + if (!fme->base || fme->name.isEmpty()) return 0; - *name = fme->name->asString(); + *name = fme->name.toString(); const Value *base = scopeChain.evaluate(fme->base); if (!base) return 0; @@ -332,17 +332,17 @@ static const ObjectValue *isMember(const ScopeChain &scopeChain, if (owningObject) owningObject->lookupMember(*name, scopeChain.context(), &owningObject); } else if (AST::UiQualifiedId *qid = AST::cast<AST::UiQualifiedId *>(node)) { - if (!qid->name) + if (qid->name.isEmpty()) return 0; - *name = qid->name->asString(); + *name = qid->name.toString(); const Value *value = scopeChain.lookup(*name, &owningObject); for (AST::UiQualifiedId *it = qid->next; it; it = it->next) { if (!value) return 0; const ObjectValue *next = value->asObjectValue(); - if (!next || !it->name) + if (!next || it->name.isEmpty()) return 0; - *name = it->name->asString(); + *name = it->name.toString(); value = next->lookupMember(*name, scopeChain.context(), &owningObject); } } diff --git a/src/plugins/qmljseditor/qmljssemantichighlighter.cpp b/src/plugins/qmljseditor/qmljssemantichighlighter.cpp index f3928ee9c4e..cc81c57cc7b 100644 --- a/src/plugins/qmljseditor/qmljssemantichighlighter.cpp +++ b/src/plugins/qmljseditor/qmljssemantichighlighter.cpp @@ -168,19 +168,19 @@ protected: { if (!m_inStateType) return false; - if (!ast->qualifiedId || ! ast->qualifiedId->name || ast->qualifiedId->next) + if (!ast->qualifiedId || ast->qualifiedId->name.isEmpty() || ast->qualifiedId->next) return false; - if (ast->qualifiedId->name->asString() != QLatin1String("name")) + if (ast->qualifiedId->name != QLatin1String("name")) return false; ExpressionStatement *expStmt = cast<ExpressionStatement *>(ast->statement); if (!expStmt) return false; StringLiteral *strLit = cast<StringLiteral *>(expStmt->expression); - if (!strLit || !strLit->value) + if (!strLit || strLit->value.isEmpty()) return false; - m_stateNames += strLit->value->asString(); + m_stateNames += strLit->value.toString(); return false; } @@ -211,12 +211,12 @@ protected: m_scopeBuilder.pop(); } - void processName(NameId *name, SourceLocation location) + void processName(const QStringRef &name, SourceLocation location) { - if (!name) + if (name.isEmpty()) return; - const QString nameStr = name->asString(); + const QString &nameStr = name.toString(); const ObjectValue *scope = 0; const Value *value = m_scopeChain.lookup(nameStr, &scope); if (!value || !scope) @@ -299,10 +299,10 @@ protected: bool visit(StringLiteral *ast) { - if (!ast->value) + if (ast->value.isEmpty()) return false; - const QString value = ast->value->asString(); + const QString &value = ast->value.toString(); if (m_stateNames.contains(value)) { addUse(ast->literalToken, SemanticHighlighter::LocalStateNameType); } diff --git a/src/plugins/qmljseditor/qmloutlinemodel.cpp b/src/plugins/qmljseditor/qmloutlinemodel.cpp index cd19095c7a6..9a9b5f90607 100644 --- a/src/plugins/qmljseditor/qmloutlinemodel.cpp +++ b/src/plugins/qmljseditor/qmloutlinemodel.cpp @@ -271,7 +271,7 @@ private: AST::IdentifierExpression *lhsIdent = AST::cast<AST::IdentifierExpression *>(binExp->left); AST::ObjectLiteral *rhsObjLit = AST::cast<AST::ObjectLiteral *>(binExp->right); - if (lhsIdent && rhsObjLit && (lhsIdent->name->asString() == "testcase") + if (lhsIdent && rhsObjLit && (lhsIdent->name == "testcase") && (binExp->op == QSOperator::Assign)) { QModelIndex index = m_model->enterTestCase(rhsObjLit); m_nodeToIndex.insert(rhsObjLit, index); @@ -553,8 +553,8 @@ QModelIndex QmlOutlineModel::enterPublicMember(AST::UiPublicMember *publicMember { QMap<int, QVariant> objectData; - if (publicMember->name) - objectData.insert(Qt::DisplayRole, publicMember->name->asString()); + if (!publicMember->name.isEmpty()) + objectData.insert(Qt::DisplayRole, publicMember->name.toString()); objectData.insert(AnnotationRole, getAnnotation(publicMember->statement)); objectData.insert(ItemTypeRole, NonElementBindingType); @@ -572,7 +572,8 @@ QModelIndex QmlOutlineModel::enterFunctionDeclaration(AST::FunctionDeclaration * { QMap<int, QVariant> objectData; - objectData.insert(Qt::DisplayRole, functionDeclaration->name->asString()); + if (!functionDeclaration->name.isEmpty()) + objectData.insert(Qt::DisplayRole, functionDeclaration->name.toString()); objectData.insert(ItemTypeRole, ElementBindingType); QmlOutlineItem *item = enterNode(objectData, functionDeclaration, 0, m_icons->functionDeclarationIcon()); @@ -606,7 +607,7 @@ QModelIndex QmlOutlineModel::enterTestCaseProperties(AST::PropertyNameAndValueLi { QMap<int, QVariant> objectData; if (AST::IdentifierPropertyName *propertyName = AST::cast<AST::IdentifierPropertyName *>(propertyNameAndValueList->name)) { - objectData.insert(Qt::DisplayRole, propertyName->id->asString()); + objectData.insert(Qt::DisplayRole, propertyName->id.toString()); objectData.insert(ItemTypeRole, ElementBindingType); QmlOutlineItem *item; if (propertyNameAndValueList->value->kind == AST::Node::Kind_FunctionExpression) { @@ -895,8 +896,8 @@ QString QmlOutlineModel::asString(AST::UiQualifiedId *id) { QString text; for (; id; id = id->next) { - if (id->name) - text += id->name->asString(); + if (!id->name.isEmpty()) + text += id->name; else text += QLatin1Char('?'); diff --git a/src/plugins/qmljseditor/quicktoolbar.cpp b/src/plugins/qmljseditor/quicktoolbar.cpp index b9daf07ce13..87b19b013e1 100644 --- a/src/plugins/qmljseditor/quicktoolbar.cpp +++ b/src/plugins/qmljseditor/quicktoolbar.cpp @@ -75,7 +75,7 @@ static inline const ObjectValue * getPropertyChangesTarget(Node *node, const Sco for (UiObjectMemberList *members = initializer->members; members; members = members->next) { if (UiScriptBinding *scriptBinding = cast<UiScriptBinding *>(members->member)) { if (scriptBinding->qualifiedId - && scriptBinding->qualifiedId->name->asString() == QLatin1String("target") + && scriptBinding->qualifiedId->name == QLatin1String("target") && ! scriptBinding->qualifiedId->next) { Evaluate evaluator(&scopeChain); const Value *targetValue = evaluator(scriptBinding->statement); @@ -184,12 +184,12 @@ void QuickToolBar::apply(TextEditor::BaseTextEditor *editor, Document::Ptr docum quint32 end = 0; UiObjectInitializer *initializer = 0; if (objectDefinition) { - name = objectDefinition->qualifiedTypeNameId->name->asString(); + name = objectDefinition->qualifiedTypeNameId->name.toString(); initializer = objectDefinition->initializer; offset = objectDefinition->firstSourceLocation().offset; end = objectDefinition->lastSourceLocation().end(); } else if (objectBinding) { - name = objectBinding->qualifiedTypeNameId->name->asString(); + name = objectBinding->qualifiedTypeNameId->name.toString(); initializer = objectBinding->initializer; offset = objectBinding->firstSourceLocation().offset; end = objectBinding->lastSourceLocation().end(); @@ -274,10 +274,10 @@ bool QuickToolBar::isAvailable(TextEditor::BaseTextEditor *, Document::Ptr docum UiObjectDefinition *objectDefinition = cast<UiObjectDefinition*>(node); UiObjectBinding *objectBinding = cast<UiObjectBinding*>(node); if (objectDefinition) { - name = objectDefinition->qualifiedTypeNameId->name->asString(); + name = objectDefinition->qualifiedTypeNameId->name.toString(); } else if (objectBinding) { - name = objectBinding->qualifiedTypeNameId->name->asString(); + name = objectBinding->qualifiedTypeNameId->name.toString(); } QStringList prototypes; diff --git a/src/plugins/qmljsinspector/qmljslivetextpreview.cpp b/src/plugins/qmljsinspector/qmljslivetextpreview.cpp index 77e24381ecd..01e2c31738e 100644 --- a/src/plugins/qmljsinspector/qmljslivetextpreview.cpp +++ b/src/plugins/qmljsinspector/qmljslivetextpreview.cpp @@ -498,9 +498,9 @@ protected: if (unsyncronizableChanges == QmlJSLiveTextPreview::NoUnsyncronizableChanges) { UiObjectDefinition *parentDefinition = cast<UiObjectDefinition *>(parent); if (parentDefinition && parentDefinition->qualifiedTypeNameId - && parentDefinition->qualifiedTypeNameId->name) + && !parentDefinition->qualifiedTypeNameId->name.isEmpty()) { - unsyncronizableElementName = parentDefinition->qualifiedTypeNameId->name->asString(); + unsyncronizableElementName = parentDefinition->qualifiedTypeNameId->name.toString(); unsyncronizableChanges = QmlJSLiveTextPreview::ElementChangeWarning; unsyncronizableChangeLine = parentDefinition->firstSourceLocation().startLine; unsyncronizableChangeColumn = parentDefinition->firstSourceLocation().startColumn; diff --git a/src/plugins/qmljstools/qmljslocatordata.cpp b/src/plugins/qmljstools/qmljslocatordata.cpp index a7f84c9319e..1c741b59a28 100644 --- a/src/plugins/qmljstools/qmljslocatordata.cpp +++ b/src/plugins/qmljstools/qmljslocatordata.cpp @@ -62,14 +62,14 @@ static QString findId(UiObjectInitializer *initializer) return QString(); for (UiObjectMemberList *member = initializer->members; member; member = member->next) { if (UiScriptBinding *script = cast<UiScriptBinding *>(member->member)) { - if (!script->qualifiedId || !script->qualifiedId->name || script->qualifiedId->next) + if (!script->qualifiedId || script->qualifiedId->name.isEmpty() || script->qualifiedId->next) continue; - if (script->qualifiedId->name->asString() != QLatin1String("id")) + if (script->qualifiedId->name != QLatin1String("id")) continue; if (ExpressionStatement *expStmt = cast<ExpressionStatement *>(script->statement)) { if (IdentifierExpression *identExp = cast<IdentifierExpression *>(expStmt->expression)) { - if (identExp->name) - return identExp->name->asString(); + if (!identExp->name.isEmpty()) + return identExp->name.toString(); } } } @@ -132,19 +132,19 @@ protected: bool visit(FunctionExpression *ast) { - if (!ast->name) + if (ast->name.isEmpty()) return true; LocatorData::Entry entry = basicEntry(ast->identifierToken); entry.type = LocatorData::Function; - entry.displayName = ast->name->asString(); + entry.displayName = ast->name.toString(); entry.displayName += QLatin1Char('('); for (FormalParameterList *it = ast->formals; it; it = it->next) { if (it != ast->formals) entry.displayName += QLatin1String(", "); - if (it->name) - entry.displayName += it->name->asString(); + if (!it->name.isEmpty()) + entry.displayName += it->name.toString(); } entry.displayName += QLatin1Char(')'); entry.symbolName = entry.displayName; diff --git a/src/plugins/qttest/testcode.cpp b/src/plugins/qttest/testcode.cpp index 1cff491bcc0..f57cfe7b539 100755 --- a/src/plugins/qttest/testcode.cpp +++ b/src/plugins/qttest/testcode.cpp @@ -91,7 +91,7 @@ public: private: bool visit(QmlJS::AST::IdentifierExpression *identifier) { - QString name = identifier->name->asString(); + const QStringRef &name = identifier->name; m_foundTestCase = (name == QLatin1String("testcase")); if (!m_foundTestCase && (name == QLatin1String("prompt") || name == QLatin1String("manualTest"))) m_testCode->setManualTest(identifier->identifierToken.offset); @@ -120,7 +120,7 @@ private: if (properties->name->kind == QmlJS::AST::Node::Kind_IdentifierPropertyName) { QmlJS::AST::IdentifierPropertyName *name = static_cast<QmlJS::AST::IdentifierPropertyName*>(properties->name); - QString nameString = name->id->asString(); + const QString &nameString = name->id.toString(); if (properties->value->kind == QmlJS::AST::Node::Kind_FunctionExpression) { int startLine = name->propertyNameToken.startLine; int start = name->propertyNameToken.offset; -- GitLab