forked from qt-creator/qt-creator
QmlJS: Check property declaration types.
Change-Id: I2cc1236552e00e99a846b0d4b724135724f175fc Task-number: QTCREATORBUG-3666 Reviewed-on: http://codereview.qt.nokia.com/4241 Reviewed-by: Leandro T. C. Melo <leandro.melo@nokia.com>
This commit is contained in:
@@ -93,6 +93,42 @@ DiagnosticMessage QmlJS::errorMessage(const AST::SourceLocation &loc, const QStr
|
||||
return DiagnosticMessage(DiagnosticMessage::Error, loc, message);
|
||||
}
|
||||
|
||||
namespace {
|
||||
class SharedData
|
||||
{
|
||||
public:
|
||||
SharedData()
|
||||
{
|
||||
validBuiltinPropertyNames.insert(QLatin1String("action"));
|
||||
validBuiltinPropertyNames.insert(QLatin1String("bool"));
|
||||
validBuiltinPropertyNames.insert(QLatin1String("color"));
|
||||
validBuiltinPropertyNames.insert(QLatin1String("date"));
|
||||
validBuiltinPropertyNames.insert(QLatin1String("double"));
|
||||
validBuiltinPropertyNames.insert(QLatin1String("enumeration"));
|
||||
validBuiltinPropertyNames.insert(QLatin1String("font"));
|
||||
validBuiltinPropertyNames.insert(QLatin1String("int"));
|
||||
validBuiltinPropertyNames.insert(QLatin1String("list"));
|
||||
validBuiltinPropertyNames.insert(QLatin1String("point"));
|
||||
validBuiltinPropertyNames.insert(QLatin1String("real"));
|
||||
validBuiltinPropertyNames.insert(QLatin1String("rect"));
|
||||
validBuiltinPropertyNames.insert(QLatin1String("size"));
|
||||
validBuiltinPropertyNames.insert(QLatin1String("string"));
|
||||
validBuiltinPropertyNames.insert(QLatin1String("time"));
|
||||
validBuiltinPropertyNames.insert(QLatin1String("url"));
|
||||
validBuiltinPropertyNames.insert(QLatin1String("variant"));
|
||||
validBuiltinPropertyNames.insert(QLatin1String("vector3d"));
|
||||
}
|
||||
|
||||
QSet<QString> validBuiltinPropertyNames;
|
||||
};
|
||||
} // anonymous namespace
|
||||
Q_GLOBAL_STATIC(SharedData, sharedData)
|
||||
|
||||
bool QmlJS::isValidBuiltinPropertyType(const QString &name)
|
||||
{
|
||||
return sharedData()->validBuiltinPropertyNames.contains(name);
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
class AssignmentCheck : public ValueVisitor
|
||||
@@ -597,6 +633,19 @@ bool Check::visit(UiArrayBinding *ast)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Check::visit(UiPublicMember *ast)
|
||||
{
|
||||
// check if the member type is valid
|
||||
if (ast->memberType) {
|
||||
const QString name = ast->memberType->asString();
|
||||
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;
|
||||
}
|
||||
|
||||
bool Check::visit(IdentifierExpression *ast)
|
||||
{
|
||||
// currently disabled: too many false negatives
|
||||
|
Reference in New Issue
Block a user