diff options
author | Christian Kamm <christian.d.kamm@nokia.com> | 2011-10-19 14:09:15 +0200 |
---|---|---|
committer | Christian Kamm <christian.d.kamm@nokia.com> | 2011-10-19 14:12:47 +0200 |
commit | 85d78c608253e7bbfbc6e3be95d272a6c127953e (patch) | |
tree | b3135127fd21173fda0cb4404ccb883e1aa2284d /src/libs/qmljs/qmljscheck.cpp | |
parent | 2ab22fec74af29fba32ebea7946ab652be013851 (diff) | |
download | qt-creator-85d78c608253e7bbfbc6e3be95d272a6c127953e.tar.gz |
QmlJS checks: Add hint about not using var/variant property types.
Change-Id: I79c5c4db78eb96eda7c6f5d543bb5063d5670968
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
Diffstat (limited to 'src/libs/qmljs/qmljscheck.cpp')
-rw-r--r-- | src/libs/qmljs/qmljscheck.cpp | 41 |
1 files changed, 29 insertions, 12 deletions
diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp index 676bb5e11c..7b946bcef6 100644 --- a/src/libs/qmljs/qmljscheck.cpp +++ b/src/libs/qmljs/qmljscheck.cpp @@ -748,21 +748,38 @@ bool Check::visit(UiArrayBinding *ast) bool Check::visit(UiPublicMember *ast) { - // check if the member type is valid - if (!ast->memberType.isEmpty()) { - const QString &name = ast->memberType.toString(); - if (!name.isEmpty() && name.at(0).isLower()) { - if (!isValidBuiltinPropertyType(name)) - addMessage(ErrInvalidPropertyType, ast->typeToken, name); + if (ast->type == UiPublicMember::Property) { + // check if the member type is valid + if (!ast->memberType.isEmpty()) { + const QString &name = ast->memberType.toString(); + if (!name.isEmpty() && name.at(0).isLower()) { + if (!isValidBuiltinPropertyType(name)) + addMessage(ErrInvalidPropertyType, ast->typeToken, name); + } + + // warn about dubious use of var/variant + if (name == QLatin1String("variant") || name == QLatin1String("var")) { + Evaluate evaluator(&_scopeChain); + const Value *init = evaluator(ast->statement); + QString preferedType; + if (init->asNumberValue()) + preferedType = tr("'int' or 'real'"); + if (init->asStringValue()) + preferedType = QLatin1String("'string'"); + if (init->asBooleanValue()) + preferedType = QLatin1String("'bool'"); + if (!preferedType.isEmpty()) + addMessage(HintPreferNonVarPropertyType, ast->typeToken, preferedType); + } } - } - checkBindingRhs(ast->statement); + checkBindingRhs(ast->statement); - _scopeBuilder.push(ast); - Node::accept(ast->statement, this); - Node::accept(ast->binding, this); - _scopeBuilder.pop(); + _scopeBuilder.push(ast); + Node::accept(ast->statement, this); + Node::accept(ast->binding, this); + _scopeBuilder.pop(); + } return false; } |