summaryrefslogtreecommitdiff
path: root/src/libs/qmljs/qmljscheck.cpp
diff options
context:
space:
mode:
authorChristian Kamm <christian.d.kamm@nokia.com>2011-10-19 14:09:15 +0200
committerChristian Kamm <christian.d.kamm@nokia.com>2011-10-19 14:12:47 +0200
commit85d78c608253e7bbfbc6e3be95d272a6c127953e (patch)
treeb3135127fd21173fda0cb4404ccb883e1aa2284d /src/libs/qmljs/qmljscheck.cpp
parent2ab22fec74af29fba32ebea7946ab652be013851 (diff)
downloadqt-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.cpp41
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;
}