diff --git a/src/plugins/qmljseditor/qmloutlinemodel.cpp b/src/plugins/qmljseditor/qmloutlinemodel.cpp index ae39f23f08a..bad1f2b7b3c 100644 --- a/src/plugins/qmljseditor/qmloutlinemodel.cpp +++ b/src/plugins/qmljseditor/qmloutlinemodel.cpp @@ -67,6 +67,10 @@ private: bool visit(AST::UiObjectDefinition *objDef) { + if (!validElement(objDef)) { + return true; + } + AST::SourceLocation location; location.offset = objDef->firstSourceLocation().offset; location.length = objDef->lastSourceLocation().offset @@ -75,13 +79,16 @@ private: const QString typeName = asString(objDef->qualifiedTypeNameId); const QString id = getId(objDef); - QModelIndex index = m_model->enterElement(asString(objDef->qualifiedTypeNameId), id, location); + QModelIndex index = m_model->enterElement(typeName, id, location); m_nodeToIndex.insert(objDef, index); return true; } - void endVisit(AST::UiObjectDefinition * /*objDefinition*/) + void endVisit(AST::UiObjectDefinition *objDef) { + if (!validElement(objDef)) { + return; + } m_model->leaveElement(); } @@ -104,6 +111,11 @@ private: m_model->leaveProperty(); } + bool validElement(AST::UiObjectDefinition *objDef) { + // For 'Rectangle { id }', id is parsed as UiObjectDefinition ... Filter this out.ctan + return objDef->qualifiedTypeNameId->name->asString().at(0).isUpper(); + } + QString getId(AST::UiObjectDefinition *objDef) { QString id; for (AST::UiObjectMemberList *it = objDef->initializer->members; it; it = it->next) {