summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hartmann <Thomas.Hartmann@digia.com>2014-09-10 09:49:51 +0200
committerThomas Hartmann <Thomas.Hartmann@digia.com>2014-09-10 15:03:22 +0200
commit95182687f847e1c758dde12532deba506d03c9ab (patch)
tree367dcfda974c59f4ca3ca01bf592dcc116b4c5a2
parent5f0da502a42903cfb581caa133beb9597d20c320 (diff)
downloadqt-creator-95182687f847e1c758dde12532deba506d03c9ab.tar.gz
QmlJS: Add error message for invalid root item in the designer
Documents with those types do crash the qmlpuppet and confuse the users. With this patch we give a clear error message and such files are not supported anymore. Change-Id: Iba19def2751d4dc81d90684c0c63c0274fdf49cf Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
-rw-r--r--src/libs/qmljs/qmljscheck.cpp22
-rw-r--r--src/libs/qmljs/qmljsstaticanalysismessage.cpp2
-rw-r--r--src/libs/qmljs/qmljsstaticanalysismessage.h1
-rw-r--r--src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp1
4 files changed, 26 insertions, 0 deletions
diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp
index 3584c9a851..403355426f 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 5a620a738f..324e94f22d 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 5d8eb503be..1943712e4b 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 45ea4c91f9..2ac9486d3a 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()) {