diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp index db4aa839f01f5a43088e77f2e7977114afbfacee..1e2846e774e90500cc28c40a3792b2945e1c912d 100644 --- a/src/libs/qmljs/qmljscheck.cpp +++ b/src/libs/qmljs/qmljscheck.cpp @@ -403,13 +403,27 @@ bool Check::visit(UiProgram *) bool Check::visit(UiObjectInitializer *) { - m_propertyStack.push(StringSet()); - return true; + m_propertyStack.push(StringSet()); + UiObjectDefinition *objectDefinition = cast<UiObjectDefinition *>(parent()); + if (objectDefinition && objectDefinition->qualifiedTypeNameId->name->asString() == "Component") + m_idStack.push(StringSet()); + UiObjectBinding *objectBinding = cast<UiObjectBinding *>(parent()); + if (objectBinding && objectBinding->qualifiedTypeNameId->name->asString() == "Component") + m_idStack.push(StringSet()); + if (m_idStack.isEmpty()) + m_idStack.push(StringSet()); + return true; } void Check::endVisit(UiObjectInitializer *) { m_propertyStack.pop(); + UiObjectDefinition *objectDenition = cast<UiObjectDefinition *>(parent()); + if (objectDenition && objectDenition->qualifiedTypeNameId->name->asString() == "Component") + m_idStack.pop(); + UiObjectBinding *objectBinding = cast<UiObjectBinding *>(parent()); + if (objectBinding && objectBinding->qualifiedTypeNameId->name->asString() == "Component") + m_idStack.pop(); } void Check::checkProperty(UiQualifiedId *qualifiedId) @@ -501,11 +515,11 @@ bool Check::visit(UiScriptBinding *ast) return false; } - if (m_ids.contains(id)) { + if (m_idStack.top().contains(id)) { error(loc, Check::tr("ids must be unique")); return false; } - m_ids.insert(id); + m_idStack.top().insert(id); } checkProperty(ast->qualifiedId); diff --git a/src/libs/qmljs/qmljscheck.h b/src/libs/qmljs/qmljscheck.h index 9bbb6595faf11e8c2c99bc54515cc3f30f6220b6..e6df22db142c679f4b93cbbf7282115824a7858e 100644 --- a/src/libs/qmljs/qmljscheck.h +++ b/src/libs/qmljs/qmljscheck.h @@ -131,7 +131,7 @@ private: const Interpreter::Value *_lastValue; QList<AST::Node *> _chain; - QSet<QString> m_ids; + QStack<StringSet> m_idStack; QStack<StringSet> m_propertyStack; };