diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp index 996d8de4ab559a0378b3f000d57fe6a6ea278802..f6eb31a3239b3307501c18f19024be5a46e0b45b 100644 --- a/src/libs/qmljs/qmljscheck.cpp +++ b/src/libs/qmljs/qmljscheck.cpp @@ -174,7 +174,7 @@ Check::Check(Document::Ptr doc, const Snapshot &snapshot, const QStringList &imp : _doc(doc) , _snapshot(snapshot) , _context(&_engine) - , _link(&_context, snapshot, importPaths) + , _link(&_context, doc, snapshot, importPaths) , _scopeBuilder(doc, &_context) { } diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp index 356ebbabcfa587691e41be916d92a6265f781d00..47c69c3a922ec963d575c3641e2609477865ce35 100644 --- a/src/libs/qmljs/qmljsinterpreter.cpp +++ b/src/libs/qmljs/qmljsinterpreter.cpp @@ -1305,7 +1305,7 @@ Context::~Context() void Context::build(const QList<Node *> &astPath, QmlJS::Document::Ptr doc, const QmlJS::Snapshot &snapshot, const QStringList &importPaths) { - Link link(this, snapshot, importPaths); + Link link(this, doc, snapshot, importPaths); link.scopeChainAt(doc, astPath); } diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp index 5b597f2b622410bbad1aece809171ca43621b2a3..072710bac827fc70b9bae0397e6dbdba16b926e2 100644 --- a/src/libs/qmljs/qmljslink.cpp +++ b/src/libs/qmljs/qmljslink.cpp @@ -14,9 +14,10 @@ using namespace QmlJS; using namespace QmlJS::Interpreter; using namespace QmlJS::AST; -Link::Link(Context *context, const Snapshot &snapshot, +Link::Link(Context *context, const Document::Ptr &doc, const Snapshot &snapshot, const QStringList &importPaths) - : _snapshot(snapshot) + : _doc(doc) + , _snapshot(snapshot) , _context(context) , _importPaths(importPaths) { @@ -240,9 +241,8 @@ void Link::importFile(Interpreter::ObjectValue *typeEnv, Document::Ptr doc, importNamespace->setProperty(targetName, importedDoc->bind()->rootObjectValue()); } else { - _diagnosticMessages.append(DiagnosticMessage( - DiagnosticMessage::Error, import->fileNameToken, - QCoreApplication::translate("QmlJS::Link", "could not find file or directory"))); + error(doc, import->fileNameToken, + QCoreApplication::translate("QmlJS::Link", "could not find file or directory")); } } @@ -283,19 +283,16 @@ void Link::importNonFile(Interpreter::ObjectValue *typeEnv, Document::Ptr doc, A const QString versionString = doc->source().mid(import->versionToken.offset, import->versionToken.length); const int dotIdx = versionString.indexOf(QLatin1Char('.')); if (dotIdx == -1) { - _diagnosticMessages.append(DiagnosticMessage( - DiagnosticMessage::Error, import->versionToken, - QCoreApplication::translate("QmlJS::Link", "expected two numbers separated by a dot"))); + error(doc, import->versionToken, + QCoreApplication::translate("QmlJS::Link", "expected two numbers separated by a dot")); return; } else { majorVersion = versionString.left(dotIdx).toInt(); minorVersion = versionString.mid(dotIdx + 1).toInt(); } } else { - _diagnosticMessages.append(DiagnosticMessage( - DiagnosticMessage::Error, - locationFromRange(import->firstSourceLocation(), import->lastSourceLocation()), - QCoreApplication::translate("QmlJS::Link", "package import requires a version number"))); + error(doc, locationFromRange(import->firstSourceLocation(), import->lastSourceLocation()), + QCoreApplication::translate("QmlJS::Link", "package import requires a version number")); return; } @@ -339,10 +336,8 @@ void Link::importNonFile(Interpreter::ObjectValue *typeEnv, Document::Ptr doc, A } } - _diagnosticMessages.append(DiagnosticMessage( - DiagnosticMessage::Error, - locationFromRange(import->firstSourceLocation(), import->lastSourceLocation()), - QCoreApplication::translate("QmlJS::Link", "package not found"))); + error(doc, locationFromRange(import->firstSourceLocation(), import->lastSourceLocation()), + QCoreApplication::translate("QmlJS::Link", "package not found")); } UiQualifiedId *Link::qualifiedTypeNameId(Node *node) @@ -354,3 +349,9 @@ UiQualifiedId *Link::qualifiedTypeNameId(Node *node) else return 0; } + +void Link::error(const Document::Ptr &doc, const AST::SourceLocation &loc, const QString &message) +{ + if (doc->fileName() == _doc->fileName()) + _diagnosticMessages.append(DiagnosticMessage(DiagnosticMessage::Error, loc, message)); +} diff --git a/src/libs/qmljs/qmljslink.h b/src/libs/qmljs/qmljslink.h index 87ca0ad2d6887fd429ee1a8d57e249e32beae3ee..6852e57caf50c5277b73010dc1e06bc1e5fdf41c 100644 --- a/src/libs/qmljs/qmljslink.h +++ b/src/libs/qmljs/qmljslink.h @@ -20,7 +20,8 @@ class Link { public: // Link all documents in snapshot - Link(Interpreter::Context *context, const Snapshot &snapshot, const QStringList &importPaths); + Link(Interpreter::Context *context, const Document::Ptr &doc, const Snapshot &snapshot, + const QStringList &importPaths); ~Link(); // Get the scope chain for the currentObject inside doc. @@ -49,7 +50,10 @@ private: AST::UiImport *import); void importObject(Bind *bind, const QString &name, Interpreter::ObjectValue *object, NameId *targetNamespace); + void error(const Document::Ptr &doc, const AST::SourceLocation &loc, const QString &message); + private: + Document::Ptr _doc; Snapshot _snapshot; Interpreter::Context *_context; QMultiHash<QString, Document::Ptr> _documentByPath;