diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp index e82e3b044be5eaff7fd0a26140ab88212ea9a52c..3ee0fde7c6d9f80222d3c0521fbabd321e625245 100644 --- a/src/libs/qmljs/qmljsbind.cpp +++ b/src/libs/qmljs/qmljsbind.cpp @@ -87,7 +87,9 @@ ObjectValue *Bind::scopeChainAt(Document::Ptr currentDocument, const Snapshot &s } LinkImports()(binds); - ObjectValue *scope = Link()(binds, currentBind, currentObject); + ObjectValue *scope = interp->globalObject(); + if (currentBind) + scope = Link()(binds, currentBind, currentObject); qDeleteAll(binds); return scope; diff --git a/src/plugins/qmljseditor/qmlcodecompletion.cpp b/src/plugins/qmljseditor/qmlcodecompletion.cpp index ef2a6c03dee1ec634682ad902f6408e4685177aa..28bb8d1194ecceac71c6043e474f9d4e79c1644a 100644 --- a/src/plugins/qmljseditor/qmlcodecompletion.cpp +++ b/src/plugins/qmljseditor/qmlcodecompletion.cpp @@ -607,36 +607,15 @@ int QmlCodeCompletion::startCompletion(TextEditor::ITextEditable *editor) return -1; const QFileInfo currentFileInfo(fileName); - const QString currentFilePath = currentFileInfo.absolutePath(); bool isQmlFile = false; if (currentFileInfo.suffix() == QLatin1String("qml")) isQmlFile = true; - const QIcon componentIcon = iconForColor(Qt::yellow); const QIcon symbolIcon = iconForColor(Qt::darkCyan); Interpreter::Engine interp; - QHash<QString, Document::Ptr> userComponents; // #### - - foreach (Document::Ptr doc, snapshot) { - const QFileInfo fileInfo(doc->fileName()); - const QString absolutePath = fileInfo.absolutePath(); - - // ### generalize - if (fileInfo.suffix() != QLatin1String("qml")) - continue; - else if (absolutePath != currentFilePath && ! isImported(qmlDocument, absolutePath)) - continue; - - const QString typeName = fileInfo.baseName(); - if (typeName.isEmpty() || ! typeName.at(0).isUpper()) - continue; - - userComponents.insert(typeName, doc); - } - // Set up the current scope chain. Interpreter::ObjectValue *scope = interp.globalObject(); @@ -644,9 +623,13 @@ int QmlCodeCompletion::startCompletion(TextEditor::ITextEditable *editor) AST::UiObjectMember *declaringMember = 0; const int cursorPosition = editor->position(); - foreach (const Range &range, semanticInfo.ranges) { - if (cursorPosition >= range.begin.position() && cursorPosition <= range.end.position()) { + for (int i = semanticInfo.ranges.size() - 1; i != -1; --i) { + const Range &range = semanticInfo.ranges.at(i); + if (range.begin.isNull() || range.end.isNull()) { + continue; + } else if (cursorPosition >= range.begin.position() && cursorPosition <= range.end.position()) { declaringMember = range.ast; + break; } } diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp index d06f03fb810e0032bb23ccd28759fd1c9240e8a2..593ca9eb89528ac1fb410bd22ab11bbfcad74def 100644 --- a/src/plugins/qmljseditor/qmljseditor.cpp +++ b/src/plugins/qmljseditor/qmljseditor.cpp @@ -397,27 +397,29 @@ protected: virtual bool visit(AST::UiObjectBinding *ast) { - _ranges.append(createRange(ast)); + if (ast->initializer) + _ranges.append(createRange(ast, ast->initializer)); return true; } virtual bool visit(AST::UiObjectDefinition *ast) { - _ranges.append(createRange(ast)); + if (ast->initializer) + _ranges.append(createRange(ast, ast->initializer)); return true; } - Range createRange(AST::UiObjectMember *ast) + Range createRange(AST::UiObjectMember *member, AST::UiObjectInitializer *ast) { Range range; - range.ast = ast; + range.ast = member; range.begin = QTextCursor(_textDocument); - range.begin.setPosition(ast->firstSourceLocation().begin()); + range.begin.setPosition(ast->lbraceToken.begin()); range.end = QTextCursor(_textDocument); - range.end.setPosition(ast->lastSourceLocation().end()); + range.end.setPosition(ast->rbraceToken.end()); return range; } };