diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp index 3584c9a851b..403355426fd 100644 --- a/src/libs/qmljs/qmljscheck.cpp +++ b/src/libs/qmljs/qmljscheck.cpp @@ -525,10 +525,24 @@ public: } }; + +class UnsupportedRootObjectTypesByVisualDesigner : public QStringList +{ +public: + UnsupportedRootObjectTypesByVisualDesigner() + { + (*this) << QLatin1String("QtObject") << QLatin1String("ListModel") + << QLatin1String("Component") << QLatin1String("Timer") + << QLatin1String("Package"); + } + +}; + } // end of anonymous namespace Q_GLOBAL_STATIC(VisualAspectsPropertyBlackList, visualAspectsPropertyBlackList) Q_GLOBAL_STATIC(UnsupportedTypesByVisualDesigner, unsupportedTypesByVisualDesigner) +Q_GLOBAL_STATIC(UnsupportedRootObjectTypesByVisualDesigner, unsupportedRootObjectTypesByVisualDesigner) Check::Check(Document::Ptr doc, const ContextPtr &context) : _doc(doc) @@ -559,6 +573,7 @@ Check::Check(Document::Ptr doc, const ContextPtr &context) disableMessage(WarnReferenceToParentItemNotSupportedByVisualDesigner); disableMessage(WarnUndefinedValueForVisualDesigner); disableMessage(WarnStatesOnlyInRootItemForVisualDesigner); + disableMessage(ErrUnsupportedRootTypeInVisualDesigner); } Check::~Check() @@ -729,6 +744,13 @@ void Check::visitQmlObject(Node *ast, UiQualifiedId *typeId, if (m_typeStack.count() > 1 && getRightMostIdentifier(typeId)->name.toString() == QLatin1String("State")) addMessage(WarnStatesOnlyInRootItemForVisualDesigner, typeErrorLocation); + const QString typeName = getRightMostIdentifier(typeId)->name.toString(); + + if (m_typeStack.isEmpty() + && unsupportedRootObjectTypesByVisualDesigner()->contains(typeName)) + addMessage(ErrUnsupportedRootTypeInVisualDesigner, + locationFromRange(ast->firstSourceLocation(), ast->lastSourceLocation()), typeName); + bool typeError = false; if (_importsOk) { const ObjectValue *prototype = _context->lookupType(_doc.data(), typeId); diff --git a/src/libs/qmljs/qmljsstaticanalysismessage.cpp b/src/libs/qmljs/qmljsstaticanalysismessage.cpp index 5a620a738f9..324e94f22d5 100644 --- a/src/libs/qmljs/qmljsstaticanalysismessage.cpp +++ b/src/libs/qmljs/qmljsstaticanalysismessage.cpp @@ -221,6 +221,8 @@ StaticAnalysisMessages::StaticAnalysisMessages() tr("Qt Quick Designer only supports states in the root item.")); newMsg(WarnAboutQtQuick1InsteadQtQuick2, Warning, tr("Using Qt Quick 1 code model instead of Qt Quick 2.")); + newMsg(ErrUnsupportedRootTypeInVisualDesigner, Error, + tr("This type is not supported as a root element by Qt Quick Designer %1."), 1); } } // anonymous namespace diff --git a/src/libs/qmljs/qmljsstaticanalysismessage.h b/src/libs/qmljs/qmljsstaticanalysismessage.h index 5d8eb503be2..1943712e4b4 100644 --- a/src/libs/qmljs/qmljsstaticanalysismessage.h +++ b/src/libs/qmljs/qmljsstaticanalysismessage.h @@ -97,6 +97,7 @@ enum Type WarnReferenceToParentItemNotSupportedByVisualDesigner = 205, WarnUndefinedValueForVisualDesigner = 206, WarnStatesOnlyInRootItemForVisualDesigner = 207, + ErrUnsupportedRootTypeInVisualDesigner = 208, ErrUnknownComponent = 300, ErrCouldNotResolvePrototypeOf = 301, ErrCouldNotResolvePrototype = 302, diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp index 45ea4c91f97..2ac9486d3a5 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp @@ -902,6 +902,7 @@ bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceH check.enableMessage(StaticAnalysis::WarnReferenceToParentItemNotSupportedByVisualDesigner); check.enableMessage(StaticAnalysis::WarnReferenceToParentItemNotSupportedByVisualDesigner); check.enableMessage(StaticAnalysis::WarnAboutQtQuick1InsteadQtQuick2); + check.enableMessage(StaticAnalysis::ErrUnsupportedRootTypeInVisualDesigner); //## triggers too often ## check.enableMessage(StaticAnalysis::WarnUndefinedValueForVisualDesigner); foreach (const StaticAnalysis::Message &message, check()) {