diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp index 4e0fd13abe8c12ec497a0865ecd696cb882b1c60..bf0b68287057a8fa6a3faacd875d1199166c20ea 100644 --- a/src/libs/qmljs/qmljscheck.cpp +++ b/src/libs/qmljs/qmljscheck.cpp @@ -176,6 +176,7 @@ Check::Check(Document::Ptr doc, const Snapshot &snapshot, const QStringList &imp , _context(&_engine) , _link(&_context, doc, snapshot, importPaths) , _scopeBuilder(doc, &_context) + , _ignoreTypeErrors(_context.documentImportsPlugins(_doc.data())) { } @@ -227,7 +228,8 @@ void Check::visitQmlObject(Node *ast, UiQualifiedId *typeId, _scopeBuilder.push(ast); if (! _context.lookupType(_doc.data(), typeId)) { - warning(typeId->identifierToken, tr(Messages::unknown_type)); + if (! _ignoreTypeErrors) + error(typeId->identifierToken, tr(Messages::unknown_type)); // suppress subsequent errors about scope object lookup by clearing // the scope object list // ### todo: better way? diff --git a/src/libs/qmljs/qmljscheck.h b/src/libs/qmljs/qmljscheck.h index a27c5cb61c59af0ad0f994e756c48a19e12bc78d..8d37b1c7064f830642d85941f33dff507808d7fc 100644 --- a/src/libs/qmljs/qmljscheck.h +++ b/src/libs/qmljs/qmljscheck.h @@ -72,6 +72,8 @@ private: ScopeBuilder _scopeBuilder; QList<DiagnosticMessage> _messages; + + bool _ignoreTypeErrors; }; } // namespace QmlJS diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp index a7f8d916a1e1aecb16cf870f10fa9795beeb6a96..120e60978ad9251bd344abbdabc1aa5521115bab 100644 --- a/src/libs/qmljs/qmljsinterpreter.cpp +++ b/src/libs/qmljs/qmljsinterpreter.cpp @@ -1448,6 +1448,16 @@ void Context::setProperty(const ObjectValue *object, const QString &name, const _properties[object].insert(name, value); } +bool Context::documentImportsPlugins(const Document *doc) const +{ + return _documentsImportingPlugins.contains(doc->fileName()); +} + +void Context::setDocumentImportsPlugins(const Document *doc) +{ + _documentsImportingPlugins.insert(doc->fileName()); +} + Reference::Reference(Engine *engine) : _engine(engine) { diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h index fc95e3f7debf228b9be964a796601eca0c810240..a22d78edd72aa6d19fff37a194de5e1e6185b8e1 100644 --- a/src/libs/qmljs/qmljsinterpreter.h +++ b/src/libs/qmljs/qmljsinterpreter.h @@ -308,6 +308,9 @@ public: const Value *property(const ObjectValue *object, const QString &name) const; void setProperty(const ObjectValue *object, const QString &name, const Value *value); + bool documentImportsPlugins(const Document *doc) const; + void setDocumentImportsPlugins(const Document *doc); + private: typedef QHash<QString, const Value *> Properties; @@ -315,6 +318,7 @@ private: LookupMode _lookupMode; QHash<const ObjectValue *, Properties> _properties; QHash<QString, const ObjectValue *> _typeEnvironments; + QSet<QString> _documentsImportingPlugins; ScopeChain _scopeChain; int _qmlScopeObjectIndex; bool _qmlScopeObjectSet; diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp index af248d9c4de646d08bc0e4b95d05af2088bb210a..817ba530bf6033db38e4dfff8ce33687df745922 100644 --- a/src/libs/qmljs/qmljslink.cpp +++ b/src/libs/qmljs/qmljslink.cpp @@ -302,6 +302,9 @@ void Link::importNonFile(Interpreter::ObjectValue *typeEnv, Document::Ptr doc, A if (!libraryInfo.isValid()) continue; + if (!libraryInfo.plugins().isEmpty()) + _context->setDocumentImportsPlugins(doc.data()); + QSet<QString> importedTypes; foreach (const QmlDirParser::Component &component, libraryInfo.components()) { if (importedTypes.contains(component.typeName))