// 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);
// 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;
}
}
if (iter != qualifiedId)
result += delimiter;
- if (iter->name)
- result += iter->name->asString();
+ result += iter->name;
}
return result;
_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())
// 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);
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) {
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;
}
// 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);
// 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
SourceLocation end = qualifiedId->identifierToken;
for (UiQualifiedId *iter = qualifiedId; iter; iter = iter->next) {
- if (iter->name)
+ if (iter->identifierToken.isValid())
end = iter->identifierToken;
}
{
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");
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 {
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);
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;
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);
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;
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)) {
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)) {
{
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());
{
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();
}
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;
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;
}
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));
return true;
_lastValue = 0;
- if (ast->name) {
+ if (!ast->name.isEmpty()) {
Evaluate evaluator(&_scopeChain);
_lastValue = evaluator.reference(ast);
if (!_lastValue)
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;
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();
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
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) {
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;
{
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;
}
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('.');
{
if (source) {
if (FunctionDeclaration *declaration = cast<FunctionDeclaration*>(source->sourceElement)) {
- return declaration->name->asString();
+ return declaration->name.toString();
}
}
return QString();
#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>
Document::Document(const QString &fileName, Language language)
: _engine(0)
- , _pool(0)
, _ast(0)
, _bind(0)
, _fileName(QDir::cleanPath(fileName))
if (_engine)
delete _engine;
-
- if (_pool)
- delete _pool;
}
Document::Ptr Document::create(const QString &fileName, Language language)
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);
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:
private:
QmlJS::Engine *_engine;
- NodePool *_pool;
AST::Node *_ast;
Bind *_bind;
QList<QmlJS::DiagnosticMessage> _diagnosticMessages;
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;
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
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;
}
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);
}
}
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);
}
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);
}
{
if (_defaultPropertyRef) {
UiPublicMember *prop = _defaultPropertyRef->ast();
- if (prop && prop->name)
- return prop->name->asString();
+ if (prop)
+ return prop->name.toString();
}
return QString();
}
setPrototype(valueOwner->functionPrototype());
for (FormalParameterList *it = ast->formals; it; it = it->next)
- _argumentNames.append(it->name);
+ _argumentNames.append(it->name.toString());
}
ASTFunctionValue::~ASTFunctionValue()
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);
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);
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.
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();
}
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);
QString ImportInfo::id() const
{
- if (_ast && _ast->importId)
- return _ast->importId->asString();
+ if (_ast)
+ return _ast->importId.toString();
return QString();
}
{
AST::FunctionExpression *_ast;
const Document *_doc;
- QList<NameId *> _argumentNames;
+ QList<QString> _argumentNames;
public:
ASTFunctionValue(AST::FunctionExpression *ast, const Document *doc, ValueOwner *valueOwner);
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;
}
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;
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));
}
}
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;
if (current != first)
flatId += '.';
- if (current->name)
- flatId += current->name->asString();
+ flatId += current->name;
}
return flatId;
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))
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) {
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);
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) {
#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"
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(
return QString();
}
- return stringLit->value->asString();
+ return stringLit->value.toString();
}
bool TypeDescriptionReader::readBoolBinding(AST::UiScriptBinding *ast)
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));
double v = value->value;
if (minus)
v = -v;
- fme->addKey(propName->id->asString(), v);
+ fme->addKey(propName->id.toString(), v);
}
}
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;
}
} 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;
}
if (current != first)
flatId += '.';
- flatId += current->name->asString();
+ flatId += current->name;
}
return flatId;
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))
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)) {
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;
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);
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;
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;
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)
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());
<< "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,
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);
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);
}
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();
}
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);
}
}
{
QString text;
for (; id; id = id->next) {
- if (id->name)
- text += id->name->asString();
+ if (!id->name.isEmpty())
+ text += id->name;
else
text += QLatin1Char('?');
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));
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);
{
QString text;
for (; id; id = id->next) {
- if (id->name)
- text += id->name->asString();
+ if (!id->name.isEmpty())
+ text += id->name;
else
text += QLatin1Char('?');
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(", ");
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;
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);
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)
id = binding->qualifiedTypeNameId;
if (id) {
- QString name = id->name->asString();
+ const QStringRef &name = id->name;
if (!name.isEmpty() && name.at(0).isUpper()) {
return true;
}
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;
// 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();
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);
}
{
if (node->qualifiedId
&& !node->qualifiedId->next
- && node->qualifiedId->name->asString() == _name
+ && node->qualifiedId->name == _name
&& checkQmlScope()) {
_usages.append(node->qualifiedId->identifierToken);
}
{
if (node->qualifiedId
&& !node->qualifiedId->next
- && node->qualifiedId->name->asString() == _name
+ && node->qualifiedId->name == _name
&& checkQmlScope()) {
_usages.append(node->qualifiedId->identifierToken);
}
{
if (node->qualifiedId
&& !node->qualifiedId->next
- && node->qualifiedId->name->asString() == _name
+ && node->qualifiedId->name == _name
&& checkQmlScope()) {
_usages.append(node->qualifiedId->identifierToken);
}
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;
virtual bool visit(AST::FieldMemberExpression *node)
{
- if (!node->name || node->name->asString() != _name)
+ if (node->name != _name)
return true;
Evaluate evaluate(&_scopeChain);
virtual bool visit(AST::FunctionExpression *node)
{
- if (node->name && node->name->asString() == _name) {
+ if (node->name == _name) {
if (checkLookup())
_usages.append(node->identifierToken);
}
virtual bool visit(AST::VariableDeclaration *node)
{
- if (node->name && node->name->asString() == _name) {
+ if (node->name == _name) {
if (checkLookup())
_usages.append(node->identifierToken);
}
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);
virtual bool visit(AST::IdentifierExpression *node)
{
- if (!node->name || node->name->asString() != _name)
+ if (node->name != _name)
return false;
const ObjectValue *scope;
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);
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;
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);
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);
{
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);
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;
return false;
} else if (containsOffset(node->identifierToken)) {
_scope = _doc->bind()->findQmlObject(_objectNode);
- _name = node->name->asString();
+ _name = node->name.toString();
return false;
}
return true;
virtual bool visit(FunctionExpression *node)
{
if (containsOffset(node->identifierToken)) {
- _name = node->name->asString();
+ _name = node->name.toString();
return false;
}
return true;
virtual bool visit(VariableDeclaration *node)
{
if (containsOffset(node->identifierToken)) {
- _name = node->name->asString();
+ _name = node->name.toString();
return false;
}
return true;
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;
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;
}
}
} 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()) {
{
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;
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);
}
}
{
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;
}
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)
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);
}
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);
{
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);
{
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());
{
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) {
{
QString text;
for (; id; id = id->next) {
- if (id->name)
- text += id->name->asString();
+ if (!id->name.isEmpty())
+ text += id->name;
else
text += QLatin1Char('?');
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);
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();
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;
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;
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();
}
}
}
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;
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);
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;